@validation-os/dashboard 0.6.1 → 0.7.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.
package/dist/styles.css CHANGED
@@ -1532,6 +1532,13 @@ textarea.vos-input {
1532
1532
  margin: 0;
1533
1533
  }
1534
1534
  .vos-why-rank {
1535
+ margin: 0;
1536
+ padding: 0;
1537
+ list-style: none;
1538
+ display: flex;
1539
+ flex-direction: column;
1540
+ gap: 4px;
1541
+ }
1535
1542
  /* ── Record page (OPS-1286) ──────────────────────────────────────────────── */
1536
1543
  .vos-record-head {
1537
1544
  align-items: flex-start;
@@ -1630,6 +1637,12 @@ textarea.vos-input {
1630
1637
  font-weight: 600;
1631
1638
  }
1632
1639
  .vos-why-rank-title {
1640
+ flex: 1;
1641
+ min-width: 0;
1642
+ overflow: hidden;
1643
+ text-overflow: ellipsis;
1644
+ white-space: nowrap;
1645
+ }
1633
1646
  .vos-backlink {
1634
1647
  display: flex;
1635
1648
  align-items: center;
@@ -2034,3 +2047,322 @@ textarea.vos-input {
2034
2047
  border-color: var(--vos-accent);
2035
2048
  color: var(--vos-accent-text);
2036
2049
  }
2050
+ /* ── Per-belief journey: the rail + story (OPS-1330) ─────────────────────── */
2051
+ .vos-jny {
2052
+ padding: 16px 18px;
2053
+ margin-bottom: 16px;
2054
+ }
2055
+ .vos-jny-head {
2056
+ display: flex;
2057
+ align-items: flex-start;
2058
+ gap: 12px;
2059
+ margin-bottom: 14px;
2060
+ }
2061
+ .vos-jny-head > div:first-child {
2062
+ flex: 1;
2063
+ min-width: 0;
2064
+ }
2065
+ .vos-jny-eyebrow {
2066
+ font-size: 11px;
2067
+ letter-spacing: 0.08em;
2068
+ text-transform: uppercase;
2069
+ color: var(--vos-muted);
2070
+ }
2071
+ .vos-jny-at {
2072
+ margin: 2px 0 0;
2073
+ font-size: 14px;
2074
+ color: var(--vos-text);
2075
+ }
2076
+
2077
+ /* The resting rail — read-only status, no step-in. */
2078
+ .vos-jny-rail {
2079
+ display: flex;
2080
+ align-items: flex-start;
2081
+ gap: 6px;
2082
+ }
2083
+ .vos-jny-arrow {
2084
+ color: var(--vos-border-strong);
2085
+ font-size: 12px;
2086
+ padding-top: 22px;
2087
+ }
2088
+ .vos-jny-stop {
2089
+ flex: 1;
2090
+ min-width: 0;
2091
+ opacity: 0.55;
2092
+ }
2093
+ .vos-jny-stop-at,
2094
+ .vos-jny-stop-done {
2095
+ opacity: 1;
2096
+ }
2097
+ .vos-jny-stopname {
2098
+ display: flex;
2099
+ align-items: center;
2100
+ gap: 5px;
2101
+ font-size: 12px;
2102
+ font-weight: 600;
2103
+ color: var(--vos-text);
2104
+ margin-bottom: 5px;
2105
+ }
2106
+ .vos-jny-stopn {
2107
+ display: inline-flex;
2108
+ align-items: center;
2109
+ justify-content: center;
2110
+ width: 15px;
2111
+ height: 15px;
2112
+ border-radius: 50%;
2113
+ background: var(--vos-surface-2);
2114
+ color: var(--vos-muted);
2115
+ font-size: 9px;
2116
+ }
2117
+ .vos-jny-stop-at .vos-jny-stopn {
2118
+ background: var(--vos-accent);
2119
+ color: var(--vos-on-accent, #fff);
2120
+ }
2121
+ .vos-jny-stop-done .vos-jny-stopn {
2122
+ background: var(--vos-good);
2123
+ color: var(--vos-on-accent, #fff);
2124
+ }
2125
+ .vos-jny-track {
2126
+ height: 18px;
2127
+ border-radius: 4px;
2128
+ background: var(--vos-surface-2);
2129
+ position: relative;
2130
+ overflow: hidden;
2131
+ }
2132
+ .vos-jny-track i {
2133
+ position: absolute;
2134
+ top: 0;
2135
+ bottom: 0;
2136
+ left: 0;
2137
+ border-radius: 4px;
2138
+ }
2139
+ .vos-jny-fill {
2140
+ background: var(--vos-accent);
2141
+ }
2142
+ .vos-jny-known {
2143
+ background: linear-gradient(
2144
+ 90deg,
2145
+ var(--vos-crit-weak),
2146
+ var(--vos-surface-2) 50%,
2147
+ var(--vos-good-weak)
2148
+ );
2149
+ }
2150
+ .vos-jny-mid {
2151
+ position: absolute;
2152
+ left: 50%;
2153
+ top: 2px;
2154
+ bottom: 2px;
2155
+ width: 1px;
2156
+ background: var(--vos-border-strong);
2157
+ }
2158
+ .vos-jny-pos {
2159
+ left: 50%;
2160
+ background: var(--vos-good);
2161
+ border-radius: 0 4px 4px 0;
2162
+ }
2163
+ .vos-jny-neg {
2164
+ right: 50%;
2165
+ left: auto !important;
2166
+ background: var(--vos-crit);
2167
+ border-radius: 4px 0 0 4px;
2168
+ }
2169
+ .vos-jny-cap {
2170
+ margin-top: 4px;
2171
+ font-size: 11px;
2172
+ color: var(--vos-text-2);
2173
+ }
2174
+ .vos-jny-flag {
2175
+ color: var(--vos-crit);
2176
+ font-weight: 600;
2177
+ }
2178
+ .vos-jny-why {
2179
+ margin-top: 12px;
2180
+ }
2181
+
2182
+ /* The story — the dated event log the rail expands into. */
2183
+ .vos-jny-story {
2184
+ margin-top: 12px;
2185
+ }
2186
+ .vos-jny-events {
2187
+ list-style: none;
2188
+ margin: 0;
2189
+ padding: 0;
2190
+ }
2191
+ .vos-jny-ev {
2192
+ display: flex;
2193
+ align-items: center;
2194
+ gap: 9px;
2195
+ padding: 6px 0;
2196
+ border-bottom: 1px solid var(--vos-border);
2197
+ font-size: 13px;
2198
+ }
2199
+ .vos-jny-ev:last-child {
2200
+ border-bottom: 0;
2201
+ }
2202
+ .vos-jny-ev-now {
2203
+ font-weight: 600;
2204
+ }
2205
+ .vos-jny-dot {
2206
+ width: 8px;
2207
+ height: 8px;
2208
+ border-radius: 50%;
2209
+ flex: none;
2210
+ }
2211
+ .vos-jny-dot-good {
2212
+ background: var(--vos-good);
2213
+ }
2214
+ .vos-jny-dot-warn {
2215
+ background: var(--vos-warn);
2216
+ }
2217
+ .vos-jny-dot-crit {
2218
+ background: var(--vos-crit);
2219
+ }
2220
+ .vos-jny-dot-accent {
2221
+ background: var(--vos-accent);
2222
+ }
2223
+ .vos-jny-dot-neutral {
2224
+ background: var(--vos-border-strong);
2225
+ }
2226
+ .vos-jny-date {
2227
+ font-variant-numeric: tabular-nums;
2228
+ color: var(--vos-muted);
2229
+ font-size: 12px;
2230
+ flex: none;
2231
+ min-width: 84px;
2232
+ }
2233
+ .vos-jny-label {
2234
+ flex: 1;
2235
+ min-width: 0;
2236
+ color: var(--vos-text);
2237
+ }
2238
+ .vos-jny-conf {
2239
+ flex: none;
2240
+ }
2241
+ .vos-jny-act {
2242
+ flex: none;
2243
+ }
2244
+
2245
+ /* The card the story ends in — the ranked next move for this belief. */
2246
+ .vos-jny-card {
2247
+ margin-top: 14px;
2248
+ padding: 12px 14px;
2249
+ border: 1px solid var(--vos-border);
2250
+ border-radius: 8px;
2251
+ background: var(--vos-surface-2);
2252
+ display: flex;
2253
+ flex-direction: column;
2254
+ align-items: flex-start;
2255
+ gap: 8px;
2256
+ }
2257
+ .vos-jny-card-kill {
2258
+ border-color: var(--vos-crit);
2259
+ }
2260
+ .vos-jny-card-done {
2261
+ opacity: 0.85;
2262
+ }
2263
+ .vos-jny-card-eyebrow {
2264
+ font-size: 11px;
2265
+ letter-spacing: 0.08em;
2266
+ text-transform: uppercase;
2267
+ color: var(--vos-muted);
2268
+ }
2269
+ .vos-jny-card-kill .vos-jny-card-eyebrow {
2270
+ color: var(--vos-crit);
2271
+ }
2272
+ .vos-jny-card-reason {
2273
+ margin: 0;
2274
+ font-size: 13px;
2275
+ color: var(--vos-text);
2276
+ }
2277
+ }
2278
+
2279
+ /* ── Cross-surface cold start (OPS-1331) ────────────────────────────────── */
2280
+ /* The shared first-run onboarding line — one tone across the two top-level
2281
+ * surfaces (next + pipeline). Neutral text on a faint accent wash, so it
2282
+ * reads as an invitation, not a status. */
2283
+ .vos-firstrun {
2284
+ text-align: center;
2285
+ font-size: 13px;
2286
+ color: var(--vos-accent-text);
2287
+ background: var(--vos-accent-weak);
2288
+ border: 1px solid var(--vos-accent);
2289
+ border-radius: var(--vos-radius);
2290
+ padding: 10px 16px;
2291
+ margin-bottom: 16px;
2292
+ }
2293
+
2294
+ /* The cold-start surfaces share a neutral, centred treatment — no tone (these
2295
+ * are invitations, not status), no dashed border (that reads "broken"). */
2296
+ .vos-cold {
2297
+ text-align: center;
2298
+ }
2299
+
2300
+ /* ── Front-door cold hero (replaces the empty ranked list) ──────────────── */
2301
+ .vos-cold-next {
2302
+ display: flex;
2303
+ flex-direction: column;
2304
+ align-items: center;
2305
+ gap: 14px;
2306
+ padding: 34px 28px;
2307
+ }
2308
+ .vos-cold-eyebrow {
2309
+ font-size: 11px;
2310
+ text-transform: uppercase;
2311
+ letter-spacing: 0.08em;
2312
+ color: var(--vos-faint);
2313
+ font-weight: 700;
2314
+ }
2315
+ .vos-cold-headline {
2316
+ margin: 0;
2317
+ font-size: 22px;
2318
+ font-weight: 700;
2319
+ line-height: 1.3;
2320
+ letter-spacing: -0.01em;
2321
+ color: var(--vos-text);
2322
+ max-width: 30ch;
2323
+ }
2324
+ .vos-cold-body {
2325
+ margin: 0;
2326
+ font-size: 14px;
2327
+ line-height: 1.6;
2328
+ color: var(--vos-muted);
2329
+ max-width: 52ch;
2330
+ }
2331
+
2332
+ /* ── Pipeline cold board ────────────────────────────────────────────────── */
2333
+ .vos-cold-pipe-hero .vos-pipe-big {
2334
+ color: var(--vos-muted);
2335
+ }
2336
+ .vos-cold-pipe-board {
2337
+ padding-bottom: 24px;
2338
+ }
2339
+ .vos-cold-pipe-body {
2340
+ display: flex;
2341
+ flex-direction: column;
2342
+ align-items: center;
2343
+ gap: 14px;
2344
+ padding: 28px 20px;
2345
+ }
2346
+ .vos-cold-pipe-body p {
2347
+ margin: 0;
2348
+ font-size: 14px;
2349
+ line-height: 1.6;
2350
+ color: var(--vos-muted);
2351
+ max-width: 50ch;
2352
+ }
2353
+
2354
+ /* ── Journey no-history cold state ──────────────────────────────────────── */
2355
+ .vos-jny-cold {
2356
+ margin-bottom: 14px;
2357
+ padding: 12px 14px;
2358
+ border: 1px solid var(--vos-border);
2359
+ border-radius: 8px;
2360
+ background: var(--vos-accent-weak);
2361
+ display: flex;
2362
+ flex-direction: column;
2363
+ align-items: flex-start;
2364
+ gap: 6px;
2365
+ }
2366
+ .vos-jny-cold .vos-jny-card-eyebrow {
2367
+ color: var(--vos-accent-text);
2368
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@validation-os/dashboard",
3
- "version": "0.6.1",
3
+ "version": "0.7.0",
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.6.1"
25
+ "@validation-os/core": "0.7.0"
26
26
  },
27
27
  "peerDependencies": {
28
28
  "react": ">=18",