@validation-os/dashboard 0.15.2 → 0.15.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.
package/dist/styles.css CHANGED
@@ -2743,27 +2743,28 @@ button.vos-verdict-title {
2743
2743
  align-self: center;
2744
2744
  }
2745
2745
  .vos-stage-grid-card {
2746
- padding: 16px 18px;
2746
+ padding: 22px 24px;
2747
2747
  }
2748
2748
  .vos-stage-grid-scroll {
2749
2749
  overflow-x: auto;
2750
+ padding: 4px;
2751
+ margin: -4px;
2750
2752
  }
2751
2753
  .vos-stage-grid {
2752
2754
  width: 100%;
2753
2755
  border-collapse: separate;
2754
- border-spacing: 0;
2756
+ border-spacing: 6px;
2755
2757
  font-size: 13px;
2756
2758
  }
2757
2759
  .vos-stage-grid th,
2758
2760
  .vos-stage-grid td {
2759
- border-bottom: 1px solid var(--vos-border);
2760
- border-right: 1px solid var(--vos-border);
2761
+ border: none;
2761
2762
  padding: 0;
2762
2763
  vertical-align: middle;
2763
2764
  }
2764
2765
  .vos-stage-grid th:last-child,
2765
2766
  .vos-stage-grid td:last-child {
2766
- border-right: none;
2767
+ border: none;
2767
2768
  }
2768
2769
  .vos-stage-grid-corner {
2769
2770
  text-align: left;
@@ -2809,31 +2810,28 @@ button.vos-verdict-title {
2809
2810
  }
2810
2811
  .vos-stage-grid-cell {
2811
2812
  text-align: center;
2812
- background: var(--vos-surface);
2813
- /* The heatmap fill — opacity set per-cell via --vos-cell-alpha. */
2814
- background: color-mix(
2815
- in srgb,
2816
- var(--vos-accent) calc(var(--vos-cell-alpha, 0) * 100%),
2817
- var(--vos-surface)
2818
- );
2813
+ background: transparent;
2819
2814
  }
2820
- .vos-stage-grid-cell-empty {
2815
+ .vos-stage-grid-cell-empty .vos-stage-grid-btn {
2821
2816
  background: var(--vos-surface-2);
2817
+ border-style: dashed;
2818
+ border-color: var(--vos-border);
2822
2819
  }
2823
2820
  .vos-stage-grid-btn {
2824
2821
  width: 100%;
2825
2822
  height: 100%;
2826
2823
  min-height: 56px;
2827
2824
  background: transparent;
2828
- border: none;
2825
+ border: 1px solid var(--vos-border);
2829
2826
  padding: 10px 12px;
2830
2827
  cursor: pointer;
2831
2828
  font: inherit;
2832
2829
  color: var(--vos-text);
2833
- border-radius: 0;
2830
+ border-radius: 8px;
2834
2831
  }
2835
2832
  .vos-stage-grid-btn:hover {
2836
2833
  background: color-mix(in srgb, var(--vos-accent) 14%, transparent);
2834
+ border-color: var(--vos-accent);
2837
2835
  }
2838
2836
  .vos-stage-grid-btn:focus-visible {
2839
2837
  outline: 2px solid var(--vos-accent);
@@ -2871,16 +2869,16 @@ button.vos-verdict-title {
2871
2869
  /* ── DEV-5879 redesign: unified nav, pipeline board, evidence-first details ── */
2872
2870
 
2873
2871
  /* Segmented toggle (Grid / View all) */
2874
- .vos-seg { display: inline-flex; gap: 0; border: 1px solid var(--vos-border); border-radius: var(--vos-radius); overflow: hidden; }
2872
+ .vos-seg { display: inline-flex; gap: 0; border: 1px solid var(--vos-border); border-radius: var(--vos-radius); overflow: hidden; align-self: center; }
2875
2873
  .vos-seg-btn { padding: 6px 14px; background: transparent; border: none; color: var(--vos-muted); font: inherit; cursor: pointer; border-right: 1px solid var(--vos-border); transition: background 0.15s, color 0.15s; }
2876
2874
  .vos-seg-btn:last-child { border-right: none; }
2877
2875
  .vos-seg-btn:hover { background: var(--vos-surface-2); }
2878
2876
  .vos-seg-btn.is-active { background: var(--vos-accent-weak); color: var(--vos-accent-text); }
2879
2877
 
2880
2878
  /* Stage grid cell button (clean count, 1 for single) */
2881
- .vos-stage-grid-cell { padding: 2px; }
2882
- .vos-stage-grid-btn { width: 100%; min-height: 56px; border: none; border-radius: 6px; cursor: pointer; font-size: 16px; font-weight: 600; color: var(--vos-text); transition: filter 0.15s; }
2883
- .vos-stage-grid-btn:hover:not(:disabled) { filter: brightness(1.1); }
2879
+ .vos-stage-grid-cell { padding: 0; }
2880
+ .vos-stage-grid-btn { width: 100%; min-height: 56px; border: 1px solid var(--vos-border); border-radius: 8px; cursor: pointer; font-size: 16px; font-weight: 600; color: var(--vos-text); transition: filter 0.15s, border-color 0.15s; }
2881
+ .vos-stage-grid-btn:hover:not(:disabled) { filter: brightness(1.05); border-color: var(--vos-accent); }
2884
2882
  .vos-stage-grid-btn:disabled { cursor: default; }
2885
2883
  .vos-heat-0 { background: var(--vos-surface); opacity: 0.4; color: var(--vos-muted); }
2886
2884
  .vos-heat-1 { background: color-mix(in srgb, var(--vos-accent) 18%, var(--vos-surface)); }
@@ -2937,8 +2935,8 @@ button.vos-verdict-title {
2937
2935
  .vos-crumb-link:hover { color: var(--vos-accent); }
2938
2936
  .vos-crumb-current { color: var(--vos-text); font-weight: 600; }
2939
2937
 
2940
- /* List surfaces (experiments / readings). Standardized 14px padding. */
2941
- .vos-list-card { display: flex; flex-direction: column; gap: 4px; padding: 14px; }
2938
+ /* List surfaces (experiments / readings). Standardized 14px padding, 8px row gap. */
2939
+ .vos-list-card { display: flex; flex-direction: column; gap: 8px; padding: 14px; }
2942
2940
  .vos-list-row { display: flex; align-items: center; gap: 10px; padding: 10px 12px; background: var(--vos-surface-2); border: 1px solid var(--vos-border); border-radius: 6px; cursor: pointer; text-align: left; width: 100%; color: var(--vos-text); font: inherit; transition: border-color 0.15s; }
2943
2941
  .vos-list-row:hover { border-color: var(--vos-accent); }
2944
2942
  .vos-list-row-date { font-size: 9px; color: var(--vos-muted); min-width: 80px; }
@@ -2969,17 +2967,17 @@ button.vos-verdict-title {
2969
2967
  .vos-detail-section-label { font-size: 11px; color: var(--vos-muted); text-transform: uppercase; letter-spacing: 0.4px; margin-bottom: 8px; }
2970
2968
 
2971
2969
  /* Evidence composition (per-rung bars). Rung label shrinks on narrow screens;
2972
- value + count fixed so columns align; row wraps gracefully under ~360px. */
2973
- .vos-comp-row { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; flex-wrap: nowrap; }
2970
+ value + count fixed so columns align; row wraps gracefully under ~360px. */
2971
+ .vos-comp-row { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; flex-wrap: nowrap; }
2974
2972
  .vos-comp-rung { width: 90px; flex-shrink: 0; font-size: 10px; color: var(--vos-text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2975
2973
  .vos-comp-rung.is-empty { color: var(--vos-muted); }
2976
2974
  .vos-comp-bar { flex: 1 1 80px; min-width: 60px; height: 10px; background: var(--vos-surface-2); border-radius: 5px; overflow: hidden; }
2977
2975
  .vos-comp-fill { display: block; height: 100%; background: var(--vos-accent); border-radius: 5px; }
2978
2976
  .vos-comp-val { width: 70px; flex-shrink: 0; text-align: right; font-size: 10px; color: var(--vos-muted); }
2979
- .vos-comp-count { width: 40px; flex-shrink: 0; font-size: 9px; color: var(--vos-muted); }
2977
+ .vos-comp-count { width: 52px; flex-shrink: 0; font-size: 9px; color: var(--vos-muted); }
2980
2978
 
2981
2979
  /* Relations */
2982
- .vos-rel-group { margin-bottom: 10px; }
2980
+ .vos-rel-group { margin-bottom: 12px; }
2983
2981
  .vos-rel-kind { font-size: 10px; font-weight: 600; margin-bottom: 4px; }
2984
2982
  .vos-rel-kind-depends { color: var(--vos-accent-text); }
2985
2983
  .vos-rel-kind-enables { color: var(--vos-good); }
@@ -2993,8 +2991,8 @@ button.vos-verdict-title {
2993
2991
  .vos-rel-title { flex: 1; }
2994
2992
  .vos-rel-tag { font-size: 8px; color: var(--vos-muted); padding: 1px 4px; border: 1px solid var(--vos-border); border-radius: 3px; }
2995
2993
 
2996
- /* Linked rows (experiments + readings on assumption detail). 14px padding. */
2997
- .vos-linked-row { display: flex; gap: 8px; align-items: center; text-align: left; background: var(--vos-surface-2); border: 1px solid var(--vos-border); border-radius: 6px; padding: 14px; cursor: pointer; width: 100%; margin-bottom: 6px; font: inherit; color: var(--vos-text); transition: border-color 0.15s; }
2994
+ /* Linked rows (experiments + readings on assumption detail). 10px 12px padding matches list rows. */
2995
+ .vos-linked-row { display: flex; gap: 8px; align-items: center; text-align: left; background: var(--vos-surface-2); border: 1px solid var(--vos-border); border-radius: 6px; padding: 10px 12px; cursor: pointer; width: 100%; margin-bottom: 8px; font: inherit; color: var(--vos-text); transition: border-color 0.15s; }
2998
2996
  .vos-linked-row:hover { border-color: var(--vos-accent); }
2999
2997
  .vos-linked-gauge { font-size: 16px; font-weight: 700; min-width: 32px; text-align: center; }
3000
2998
  .vos-linked-title { flex: 1; font-size: 12px; }
@@ -3074,14 +3072,208 @@ button.vos-verdict-title {
3074
3072
  .vos-reading-collapse { border: 1px solid var(--vos-border); border-radius: 8px; margin-bottom: 8px; background: var(--vos-surface-2); overflow: hidden; transition: border-color 0.15s; }
3075
3073
  .vos-reading-collapse:hover { border-color: var(--vos-border-strong); }
3076
3074
  .vos-reading-collapse[open] { border-color: var(--vos-border-strong); }
3077
- .vos-reading-collapse > summary { display: flex; gap: 12px; align-items: center; padding: 14px 16px; cursor: pointer; list-style: none; user-select: none; transition: background 0.15s; }
3075
+ .vos-reading-collapse > summary { display: flex; gap: 12px; align-items: center; padding: 14px; cursor: pointer; list-style: none; user-select: none; transition: background 0.15s; }
3078
3076
  .vos-reading-collapse > summary::-webkit-details-marker { display: none; }
3079
- .vos-reading-collapse > summary::before { content: "▸"; color: var(--vos-muted); font-size: 10px; transition: transform 0.15s; flex-shrink: 0; }
3077
+ .vos-reading-collapse > summary::before { content: "▸"; color: var(--vos-muted); font-size: 10px; transition: transform 0.15s; flex-shrink: 0; display: inline-flex; align-items: center; }
3080
3078
  .vos-reading-collapse[open] > summary::before { transform: rotate(90deg); }
3081
3079
  .vos-reading-collapse > summary:hover { background: var(--vos-surface); }
3082
3080
  .vos-reading-card-summary { display: flex; gap: 12px; align-items: center; width: 100%; min-width: 0; }
3083
3081
  .vos-reading-beliefs-count { font-size: 10px; color: var(--vos-muted); margin-left: auto; flex-shrink: 0; }
3084
- .vos-reading-card-body { padding: 0 16px 14px; }
3082
+ .vos-reading-card-body { padding: 0 14px 14px; }
3083
+
3084
+ /* Evidence composition — fix the value display (signed contributions).
3085
+ Width is set on the primary .vos-comp-val rule above; no override needed. */
3086
+
3087
+ /* ── DEV-5879: confidence explainer + grading rationale labels ── */
3088
+
3089
+ /* Grading rationale (NOT a quote — the grader's reason for the score) */
3090
+ .vos-reading-rationale, .vos-belief-rationale {
3091
+ padding: 6px 10px;
3092
+ border-left: 3px solid var(--vos-border);
3093
+ background: var(--vos-surface);
3094
+ border-radius: 0 4px 4px 0;
3095
+ margin: 4px 0 6px;
3096
+ font-size: 11px;
3097
+ color: var(--vos-text);
3098
+ }
3099
+ .vos-reading-rationale { margin: 4px 0; }
3100
+ .vos-belief-rationale { margin: 4px 0 6px; }
3101
+ .vos-belief-rationale-label, .vos-reading-rationale-label {
3102
+ font-size: 9px;
3103
+ color: var(--vos-muted);
3104
+ text-transform: uppercase;
3105
+ letter-spacing: 0.3px;
3106
+ margin-right: 6px;
3107
+ }
3108
+
3109
+ /* Confidence explainer (collapsible) */
3110
+ .vos-explainer { border: 1px solid var(--vos-border); }
3111
+ .vos-explainer-summary {
3112
+ display: flex;
3113
+ align-items: center;
3114
+ justify-content: space-between;
3115
+ padding: 14px;
3116
+ cursor: pointer;
3117
+ list-style: none;
3118
+ user-select: none;
3119
+ }
3120
+ .vos-explainer-summary::-webkit-details-marker { display: none; }
3121
+ .vos-explainer-summary::before { content: "▸"; color: var(--vos-muted); font-size: 10px; margin-right: 12px; transition: transform 0.15s; display: inline-flex; align-items: center; }
3122
+ .vos-explainer[open] > .vos-explainer-summary::before { transform: rotate(90deg); }
3123
+ .vos-explainer-conf { font-size: 18px; font-weight: 700; }
3124
+ .vos-explainer-body { padding: 0 14px 14px; }
3125
+ .vos-explainer-formula {
3126
+ font-family: var(--vos-mono);
3127
+ font-size: 12px;
3128
+ color: var(--vos-accent-text);
3129
+ background: var(--vos-surface-2);
3130
+ padding: 8px 12px;
3131
+ border-radius: 6px;
3132
+ margin-bottom: 12px;
3133
+ }
3134
+ .vos-explainer-summary-text { font-size: 13px; color: var(--vos-text); margin-bottom: 16px; line-height: 1.5; }
3135
+ .vos-explainer-rungs { border: 1px solid var(--vos-border); border-radius: 6px; overflow: hidden; margin-bottom: 16px; }
3136
+ .vos-explainer-rungs-head, .vos-explainer-rung {
3137
+ display: grid;
3138
+ grid-template-columns: 1.5fr 0.8fr 1fr 1fr 0.8fr;
3139
+ gap: 8px;
3140
+ padding: 10px 12px;
3141
+ font-size: 11px;
3142
+ align-items: center;
3143
+ }
3144
+ .vos-explainer-rungs-head {
3145
+ background: var(--vos-surface-2);
3146
+ color: var(--vos-muted);
3147
+ font-weight: 600;
3148
+ text-transform: uppercase;
3149
+ letter-spacing: 0.3px;
3150
+ font-size: 9px;
3151
+ padding: 8px 12px;
3152
+ }
3153
+ .vos-explainer-rung { border-top: 1px solid var(--vos-border); }
3154
+ .vos-explainer-rung.is-not-lens { opacity: 0.5; }
3155
+ .vos-explainer-rung.has-evidence { background: var(--vos-surface); }
3156
+ .vos-explainer-rung-name { font-weight: 500; color: var(--vos-text); }
3157
+ .vos-explainer-rung-w0, .vos-explainer-rung-anchors, .vos-explainer-rung-count { color: var(--vos-muted); }
3158
+ .vos-explainer-rung-contrib { font-weight: 600; text-align: right; }
3159
+ .vos-explainer-foot { font-size: 11px; color: var(--vos-muted); line-height: 1.6; }
3160
+ .vos-explainer-foot p { margin-bottom: 8px; }
3161
+ .vos-explainer-foot strong { color: var(--vos-text); }
3162
+
3163
+ /* Recommended experiment cards — expandable with body + accept inside */
3164
+ .vos-pipe-rec { overflow: hidden; }
3165
+ .vos-pipe-rec-body {
3166
+ padding: 12px 14px 14px;
3167
+ border-top: 1px solid var(--vos-border);
3168
+ background: var(--vos-surface);
3169
+ font-size: 12px;
3170
+ color: var(--vos-text);
3171
+ line-height: 1.6;
3172
+ }
3173
+ .vos-pipe-rec-body h2 { font-size: 13px; font-weight: 600; margin: 12px 0 4px; color: var(--vos-text); }
3174
+ .vos-pipe-rec-body h2:first-child { margin-top: 0; }
3175
+ .vos-pipe-rec-body p { margin-bottom: 8px; }
3176
+ .vos-pipe-rec-body ul { padding-left: 18px; margin-bottom: 8px; }
3177
+ .vos-pipe-rec-body li { margin-bottom: 4px; }
3178
+ .vos-pipe-rec-expand {
3179
+ background: none;
3180
+ border: none;
3181
+ cursor: pointer;
3182
+ color: var(--vos-accent-text);
3183
+ font-size: 11px;
3184
+ padding: 4px 0;
3185
+ margin-top: 6px;
3186
+ }
3187
+
3188
+ /* ── DEV-5879: Next moves two-column section ── */
3189
+
3190
+ .vos-next-moves { margin-top: 16px; }
3191
+ .vos-next-moves-head {
3192
+ font-size: 11px;
3193
+ color: var(--vos-muted);
3194
+ text-transform: uppercase;
3195
+ letter-spacing: 0.4px;
3196
+ margin-bottom: 12px;
3197
+ font-weight: 600;
3198
+ }
3199
+ .vos-next-moves-cols {
3200
+ display: grid;
3201
+ grid-template-columns: 1fr 1.2fr;
3202
+ gap: 16px;
3203
+ align-items: start;
3204
+ }
3205
+ @media (max-width: 900px) {
3206
+ .vos-next-moves-cols { grid-template-columns: 1fr; }
3207
+ }
3208
+ .vos-next-moves-col { padding: 14px; }
3209
+ .vos-next-moves-col-label {
3210
+ font-size: 11px;
3211
+ color: var(--vos-muted);
3212
+ text-transform: uppercase;
3213
+ letter-spacing: 0.3px;
3214
+ margin-bottom: 12px;
3215
+ font-weight: 600;
3216
+ }
3217
+ .vos-next-moves-empty { padding: 12px 14px; font-size: 12px; }
3218
+ .vos-next-moves-item {
3219
+ display: block;
3220
+ width: 100%;
3221
+ text-align: left;
3222
+ background: var(--vos-surface-2);
3223
+ border: 1px solid var(--vos-border);
3224
+ border-radius: 8px;
3225
+ padding: 12px 14px;
3226
+ margin-bottom: 8px;
3227
+ cursor: pointer;
3228
+ color: var(--vos-text);
3229
+ font: inherit;
3230
+ transition: border-color 0.15s;
3231
+ }
3232
+ .vos-next-moves-item:hover { border-color: var(--vos-accent); }
3233
+ .vos-next-moves-item-head {
3234
+ display: flex;
3235
+ align-items: baseline;
3236
+ justify-content: space-between;
3237
+ margin-bottom: 4px;
3238
+ }
3239
+ .vos-next-moves-item-id { font-size: 10px; color: var(--vos-muted); }
3240
+ .vos-next-moves-item-risk { font-size: 10px; font-weight: 600; }
3241
+ .vos-next-moves-item-title { font-size: 12px; font-weight: 500; margin-bottom: 4px; line-height: 1.4; }
3242
+ .vos-next-moves-item-hint { font-size: 11px; color: var(--vos-muted); line-height: 1.4; }
3243
+ .vos-next-moves-rec { margin-bottom: 8px; }
3244
+
3245
+ /* ── DEV-5879: grid text breathing room + next-move box consistency + header cleanup ── */
3246
+
3247
+ /* Grid: more spacing between cells, taller cells, bigger text */
3248
+ .vos-stage-grid { border-spacing: 8px !important; }
3249
+ .vos-stage-grid-btn { min-height: 64px !important; font-size: 18px !important; }
3250
+ .vos-stage-grid-col { min-width: 140px !important; padding: 12px 14px !important; }
3251
+ .vos-stage-grid-rowhead { padding: 10px 14px !important; }
3252
+ .vos-stage-grid-stagename { font-size: 14px !important; }
3253
+ .vos-stage-grid-stagegloss { font-size: 11px !important; line-height: 1.4 !important; }
3254
+
3255
+ /* Next-moves: equal-width columns, equal-height boxes, adaptable */
3256
+ .vos-next-moves-cols {
3257
+ grid-template-columns: 1fr 1fr !important;
3258
+ align-items: stretch !important;
3259
+ }
3260
+ .vos-next-moves-col {
3261
+ display: flex !important;
3262
+ flex-direction: column !important;
3263
+ padding: 16px !important;
3264
+ }
3265
+ .vos-next-moves-col-label { margin-bottom: 14px !important; }
3266
+ /* Equal-height items within each column */
3267
+ .vos-next-moves-item, .vos-next-moves-rec {
3268
+ flex: 1 1 auto;
3269
+ min-height: 80px;
3270
+ }
3271
+ /* The proposed experiment summary should match the needs-framing item height */
3272
+ .vos-next-moves-rec > summary {
3273
+ min-height: 80px;
3274
+ display: flex;
3275
+ align-items: center;
3276
+ }
3085
3277
 
3086
- /* Evidence composition fix the value display (signed contributions) */
3087
- .vos-comp-val { width: 70px; }
3278
+ /* Topbar: hide the backend + agent indicators (clean header) */
3279
+ .vos-backend, .vos-hint:has(.vos-live-dot) { display: none !important; }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@validation-os/dashboard",
3
- "version": "0.15.2",
3
+ "version": "0.15.4",
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.15.2"
25
+ "@validation-os/core": "0.15.4"
26
26
  },
27
27
  "peerDependencies": {
28
28
  "react": ">=18",