2023-11-17 08:45:00 +08:00
|
|
|
<script setup lang="ts">
|
2023-12-14 21:45:29 +08:00
|
|
|
import type { PageTabProps } from '../../types';
|
2023-11-17 08:45:00 +08:00
|
|
|
import ChromeTabBg from './chrome-tab-bg.vue';
|
|
|
|
import style from './index.module.css';
|
|
|
|
|
|
|
|
defineOptions({
|
|
|
|
name: 'ChromeTab'
|
|
|
|
});
|
|
|
|
|
|
|
|
defineProps<PageTabProps>();
|
|
|
|
|
|
|
|
type SlotFn = (props?: Record<string, unknown>) => any;
|
|
|
|
|
|
|
|
type Slots = {
|
|
|
|
/**
|
2023-12-14 21:45:29 +08:00
|
|
|
* Slot
|
|
|
|
*
|
|
|
|
* The center content of the tab
|
2023-11-17 08:45:00 +08:00
|
|
|
*/
|
|
|
|
default?: SlotFn;
|
|
|
|
/**
|
2023-12-14 21:45:29 +08:00
|
|
|
* Slot
|
|
|
|
*
|
|
|
|
* The left content of the tab
|
2023-11-17 08:45:00 +08:00
|
|
|
*/
|
|
|
|
prefix?: SlotFn;
|
|
|
|
/**
|
2023-12-14 21:45:29 +08:00
|
|
|
* Slot
|
|
|
|
*
|
|
|
|
* The right content of the tab
|
2023-11-17 08:45:00 +08:00
|
|
|
*/
|
|
|
|
suffix?: SlotFn;
|
|
|
|
};
|
2024-01-25 23:24:35 +08:00
|
|
|
|
|
|
|
defineSlots<Slots>();
|
2023-11-17 08:45:00 +08:00
|
|
|
</script>
|
|
|
|
|
2023-12-14 21:45:29 +08:00
|
|
|
<template>
|
|
|
|
<div
|
|
|
|
class=":soy: relative inline-flex justify-center items-center gap-16px -mr-18px px-24px py-6px cursor-pointer whitespace-nowrap"
|
|
|
|
:class="[
|
|
|
|
style['chrome-tab'],
|
|
|
|
{ [style['chrome-tab_dark']]: darkMode },
|
|
|
|
{ [style['chrome-tab_active']]: active },
|
|
|
|
{ [style['chrome-tab_active_dark']]: active && darkMode }
|
|
|
|
]"
|
|
|
|
>
|
|
|
|
<div class=":soy: absolute left-0 top-0 -z-1 w-full h-full pointer-events-none" :class="[style['chrome-tab__bg']]">
|
|
|
|
<ChromeTabBg />
|
|
|
|
</div>
|
|
|
|
<slot name="prefix"></slot>
|
|
|
|
<slot></slot>
|
|
|
|
<slot name="suffix"></slot>
|
|
|
|
<div class=":soy: absolute right-7px w-1px h-16px bg-#1f2225" :class="[style['chrome-tab-divider']]"></div>
|
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
|
2023-11-17 08:45:00 +08:00
|
|
|
<style scoped></style>
|