@@ -92,43 +92,65 @@ const scrollRight = () => scroll(50);
9292 :key =" option.value"
9393 :class =" { [$style.alignRight]: option.align === 'right' }"
9494 >
95- <N8nTooltip :disabled =" !option.tooltip" placement =" bottom" >
95+ <N8nTooltip :disabled =" !option.tooltip" placement =" bottom" :show-after = " 100 " >
9696 <template #content >
9797 <div v-n8n-html =" option.tooltip" @click =" handleTooltipClick(option.value, $event)" />
9898 </template >
9999 <a
100100 v-if =" option.href"
101101 target =" _blank"
102102 :href =" option.href"
103- :class =" [$style.link, $style.tab]"
103+ rel =" noopener noreferrer"
104+ :class =" [$style.link, $style.tab, option.label ? '' : $style.noText]"
104105 @click =" () => handleTabClick(option.value)"
105106 >
106107 <div >
107108 {{ option.label }}
108- <span :class =" $style.external" >
109- <N8nIcon icon =" external-link" size =" small" />
110- </span >
109+ <N8nIcon
110+ :class =" $style.external"
111+ :icon =" option.icon ?? 'external-link'"
112+ size =" small"
113+ />
111114 </div >
112115 </a >
113116 <RouterLink
114117 v-else-if =" option.to"
115118 :to =" option.to"
116- :class =" [$style.tab, { [$style.activeTab]: modelValue === option.value }]"
119+ :class =" [
120+ $style.tab,
121+ { [$style.activeTab]: modelValue === option.value, [$style.noText]: !option.label },
122+ ]"
117123 >
118124 <N8nIcon v-if =" option.icon" :icon =" option.icon" size =" medium" />
119125 <span v-if =" option.label" >{{ option.label }}</span >
120126 </RouterLink >
121127 <div
122128 v-else
123- :class =" { [$style.tab]: true, [$style.activeTab]: modelValue === option.value }"
129+ :class =" {
130+ [$style.tab]: true,
131+ [$style.activeTab]: modelValue === option.value,
132+ [$style.noText]: !option.label,
133+ [$style.dangerTab]: option.variant === 'danger',
134+ }"
124135 :data-test-id =" `tab-${option.value}`"
125136 @click =" () => handleTabClick(option.value)"
126137 >
127- <N8nIcon v-if =" option.icon" :icon =" option.icon" size =" small" />
128- <span v-if =" option.label" :class =" $style.notificationContainer"
129- >{{ option.label }}
130- <div v-if =" option.notification" :class =" $style.notification" ><div ></div ></div
131- ></span >
138+ <N8nIcon
139+ v-if =" option.icon && option.iconPosition !== 'right'"
140+ :icon =" option.icon"
141+ :class =" $style.icon"
142+ size =" small"
143+ />
144+ <span v-if =" option.label" :class =" $style.notificationContainer" >
145+ {{ option.label }}
146+ <div v-if =" option.notification" :class =" $style.notification" />
147+ </span >
148+ <N8nIcon
149+ v-if =" option.icon && option.iconPosition === 'right'"
150+ :icon =" option.icon"
151+ :class =" $style.icon"
152+ size =" small"
153+ />
132154 </div >
133155 </N8nTooltip >
134156 </div >
@@ -170,7 +192,9 @@ const scrollRight = () => scroll(50);
170192
171193.tab {
172194 --active-tab-border-width : 2px ;
173- display : block ;
195+ display : flex ;
196+ align-items : center ;
197+ gap : var (--spacing-4xs );
174198 padding : 0 var (--spacing-s );
175199 padding-bottom : calc (var (--spacing-2xs ) + var (--active-tab-border-width ));
176200 font-size : var (--font-size-s );
@@ -223,6 +247,23 @@ const scrollRight = () => scroll(50);
223247.external {
224248 display : inline-block ;
225249 margin-left : var (--spacing-5xs );
250+
251+ .noText & {
252+ display : block ;
253+ margin-left : 0 ;
254+ }
255+ }
256+
257+ .noText .icon {
258+ display : block ;
259+ }
260+
261+ .dangerTab {
262+ color : var (--color-danger );
263+
264+ & :hover {
265+ color : var (--color-danger );
266+ }
226267}
227268
228269.button {
@@ -248,7 +289,9 @@ const scrollRight = () => scroll(50);
248289 align-items : center ;
249290 justify-content : center ;
250291
251- div {
292+ & :after {
293+ content : ' ' ;
294+ display : block ;
252295 height : 0.3em ;
253296 width : 0.3em ;
254297 background-color : var (--color-primary );
0 commit comments