| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 | <script setup lang="ts">import type { SetupContext } from 'vue';import { computed, ref, useSlots } from 'vue';import { VbenTooltip } from '@vben-core/shadcn-ui';import { Code } from 'lucide-vue-next';import {  TabsContent,  TabsIndicator,  TabsList,  TabsRoot,  TabsTrigger,} from 'radix-vue';defineOptions({  inheritAttrs: false,});const props = withDefaults(  defineProps<{    files?: string[];  }>(),  { files: () => [] },);const open = ref(false);const slots: SetupContext['slots'] = useSlots();const tabs = computed(() => {  return props.files.map((file) => {    return {      component: slots[file],      label: file,    };  });});const currentTab = ref('index.vue');const toggleOpen = () => {  open.value = !open.value;};</script><template>  <TabsRoot    v-model="currentTab"    class="bg-background-deep border-border overflow-hidden rounded-b-xl border-t"    @update:model-value="open = true"  >    <div class="border-border bg-background flex border-b-2 pr-2">      <div class="flex w-full items-center justify-between text-[13px]">        <TabsList class="relative flex">          <template v-if="open">            <TabsIndicator              class="absolute bottom-0 left-0 h-[2px] w-[--radix-tabs-indicator-size] translate-x-[--radix-tabs-indicator-position] rounded-full transition-[width,transform] duration-300"            >              <div class="size-full bg-[var(--vp-c-indigo-1)]"></div>            </TabsIndicator>            <TabsTrigger              v-for="(tab, index) in tabs"              :key="index"              :value="tab.label"              class="border-box text-foreground px-4 py-3 data-[state=active]:text-[var(--vp-c-indigo-1)]"              tabindex="-1"            >              {{ tab.label }}            </TabsTrigger>          </template>        </TabsList>        <div          :class="{            'py-2': !open,          }"          class="flex items-center"        >          <VbenTooltip side="top">            <template #trigger>              <Code                class="hover:bg-accent size-7 cursor-pointer rounded-full p-1.5"                @click="toggleOpen"              />            </template>            {{ open ? 'Collapse code' : 'Expand code' }}          </VbenTooltip>        </div>      </div>    </div>    <div      :class="`${open ? 'h-[unset] max-h-[80vh]' : 'h-0'}`"      class="block overflow-y-scroll bg-[var(--vp-code-block-bg)] transition-all duration-300"    >      <TabsContent        v-for="tab in tabs"        :key="tab.label"        :value="tab.label"        as-child        class="rounded-xl"      >        <div class="text-foreground relative rounded-xl">          <component :is="tab.component" class="border-0" />        </div>      </TabsContent>    </div>  </TabsRoot></template>
 |