<script setup lang="ts"> import type { MenuItemType, SubMenuType, } from "ant-design-vue/es/menu/src/interface"; import { ItemType, theme } from "ant-design-vue"; import sidebarIcon from "./sidebarIconified.vue"; import Icon from "../icon.vue"; import { ISidebarItem } from "~/models/sidebarEntry"; import { NuxtLink } from "#components"; const loaded = inject<Ref<boolean>>("loaded"); const { useToken } = theme; const { token } = useToken(); const selState = ref<string>(""); const { data: injecto } = await useApiFetch<ISidebarItem[]>("/sidebar"); let items: Ref<ItemType[]> = ref([ { 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, }, class: "smallcaps", }, ["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: (injecto.value || ([] as ISidebarItem[])) .sort((a, b) => a.index - b.index) .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, ]); // console.log("wtf", items) </script> <template> <client-only> <a-menu mode="inline" @select=" ({ item, key, selectedKeys }) => { if ((key as string).startsWith('/')) { navigateTo(key as string); } } " :style="{ flexGrow: 0.8, }" :trigger-sub-menu-action="'click'" v-model:active-key="selState" :items="items" :inline-indent="16" > <!-- <a-sub-menu> <template #title> <sidebar-icon> <template #icon> <Icon name="sparkles" istyle="regular" :size="19"/> </template> <template #rest> <div class="smallcaps"> fun features </div> </template> </sidebar-icon> </template> <a-menu-item> <sidebar-icon> <template #icon> <icon name="memo" :icolor="token.colorInfo" istyle="regular" :size="13"/> </template> <template #rest> <nuxt-link to="/submission-rules"> <b :style="{ color: token.colorInfo }"> submission rules </b> </nuxt-link> </template> </sidebar-icon> </a-menu-item> </a-sub-menu> --> </a-menu> </client-only> </template> <style> .smallcaps { font-variant: small-caps; } </style>