@pipelex/mthds-ui 0.8.0 → 0.10.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.
@@ -2100,16 +2100,31 @@ button.stuff-viewer-local-file--button:focus-visible {
2100
2100
  /* Token-only styling: theme switching happens by swapping `--surface-*`, */
2101
2101
  /* `--text-*`, `--border-*`, and `--color-accent` values on the container. */
2102
2102
 
2103
+ /* The ReactFlow <Panel> owns positioning now (anchor + margin). It sits above
2104
+ the graph but the old code used z-index 11, so keep parity. */
2105
+ .graph-toolbar-panel {
2106
+ z-index: 11;
2107
+ }
2108
+
2103
2109
  .graph-toolbar {
2104
- position: absolute;
2105
- top: 8px;
2106
2110
  display: flex;
2107
2111
  align-items: center;
2108
2112
  gap: 4px;
2109
- z-index: 11;
2110
2113
  pointer-events: auto;
2111
2114
  }
2112
2115
 
2116
+ /* Vertical bar — `center-left` / `center-right` anchors. Stack the buttons in a
2117
+ column and rotate the separators so they divide rows instead of columns. */
2118
+ .graph-toolbar--vertical {
2119
+ flex-direction: column;
2120
+ }
2121
+
2122
+ .graph-toolbar--vertical .graph-toolbar-separator {
2123
+ width: 18px;
2124
+ height: 1px;
2125
+ margin: 2px 0;
2126
+ }
2127
+
2113
2128
  .graph-toolbar-btn {
2114
2129
  all: unset;
2115
2130
  box-sizing: border-box;
@@ -2172,20 +2187,37 @@ button.stuff-viewer-local-file--button:focus-visible {
2172
2187
 
2173
2188
  /* ─── Standalone GraphViewer chrome (toolbar, theme, layout) ─────────── */
2174
2189
 
2175
- * { box-sizing: border-box; margin: 0; padding: 0; }
2190
+ * {
2191
+ box-sizing: border-box;
2192
+ margin: 0;
2193
+ padding: 0;
2194
+ }
2176
2195
 
2177
- html, body {
2196
+ html,
2197
+ body {
2178
2198
  height: 100%;
2179
2199
  overflow: hidden;
2180
- font-family: "Inter", -apple-system, sans-serif;
2200
+ font-family:
2201
+ "Inter",
2202
+ -apple-system,
2203
+ sans-serif;
2181
2204
  }
2182
2205
 
2183
2206
  /* ─── Theme system ──────────────────────────────────────────────────── */
2184
2207
 
2185
- body[data-theme="dark"], body:not([data-theme]) {
2208
+ /* `data-theme="system"` defaults to the dark palette so a host with no
2209
+ `prefers-color-scheme` support (legacy WebKit / older Electron / some
2210
+ webviews) still gets themed chrome on first paint, before — and even if —
2211
+ the JS bundle loads. This mirrors the JS side, where `detectSystemTheme()`
2212
+ also falls back to dark. The `prefers-color-scheme: light` query below flips
2213
+ it to light when the engine supports it; `prefers-color-scheme: dark` needs
2214
+ no block because it already matches this default. */
2215
+ body[data-theme="dark"],
2216
+ body[data-theme="system"],
2217
+ body:not([data-theme]) {
2186
2218
  --chrome-bg: #0d1117;
2187
2219
  --chrome-surface: #161b22;
2188
- --chrome-border: rgba(255,255,255,0.08);
2220
+ --chrome-border: rgba(255, 255, 255, 0.08);
2189
2221
  --chrome-text: #e2e8f0;
2190
2222
  --chrome-text-muted: #8b949e;
2191
2223
  background: #0a0a0f;
@@ -2195,7 +2227,7 @@ body[data-theme="dark"], body:not([data-theme]) {
2195
2227
  body[data-theme="light"] {
2196
2228
  --chrome-bg: #ffffff;
2197
2229
  --chrome-surface: #f6f8fa;
2198
- --chrome-border: rgba(0,0,0,0.1);
2230
+ --chrome-border: rgba(0, 0, 0, 0.1);
2199
2231
  --chrome-text: #1f2328;
2200
2232
  --chrome-text-muted: #656d76;
2201
2233
  background: #ffffff;
@@ -2206,7 +2238,7 @@ body[data-theme="light"] {
2206
2238
  body[data-theme="system"] {
2207
2239
  --chrome-bg: #ffffff;
2208
2240
  --chrome-surface: #f6f8fa;
2209
- --chrome-border: rgba(0,0,0,0.1);
2241
+ --chrome-border: rgba(0, 0, 0, 0.1);
2210
2242
  --chrome-text: #1f2328;
2211
2243
  --chrome-text-muted: #656d76;
2212
2244
  background: #ffffff;
@@ -2214,18 +2246,6 @@ body[data-theme="light"] {
2214
2246
  }
2215
2247
  }
2216
2248
 
2217
- @media (prefers-color-scheme: dark) {
2218
- body[data-theme="system"] {
2219
- --chrome-bg: #0d1117;
2220
- --chrome-surface: #161b22;
2221
- --chrome-border: rgba(255,255,255,0.08);
2222
- --chrome-text: #e2e8f0;
2223
- --chrome-text-muted: #8b949e;
2224
- background: #0a0a0f;
2225
- color: #e2e8f0;
2226
- }
2227
- }
2228
-
2229
2249
  /* ─── Layout ────────────────────────────────────────────────────────── */
2230
2250
 
2231
2251
  #app-container {
@@ -2253,7 +2273,9 @@ body[data-theme="light"] {
2253
2273
  z-index: 20;
2254
2274
  }
2255
2275
 
2256
- .toolbar-spacer { flex: 1; }
2276
+ .toolbar-spacer {
2277
+ flex: 1;
2278
+ }
2257
2279
 
2258
2280
  .toolbar-btn {
2259
2281
  all: unset;
@@ -2265,7 +2287,9 @@ body[data-theme="light"] {
2265
2287
  height: 28px;
2266
2288
  border-radius: 4px;
2267
2289
  color: var(--chrome-text-muted);
2268
- transition: background 0.15s, color 0.15s;
2290
+ transition:
2291
+ background 0.15s,
2292
+ color 0.15s;
2269
2293
  }
2270
2294
 
2271
2295
  .toolbar-btn:hover {
@@ -2279,8 +2303,12 @@ body[data-theme="light"] {
2279
2303
  }
2280
2304
 
2281
2305
  /* Direction toggle */
2282
- .direction-icon { display: none; }
2283
- .direction-icon.active { display: inline-flex; }
2306
+ .direction-icon {
2307
+ display: none;
2308
+ }
2309
+ .direction-icon.active {
2310
+ display: inline-flex;
2311
+ }
2284
2312
 
2285
2313
  /* Controllers toggle */
2286
2314
  .toggle-switch {
@@ -2293,7 +2321,9 @@ body[data-theme="light"] {
2293
2321
  user-select: none;
2294
2322
  }
2295
2323
 
2296
- .toggle-switch input { display: none; }
2324
+ .toggle-switch input {
2325
+ display: none;
2326
+ }
2297
2327
 
2298
2328
  .toggle-track {
2299
2329
  width: 28px;
@@ -2305,7 +2335,7 @@ body[data-theme="light"] {
2305
2335
  }
2306
2336
 
2307
2337
  .toggle-switch input:checked + .toggle-track {
2308
- background: #50FA7B44;
2338
+ background: #50fa7b44;
2309
2339
  }
2310
2340
 
2311
2341
  .toggle-knob {
@@ -2316,39 +2346,22 @@ body[data-theme="light"] {
2316
2346
  height: 12px;
2317
2347
  border-radius: 50%;
2318
2348
  background: var(--chrome-text-muted);
2319
- transition: left 0.15s, background 0.15s;
2349
+ transition:
2350
+ left 0.15s,
2351
+ background 0.15s;
2320
2352
  }
2321
2353
 
2322
2354
  .toggle-switch input:checked + .toggle-track .toggle-knob {
2323
2355
  left: 14px;
2324
- background: #50FA7B;
2356
+ background: #50fa7b;
2325
2357
  }
2326
2358
 
2327
2359
  .toggle-label {
2328
2360
  font-size: 11px;
2329
2361
  }
2330
2362
 
2331
- /* Theme toggle */
2332
- .theme-btn {
2333
- all: unset;
2334
- cursor: pointer;
2335
- display: flex;
2336
- align-items: center;
2337
- gap: 4px;
2338
- font-size: 10px;
2339
- color: var(--chrome-text-muted);
2340
- padding: 4px 8px;
2341
- border-radius: 4px;
2342
- transition: background 0.15s;
2343
- }
2344
-
2345
- .theme-btn:hover {
2346
- background: var(--chrome-border);
2347
- }
2348
-
2349
- .theme-label {
2350
- text-transform: capitalize;
2351
- }
2363
+ /* The theme toggle lives in the in-graph toolbar (library-owned tri-state);
2364
+ the standalone page no longer renders its own theme button. */
2352
2365
 
2353
2366
  /* ─── Header branding ───────────────────────────────────────────────── */
2354
2367
 
@@ -2363,7 +2376,10 @@ body[data-theme="light"] {
2363
2376
  opacity: 0.7;
2364
2377
  }
2365
2378
 
2379
+ /* `system` defaults to the dark logo (hide the light variant), matching the
2380
+ chrome default above; the `prefers-color-scheme: light` query flips it. */
2366
2381
  body[data-theme="dark"] .header-logo.light-logo,
2382
+ body[data-theme="system"] .header-logo.light-logo,
2367
2383
  body:not([data-theme]) .header-logo.light-logo {
2368
2384
  display: none;
2369
2385
  }
@@ -2385,14 +2401,40 @@ body[data-theme="light"] .header-logo.light-logo {
2385
2401
  }
2386
2402
  }
2387
2403
 
2388
- @media (prefers-color-scheme: dark) {
2389
- body[data-theme="system"] .header-logo.light-logo {
2390
- display: none;
2391
- }
2392
- }
2393
-
2394
2404
  .header-title {
2395
2405
  font-size: 12px;
2396
2406
  font-weight: 600;
2397
2407
  color: var(--chrome-text-muted);
2398
2408
  }
2409
+
2410
+ /* ─── Error screen ──────────────────────────────────────────────────── */
2411
+
2412
+ /* Shown when the embedded config or spec is malformed. Uses explicit colors
2413
+ rather than the `--chrome-*` vars so it stays legible even when the theme
2414
+ parse is the thing that failed. */
2415
+ .standalone-error {
2416
+ display: flex;
2417
+ flex-direction: column;
2418
+ gap: 8px;
2419
+ height: 100%;
2420
+ padding: 24px;
2421
+ overflow: auto;
2422
+ background: #0a0a0f;
2423
+ color: #e2e8f0;
2424
+ }
2425
+
2426
+ .standalone-error-title {
2427
+ font-size: 14px;
2428
+ font-weight: 600;
2429
+ color: #ff6b6b;
2430
+ }
2431
+
2432
+ .standalone-error-message {
2433
+ margin: 0;
2434
+ font-family: ui-monospace, "SF Mono", Menlo, monospace;
2435
+ font-size: 12px;
2436
+ line-height: 1.5;
2437
+ white-space: pre-wrap;
2438
+ word-break: break-word;
2439
+ color: #8b949e;
2440
+ }