@meshmakers/octo-ui 3.4.1100 → 3.4.1130

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.
@@ -2,6 +2,10 @@
2
2
 
3
3
  @use "variables" as *;
4
4
  @use "styles" as *;
5
+ @use "theme" as *;
5
6
 
6
7
  @forward "variables" show variables;
7
8
  @forward "styles" show styles;
9
+ @forward "theme" show theme, theme-overrides, ink-overlays, kendo-bridge, dark-theme-tokens, light-theme-tokens,
10
+ light-theme-button-primary, light-theme-button-base,
11
+ light-theme-button-overrides;
@@ -2417,10 +2417,23 @@
2417
2417
  }
2418
2418
  }
2419
2419
 
2420
+ // --------------------------------------------------------------------------
2420
2421
  // Drawer - LCARS style
2422
+ //
2423
+ // Hierarchy classes: the shared CommandService stamps `mm-drawer-level-<n>`
2424
+ // on every drawer item and Kendo adds its own `k-level-<n>` — but only while
2425
+ // the drawer is expanded (see DrawerListComponent's template). Indentation
2426
+ // therefore keys off the mm-* classes, which survive the collapse into the
2427
+ // mini rail and can be reset there in one place.
2428
+ // --------------------------------------------------------------------------
2421
2429
  .k-drawer {
2422
- background: linear-gradient(180deg, var(--iron-navy), var(--deep-sea));
2423
- border-right: 1px solid var(--octo-mint-20);
2430
+ background: linear-gradient(180deg, var(--theme-bg-surface), var(--theme-bg-app));
2431
+ border-right: 1px solid var(--theme-border-subtle);
2432
+ // Kendo's own theme sets `.k-drawer { color: var(--kendo-color-subtle) }`.
2433
+ // That token is not part of our theme contract and resolves to an almost
2434
+ // unreadable dark violet under the Material defaults, so the drawer states
2435
+ // its text colour explicitly from the theme tokens instead of inheriting.
2436
+ color: var(--theme-text-primary);
2424
2437
 
2425
2438
  .k-drawer-wrapper {
2426
2439
  overflow-x: hidden;
@@ -2432,6 +2445,7 @@
2432
2445
  }
2433
2446
 
2434
2447
  .k-drawer-item {
2448
+ color: var(--theme-text-primary);
2435
2449
  border-radius: 0 var(--lcars-radius-md) var(--lcars-radius-md) 0;
2436
2450
  margin: 2px 4px 2px 0;
2437
2451
  padding: 10px 12px;
@@ -2462,116 +2476,196 @@
2462
2476
 
2463
2477
  &:hover {
2464
2478
  background: var(--octo-mint-10);
2479
+ color: var(--theme-text-primary);
2465
2480
  }
2466
2481
 
2467
2482
  &.k-selected {
2468
2483
  background: linear-gradient(90deg, var(--octo-mint-20), transparent);
2469
2484
  border-left: 3px solid var(--octo-mint);
2470
- color: var(--octo-mint);
2485
+ color: var(--theme-text-accent);
2471
2486
  }
2472
2487
 
2473
- // Separator styling
2488
+ // Separator: a fading rule that groups entries without eating a row.
2489
+ // CommandService stamps mm-drawer-level-N on separators as well, so every
2490
+ // level rule below carries :not(.k-drawer-separator) — without that guard
2491
+ // the level's min-height/padding win on source order and the hairline
2492
+ // renders as a filled 38 px bar.
2474
2493
  &.k-drawer-separator {
2475
- display: none;
2494
+ height: 1px;
2495
+ min-height: 1px;
2496
+ padding: 0;
2497
+ margin: 8px 12px;
2498
+ background: linear-gradient(90deg, var(--theme-border-strong), transparent);
2499
+ }
2500
+
2501
+ // Nested entries: indented under their group header with a vertical
2502
+ // guide line, and one step quieter than their section header. The step
2503
+ // is a real colour, not `opacity` on the text — stacking opacity on top
2504
+ // of an inherited colour is what made these entries unreadable once the
2505
+ // inherited colour itself was dark.
2506
+ &.mm-drawer-level-1:not(.k-drawer-separator),
2507
+ &.mm-drawer-level-2:not(.k-drawer-separator) {
2508
+ position: relative;
2509
+
2510
+ &::before {
2511
+ content: "";
2512
+ position: absolute;
2513
+ left: var(--mm-drawer-guide-x);
2514
+ top: 0;
2515
+ bottom: 0;
2516
+ width: 1px;
2517
+ background: var(--theme-border-subtle);
2518
+ }
2476
2519
  }
2477
- }
2478
2520
 
2479
- // Hierarchy — top-level groups (k-level-0)
2480
- .k-drawer-item.k-level-0 {
2481
- color: var(--octo-text-color);
2482
- text-transform: uppercase;
2483
- font-weight: 600;
2484
- letter-spacing: 0.6px;
2485
- font-size: 12.5px;
2486
- margin-top: 2px;
2487
- }
2521
+ &.mm-drawer-level-1:not(.k-drawer-separator) {
2522
+ --mm-drawer-guide-x: 24px;
2523
+ padding-left: 40px;
2524
+ min-height: 38px;
2488
2525
 
2489
- // Hierarchy — nested items (k-level-1 and k-level-2 share most rules;
2490
- // per-level overrides set indent, font-size, text colour and the
2491
- // locally-scoped --guide-x / --icon-scale below).
2492
- .k-drawer-item.k-level-1,
2493
- .k-drawer-item.k-level-2 {
2494
- --guide-x: 22px;
2495
- --icon-scale: 0.85;
2526
+ &:not(.k-selected) {
2527
+ color: color-mix(in srgb, var(--theme-text-primary) 80%, transparent);
2528
+ }
2496
2529
 
2497
- font-weight: 400;
2498
- text-transform: none;
2499
- position: relative;
2530
+ .k-item-text {
2531
+ font-size: 0.95em;
2532
+ }
2500
2533
 
2501
- .k-icon, .k-svg-icon, kendo-svgicon, svg {
2502
- transform: scale(var(--icon-scale));
2503
- opacity: var(--icon-scale);
2534
+ .k-icon,
2535
+ .k-svg-icon,
2536
+ kendo-svgicon {
2537
+ width: 20px;
2538
+ height: 20px;
2539
+ min-width: 20px;
2540
+ }
2504
2541
  }
2505
2542
 
2506
- &::before {
2507
- content: "";
2508
- position: absolute;
2509
- top: 0;
2510
- bottom: 0;
2511
- left: var(--guide-x);
2512
- width: 1px;
2513
- background: color-mix(in srgb, var(--octo-text-color) 10%, transparent);
2543
+ &.mm-drawer-level-2:not(.k-drawer-separator) {
2544
+ --mm-drawer-guide-x: 44px;
2545
+ padding-left: 60px;
2546
+ min-height: 34px;
2547
+
2548
+ &:not(.k-selected) {
2549
+ color: color-mix(in srgb, var(--theme-text-primary) 65%, transparent);
2550
+ }
2551
+
2552
+ .k-icon,
2553
+ .k-svg-icon,
2554
+ kendo-svgicon {
2555
+ width: 18px;
2556
+ height: 18px;
2557
+ min-width: 18px;
2558
+ }
2559
+
2560
+ .k-item-text {
2561
+ font-size: 0.9em;
2562
+ }
2514
2563
  }
2515
2564
 
2516
- &:hover {
2517
- color: var(--octo-text-color);
2518
- background: color-mix(in srgb, var(--octo-text-color) 4%, transparent);
2565
+ // Group expand/collapse indicator, rendered by the host's item template.
2566
+ .drawer-group-chevron {
2567
+ margin-left: auto;
2568
+ width: 16px !important;
2569
+ height: 16px !important;
2570
+ min-width: 16px !important;
2571
+ opacity: 0.6;
2519
2572
  }
2520
2573
 
2521
- &.k-selected {
2522
- color: var(--octo-mint);
2523
- background: var(--octo-mint-10);
2524
- box-shadow: inset 3px 0 0 var(--octo-mint);
2525
- border-left: none;
2574
+ // Pending-work count badge, rendered by the host's item template.
2575
+ .drawer-badge {
2576
+ margin-left: auto;
2577
+ flex-shrink: 0;
2578
+ padding: 1px 8px;
2579
+ border-radius: 10px;
2580
+ font-size: 0.7rem;
2581
+ font-weight: 700;
2582
+ letter-spacing: 0.5px;
2583
+ line-height: 1.4;
2584
+ color: var(--theme-text-accent);
2585
+ background: var(--octo-mint-15);
2586
+ border: 1px solid var(--octo-mint-35);
2526
2587
  }
2527
2588
  }
2589
+ }
2528
2590
 
2529
- .k-drawer-item.k-level-1 {
2530
- font-size: 13px;
2531
- color: color-mix(in srgb, var(--octo-text-color) 75%, transparent);
2532
- padding: 6px 12px 6px 36px;
2533
- }
2591
+ // Mini (collapsed) drawer strip — Kendo marks the CONTAINER with
2592
+ // k-drawer-mini / k-drawer-expanded; the drawer element itself carries no
2593
+ // state, so an `.k-drawer.k-drawer-mini` selector never matches.
2594
+ .k-drawer-container.k-drawer-mini:not(.k-drawer-expanded) {
2595
+ .k-drawer-item {
2596
+ justify-content: center;
2597
+ padding: 10px 0;
2598
+ margin: 2px 0;
2599
+ border-radius: 0;
2600
+ position: relative;
2534
2601
 
2535
- .k-drawer-item.k-level-2 {
2536
- font-size: 12.5px;
2537
- color: color-mix(in srgb, var(--octo-text-color) 60%, transparent);
2538
- padding: 6px 12px 6px 60px;
2539
- --guide-x: 46px;
2540
- --icon-scale: 0.75;
2541
- }
2602
+ .k-icon,
2603
+ .k-svg-icon,
2604
+ kendo-svgicon {
2605
+ margin: 0;
2606
+ }
2542
2607
 
2543
- // Collapsed state (mini mode)
2544
- &[style*="flex-basis: 50px"],
2545
- &[style*="flex-basis:50px"],
2546
- &.k-drawer-mini {
2547
- .k-drawer-item {
2548
- justify-content: center;
2549
- padding: 10px 0;
2550
- margin: 2px 0;
2551
- border-radius: 0;
2608
+ .k-item-text {
2609
+ display: none;
2610
+ }
2611
+
2612
+ &.k-selected {
2613
+ border-left: 3px solid var(--octo-mint);
2614
+ padding-left: 0;
2615
+ }
2616
+
2617
+ // No room for indentation on the strip — nested entries shrink to
2618
+ // smaller, dimmer icons instead; guide line and chevron disappear.
2619
+ &.mm-drawer-level-1:not(.k-drawer-separator),
2620
+ &.mm-drawer-level-2:not(.k-drawer-separator) {
2621
+ padding-left: 0;
2622
+
2623
+ &::before {
2624
+ display: none;
2625
+ }
2626
+ }
2627
+
2628
+ &.mm-drawer-level-1:not(.k-drawer-separator) {
2629
+ min-height: 34px;
2552
2630
 
2553
2631
  .k-icon,
2554
2632
  .k-svg-icon,
2555
2633
  kendo-svgicon {
2556
- margin: 0;
2634
+ width: 18px;
2635
+ height: 18px;
2636
+ min-width: 18px;
2637
+ opacity: 0.8;
2557
2638
  }
2639
+ }
2558
2640
 
2559
- &.k-selected {
2560
- border-left: 3px solid var(--octo-mint);
2561
- padding-left: 0;
2641
+ &.mm-drawer-level-2:not(.k-drawer-separator) {
2642
+ min-height: 30px;
2643
+
2644
+ .k-icon,
2645
+ .k-svg-icon,
2646
+ kendo-svgicon {
2647
+ width: 16px;
2648
+ height: 16px;
2649
+ min-width: 16px;
2650
+ opacity: 0.7;
2562
2651
  }
2563
2652
  }
2564
2653
 
2565
- .k-drawer-item.mm-drawer-level-0:not(.k-selected) {
2566
- color: var(--octo-text-color);
2567
- }
2568
- .k-drawer-item.mm-drawer-level-1:not(.k-selected) {
2569
- color: color-mix(in srgb, var(--octo-text-color) 75%, transparent);
2570
- opacity: 0.85;
2654
+ .drawer-group-chevron {
2655
+ display: none;
2571
2656
  }
2572
- .k-drawer-item.mm-drawer-level-2:not(.k-selected) {
2573
- color: color-mix(in srgb, var(--octo-text-color) 60%, transparent);
2574
- opacity: 0.7;
2657
+
2658
+ // The count badge becomes a small bubble on the icon's corner.
2659
+ .drawer-badge {
2660
+ position: absolute;
2661
+ top: 2px;
2662
+ right: 6px;
2663
+ margin: 0;
2664
+ padding: 0 4px;
2665
+ font-size: 0.6rem;
2666
+ line-height: 1.3;
2667
+ border-radius: 7px;
2668
+ background: var(--theme-bg-app);
2575
2669
  }
2576
2670
  }
2577
2671
  }
@@ -2838,6 +2932,9 @@
2838
2932
  }
2839
2933
 
2840
2934
  kendo-drawer-content {
2935
+ // Kendo pads this by 6px, on top of .octo-body's padding and the page
2936
+ // container's own — three nested paddings indenting the same content.
2937
+ padding: 0;
2841
2938
  display: flex !important;
2842
2939
  flex-direction: column !important;
2843
2940
  flex: 1 1 0% !important;
@@ -3211,17 +3308,25 @@
3211
3308
 
3212
3309
  // LCARS Page Layout Pattern
3213
3310
  // Use for all page-level list components
3311
+ // 80px tall for 29px of text: the height came from a 56px accent bar plus
3312
+ // 12px of padding, not from the content. Compacted to ~37px, which is worth
3313
+ // about one and a half table rows on every list page.
3214
3314
  .lcars-page-header {
3215
3315
  display: flex;
3216
3316
  align-items: center;
3217
- gap: 16px;
3218
- padding: 12px 0;
3317
+ gap: 12px;
3318
+ padding: 4px 0;
3219
3319
  flex-shrink: 0;
3320
+
3321
+ .page-title {
3322
+ align-items: center;
3323
+ }
3220
3324
  }
3221
3325
 
3222
3326
  .lcars-header-accent {
3223
3327
  width: 8px;
3224
- height: 56px;
3328
+ height: 26px;
3329
+ align-self: center;
3225
3330
  background: linear-gradient(180deg, var(--octo-mint), var(--neo-cyan));
3226
3331
  border-radius: 4px 0 0 4px;
3227
3332
  box-shadow: 0 0 15px var(--octo-mint-50);
@@ -4761,5 +4866,6 @@
4761
4866
  display: none !important;
4762
4867
  }
4763
4868
  }
4869
+
4764
4870
  }
4765
4871