@hyzyn/dsh-docker 0.13.6 → 0.14.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.
@@ -907,6 +907,15 @@
907
907
  .dk_badge[data-state="unhealthy"] { color: var(--dk-danger); }
908
908
  .dk_badge[data-state="created"] { color: var(--dk-label-2); }
909
909
  .dk_badge[data-state="unknown"] { color: var(--dk-label-3); }
910
+ /*
911
+ * 诊断的严重度四档:**同一个类的 data-state 变体**,配色全部取既有令牌
912
+ * (danger / warn / accent / success)——不新造颜色、不新造徽标类。
913
+ * 与上面容器状态那几档同形,并排放也不是两种视觉语言。
914
+ */
915
+ .dk_badge[data-state="critical"] { color: var(--dk-danger); border-color: color-mix(in srgb, var(--dk-danger) 36%, transparent); background: color-mix(in srgb, var(--dk-danger) 10%, transparent); }
916
+ .dk_badge[data-state="warning"] { color: var(--dk-warn); border-color: color-mix(in srgb, var(--dk-warn) 36%, transparent); background: color-mix(in srgb, var(--dk-warn) 10%, transparent); }
917
+ .dk_badge[data-state="info"] { color: var(--dk-accent); border-color: color-mix(in srgb, var(--dk-accent) 36%, transparent); background: color-mix(in srgb, var(--dk-accent) 10%, transparent); }
918
+ .dk_badge[data-state="ok"] { color: var(--dk-success); border-color: color-mix(in srgb, var(--dk-success) 36%, transparent); background: color-mix(in srgb, var(--dk-success) 10%, transparent); }
910
919
 
911
920
  .dk_tag {
912
921
  display: inline-flex;
@@ -2520,3 +2529,471 @@
2520
2529
 
2521
2530
  /* 聚合日志的 [service] 前缀(同一份日志着色,只多一个来源标签) */
2522
2531
  .dk_logSvc { margin-right: 6px; color: var(--dk-accent); font-weight: 500; }
2532
+
2533
+ /* ============================ 诊断页签 ============================ */
2534
+
2535
+ /*
2536
+ * 诊断页是**只读观察面**:一张结论卡 + 三段数据(发现 / 建议 / 折叠的原始证据)。
2537
+ * 所有颜色经 --dk-* 令牌层取宿主主题;圆角走六档;中性边框一律 0.5px 发丝线
2538
+ * (规范原文见 docs/conventions.md § 客户端半体 ⑥ 的检查七 ~ 十六)。
2539
+ */
2540
+
2541
+ .dk_diagView {
2542
+ display: flex;
2543
+ flex-direction: column;
2544
+ gap: var(--dk-gap-md);
2545
+ min-width: 0;
2546
+ }
2547
+
2548
+ .dk_diagVerdict {
2549
+ display: flex;
2550
+ flex-direction: column;
2551
+ gap: var(--dk-gap-sm);
2552
+ padding: var(--dk-gap-lg);
2553
+ border: 0.5px solid var(--dk-border);
2554
+ border-radius: var(--dk-r-md);
2555
+ background: var(--dk-surface-2);
2556
+ }
2557
+
2558
+ .dk_diagVerdictHead {
2559
+ display: flex;
2560
+ align-items: center;
2561
+ gap: var(--dk-gap-sm);
2562
+ min-width: 0;
2563
+ }
2564
+
2565
+ /* 容器名 · 目标 · 采集时间:等宽 + 省略号(长主机名不该把结论行挤变形) */
2566
+ .dk_diagMeta {
2567
+ font-family: var(--dk-mono);
2568
+ font-size: 12px;
2569
+ line-height: 18px;
2570
+ color: var(--dk-label-3);
2571
+ overflow: hidden;
2572
+ text-overflow: ellipsis;
2573
+ white-space: nowrap;
2574
+ }
2575
+
2576
+ .dk_diagSummary {
2577
+ font-size: 13px;
2578
+ line-height: 20px;
2579
+ font-weight: 500;
2580
+ color: var(--dk-label);
2581
+ }
2582
+
2583
+ .dk_diagSection {
2584
+ display: flex;
2585
+ flex-direction: column;
2586
+ gap: var(--dk-gap-sm);
2587
+ min-width: 0;
2588
+ }
2589
+
2590
+ .dk_diagSectionTitle {
2591
+ font-size: 12px;
2592
+ line-height: 18px;
2593
+ font-weight: 500;
2594
+ letter-spacing: .3px;
2595
+ color: var(--dk-label-3);
2596
+ }
2597
+
2598
+ .dk_diagFindings {
2599
+ display: flex;
2600
+ flex-direction: column;
2601
+ gap: var(--dk-gap-sm);
2602
+ min-width: 0;
2603
+ }
2604
+
2605
+ .dk_diagFinding {
2606
+ display: flex;
2607
+ align-items: flex-start;
2608
+ gap: var(--dk-gap-sm);
2609
+ min-width: 0;
2610
+ padding: var(--dk-gap-sm) var(--dk-gap-md);
2611
+ border: 0.5px solid var(--dk-border);
2612
+ border-radius: var(--dk-r-sm);
2613
+ background: var(--dk-surface-2);
2614
+ }
2615
+
2616
+ .dk_diagFindingBody { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
2617
+ .dk_diagFindingTitle { font-size: 13px; line-height: 20px; font-weight: 500; color: var(--dk-label); }
2618
+ .dk_diagFindingDetail { font-size: 12px; line-height: 18px; color: var(--dk-label-2); }
2619
+
2620
+ /* 建议是**有序**列表:宿主给的是「先做什么」,序号本身带信息 */
2621
+ .dk_diagList {
2622
+ display: flex;
2623
+ flex-direction: column;
2624
+ gap: var(--dk-gap-xs);
2625
+ margin: 0;
2626
+ padding-left: 18px;
2627
+ font-size: 13px;
2628
+ line-height: 20px;
2629
+ color: var(--dk-label-2);
2630
+ }
2631
+
2632
+ /* 折叠块:原生 <details>,键盘可达由浏览器负责(不自己实现展开状态机) */
2633
+ .dk_diagFolded {
2634
+ min-width: 0;
2635
+ border: 0.5px solid var(--dk-border);
2636
+ border-radius: var(--dk-r-sm);
2637
+ background: var(--dk-surface-2);
2638
+ }
2639
+
2640
+ .dk_diagFoldedHead {
2641
+ padding: var(--dk-gap-sm) var(--dk-gap-md);
2642
+ font-size: 12px;
2643
+ line-height: 18px;
2644
+ font-weight: 500;
2645
+ color: var(--dk-label-3);
2646
+ cursor: pointer;
2647
+ }
2648
+
2649
+ .dk_diagFoldedHead:focus-visible { outline: none; box-shadow: var(--dk-ring); }
2650
+
2651
+ .dk_diagFoldedBody {
2652
+ display: flex;
2653
+ flex-direction: column;
2654
+ gap: var(--dk-gap-sm);
2655
+ min-width: 0;
2656
+ padding: 0 var(--dk-gap-md) var(--dk-gap-md);
2657
+ }
2658
+
2659
+ .dk_diagTimeline { display: flex; flex-direction: column; gap: var(--dk-gap-xs); }
2660
+
2661
+ .dk_diagEvent {
2662
+ display: flex;
2663
+ align-items: baseline;
2664
+ gap: var(--dk-gap-sm);
2665
+ min-width: 0;
2666
+ font-size: 12px;
2667
+ line-height: 18px;
2668
+ }
2669
+
2670
+ .dk_diagAt { flex: none; font-family: var(--dk-mono); color: var(--dk-label-3); }
2671
+ .dk_diagEventText { min-width: 0; color: var(--dk-label-2); }
2672
+
2673
+ /* 日志尾部:同日志正文的深色块,但自己滚(它嵌在折叠块里,不能把整页撑长) */
2674
+ .dk_diagLogTail { max-height: 320px; overflow: auto; }
2675
+
2676
+ .dk_diagActions {
2677
+ display: flex;
2678
+ align-items: center;
2679
+ gap: var(--dk-gap-sm);
2680
+ flex-wrap: wrap;
2681
+ }
2682
+
2683
+ /*
2684
+ * 诊断历史(批三):色带 + 趋势句 + 数字变化 + 判据增减。
2685
+ *
2686
+ * 整块是**一张卡**(与结论卡同材质:surface-2 + 0.5px 发丝线 + r-md)。`data-aggravating`
2687
+ * 只换边框与底色(warning 档 36% / 8% 的 color-mix),**不新造颜色**——与 .dk_badge 的
2688
+ * warning 变体同一配方,读屏与并排观感都一致。
2689
+ */
2690
+ .dk_diagHistory {
2691
+ display: flex;
2692
+ flex-direction: column;
2693
+ gap: var(--dk-gap-sm);
2694
+ padding: var(--dk-gap-lg);
2695
+ border: 0.5px solid var(--dk-border);
2696
+ border-radius: var(--dk-r-md);
2697
+ background: var(--dk-surface-2);
2698
+ min-width: 0;
2699
+ }
2700
+
2701
+ .dk_diagHistory[data-aggravating="1"] {
2702
+ border-color: color-mix(in srgb, var(--dk-warn) 36%, transparent);
2703
+ background: color-mix(in srgb, var(--dk-warn) 8%, var(--dk-surface-2));
2704
+ }
2705
+
2706
+ /* 色带:一格一次诊断。方块只表达轻重缓急,结论 code 与时间在 title 里。 */
2707
+ .dk_diagBand {
2708
+ display: flex;
2709
+ align-items: center;
2710
+ gap: var(--dk-gap-xs);
2711
+ flex-wrap: wrap;
2712
+ }
2713
+
2714
+ .dk_diagBandCell {
2715
+ width: 14px;
2716
+ height: 14px;
2717
+ border-radius: var(--dk-r-xs);
2718
+ background: color-mix(in srgb, var(--dk-label-3) 24%, transparent);
2719
+ }
2720
+
2721
+ .dk_diagBandCell[data-severity="critical"] { background: color-mix(in srgb, var(--dk-danger) 72%, transparent); }
2722
+ .dk_diagBandCell[data-severity="warning"] { background: color-mix(in srgb, var(--dk-warn) 68%, transparent); }
2723
+ .dk_diagBandCell[data-severity="info"] { background: color-mix(in srgb, var(--dk-accent) 48%, transparent); }
2724
+ .dk_diagBandCell[data-severity="ok"] { background: color-mix(in srgb, var(--dk-success) 52%, transparent); }
2725
+
2726
+ .dk_diagTrendRow {
2727
+ display: flex;
2728
+ align-items: center;
2729
+ gap: var(--dk-gap-sm);
2730
+ min-width: 0;
2731
+ }
2732
+
2733
+ .dk_diagTrendText {
2734
+ font-size: 13px;
2735
+ line-height: 20px;
2736
+ font-weight: 500;
2737
+ color: var(--dk-label);
2738
+ min-width: 0;
2739
+ }
2740
+
2741
+ /* 数字变化:标签说人话、值等宽、箭头压暗、增量带符号(正数走 warning,负数保持中性)。 */
2742
+ .dk_diagNums {
2743
+ display: flex;
2744
+ flex-direction: column;
2745
+ gap: 2px;
2746
+ }
2747
+
2748
+ .dk_diagNumRow {
2749
+ display: flex;
2750
+ align-items: center;
2751
+ gap: var(--dk-gap-sm);
2752
+ min-width: 0;
2753
+ }
2754
+
2755
+ .dk_diagNumLabel {
2756
+ flex: none;
2757
+ min-width: 64px;
2758
+ font-size: 12px;
2759
+ line-height: 18px;
2760
+ color: var(--dk-label-3);
2761
+ }
2762
+
2763
+ .dk_diagNumValue {
2764
+ font-family: var(--dk-mono);
2765
+ font-size: 12px;
2766
+ line-height: 18px;
2767
+ color: var(--dk-label);
2768
+ }
2769
+
2770
+ .dk_diagNumArrow {
2771
+ font-size: 12px;
2772
+ line-height: 18px;
2773
+ color: var(--dk-label-3);
2774
+ }
2775
+
2776
+ .dk_diagNumDelta {
2777
+ font-family: var(--dk-mono);
2778
+ font-size: 12px;
2779
+ line-height: 18px;
2780
+ color: var(--dk-label-3);
2781
+ }
2782
+
2783
+ .dk_diagNumDelta[data-trend="up"] { color: var(--dk-warn); }
2784
+
2785
+ /* 判据增减:徽标 + 若干 code 标签,一行一类。 */
2786
+ .dk_diagChipRow {
2787
+ display: flex;
2788
+ align-items: center;
2789
+ gap: var(--dk-gap-xs);
2790
+ flex-wrap: wrap;
2791
+ min-width: 0;
2792
+ }
2793
+
2794
+ .dk_diagHistoryNote {
2795
+ font-size: 11px;
2796
+ line-height: 16px;
2797
+ color: var(--dk-label-3);
2798
+ }
2799
+
2800
+ /* 趋势行右侧那句「本次与上次一致」:只在被去重时出现,不换行、不抢主轴(占位交给 headerSpacer)。 */
2801
+ .dk_diagDeduped {
2802
+ flex: none;
2803
+ white-space: nowrap;
2804
+ }
2805
+
2806
+ /* ============================ 进程页签 ============================ */
2807
+
2808
+ .dk_procView {
2809
+ display: flex;
2810
+ flex-direction: column;
2811
+ gap: var(--dk-gap-sm);
2812
+ flex: 1 1 auto;
2813
+ min-height: 0;
2814
+ }
2815
+
2816
+ .dk_procBar { display: flex; align-items: center; gap: var(--dk-gap-sm); flex-wrap: wrap; }
2817
+
2818
+ /*
2819
+ * COMMAND 这一列可以很长:外侧横向滚动,单元格内用省略号 + `title` 全文
2820
+ * (契约 §4:允许横向滚动或省略号 + title)。表头吸顶,长进程表滚到底也认得出列。
2821
+ */
2822
+ .dk_procWrap {
2823
+ flex: 1 1 auto;
2824
+ min-height: 0;
2825
+ border: 0.5px solid var(--dk-border);
2826
+ border-radius: var(--dk-r-sm);
2827
+ }
2828
+
2829
+ .dk_procTable {
2830
+ width: 100%;
2831
+ border-collapse: collapse;
2832
+ font-size: 12px;
2833
+ line-height: 18px;
2834
+ }
2835
+
2836
+ .dk_procTable th,
2837
+ .dk_procTable td {
2838
+ padding: var(--dk-gap-sm) var(--dk-gap-md);
2839
+ border-bottom: 0.5px solid var(--dk-border);
2840
+ text-align: left;
2841
+ white-space: nowrap;
2842
+ }
2843
+
2844
+ .dk_procTable th {
2845
+ position: sticky;
2846
+ top: 0;
2847
+ z-index: 1;
2848
+ background: var(--dk-surface);
2849
+ color: var(--dk-label-3);
2850
+ font-weight: 500;
2851
+ }
2852
+
2853
+ .dk_procTable tbody tr:last-child td { border-bottom: none; }
2854
+
2855
+ .dk_procNum { font-family: var(--dk-mono); text-align: right; }
2856
+ .dk_procMono { font-family: var(--dk-mono); color: var(--dk-label-2); }
2857
+ .dk_procCmd {
2858
+ max-width: 420px;
2859
+ overflow: hidden;
2860
+ text-overflow: ellipsis;
2861
+ font-family: var(--dk-mono);
2862
+ color: var(--dk-label);
2863
+ }
2864
+
2865
+ /* ============================ 磁盘占用(存储治理) ============================ */
2866
+
2867
+ /*
2868
+ * 四张汇总卡 + 「合计可回收」条 + 两张明细表。整个视图放在 .dk_mainImages 里
2869
+ * (那一层自带 overflow:auto),所以这里只负责纵向排布与卡片材质,不自己再滚一次:
2870
+ * 多段内容各滚各的,滚轮一会儿滚卡片一会儿滚表,读起来像两张页面。
2871
+ */
2872
+
2873
+ .dk_diskView {
2874
+ display: flex;
2875
+ flex-direction: column;
2876
+ gap: var(--dk-gap-lg);
2877
+ min-width: 0;
2878
+ }
2879
+
2880
+ .dk_diskCards {
2881
+ display: grid;
2882
+ grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));
2883
+ gap: var(--dk-gap-md);
2884
+ }
2885
+
2886
+ .dk_diskCard {
2887
+ display: flex;
2888
+ flex-direction: column;
2889
+ gap: var(--dk-gap-sm);
2890
+ min-width: 0;
2891
+ padding: var(--dk-gap-md) var(--dk-gap-lg);
2892
+ border: 0.5px solid var(--dk-border);
2893
+ border-radius: var(--dk-r-md);
2894
+ background: var(--dk-surface-2);
2895
+ }
2896
+
2897
+ .dk_diskCardName {
2898
+ font-size: 13px;
2899
+ line-height: 20px;
2900
+ font-weight: 500;
2901
+ color: var(--dk-label);
2902
+ overflow: hidden;
2903
+ text-overflow: ellipsis;
2904
+ white-space: nowrap;
2905
+ }
2906
+
2907
+ .dk_diskCardRows {
2908
+ display: grid;
2909
+ grid-template-columns: auto minmax(0, 1fr);
2910
+ gap: var(--dk-gap-xs) var(--dk-gap-md);
2911
+ font-size: 12px;
2912
+ line-height: 18px;
2913
+ }
2914
+
2915
+ .dk_diskCardKey { color: var(--dk-label-3); white-space: nowrap; }
2916
+ .dk_diskCardVal {
2917
+ font-family: var(--dk-mono);
2918
+ color: var(--dk-label-2);
2919
+ text-align: right;
2920
+ overflow: hidden;
2921
+ text-overflow: ellipsis;
2922
+ white-space: nowrap;
2923
+ }
2924
+
2925
+ /* 「合计可回收」条:一眼看到这台机器还能收回多少,所以数字比标签重 */
2926
+ .dk_diskTotal {
2927
+ display: flex;
2928
+ align-items: baseline;
2929
+ gap: var(--dk-gap-md);
2930
+ padding: var(--dk-gap-sm) var(--dk-gap-lg);
2931
+ border: 0.5px solid var(--dk-border);
2932
+ border-radius: var(--dk-r-md);
2933
+ background: var(--dk-surface-2);
2934
+ }
2935
+
2936
+ .dk_diskTotalLabel { font-size: 12px; line-height: 18px; color: var(--dk-label-3); }
2937
+ .dk_diskTotalValue {
2938
+ font-family: var(--dk-mono);
2939
+ font-size: 14px;
2940
+ line-height: 20px;
2941
+ font-weight: 500;
2942
+ color: var(--dk-label);
2943
+ }
2944
+
2945
+ .dk_diskSection {
2946
+ display: flex;
2947
+ flex-direction: column;
2948
+ gap: var(--dk-gap-sm);
2949
+ min-width: 0;
2950
+ }
2951
+
2952
+ /* ============================ 等价 docker run(只读推导) ============================ */
2953
+
2954
+ /*
2955
+ * 概览底部的折叠区:默认收起,**展开时才请求**(见 ContainerView 的 onRecreateToggle)。
2956
+ * 材质与诊断页的折叠块同一套:0.5px 发丝线 + surface-2,不叠投影(检查八不许配对)。
2957
+ */
2958
+ .dk_runCmd {
2959
+ margin-top: var(--dk-gap-xl);
2960
+ border: 0.5px solid var(--dk-border);
2961
+ border-radius: var(--dk-r-sm);
2962
+ background: var(--dk-surface-2);
2963
+ min-width: 0;
2964
+ }
2965
+
2966
+ .dk_runCmdHead {
2967
+ padding: var(--dk-gap-sm) var(--dk-gap-md);
2968
+ font-size: 12px;
2969
+ line-height: 18px;
2970
+ font-weight: 500;
2971
+ color: var(--dk-label-3);
2972
+ cursor: pointer;
2973
+ }
2974
+
2975
+ .dk_runCmdHead:focus-visible { outline: none; box-shadow: var(--dk-ring); }
2976
+
2977
+ .dk_runCmdBody {
2978
+ display: flex;
2979
+ flex-direction: column;
2980
+ gap: var(--dk-gap-sm);
2981
+ padding: 0 var(--dk-gap-md) var(--dk-gap-md);
2982
+ min-width: 0;
2983
+ }
2984
+
2985
+ /* 命令本体:等宽深色块(与日志正文同一套观感),自己滚,别把概览撑成一条长条 */
2986
+ .dk_runCmdBox { max-height: 360px; overflow: auto; }
2987
+
2988
+ .dk_runCmdNotes { display: flex; flex-direction: column; gap: var(--dk-gap-xs); min-width: 0; }
2989
+
2990
+ .dk_runCmdList {
2991
+ display: flex;
2992
+ flex-direction: column;
2993
+ gap: var(--dk-gap-xs);
2994
+ margin: 0;
2995
+ padding-left: 18px;
2996
+ font-size: 12px;
2997
+ line-height: 18px;
2998
+ color: var(--dk-label-2);
2999
+ }