<script setup lang="ts"> import type { MenuItemType, SubMenuType } from "ant-design-vue/es/menu/src/interface"; import { ItemType, theme } from "ant-design-vue"; import Icon from "../icon.vue"; import { ISidebarItem } from "@models/sidebarEntry"; import { NuxtLink } from "#components"; const { useToken } = theme; const { token } = useToken(); const selState = ref<string>(""); const { data: injecto } = await useApiFetch<ISidebarItem[]>("/sidebar"); let custItems = computed(() => (injecto.value || ([] as ISidebarItem[])).sort((a, b) => a.index - b.index)); /*let items = ref<ItemType[]>([ { key: "important", label: h("span", { class: "smallcaps" }, ["Pinned"]), icon: h(Icon, { istyle: "regular", name: "thumbtack", size: 19, }), children: [ { key: "/submission-rules", label: h( "b", { style: { color: token.value.colorInfo, }, }, ["SUBMISSION RULES"], ), icon: h(Icon, { istyle: "regular", name: "memo", size: 15, }), } as MenuItemType, { key: "/terms", label: "Terms of Service", icon: h(Icon, { istyle: "regular", name: "globe", size: 15, }), } as MenuItemType, ], } as SubMenuType, { key: "fun-features", label: h("span", { class: "smallcaps" }, ["Fun features"]), icon: h(Icon, { istyle: "regular", name: "sparkles", size: 19, }), children: custItems.value.map((b) => ({ key: b.url, label: h( "span", { "data-color": b.color, class: "custom-side-item", }, [h(NuxtLink, { to: b.url }, [b.linkTitle])], ), })), } as SubMenuType, ]);*/ </script> <template> <!-- <client-only>--> <a-menu id="sidebar-menu" mode="inline" @select=" ({ item, key, selectedKeys }) => { if ((key as string).startsWith('/')) { selState = key as string; navigateTo(key as string); } } " :trigger-sub-menu-action="'click'" v-model:active-key="selState" :inline-indent="16" > <a-sub-menu key="important"> <template #icon> <icon istyle="regular" name="thumbtack" :size="19" /> </template> <template #title> <span class="smallcaps">Pinned</span> </template> <a-menu-item key="/submission-rules"> <template #icon> <icon istyle="regular" name="memo" :size="15" /> </template> <b :style="{ color: token.colorInfo }">SUBMISSION RULES</b> </a-menu-item> <a-menu-item key="/terms"> <template #icon> <icon istyle="regular" name="globe" :size="15" /> </template> <b>Terms of Service</b> </a-menu-item> </a-sub-menu> <a-sub-menu key="fun-features"> <template #icon> <Icon name="sparkles" istyle="regular" :size="19" /> </template> <template #title> <div class="smallcaps">fun features</div> </template> <a-menu-item v-for="item in custItems" :key="item.url"> <span :style="{ color: item.color }"> <nuxt-link :to="item.url">{{ item.linkTitle }}</nuxt-link> </span> </a-menu-item> </a-sub-menu> </a-menu> <!-- </client-only>--> </template> <style> .smallcaps { font-variant: small-caps; } #sidebar-menu ul { height: 100%; } </style>