@openziti/ziti-console-lib 1.6.0 → 1.7.1

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.
@@ -9,6 +9,9 @@ body {
9
9
  --stroke: #2A2B31;
10
10
  --black: #FFF;
11
11
  --shaded: #1D2024;
12
+ /* pull the list-table header fully to the border/stroke slate so it matches the
13
+ raised surfaces used elsewhere in dark mode (filter bar, hover) */
14
+ --lt-header-mix: 100%;
12
15
  --formBackground: #1D2024;
13
16
  --background: #18191D;
14
17
  --mainBackground: var(--navigation);
@@ -38,6 +41,19 @@ body {
38
41
  --jse-main-border: var(--inputBorder);
39
42
  --jse-delimiter-color: var(--tableText);
40
43
  --jse-key-color: var(--tableText);
44
+ /* page-header resource icon: lift off the dark brand navy so the glyph reads */
45
+ --lt-header-icon: #7e97ff;
46
+ }
47
+
48
+ /* list-table accents: the light-mode brand blue and the dark status/type text
49
+ shades are too dark to read on the dark surface, so lift the text tokens to
50
+ lighter tints of the same hues. Fills stay subtle; only the labels/links change. */
51
+ .lt-skin {
52
+ --lt-link: #7e97ff;
53
+ --lt-icon-active: #7e97ff;
54
+ --lt-info-text: #9bb0ff;
55
+ --lt-positive-text: #5fd98a;
56
+ --lt-warning-text: #f0b45e;
41
57
  }
42
58
 
43
59
  .filters .navigate {
@@ -55,28 +55,32 @@ body {
55
55
  (--primary, --background, --stroke, ...). Consuming apps reskin the table by
56
56
  overriding these (or the underlying tokens) in their own global styles. */
57
57
  --lt-bg: transparent;
58
- --lt-header-bg: var(--background);
59
- --lt-header-text: var(--groupText);
60
- --lt-header-underline: var(--stroke);
58
+ --lt-header-bg: var(--background, #f6f7fb);
59
+ --lt-header-text: var(--groupText, #78859f);
60
+ --lt-header-underline: var(--stroke, #d4d9e2);
61
61
  --lt-row-bg: transparent;
62
62
  --lt-row-alt-bg: transparent; /* no zebra — rows read via the hairline divider + hover */
63
63
  --lt-row-hover: var(--tableRowHover, rgba(0, 39, 171, 0.06));
64
64
  --lt-row-selected: color-mix(in srgb, var(--primary) 8%, transparent);
65
- --lt-cell-text: var(--text);
66
- --lt-link: var(--primary);
67
- --lt-border: var(--stroke);
68
- --lt-icon: var(--icon);
69
- --lt-icon-active: var(--primary);
65
+ --lt-cell-text: var(--text, #000);
66
+ --lt-link: var(--primary, #0027ab);
67
+ --lt-border: var(--stroke, #d4d9e2);
68
+ --lt-icon: var(--icon, #658292);
69
+ --lt-icon-active: var(--primary, #0027ab);
70
70
  --lt-row-height: 3.125rem;
71
- --lt-radius: var(--inputBorderRadius);
72
- --lt-toolbar-height: 2.5rem;
73
- --lt-control-bg: var(--background);
71
+ --lt-radius: var(--inputBorderRadius, 0.375rem);
72
+ --lt-toolbar-height: 2.3rem;
73
+ --lt-control-bg: var(--background, #f6f7fb);
74
74
  --lt-font: 'Open Sans', sans-serif;
75
75
  /* shared toolbar-control metrics (buttons, menus) so spacing/type stay consistent */
76
76
  --lt-control-gap: 0.4375rem;
77
- --lt-control-padding-x: 0.75rem;
77
+ --lt-control-padding-x: 0.625rem;
78
78
  --lt-control-font-size: 0.8125rem;
79
- --lt-control-font-weight: 600;
79
+ --lt-control-font-weight: 500;
80
+ /* one hairline border for every toolbar/footer control so they read as a set */
81
+ --lt-control-border-width: 1px;
82
+ /* one gap between toolbar controls so the filter row and the right cluster match */
83
+ --lt-control-row-gap: 0.4375rem;
80
84
  --redShadow: rgba(255, 13, 73, 0.3);
81
85
  --redText: #9c0027;
82
86
  --shadow: 0rem 0rem 0.5rem 0.125rem rgba(0,0,0,0.08);
@@ -2309,32 +2313,65 @@ a {
2309
2313
  // --lt-* defaults for that table's subtree only, drawing from ZAC's own tokens so it
2310
2314
  // matches the app and follows its theming; the legacy page (.ag-cell) is untouched.
2311
2315
  .lt-skin {
2312
- --lt-bg: var(--background);
2313
- --lt-header-bg: var(--shaded);
2314
- --lt-header-text: var(--groupText);
2315
- --lt-header-underline: var(--stroke);
2316
- --lt-row-bg: var(--background);
2316
+ --lt-bg: var(--background, #f6f7fb);
2317
+ // shade the header off the row surface using the theme's own cool neutral (the
2318
+ // border color), so it stays in the same family as the rest of the table instead of
2319
+ // a flat grey. The theme's --shaded can equal the background (no contrast), so this
2320
+ // derives its own band. --lt-header-mix sets how far to pull toward the border: the
2321
+ // light default is a gentle step; dark themes raise it (see dark.css) so the header
2322
+ // lands on the same raised-surface slate the rest of dark mode uses.
2323
+ --lt-header-bg: color-mix(in srgb, var(--lt-border) var(--lt-header-mix, 42%), var(--lt-row-bg));
2324
+ // the muted group color is too faint on the shaded header band, so pull it toward the
2325
+ // theme text color: darker in light mode, lighter in dark, keeping the cool hue
2326
+ --lt-header-text: color-mix(in srgb, var(--groupText, #78859f) 70%, var(--text));
2327
+ --lt-header-underline: var(--stroke, #d4d9e2);
2328
+ --lt-row-bg: var(--background, #f6f7fb);
2317
2329
  --lt-row-alt-bg: transparent;
2318
- --lt-row-hover: var(--shaded);
2330
+ --lt-row-hover: var(--shaded, #f6f7fb);
2319
2331
  --lt-row-selected: color-mix(in srgb, var(--primary) 8%, transparent);
2320
- --lt-cell-text: var(--text);
2321
- --lt-link: var(--primary);
2322
- --lt-icon: var(--icon);
2323
- --lt-icon-active: var(--primary);
2324
- --lt-border: var(--stroke);
2325
- --lt-control-bg: var(--background);
2326
- --lt-radius: 0.375rem;
2332
+ --lt-cell-text: var(--text, #000);
2333
+ --lt-link: var(--primary, #0027ab);
2334
+ --lt-icon: var(--icon, #658292);
2335
+ --lt-icon-active: var(--primary, #0027ab);
2336
+ // status/type accent palette (text + fill base). Defaults are the light-mode
2337
+ // shades; dark.css lifts the text tokens so these pills stay legible on the dark
2338
+ // surface.
2339
+ --lt-info-text: #1e40af;
2340
+ --lt-info: #2563eb;
2341
+ --lt-positive-text: #166534;
2342
+ --lt-positive: #16a34a;
2343
+ --lt-negative: #dc2626;
2344
+ --lt-warning-text: #92400e;
2345
+ --lt-warning: var(--highlighted, #f5a93d);
2346
+ --lt-border: var(--stroke, #d4d9e2);
2347
+ --lt-control-bg: var(--background, #f6f7fb);
2348
+ --lt-radius: 0.3rem;
2327
2349
  --lt-row-height: 3.375rem;
2350
+ // nested tree card: the well it floats on, and a border strong enough to read
2351
+ // against that well (the base --lt-border is too light to show there)
2352
+ --lt-tree-well: color-mix(in srgb, var(--lt-border) 22%, var(--lt-row-bg));
2353
+ --lt-tree-card-border: color-mix(in srgb, var(--lt-border) 70%, var(--lt-icon));
2354
+ // vertical rail drawn beside nested rows in the flat variant (lighter than the card border)
2355
+ --lt-tree-rail: color-mix(in srgb, var(--lt-border) 55%, var(--lt-icon));
2356
+ // drop shadow under the nested card's last row (the lift)
2357
+ --lt-tree-card-shadow: 0 2px 4px color-mix(in srgb, #000 10%, transparent);
2358
+ // left inset of a nested card before its per-depth indent; must match treeCardBaseRem in the component
2359
+ --lt-card-inset: 4rem;
2328
2360
 
2329
2361
  // extra skin knobs; defaults match the values above so ZAC is unchanged
2330
2362
  --lt-control-border: var(--lt-border);
2363
+ // the control-border shorthand, as one token so the many inputs/menus share it
2364
+ --lt-control-border-full: var(--lt-control-border-width) solid var(--lt-control-border, var(--lt-border));
2331
2365
  --lt-header-sorted-text: var(--lt-icon-active);
2332
2366
  --lt-header-sorted-weight: 700;
2333
- --lt-name-text: var(--tableText);
2367
+ --lt-name-text: var(--tableText, #22222a);
2334
2368
  --lt-name-weight: 700;
2335
2369
  --lt-name-size: 0.8125rem;
2336
2370
  --lt-name-hover: var(--lt-link);
2337
- --lt-toolbar-margin-y: 0;
2371
+ // more room above the controls (separating them from the page header), less below
2372
+ // (tightening them to the table)
2373
+ --lt-toolbar-margin-top: 1rem;
2374
+ --lt-toolbar-margin-bottom: 0;
2338
2375
  --lt-toolbar-pad-bottom: 0.625rem;
2339
2376
  --lt-container-reserve: 5.625rem;
2340
2377
  }
@@ -2346,6 +2383,15 @@ a {
2346
2383
  --inputBorderRadius: 0.375rem;
2347
2384
  }
2348
2385
 
2386
+ // roomier gutters on the skinned list pages so the content breathes away from the
2387
+ // panel edges instead of hugging them (base page gutter is 1.25rem)
2388
+ .ziti-page-container.lt-skin-page {
2389
+ padding-top: 1.5rem;
2390
+ padding-left: 2rem;
2391
+ padding-right: 2rem;
2392
+ padding-bottom: 1.25rem;
2393
+ }
2394
+
2349
2395
  .lt-skin .lt-scroll {
2350
2396
  border: 1px solid var(--lt-control-border, var(--lt-border));
2351
2397
  border-radius: var(--lt-radius);
@@ -2386,13 +2432,16 @@ a {
2386
2432
  .lt-cell .lt-chip {
2387
2433
  display: inline-flex;
2388
2434
  align-items: center;
2435
+ min-height: 1.75rem;
2436
+ box-sizing: border-box;
2389
2437
  margin-right: 0.25rem;
2390
- padding: 0.125rem 0.5rem;
2391
- font-size: 0.75rem;
2438
+ padding: 0.15625rem 0.625rem;
2439
+ font-size: 0.8125rem;
2392
2440
  font-weight: 600;
2393
- line-height: 1.4;
2441
+ line-height: 1.2;
2394
2442
  color: var(--lt-link);
2395
2443
  background: color-mix(in srgb, var(--lt-link) 12%, transparent);
2444
+ border: none;
2396
2445
  border-radius: 0.25rem;
2397
2446
  vertical-align: middle;
2398
2447
  }
@@ -2402,39 +2451,54 @@ a {
2402
2451
  background: color-mix(in srgb, var(--secondary) 14%, transparent);
2403
2452
  }
2404
2453
 
2454
+ // --- table pill standard ---------------------------------------------------
2455
+ // The shared look for status-style pills in list tables (Type, Status, Is Admin,
2456
+ // Token, Roles): weight 500, pill radius, a shared min-height so pills with and
2457
+ // without an icon match, and all contents sized together. The status-style pills
2458
+ // (Type, Status, Is Admin, Token) use the compact size - font-size 0.73125rem,
2459
+ // min-height 1.575rem; the Roles attribute chips run one step larger (0.8125rem /
2460
+ // 1.75rem). The strength comes from contrast, not a heavy fill: a light 14% tint
2461
+ // background paired with a dark, saturated label color, and a clearly defined 1px
2462
+ // border (accent at 42% mixed into the page background). Each variant keeps its
2463
+ // own accent; only the color changes.
2464
+
2405
2465
  // Online/Offline status pill (Status column): online gets a green checkmark
2406
2466
  // (like the Is Admin badge), offline a muted dot. Both icons are drawn via
2407
2467
  // ::before because inline <svg> is stripped from [innerHTML] cellHtml output.
2408
2468
  .lt-cell .lt-status {
2409
2469
  display: inline-flex;
2410
2470
  align-items: center;
2411
- gap: 0.375rem;
2412
- padding: 0.1875rem 0.5rem 0.1875rem 0.4375rem;
2413
- font-size: 0.75rem;
2414
- font-weight: 600;
2471
+ gap: 0.3375rem;
2472
+ min-height: 1.575rem;
2473
+ box-sizing: border-box;
2474
+ padding: 0.140625rem 0.5625rem 0.140625rem 0.421875rem;
2475
+ font-size: 0.73125rem;
2476
+ font-weight: 500;
2415
2477
  line-height: 1.2;
2478
+ border: 1px solid transparent;
2416
2479
  border-radius: 999px;
2417
2480
 
2481
+ // shared icon slot so the offline dot and the online check badge take the same
2482
+ // width and the labels line up across rows
2418
2483
  &::before {
2419
2484
  content: '';
2420
2485
  flex: 0 0 auto;
2486
+ width: 0.84375rem;
2487
+ height: 0.84375rem;
2488
+ background-repeat: no-repeat;
2489
+ background-position: center;
2490
+ background-size: contain;
2421
2491
  }
2422
2492
  }
2423
2493
 
2494
+ // filled green disc with a white check (badge style), not a bare checkmark
2424
2495
  .lt-cell .lt-status-online::before {
2425
- width: 0.8125rem;
2426
- height: 0.8125rem;
2427
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 14'%3E%3Cpath fill='none' stroke='%2316a34a' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' d='M2.5 7.6 5.7 10.8 11.5 3.6'/%3E%3C/svg%3E");
2428
- background-repeat: no-repeat;
2429
- background-position: center;
2430
- background-size: contain;
2496
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='7' fill='%2316a34a'/%3E%3Cpath fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' d='M4.8 8.2 7 10.4 11.2 5.6'/%3E%3C/svg%3E");
2431
2497
  }
2432
2498
 
2499
+ // small dot centered in the shared icon slot (keeps the theme color via currentColor)
2433
2500
  .lt-cell .lt-status-offline::before {
2434
- width: 0.4375rem;
2435
- height: 0.4375rem;
2436
- border-radius: 50%;
2437
- background: currentColor;
2501
+ background: radial-gradient(circle at center, currentColor 0 0.225rem, transparent 0.243rem);
2438
2502
  }
2439
2503
 
2440
2504
  // Color-coded Type pill: Default = blue, Router = green, each with a small icon.
@@ -2443,45 +2507,54 @@ a {
2443
2507
  .lt-type-badge {
2444
2508
  display: inline-flex;
2445
2509
  align-items: center;
2446
- gap: 0.375rem;
2447
- padding: 0.1875rem 0.5rem 0.1875rem 0.4375rem;
2448
- font-size: 0.75rem;
2449
- font-weight: 600;
2510
+ gap: 0.45rem;
2511
+ min-height: 1.575rem;
2512
+ box-sizing: border-box;
2513
+ padding: 0.140625rem 0.5625rem 0.140625rem 0.421875rem;
2514
+ font-size: 0.73125rem;
2515
+ font-weight: 500;
2450
2516
  line-height: 1.2;
2517
+ // faint accent-tinted outline, matching the page header icon container (.lth-icon)
2518
+ border: 1px solid transparent;
2451
2519
  border-radius: 999px;
2452
2520
 
2521
+ // the icon is the same resource glyph the side nav uses (icomoon font), kept large
2522
+ // so the detailed glyph stays legible at pill size; it inherits the pill text color
2453
2523
  &::before {
2454
- content: '';
2455
2524
  flex: 0 0 auto;
2456
- width: 0.8125rem;
2457
- height: 0.8125rem;
2458
- background-repeat: no-repeat;
2459
- background-position: center;
2460
- background-size: contain;
2525
+ font-family: 'icomoon';
2526
+ font-size: 1.18125rem;
2527
+ line-height: 1;
2528
+ speak: none;
2461
2529
  }
2462
2530
  }
2463
2531
 
2464
2532
  .lt-type-default {
2465
- color: #1d4ed8;
2466
- background: color-mix(in srgb, #2563eb 12%, transparent);
2533
+ color: var(--lt-info-text);
2534
+ background: color-mix(in srgb, var(--lt-info) 14%, transparent);
2535
+ border-color: color-mix(in srgb, var(--lt-info) 42%, var(--background));
2467
2536
 
2537
+ // identities resource icon
2468
2538
  &::before {
2469
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cg fill='none' stroke='%232563eb' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='2.5' y='3' width='11' height='7' rx='1'/%3E%3Cpath d='M6 12.5h4M8 10v2.5'/%3E%3C/g%3E%3C/svg%3E");
2539
+ content: '\e92e';
2470
2540
  }
2471
2541
  }
2472
2542
 
2473
2543
  .lt-type-router {
2474
- color: #15803d;
2475
- background: color-mix(in srgb, #16a34a 12%, transparent);
2544
+ color: var(--lt-positive-text);
2545
+ background: color-mix(in srgb, var(--lt-positive) 14%, transparent);
2546
+ border-color: color-mix(in srgb, var(--lt-positive) 42%, var(--background));
2476
2547
 
2548
+ // routers resource icon
2477
2549
  &::before {
2478
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cg fill='none' stroke='%2316a34a' stroke-width='1.3'%3E%3Cpath d='M8 5.4 4.5 11M8 5.4 11.5 11'/%3E%3C/g%3E%3Cg fill='%2316a34a'%3E%3Ccircle cx='8' cy='4' r='1.7'/%3E%3Ccircle cx='4' cy='12' r='1.7'/%3E%3Ccircle cx='12' cy='12' r='1.7'/%3E%3C/g%3E%3C/svg%3E");
2550
+ content: '\e95d';
2479
2551
  }
2480
2552
  }
2481
2553
 
2482
2554
  .lt-type-other {
2483
2555
  color: var(--lt-cell-text);
2484
2556
  background: color-mix(in srgb, var(--lt-border) 45%, transparent);
2557
+ border-color: color-mix(in srgb, var(--lt-border) 55%, var(--background));
2485
2558
 
2486
2559
  &::before {
2487
2560
  display: none;
@@ -2489,13 +2562,17 @@ a {
2489
2562
  }
2490
2563
 
2491
2564
  .lt-cell .lt-status-online {
2492
- color: #15803d;
2493
- background: color-mix(in srgb, #16a34a 12%, transparent);
2565
+ color: var(--lt-positive-text);
2566
+ background: color-mix(in srgb, var(--lt-positive) 14%, transparent);
2567
+ border-color: color-mix(in srgb, var(--lt-positive) 42%, var(--background));
2494
2568
  }
2495
2569
 
2496
2570
  .lt-cell .lt-status-offline {
2497
- color: var(--groupText);
2498
- background: color-mix(in srgb, var(--groupText) 14%, transparent);
2571
+ // darken the muted group color toward the theme text (darker in light, lighter
2572
+ // in dark) so the label contrasts strongly with its own fill
2573
+ color: color-mix(in srgb, var(--groupText) 55%, var(--text));
2574
+ background: color-mix(in srgb, var(--groupText) 16%, transparent);
2575
+ border-color: color-mix(in srgb, var(--groupText) 42%, var(--background));
2499
2576
  }
2500
2577
 
2501
2578
  .cert {