77import type NcAppSidebarTab from ' ../NcAppSidebarTab/NcAppSidebarTab.vue'
88
99import NcVNodes from ' ../NcVNodes/NcVNodes.vue'
10+ import { isLegacy34 } from ' ../../utils/legacy.ts'
1011
1112const selected = defineModel <boolean >(' selected' , { required: true })
1213
@@ -23,13 +24,14 @@ defineProps<{
2324 class =" button-vue"
2425 :class =" [$style.sidebarTabsButton, {
2526 [$style.sidebarTabsButton_selected]: selected,
27+ [$style.sidebarTabsButton_legacy]: isLegacy34,
2628 }]"
2729 role =" tab"
2830 :aria-selected =" selected"
2931 :tabindex =" selected ? 0 : -1"
3032 @click =" selected = true" >
3133 <span :class =" $style.sidebarTabsButton__icon" >
32- <NcVNodes :vnodes =" tab.renderIcon()" >
34+ <NcVNodes :vnodes =" tab.renderIcon(selected )" >
3335 <span :class =" [$style.sidebarTabsButton__legacyIcon, tab.icon]" />
3436 </NcVNodes >
3537 </span >
@@ -42,20 +44,62 @@ defineProps<{
4244<style module lang="scss">
4345.sidebarTabsButton {
4446 border : none ;
45- border-bottom : var (--default-grid-baseline ) solid transparent !important ;
46- border-radius : var (--border-radius-small );
47- background-color : var (--color-main-background );
4847 color : var (--color-main-text );
4948 font-size : var (--default-font-size );
5049 cursor : pointer ;
5150 display : flex ;
5251 flex-direction : column ;
5352 gap : var (--default-grid-baseline );
53+ min-width : var (--default-clickable-area );
54+
55+ * {
56+ cursor : pointer ;
57+ }
58+ }
59+
60+ // New design (NC34+): rounded pill with a small primary indicator under the
61+ // active tab.
62+ .sidebarTabsButton :not (.sidebarTabsButton_legacy ) {
63+ position : relative ;
64+ border-radius : var (--border-radius-element );
65+ background-color : var (--color-main-background );
66+ padding : var (--default-grid-baseline );
67+ padding-block-end : calc (var (--default-grid-baseline ) * 2 );
68+ transition : background-color var (--animation-quick );
69+
70+ & ::after {
71+ content : ' ' ;
72+ position : absolute ;
73+ bottom : 0 ;
74+ left : 50% ;
75+ width : 0 ;
76+ height : 6px ;
77+ border-radius : 999px ;
78+ background-color : var (--color-primary-element );
79+ opacity : 0 ;
80+ transform : translateX (-50% );
81+ transition : width var (--animation-quick ), opacity var (--animation-quick );
82+ }
83+
84+ & :hover {
85+ background-color : var (--color-background-hover );
86+ }
87+
88+ & :focus-visible {
89+ outline : 2px solid var (--color-main-text );
90+ outline-offset : 2px ;
91+ }
92+ }
93+
94+ // Legacy design (NC < 34): full-width primary border under the active tab.
95+ .sidebarTabsButton_legacy {
96+ border-bottom : var (--default-grid-baseline ) solid transparent !important ;
97+ border-radius : var (--border-radius-small );
98+ background-color : var (--color-main-background );
5499 padding : var (--border-radius-small );
55100 transition :
56101 background-color var (--animation-quick ),
57102 border-bottom-color var (--animation-quick );
58- min-width : var (--default-clickable-area );
59103
60104 & :hover {
61105 background-color : var (--color-background-hover ) !important ;
@@ -65,36 +109,48 @@ defineProps<{
65109 & :focus {
66110 background-color : var (--color-main-background ) !important ;
67111 }
112+ }
113+
114+ .sidebarTabsButton_selected {
115+ cursor : default ;
68116
69117 * {
70- cursor : pointer ;
118+ cursor : default ;
71119 }
72120}
73121
74- .sidebarTabsButton_selected {
122+ .sidebarTabsButton :not (.sidebarTabsButton_legacy ).sidebarTabsButton_selected {
123+ background-color : var (--color-background-hover );
124+
125+ & ::after {
126+ width : 80% ;
127+ opacity : 1 ;
128+ }
129+
130+ & :hover {
131+ background-color : var (--color-background-dark );
132+ }
133+ }
134+
135+ .sidebarTabsButton_legacy.sidebarTabsButton_selected {
75136 border-bottom-color : var (--color-primary-element ) !important ;
76- border-bottom-left-radius : 0px ;
77- border-bottom-right-radius : 0px ;
78- cursor : default ;
137+ border-bottom-left-radius : 0 ;
138+ border-bottom-right-radius : 0 ;
79139
80140 & :hover {
81141 background-color : var (--color-primary-element-light-hover ) !important ;
82142 color : var (--color-primary-element-light-text ) !important ;
83143 }
84-
85- * {
86- cursor : default ;
87- }
88144}
89145
90146.sidebarTabsButton__name {
91- font-weight : normal ;
147+ font-weight : 500 ;
92148 overflow : hidden ;
93149 text-overflow : ellipsis ;
94150 text-wrap : nowrap ;
95151}
96152
97- .sidebarTabsButton_selected .sidebarTabsButton__name {
153+ .sidebarTabsButton_legacy. sidebarTabsButton_selected .sidebarTabsButton__name {
98154 font-weight : bold ;
99155}
100156
0 commit comments