baai-components 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { Ref } from 'vue';
|
|
2
2
|
import type { LocaleTypeEnum } from '../constants/locale';
|
|
3
3
|
import { type NavMenuItem, type NavChildItem } from '../config/menus';
|
|
4
|
-
|
|
4
|
+
import { NavigationFailure } from 'vue-router';
|
|
5
|
+
export declare function useHeaderMenu(currentLocale: Ref<LocaleTypeEnum>, push: (path: any) => Promise<NavigationFailure | void | undefined>,
|
|
5
6
|
/** String shown when user clicks an unavailable item (e.g. t('projects.unopentip')) */
|
|
6
7
|
unopenTip: Ref<string> | string): {
|
|
7
8
|
menuList: Ref<{
|
|
@@ -51,6 +52,6 @@ unopenTip: Ref<string> | string): {
|
|
|
51
52
|
}[];
|
|
52
53
|
}[] | undefined;
|
|
53
54
|
}[]>;
|
|
54
|
-
syncActiveMenu: () => void;
|
|
55
|
-
handleJumpPage: (menu: NavMenuItem, childMenu?: NavChildItem) =>
|
|
55
|
+
syncActiveMenu: (route: any) => void;
|
|
56
|
+
handleJumpPage: (menu: NavMenuItem, childMenu?: NavChildItem) => void | Promise<void | NavigationFailure | undefined> | import("element-plus/es/components/message/src/message").MessageHandler;
|
|
56
57
|
};
|
package/dist/index.esm.js
CHANGED
|
@@ -470,7 +470,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
470
470
|
const _component_el_dropdown_menu = resolveComponent("el-dropdown-menu");
|
|
471
471
|
const _component_el_dropdown = resolveComponent("el-dropdown");
|
|
472
472
|
return openBlock(), createElementBlock("div", {
|
|
473
|
-
class: normalizeClass(["w-
|
|
473
|
+
class: normalizeClass(["w-full header-wrapper h-64px pl-120 pr-120 py-19 backdrop-blur-[14px] flex items-center justify-between text-#000 fixed left-0 top-0 z-99 bg-transparent overflow-x-scroll", {
|
|
474
474
|
"theme-white": _ctx.isWhiteTheme,
|
|
475
475
|
"theme-scrolled": _ctx.isScrolledTheme,
|
|
476
476
|
"!b-0": unref(matchPath)(_ctx.routePath, "/CommunityMembers")
|
|
@@ -614,9 +614,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
614
614
|
};
|
|
615
615
|
}
|
|
616
616
|
});
|
|
617
|
-
const
|
|
617
|
+
const Header_vue_vue_type_style_index_0_scoped_bfee58b2_lang = "";
|
|
618
618
|
const Header_vue_vue_type_style_index_1_lang = "";
|
|
619
|
-
const Header = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-
|
|
619
|
+
const Header = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-bfee58b2"]]);
|
|
620
620
|
const mainDevHost = ["platform-aiintegration-dev.baai.ac.cn"];
|
|
621
621
|
const mainProdHost = ["flagos.io", "flagos.net", "www.flagos.io", "www.flagos.net"];
|
|
622
622
|
const mainHost = [...mainProdHost, ...mainDevHost];
|
|
@@ -801,7 +801,7 @@ const getNavMenuApi = (lang) => {
|
|
|
801
801
|
const openLink = (url) => {
|
|
802
802
|
window.open(url, "_blank");
|
|
803
803
|
};
|
|
804
|
-
function useHeaderMenu(currentLocale,
|
|
804
|
+
function useHeaderMenu(currentLocale, push, unopenTip) {
|
|
805
805
|
const menuList = ref([]);
|
|
806
806
|
const fetchMenu = (lang) => {
|
|
807
807
|
var _a;
|
|
@@ -810,7 +810,7 @@ function useHeaderMenu(currentLocale, route, router, unopenTip) {
|
|
|
810
810
|
menuList.value = data.map((m) => ({ ...m, active: m.id === activeId }));
|
|
811
811
|
};
|
|
812
812
|
watch(currentLocale, (lang) => fetchMenu(lang), { immediate: true });
|
|
813
|
-
const syncActiveMenu = () => {
|
|
813
|
+
const syncActiveMenu = (route) => {
|
|
814
814
|
menuList.value.forEach((item) => item.active = false);
|
|
815
815
|
const curIdx = menuList.value.findIndex((item) => {
|
|
816
816
|
if (item.dropdownList) {
|
|
@@ -838,7 +838,7 @@ function useHeaderMenu(currentLocale, route, router, unopenTip) {
|
|
|
838
838
|
if (childMenu.path.startsWith("http"))
|
|
839
839
|
return openLink(childMenu.path);
|
|
840
840
|
if (childMenu.path)
|
|
841
|
-
return
|
|
841
|
+
return push(childMenu.path);
|
|
842
842
|
if (childMenu.type === "unopen")
|
|
843
843
|
return ElMessage.warning(tip);
|
|
844
844
|
}
|
|
@@ -846,7 +846,7 @@ function useHeaderMenu(currentLocale, route, router, unopenTip) {
|
|
|
846
846
|
return openLink("https://docs.flagos.io/");
|
|
847
847
|
menuList.value.forEach((item) => item.active = false);
|
|
848
848
|
menu.active = true;
|
|
849
|
-
|
|
849
|
+
push(childMenu ? childMenu.path : menu.path);
|
|
850
850
|
};
|
|
851
851
|
return { menuList, syncActiveMenu, handleJumpPage };
|
|
852
852
|
}
|
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/components/Table/index.vue","../src/components/Button/index.vue","../src/components/Header/src/constants/locale.ts","../src/components/Header/src/config/texts.ts","../src/Icon/Down.vue","../src/Icon/Header.vue","../src/components/Header/src/Avatar.vue","../src/components/Header/src/Login.vue","../src/components/Header/src/config/locale.ts","../src/components/Header/src/Locale.vue","../src/components/Header/src/utils/path.ts","../src/components/Header/src/Header.vue","../src/components/Header/src/config/menus.ts","../src/components/Header/src/utils/openLink.ts","../src/components/Header/src/hooks/useHeaderMenu.ts","../src/components/Header/src/hooks/useHeaderTheme.ts","../src/index.ts"],"sourcesContent":["<template>\n <div class=\"w-full overflow-auto\">\n <table class=\"w-full border-collapse table-fixed\">\n <thead>\n <tr>\n <th \n v-for=\"column in columns\" \n :key=\"column.key\" \n :style=\"{ width: column.width }\"\n class=\"p-3 text-left bg-gray-100 text-gray-700 font-medium text-sm border-b border-gray-200\"\n >\n {{ column.title }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr \n v-for=\"(row, rowIndex) in data\" \n :key=\"rowKey ? row[rowKey] : rowIndex\"\n class=\"hover:bg-gray-50\"\n >\n <td \n v-for=\"column in columns\" \n :key=\"column.key\"\n class=\"p-3 text-left border-b border-gray-200 text-sm\"\n >\n <slot :name=\"column.key\" :row=\"row\" :index=\"rowIndex\">\n {{ row[column.key] }}\n </slot>\n </td>\n </tr>\n <tr v-if=\"!data || data.length === 0\">\n <td \n :colspan=\"columns.length\" \n class=\"p-8 text-center text-gray-500\"\n >\n <slot name=\"empty\">暂无数据</slot>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, PropType } from 'vue';\n\nexport interface TableColumn {\n key: string;\n title: string;\n width?: string;\n}\n\nexport default defineComponent({\n name: 'MyTable',\n props: {\n columns: {\n type: Array as PropType<TableColumn[]>,\n required: true\n },\n data: {\n type: Array as PropType<Record<string, any>[]>,\n default: () => []\n },\n rowKey: {\n type: String,\n default: ''\n }\n }\n});\n</script> ","<template>\n <button\n class=\"inline-flex justify-center items-center h-8 px-4 py-2 rounded-md text-sm font-medium transition-colors duration-200 focus:outline-none\"\n :class=\"[\n typeClasses,\n {\n 'opacity-50 cursor-not-allowed': disabled,\n 'relative': loading\n }\n ]\"\n :disabled=\"disabled || loading\"\n @click=\"handleClick\"\n >\n <span v-if=\"loading\" class=\"mr-2 w-4 h-4 i-svg-spinners-270-ring-with-bg\"></span>\n <slot></slot>\n </button>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed, PropType } from 'vue';\n\ntype ButtonType = 'primary' | 'success' | 'warning' | 'danger' | 'info' | 'default';\n\nexport default defineComponent({\n name: 'MyButton',\n props: {\n type: {\n type: String as PropType<ButtonType>,\n default: 'default'\n },\n disabled: {\n type: Boolean,\n default: false\n },\n loading: {\n type: Boolean,\n default: false\n }\n },\n emits: ['click'],\n setup(props, { emit }) {\n // 根据类型计算样式类\n const typeClasses = computed(() => {\n switch (props.type) {\n case 'primary':\n return 'bg-primary hover:bg-blue-500 text-white border-transparent';\n case 'success':\n return 'bg-success hover:bg-green-500 text-white border-transparent';\n case 'warning':\n return 'bg-warning hover:bg-yellow-500 text-white border-transparent';\n case 'danger':\n return 'bg-danger hover:bg-red-500 text-white border-transparent';\n case 'info':\n return 'bg-info hover:bg-gray-500 text-white border-transparent';\n default:\n return 'bg-white hover:bg-gray-100 text-gray-700 border border-gray-300';\n }\n });\n\n const handleClick = (e: MouseEvent) => {\n if (props.disabled || props.loading) return;\n emit('click', e);\n };\n\n return {\n typeClasses,\n handleClick\n };\n }\n});\n</script>\n\n<style>\n.my-button {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n line-height: 1;\n height: 32px;\n white-space: nowrap;\n cursor: pointer;\n color: #606266;\n text-align: center;\n box-sizing: border-box;\n outline: none;\n transition: 0.1s;\n font-weight: 500;\n padding: 8px 15px;\n font-size: 14px;\n border-radius: 4px;\n border: 1px solid #dcdfe6;\n background: #ffffff;\n}\n\n.my-button--primary {\n color: #fff;\n background-color: #409eff;\n border-color: #409eff;\n}\n\n.my-button--success {\n color: #fff;\n background-color: #67c23a;\n border-color: #67c23a;\n}\n\n.my-button--warning {\n color: #fff;\n background-color: #e6a23c;\n border-color: #e6a23c;\n}\n\n.my-button--danger {\n color: #fff;\n background-color: #f56c6c;\n border-color: #f56c6c;\n}\n\n.my-button.is-disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n.my-button__loading {\n display: inline-block;\n width: 14px;\n height: 14px;\n border: 2px solid currentColor;\n border-radius: 50%;\n border-right-color: transparent;\n margin-right: 5px;\n animation: rotate 1s linear infinite;\n}\n\n@keyframes rotate {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n</style> ","export enum LocaleTypeEnum {\n English = 'en',\n Chinese = 'zh-CN',\n}\n","import type { InjectionKey, ComputedRef } from 'vue';\nimport { LocaleTypeEnum } from '../constants/locale';\n\nexport interface NavTexts {\n loginText: string;\n logoutText: string;\n}\n\nexport const NAV_TEXTS_KEY: InjectionKey<ComputedRef<NavTexts>> = Symbol('nav-texts');\n\nexport const buildNavTexts = (lang: LocaleTypeEnum): NavTexts => {\n const isZh = lang === LocaleTypeEnum.Chinese;\n return {\n loginText: isZh ? '登录/注册' : 'Log In / Sign Up',\n logoutText: isZh ? '退出登录' : 'Log Out',\n };\n};\n","<template>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"icon/down\">\n <path id=\"Union\" d=\"M12.1382 5.86191C11.8778 5.60156 11.4557 5.60156 11.1954 5.86191L8.0001 9.05717L4.80484 5.86191C4.54449 5.60156 4.12238 5.60156 3.86203 5.86191C3.60168 6.12226 3.60168 6.54437 3.86203 6.80472L7.29299 10.2357C7.68352 10.6262 8.31668 10.6262 8.70721 10.2357L12.1382 6.80472C12.3985 6.54437 12.3985 6.12226 12.1382 5.86191Z\" fill=\"#2C364B\"/>\n </g>\n </svg>\n</template>","<template>\n <svg width=\"19px\" height=\"20px\" viewBox=\"0 0 19 20\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>yonghu-2</title>\n <g id=\"页面-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"flagos首页备份-4\" transform=\"translate(-1187, -32)\" fill=\"#FFFFFF\" fill-rule=\"nonzero\">\n <g id=\"yonghu-2\" transform=\"translate(1187, 32)\">\n <path d=\"M4.16667254,6.66658844 C4.16667254,3.9091208 6.40897956,1.66664712 9.1664472,1.66664712 C11.9239148,1.66664712 14.1663885,3.9091208 14.1663885,6.66658844 C14.1663885,9.42388942 11.9239148,11.6665298 9.1664472,11.6665298 C6.40897956,11.6665298 4.16650588,9.42388942 4.16650588,6.66658844 M18.3046733,18.9521109 C17.4853496,15.8829803 15.3253749,13.4830084 12.6130734,12.3621883 C14.5387175,11.192202 15.8330356,9.08056012 15.8330356,6.66642176 C15.832869,2.99079823 12.8420707,0 9.16628054,0 C5.49049035,0 2.4996921,2.99079823 2.4996921,6.66658844 C2.4996921,9.08056012 3.79384359,11.192202 5.72048764,12.3621883 C3.00801947,13.4838418 0.848044811,15.8829803 0.028221107,18.9521109 C-0.0900085115,19.3963877 0.174049854,19.8524478 0.618214182,19.971099 C1.06293982,20.0897021 1.51968816,19.8256771 1.63886887,19.3811059 C2.59002437,15.820481 5.68498805,13.3331769 9.16661386,13.3331769 C12.6482397,13.3331769 15.74387,15.8206477 16.6948589,19.3814392 C16.7515138,19.5951643 16.8909444,19.7775312 17.0823388,19.8882397 C17.2737332,19.9989483 17.5013346,20.0288842 17.7148469,19.9714323 C18.1590942,19.8527834 18.423176,19.3966084 18.30484,18.9522776\" id=\"形状\"></path>\n </g>\n </g>\n </g>\n </svg>\n</template>","<template>\n <el-dropdown popper-class=\"custom-dropdown\" size=\"large\" ref=\"dropdown\" trigger=\"click\" :show-arrow=\"false\" @visible-change=\"onVisibleChange\">\n <div class=\"flex items-center cursor-pointer\">\n <div class=\"w-24 h-24 rounded-50% font-600 flex-center mr-8\">\n <Header/>\n </div>\n\n <span>{{ userNickName }}</span>\n <el-icon\n class=\"el-icon--right !ml-16 transition-all duration-200\"\n :class=\"{\n ' rotate-180': dropdownVisible,\n }\"\n :size=\"16\"\n >\n <Down />\n </el-icon>\n </div>\n\n <template #dropdown>\n <el-dropdown-menu>\n <el-dropdown-item>\n <div class=\"flex items-center w-full text-14 mb-4\" @click=\"logout\">\n {{ navTexts?.logoutText }}\n </div>\n </el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n</template>\n\n<script setup lang=\"ts\">\nimport { inject, ref } from 'vue';\nimport { NAV_TEXTS_KEY } from './config/texts';\nimport Down from '../../../Icon/Down.vue';\nimport Header from '../../../Icon/Header.vue';\n\nconst navTexts = inject(NAV_TEXTS_KEY);\nconst dropdownVisible = ref(false);\nconst onVisibleChange = (visible: boolean) => {\n dropdownVisible.value = visible;\n};\ninterface Props {\n userNickName: string;\n currentPath: string;\n logout: () => void;\n}\n\ndefineProps<Props>();\n</script>\n\n<style scoped lang=\"scss\" >\n.reset-btn {\n border-color: #bec3cd;\n\n :deep(.el-button) {\n color: #3e4a54 !important;\n }\n &:hover {\n :deep(.el-button) {\n color: #3967e9 !important;\n }\n border-color: #3967e9;\n .el-icon {\n fill: #3967e9 !important;\n }\n }\n &:active {\n .el-icon {\n fill: #fff !important;\n }\n :deep(.el-button) {\n color: #fff !important;\n }\n border-color: transparent;\n background: #3967e9;\n }\n}\n</style>\n","<template>\n <el-button type=\"primary\" class=\"!rounded-4\" @click=\"login\">{{ navTexts?.loginText }}</el-button>\n</template>\n<script setup lang=\"ts\">\nimport { inject } from 'vue';\nimport { useRouter } from 'vue-router';\nimport { NAV_TEXTS_KEY } from './config/texts';\n\nconst navTexts = inject(NAV_TEXTS_KEY);\nconst router = useRouter();\n\nconst login = () => {\n router.push({ path: '/login', query: { redirect_url: encodeURIComponent(location.href) } });\n};\n</script>\n","import { LocaleTypeEnum } from '../constants/locale';\n\nexport const NAV_LOCALE_OPTIONS = [\n { value: LocaleTypeEnum.Chinese, label: '中文' },\n { value: LocaleTypeEnum.English, label: 'English' },\n];\n\nexport const NAV_LOCALE_TO_LANG: Record<LocaleTypeEnum, string> = {\n [LocaleTypeEnum.Chinese]: 'cn',\n [LocaleTypeEnum.English]: 'en',\n};\n\nexport const NAV_LANG_TO_LOCALE: Record<string, LocaleTypeEnum> = {\n cn: LocaleTypeEnum.Chinese,\n en: LocaleTypeEnum.English,\n};\n\nexport const NAV_WIKI_LANG_BY_LOCALE: Record<LocaleTypeEnum, string> = {\n [LocaleTypeEnum.Chinese]: 'zh',\n [LocaleTypeEnum.English]: 'en',\n};\n","<template>\n <el-dropdown class=\"cursor-pointer\" trigger=\"click\" popper-class=\"custom-dropdown\" placement=\"bottom\" @visible-change=\"handleChange\">\n <svg width=\"20px\" height=\"20px\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect fill=\"#D8D8D8\" opacity=\"0\" x=\"0\" y=\"0\" width=\"20\" height=\"20\"></rect>\n <path\n :fill=\"isWhite ? '#ffffff' : '#2C364B'\"\n fill-rule=\"nonzero\"\n d=\"M10,0 C4.48583334,0 0,4.48583334 0,10 C0,15.5141667 4.48583334,20 10,20 C15.5141667,20 20,15.5141667 20,10 C20,4.48583334 15.5141667,0 10,0 Z M18.6966667,10.9491667 L18.6925,10.9741667 C18.6575,11.2791667 18.6075,11.5791667 18.5425,11.8741667 L18.5425,11.875 L15.5258333,11.875 C15.657032,10.6284426 15.657032,9.37155738 15.5258333,8.125 L18.5425,8.125 C18.6075,8.42 18.6566667,8.72 18.6925,9.025 C18.6925,9.03333334 18.695,9.04166666 18.6966667,9.05083334 C18.7675,9.68166668 18.7675,10.3183333 18.6966667,10.9491667 L18.6966667,10.9491667 Z M13.34,18.0833333 C14.2783333,16.8683333 14.9891667,15.1491667 15.3516667,13.1241667 L18.1633333,13.1241667 C17.3009588,15.3668017 15.5579816,17.158563 13.34,18.0825 L13.34,18.0833333 Z M18.1625,6.87333334 L15.3516667,6.87333334 C14.9891667,4.84833334 14.2783333,3.13 13.34,1.915 C15.5576659,2.83912386 17.3003173,4.63085972 18.1625,6.87333334 L18.1625,6.87333334 Z M14.2658333,8.12333334 C14.4114344,9.36909341 14.4114344,10.6275733 14.2658333,11.8733333 L10.6241667,11.8733333 L10.6241667,8.12333334 L14.2658333,8.12333334 Z M10.6241667,6.87333334 L10.6241667,1.355 C12.1825,1.825 13.5008333,4.0025 14.07,6.87583334 L10.625,6.87583334 L10.6241667,6.87333334 Z M10.6241667,13.1233333 L14.07,13.1233333 C13.5008333,15.9983333 12.1825,18.175 10.625,18.645 L10.625,13.125 L10.6241667,13.1233333 Z M1.8375,13.1241667 L4.64833334,13.1241667 C5.01083334,15.1491667 5.72166668,16.8683333 6.66,18.0825 C4.44233408,17.1583761 2.69968275,15.3666403 1.8375,13.1241667 L1.8375,13.1241667 Z M6.66,1.91666666 C5.72166666,3.13 5.01083334,4.85 4.64833334,6.875 L1.83666666,6.875 C2.69923303,4.63220345 4.44253606,2.84041679 6.66083334,1.91666666 L6.66,1.91666666 Z M5.73416666,11.875 C5.58856559,10.6292399 5.58856559,9.37076007 5.73416666,8.125 L9.375,8.125 L9.375,11.875 L5.73333334,11.875 L5.73416666,11.875 Z M9.375,13.125 L9.375,18.6458333 C7.81666666,18.1758333 6.49916666,15.9983333 5.93,13.125 L9.375,13.125 Z M9.375,6.875 L5.93,6.875 C6.49916666,4.00166666 7.81666666,1.825 9.375,1.35416666 L9.375,6.875 Z M1.30416666,9.05 C1.30416666,9.04333334 1.30666666,9.03583334 1.3075,9.02833334 C1.34166666,8.725 1.39166666,8.42333334 1.4575,8.125 L4.47416666,8.125 C4.34243809,9.37152952 4.34243809,10.6284705 4.47416666,11.875 L1.4575,11.875 C1.39166666,11.5766667 1.34166666,11.275 1.3075,10.9716667 L1.30416666,10.9491667 C1.23220566,10.3184348 1.23220566,9.68156522 1.30416666,9.05083334 L1.30416666,9.05 Z\"\n />\n </svg>\n <template #dropdown>\n <el-dropdown-menu>\n <el-dropdown-item\n v-for=\"locale in localeOptions\"\n :key=\"locale.value\"\n :class=\"{ 'is-active': locale.value === currentLocale }\"\n @click=\"emitChangeLanguage(locale.value)\"\n >\n <span :class=\"{ 'color-primary': locale.value === currentLocale }\">\n {{ locale.label }}\n </span>\n </el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n</template>\n<script setup lang=\"tsx\">\nimport { ref, computed } from 'vue';\nimport { LocaleTypeEnum } from './constants/locale';\nimport { NAV_LOCALE_OPTIONS } from './config/locale';\n\nconst active = ref(false);\n\nconst handleChange = (val: boolean) => {\n active.value = val;\n};\n\ninterface LocaleOption {\n value: LocaleTypeEnum;\n label: string;\n}\n\ninterface Props {\n isWhiteTheme?: boolean;\n currentLocale: LocaleTypeEnum;\n localeOptions?: LocaleOption[];\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n isWhiteTheme: false,\n localeOptions: () => NAV_LOCALE_OPTIONS,\n});\n\nconst emits = defineEmits<{\n (e: 'change-language', locale: LocaleTypeEnum): void;\n}>();\n\nconst isWhite = computed(() => props.isWhiteTheme);\nconst currentLocale = computed(() => props.currentLocale);\nconst localeOptions = computed(() => props.localeOptions);\n\nconst emitChangeLanguage = (locale: LocaleTypeEnum) => {\n if (locale === currentLocale.value) {\n return;\n }\n emits('change-language', locale);\n};\n</script>\n<style scoped lang=\"scss\"></style>\n","export const matchPath = (path: string, targetPath: string): boolean => {\n if (!path || !targetPath) return false;\n return path.toLowerCase().indexOf(targetPath.toLowerCase()) >= 0;\n};\n\nexport const matchAnyPath = (path: string, targetPaths: string[]): boolean => {\n return targetPaths.some(targetPath => matchPath(path, targetPath));\n};\n","<template>\n <div\n class=\"w-[calc(100vw-160px)] header-wrapper h-64px pl-120 pr-120 py-19 backdrop-blur-[14px] flex items-center justify-between text-#000 fixed left-0 top-0 z-99 bg-transparent overflow-x-scroll\"\n :class=\"{\n 'theme-white': isWhiteTheme,\n 'theme-scrolled': isScrolledTheme,\n '!b-0': matchPath(routePath, '/CommunityMembers'),\n }\"\n >\n <div class=\"flex-center\">\n <img\n class=\"logo\"\n :src=\"isWhiteTheme ? 'https://flagos.ks3-cn-beijing.ksyuncs.com/images/logo.svg' : 'https://flagos.ks3-cn-beijing.ksyuncs.com/images/logo-black.svg'\"\n @click=\"onLogoClick\"\n />\n <div class=\"flex gap-48 ml-80\">\n <div\n v-for=\"(menu, index) in menuList\"\n :index=\"index\"\n class=\"menu-item cursor-pointer whitespace-nowrap\"\n :class=\"{ active: menu.active }\"\n >\n <el-dropdown\n v-if=\"menu.dropdownList && menu.id === 'learn'\"\n popper-class=\"custom-dropdown-new\"\n :show-arrow=\"false\"\n >\n <span class=\"text-16\">{{ menu.label}}</span>\n <template #dropdown>\n <el-dropdown-menu class=\"flex-row\">\n <el-dropdown-item\n v-for=\"(childMenu, idx) in menu.dropdownList\"\n :key=\"idx\"\n :class=\"{ active: matchPath(routePath, childMenu.path) }\"\n @click=\"onJumpPage(menu, childMenu)\"\n >\n <span class=\"text-14 mb-16 !font-500\">{{ childMenu.label }}</span>\n <span class=\"text-14 whitespace-normal !font-400\">{{ childMenu.desc }}</span>\n </el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n <el-dropdown\n v-else-if=\"menu.dropdownList && menu.id === 'tools'\"\n popper-class=\"custom-dropdown-new\"\n :show-arrow=\"false\"\n >\n <span class=\"text-16\">{{ menu.label }}</span>\n <template #dropdown>\n <el-dropdown-menu>\n <el-dropdown-item v-for=\"(childMenu, idx) in menu.dropdownList\" :key=\"idx\" @click=\"onJumpPage(menu, childMenu)\">\n <span class=\"text-14 mb-16 !font-500\">{{childMenu.label }}</span>\n <span class=\"text-14 whitespace-normal !font-400\">{{ childMenu.desc }}</span>\n </el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n <el-dropdown v-else-if=\"menu.dropdownGroups && menu.id === 'projects'\" popper-class=\"custom-dropdown-new\" :show-arrow=\"false\">\n <span class=\"text-16\">{{ menu.label}}</span>\n <template #dropdown>\n <el-dropdown-menu class=\"flex gap-20 el-dropdown-menu_out\">\n <ul v-for=\"(group, idx) in menu.dropdownGroups\" :key=\"idx\" class=\"flex-1 el-dropdown-menu !w-[50%] !max-h-560px\">\n <span class=\"text-14 text-#bbbbbb leading-22 mb-20\">{{ group.label }}</span>\n <el-dropdown-item\n v-for=\"(childMenu, cidx) in group.list\"\n :key=\"cidx\"\n class=\"el-dropdown-menu__item !w-full\"\n @click=\"onJumpPage(menu, childMenu)\"\n >\n <span class=\"text-14 mb-16 !font-500\">{{ childMenu.label }}</span>\n <span class=\"text-14 whitespace-normal !font-400\">{{ childMenu.desc }}</span>\n </el-dropdown-item>\n </ul>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n <span v-else @click=\"onJumpPage(menu)\">{{ menu.label }}</span>\n </div>\n </div>\n </div>\n <div class=\"flex-center\" :class=\"isWhiteTheme ? 'text-#ffffff' : 'text-#262642'\">\n <Locale :isWhiteTheme=\"isWhiteTheme\" :current-locale=\"currentLocale\" @change-language=\"onChangeLanguage\" />\n <Login v-if=\"!userName\" class=\"ml-20\" />\n <Avatar\n v-if=\"userName\"\n class=\"header_avatar ml-20\"\n :class=\"isWhiteTheme ? 'text-#ffffff' : 'text-#262642'\"\n :user-nick-name=\"userNickName\"\n :current-path=\"routePath\"\n :logout=\"onLogout\"\n />\n </div>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport { computed, provide } from 'vue';\nimport Avatar from './Avatar.vue';\nimport Login from './Login.vue';\nimport Locale from './Locale.vue';\nimport { LocaleTypeEnum } from './constants/locale';\nimport { matchPath } from './utils/path';\nimport type { NavMenuItem, NavChildItem } from './config/menus';\nimport { NAV_TEXTS_KEY, buildNavTexts } from './config/texts';\nimport 'uno.css';\ninterface Props {\n routePath: string;\n menuList: NavMenuItem[];\n isWhiteTheme: boolean;\n isScrolledTheme: boolean;\n currentLocale: LocaleTypeEnum;\n userName?: string;\n userNickName: string;\n onLogoClick: () => void;\n onJumpPage: (menu: NavMenuItem, childMenu?: NavChildItem) => void;\n onChangeLanguage: (locale: LocaleTypeEnum) => void;\n onLogout: () => void;\n}\n\nconst props = defineProps<Props>();\n\nprovide(\n NAV_TEXTS_KEY,\n computed(() => buildNavTexts(props.currentLocale))\n);\n\n</script>\n<style scoped lang=\"scss\">\n.header-wrapper {\n transition: all 0.3s ease;\n border-bottom: 1px solid rgba(0, 0, 0, 0.13);\n &.theme-white {\n color: #fff;\n border: none;\n background: transparent;\n svg {\n color: #fff;\n }\n .menu-item {\n &::before {\n background-color: #fff;\n }\n :deep(.el-dropdown) {\n color: #fff;\n }\n }\n }\n &.theme-scrolled {\n background: #fff;\n color: #262642;\n border-bottom: 1px solid rgba(0, 0, 0, 0.13);\n svg {\n color: #262642;\n }\n .menu-item {\n &::before {\n background-color: #262642;\n }\n :deep(.el-dropdown) {\n color: #262642;\n }\n }\n }\n .logo {\n width: 100px;\n height: 38px;\n cursor: pointer;\n object-fit: contain;\n }\n svg {\n color: #262642;\n }\n .menu-item {\n display: flex;\n align-items: center;\n position: relative;\n font-size: 16px;\n &::before {\n content: '';\n display: block;\n position: absolute;\n left: 0;\n bottom: -2px;\n width: 0;\n height: 2px;\n border-radius: 1px;\n background-color: #262642;\n transition: all 0.3s ease;\n transform-origin: center;\n }\n &.active {\n font-weight: 600;\n &::before {\n width: 100%;\n }\n }\n :deep(.el-dropdown) {\n color: #262642;\n }\n }\n}\n</style>\n<style lang=\"scss\">\n .el-popper.custom-dropdown-new {\n padding: 0 !important;\n width: 100%;\n margin-left: -1px;\n // height: 90%;\n max-width: 100% !important;\n margin-top: 12px;\n // inset: 64px auto auto auto !important;\n box-shadow: none;\n background: #07111E;\n opacity: 0.95;\n .el-dropdown__list {\n width: 100% !important;\n height: 100% !important;\n padding: 56px 120px;\n \n .el-dropdown-menu_out{\n display: flex;\n flex-wrap: wrap;\n max-height: 90% !important;\n flex-direction: row !important;\n column-gap: 20px;\n row-gap: 4px;\n background: transparent !important;\n box-shadow: none !important;\n }\n \n .el-dropdown-menu {\n display: flex;\n max-height: 360px;\n flex-direction: column;\n flex-wrap: wrap;\n column-gap: 20px;\n row-gap: 4px;\n background: transparent !important;\n box-shadow: none !important;\n &.flex-row {\n flex-direction: row !important;\n flex-wrap: nowrap;\n }\n .el-dropdown-menu__item{\n width: calc((100% - 20px * 2) / 3);\n padding: 0 !important;\n min-height: 64px;\n font-family: PingFangSC, PingFang SC;\n font-weight: 600;\n font-size: 14px;\n color: #FFFFFF !important;\n line-height: 22px;\n padding: 20px 16px !important;\n border-radius: 8px;\n border: 1px solid transparent;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n }\n .el-dropdown-menu__item:hover, .el-dropdown-menu__item:focus {\n background: rgba(255,255,255, 0.05);\n border: 1px solid rgba(255,255,255, 0.2);\n \n }\n }\n }\n }\n</style>","import { LocaleTypeEnum } from '../constants/locale';\nimport { NAV_WIKI_LANG_BY_LOCALE } from './locale';\n\n// ---------- Types ----------\n\nexport interface NavChildItem {\n id: string;\n label: string;\n path: string;\n desc?: string;\n type: 'route' | 'link' | 'unopen';\n}\n\nexport interface NavDropdownGroup {\n id: string;\n label: string;\n list: NavChildItem[];\n}\n\nexport interface NavMenuItem {\n id: string;\n label: string;\n path?: string;\n active?: boolean;\n /** flat items (tools / learn) */\n dropdownList?: NavChildItem[];\n /** grouped items (projects) */\n dropdownGroups?: NavDropdownGroup[];\n}\nconst mainDevHost = ['platform-aiintegration-dev.baai.ac.cn']\nconst mainProdHost =['flagos.io', 'flagos.net', 'www.flagos.io', 'www.flagos.net']\nconst mainHost = [...mainProdHost, ...mainDevHost]\n// ---------- Mock data ----------\nconst isMainApp = () => {\n return mainHost.includes(location.host)\n\n}\nconst buildMenu = (lang: LocaleTypeEnum): NavMenuItem[] => {\n const isZh = lang === LocaleTypeEnum.Chinese;\n const wikiLang = NAV_WIKI_LANG_BY_LOCALE[lang];\n\n return [\n {\n id: 'home',\n label: isZh ? '首页' : 'Home',\n path: '/Home',\n },\n {\n id: 'projects',\n label: isZh ? '软件栈' : 'Software Stack',\n dropdownGroups: [\n {\n id: 'coreLib',\n label: isZh ? '开源核心库' : 'Open-Source Core Libraries',\n list: [\n {\n id: 'flagscale',\n label: 'FlagScale',\n path: '/FlagScale',\n desc: isZh\n ? '统一多芯片、多后端的大模型框架,提供覆盖训练、微调与推理部署的全流程能力'\n : 'A unified multi-backend large model framework across diverse chips, providing end-to-end capabilities spanning training, fine-tuning, and inference deployment.',\n type: 'route',\n },\n {\n id: 'flaggems',\n label: 'FlagGems',\n path: '/FlagGems',\n desc: isZh\n ? '基于Triton实现的高性能通用算子库'\n : 'A high-performance general operator library built on Triton.',\n type: 'route',\n },\n {\n id: 'flagtree',\n label: 'FlagTree',\n path: '/FlagTree',\n desc: isZh\n ? '面向多种硬件的开源、统一AI编译器'\n : 'An open-source unified AI compiler for diverse hardware.',\n type: 'route',\n },\n {\n id: 'flagcx',\n label: 'FlagCX',\n path: '/FlagCX',\n desc: isZh\n ? '一款专为大规模AI系统设计的可扩展、自适应高性能跨芯片通信库'\n : 'A scalable, adaptive, high-performance cross-chip communication library designed for large-scale AI systems.',\n type: 'route',\n },\n ],\n },\n {\n id: 'ecosystem',\n label: isZh ? '生态使能项目' : 'FlagOS Ecosystem Enablement Project',\n list: [\n {\n id: 'megatronfl',\n label: 'Megatron-FL',\n path: 'https://github.com/flagos-ai/Megatron-LM-FL',\n desc: isZh\n ? '为Megatron-LM打造的多芯片插件,实现大模型多芯片高效训练'\n : 'A multi-chip plugin for Megatron-LM, enabling efficient large-scale training across diverse chips.',\n type: 'link',\n },\n {\n id: 'vllmpluginfl',\n label: 'vLLM-plugin-FL',\n path: 'https://github.com/flagos-ai/vllm-plugin-FL',\n desc: isZh\n ? '为vLLM打造的多芯片插件,实现大模型多芯片高效推理部署'\n : 'A multi-chip plugin for vLLM, enabling efficient large model inference and deployment across diverse chips.',\n type: 'link',\n },\n {\n id: 'transformerenginefl',\n label: 'TransformerEngine-FL',\n path: 'https://github.com/flagos-ai/TransformerEngine-FL',\n desc: isZh\n ? '为TransformerEngine打造的多芯片插件,实现多种芯片上分布式算子'\n : 'A multi-chip plugin for TransformerEngine, enabling distributed operators across diverse chip architectures.',\n type: 'link',\n },\n ],\n },\n ],\n },\n {\n id: 'tools',\n label: isZh ? '工具' : 'Tools',\n dropdownList: [\n {\n id: 'skill',\n label: isZh ? 'Skill广场' : 'SkillHub',\n path: resolvePath('/SkillHub'),\n desc: isZh ? '一站式AI计算技能库' : 'One-stop AI computing skills library.',\n type: 'route',\n },\n {\n id: 'onlinelab',\n label: isZh ? '线上实验室' : 'Online Laboratory',\n path: isMainApp() ?'/OnlineLab': resolvePath('/OnlineLab'),\n desc: isZh ? '开箱即用的在线实验环境' : 'Ready-to-use online experiment environment.',\n type: 'route',\n },\n {\n id: 'modelplatform',\n label: isZh ? '模型服务平台' : 'MaaS',\n path: '',\n desc: isZh\n ? '全生命周期大模型API服务平台'\n : 'A full-lifecycle API service platform for large models.',\n type: 'unopen',\n },\n {\n id: 'kernelgen',\n label: 'KernelGen',\n path: 'https://kernelgen.flagos.io/',\n desc: isZh\n ? '分钟级构建Kernel,支持多芯片后端'\n : 'Build Kernels in Minutes with Multi-Backend Support.',\n type: 'link',\n },\n {\n id: 'flagrelease',\n label: 'FlagRelease',\n path: '',\n desc: isZh\n ? '一套自动化迁移大模型至不同硬件产品的工具平台'\n : 'An automated tool platform for migrating large model to diverse hardware.',\n type: 'unopen',\n },\n {\n id: 'flagcicd',\n label: 'FlagCICD',\n path: '',\n desc: isZh\n ? '面向 AI 开发的持续集成 / 持续部署工具链'\n : 'A CI/CD toolchain for AI development.',\n type: 'unopen',\n },\n {\n id: 'flagmodelhub',\n label: isZh ? '九鼎AI一体化平台' : 'Jiuding AI Integrated Platform',\n path: '',\n desc: isZh\n ? '整合 FlagOS 全栈能力,提供从模型开发、训练到部署的一站式 AI 工程化平台'\n : 'Jiuding AI Platform.',\n type: 'unopen',\n },\n ],\n },\n {\n id: 'docs',\n label: isZh ? '文档' : 'Docs',\n },\n {\n id: 'learn',\n label: isZh ? '学习' : 'Learn',\n dropdownList: [\n {\n id: 'wiki',\n label: 'Wiki',\n desc: isZh ? '智能文档,边看边问边学': 'AI-powered interactive docs: query and learn in real-time.',\n path: `https://wiki.flagos.io`,\n type: 'link',\n },\n { id: 'professionalcourse', label: isZh ? '专业课' : 'Core Courses', desc: isZh ? '众智FlagOS系列开源课程' : 'The official open-source course series for the FlagOS ecosystem.', path: 'https://flagos.educoder.net/paths', type: 'link' },\n { id: 'course',label: isZh ? '讲座' : 'Tech Talks', desc: isZh ? '大咖分享,业界前沿讲座' : 'Cutting-edge insights and deep dives from industry leaders.', path: '/LearnCenter', type: 'route' },\n ],\n },\n {\n id: 'events',\n label: isZh ? '活动赛事' : 'Event & Competition',\n path: isMainApp() ?'/events': resolvePath('/events'),\n },\n {\n id: 'onlinelab-top',\n label: isZh ? '线上实验室' : 'Online Laboratory',\n path: isMainApp() ?'/OnlineLab': resolvePath('/OnlineLab'),\n },\n ];\n};\nconst resolvePath = (path: string): string => {\n if(mainProdHost.includes(location.hostname)) {\n return `https://${location.hostname}${path}`;\n } else {\n return `${location.protocol}//${path.slice(1).toLocaleLowerCase()}.${mainDevHost[0]}`;\n }\n};\n\nconst resolveMenuPaths = (items: NavMenuItem[]): NavMenuItem[] => {\n return items;\n};\n\n/**\n * Fetch nav menu by lang.\n * Replace the mock body with a real HTTP call when the backend is ready:\n * return request({ method: 'get', url: '/nav/menus', params: { lang } }).then(res => res.data);\n */\nexport const getNavMenuApi = (lang: LocaleTypeEnum): NavMenuItem[] => {\n return resolveMenuPaths(buildMenu(lang));\n};\n","export const openLink = (url: string) => {\n window.open(url, '_blank');\n};\n","import { ref, watch } from 'vue';\nimport type { Ref } from 'vue';\nimport { ElMessage } from 'element-plus';\nimport type { LocaleTypeEnum } from '../constants/locale';\nimport { getNavMenuApi, type NavMenuItem, type NavChildItem } from '../config/menus';\nimport { openLink } from '../utils/openLink';\nimport { matchPath, matchAnyPath } from '../utils/path';\n\nexport function useHeaderMenu(\n currentLocale: Ref<LocaleTypeEnum>,\n route: any,\n router: any,\n /** String shown when user clicks an unavailable item (e.g. t('projects.unopentip')) */\n unopenTip: Ref<string> | string\n) {\n const menuList = ref<NavMenuItem[]>([]);\n\n const fetchMenu = (lang: LocaleTypeEnum) => {\n const data = getNavMenuApi(lang);\n // preserve active state across refetch\n const activeId = menuList.value.find(m => m.active)?.id;\n menuList.value = data.map(m => ({ ...m, active: m.id === activeId }));\n };\n\n watch(currentLocale, lang => fetchMenu(lang), { immediate: true });\n\n const syncActiveMenu = () => {\n menuList.value.forEach(item => (item.active = false));\n const curIdx = menuList.value.findIndex(item => {\n if (item.dropdownList) {\n return item.dropdownList.some(child => matchPath(route?.path, child.path));\n }\n if (item.dropdownGroups) {\n return item.dropdownGroups.some(group =>\n group.list.some(child => matchPath(route?.path, child.path))\n );\n }\n if (matchPath(item.path as string, '/events') && matchAnyPath(route?.path, ['/EventDetail', '/RaceDetail'])) return true;\n if (item.id === 'onlinelab-top' && matchPath(route?.path, '/OnlineLab')) return true;\n return matchPath(route?.path, item.path as string);\n });\n if (curIdx >= 0) menuList.value[curIdx].active = true;\n };\n\n const handleJumpPage = (menu: NavMenuItem, childMenu?: NavChildItem) => {\n const tip = typeof unopenTip === 'string' ? unopenTip : unopenTip.value;\n\n if (['tools', 'projects', 'learn'].includes(menu.id)) {\n if (!childMenu) return;\n if (childMenu.path.startsWith('http')) return openLink(childMenu.path);\n if (childMenu.path) return router.push(childMenu.path);\n if (childMenu.type === 'unopen') return ElMessage.warning(tip);\n }\n if (menu.id === 'docs') return openLink('https://docs.flagos.io/');\n\n menuList.value.forEach(item => (item.active = false));\n menu.active = true;\n router.push(childMenu ? childMenu.path : menu.path);\n };\n\n return { menuList, syncActiveMenu, handleJumpPage };\n}\n","import { ref, nextTick, onMounted, onUnmounted } from 'vue';\nimport throttle from 'lodash/throttle';\nimport { matchPath, matchAnyPath } from '../utils/path';\n\nexport function useHeaderTheme(route: any) {\n const lastScrollTop = ref(0);\n const isWhiteTheme = ref(false);\n const isScrolledTheme = ref(false);\n\n const SCROLL_THRESHOLDS = {\n home: { getThreshold: () => window.innerHeight - 80 },\n events: { getThreshold: () => 390 - 80 },\n onlineLab: { getThreshold: () => 180 - 80 },\n };\n\n const updateThemeByScroll = (scrollTop: number, threshold: number) => {\n if (scrollTop > threshold) {\n isWhiteTheme.value = false;\n isScrolledTheme.value = true;\n } else {\n isWhiteTheme.value = true;\n isScrolledTheme.value = false;\n }\n lastScrollTop.value = scrollTop <= 0 ? 0 : scrollTop;\n };\n\n const handleScroll = throttle(() => {\n const scrollTop = window.scrollY || document.documentElement.scrollTop || 0;\n updateThemeByScroll(scrollTop, SCROLL_THRESHOLDS.home.getThreshold());\n }, 200);\n\n const handleEventsScroll = throttle(() => {\n const scrollTop = window.scrollY || document.documentElement.scrollTop || 0;\n const threshold = matchPath(route?.path, '/OnlineLab') ? SCROLL_THRESHOLDS.onlineLab.getThreshold() : SCROLL_THRESHOLDS.events.getThreshold();\n updateThemeByScroll(scrollTop, threshold);\n }, 200);\n\n const bindByRoute = () => {\n window.removeEventListener('scroll', handleScroll);\n window.removeEventListener('scroll', handleEventsScroll);\n\n if (matchPath(route?.path, '/Home')) {\n isWhiteTheme.value = true;\n isScrolledTheme.value = false;\n window.addEventListener('scroll', handleScroll);\n nextTick(() => handleScroll());\n } else if (matchAnyPath(route?.path, ['/events', '/EventDetail', '/RaceDetail', '/OnlineLab'])) {\n isWhiteTheme.value = true;\n isScrolledTheme.value = false;\n window.addEventListener('scroll', handleEventsScroll);\n nextTick(() => handleEventsScroll());\n } else {\n isWhiteTheme.value = false;\n isScrolledTheme.value = false;\n }\n };\n\n onMounted(() => bindByRoute());\n onUnmounted(() => {\n window.removeEventListener('scroll', handleScroll);\n window.removeEventListener('scroll', handleEventsScroll);\n });\n\n return { lastScrollTop, isWhiteTheme, isScrolledTheme, bindByRoute, handleScroll, handleEventsScroll };\n}\n","import type { App } from 'vue';\nimport MyTable from './components/Table/index.vue';\nimport MyButton from './components/Button/index.vue';\nimport Header from './components/Header/src/Header.vue';\nexport * from './components/Header/src/index';\nexport { MyTable, MyButton, Header };\n\n// 插件安装方法\nexport default {\n install(app: App) {\n app.component('MyButton', MyButton);\n app.component('MyTable', MyTable);\n }\n}; "],"names":["_sfc_render","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_Fragment","_renderList","_normalizeStyle","_hoisted_3","_normalizeClass","_createCommentVNode","LocaleTypeEnum"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/components/Table/index.vue","../src/components/Button/index.vue","../src/components/Header/src/constants/locale.ts","../src/components/Header/src/config/texts.ts","../src/Icon/Down.vue","../src/Icon/Header.vue","../src/components/Header/src/Avatar.vue","../src/components/Header/src/Login.vue","../src/components/Header/src/config/locale.ts","../src/components/Header/src/Locale.vue","../src/components/Header/src/utils/path.ts","../src/components/Header/src/Header.vue","../src/components/Header/src/config/menus.ts","../src/components/Header/src/utils/openLink.ts","../src/components/Header/src/hooks/useHeaderMenu.ts","../src/components/Header/src/hooks/useHeaderTheme.ts","../src/index.ts"],"sourcesContent":["<template>\n <div class=\"w-full overflow-auto\">\n <table class=\"w-full border-collapse table-fixed\">\n <thead>\n <tr>\n <th \n v-for=\"column in columns\" \n :key=\"column.key\" \n :style=\"{ width: column.width }\"\n class=\"p-3 text-left bg-gray-100 text-gray-700 font-medium text-sm border-b border-gray-200\"\n >\n {{ column.title }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr \n v-for=\"(row, rowIndex) in data\" \n :key=\"rowKey ? row[rowKey] : rowIndex\"\n class=\"hover:bg-gray-50\"\n >\n <td \n v-for=\"column in columns\" \n :key=\"column.key\"\n class=\"p-3 text-left border-b border-gray-200 text-sm\"\n >\n <slot :name=\"column.key\" :row=\"row\" :index=\"rowIndex\">\n {{ row[column.key] }}\n </slot>\n </td>\n </tr>\n <tr v-if=\"!data || data.length === 0\">\n <td \n :colspan=\"columns.length\" \n class=\"p-8 text-center text-gray-500\"\n >\n <slot name=\"empty\">暂无数据</slot>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, PropType } from 'vue';\n\nexport interface TableColumn {\n key: string;\n title: string;\n width?: string;\n}\n\nexport default defineComponent({\n name: 'MyTable',\n props: {\n columns: {\n type: Array as PropType<TableColumn[]>,\n required: true\n },\n data: {\n type: Array as PropType<Record<string, any>[]>,\n default: () => []\n },\n rowKey: {\n type: String,\n default: ''\n }\n }\n});\n</script> ","<template>\n <button\n class=\"inline-flex justify-center items-center h-8 px-4 py-2 rounded-md text-sm font-medium transition-colors duration-200 focus:outline-none\"\n :class=\"[\n typeClasses,\n {\n 'opacity-50 cursor-not-allowed': disabled,\n 'relative': loading\n }\n ]\"\n :disabled=\"disabled || loading\"\n @click=\"handleClick\"\n >\n <span v-if=\"loading\" class=\"mr-2 w-4 h-4 i-svg-spinners-270-ring-with-bg\"></span>\n <slot></slot>\n </button>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed, PropType } from 'vue';\n\ntype ButtonType = 'primary' | 'success' | 'warning' | 'danger' | 'info' | 'default';\n\nexport default defineComponent({\n name: 'MyButton',\n props: {\n type: {\n type: String as PropType<ButtonType>,\n default: 'default'\n },\n disabled: {\n type: Boolean,\n default: false\n },\n loading: {\n type: Boolean,\n default: false\n }\n },\n emits: ['click'],\n setup(props, { emit }) {\n // 根据类型计算样式类\n const typeClasses = computed(() => {\n switch (props.type) {\n case 'primary':\n return 'bg-primary hover:bg-blue-500 text-white border-transparent';\n case 'success':\n return 'bg-success hover:bg-green-500 text-white border-transparent';\n case 'warning':\n return 'bg-warning hover:bg-yellow-500 text-white border-transparent';\n case 'danger':\n return 'bg-danger hover:bg-red-500 text-white border-transparent';\n case 'info':\n return 'bg-info hover:bg-gray-500 text-white border-transparent';\n default:\n return 'bg-white hover:bg-gray-100 text-gray-700 border border-gray-300';\n }\n });\n\n const handleClick = (e: MouseEvent) => {\n if (props.disabled || props.loading) return;\n emit('click', e);\n };\n\n return {\n typeClasses,\n handleClick\n };\n }\n});\n</script>\n\n<style>\n.my-button {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n line-height: 1;\n height: 32px;\n white-space: nowrap;\n cursor: pointer;\n color: #606266;\n text-align: center;\n box-sizing: border-box;\n outline: none;\n transition: 0.1s;\n font-weight: 500;\n padding: 8px 15px;\n font-size: 14px;\n border-radius: 4px;\n border: 1px solid #dcdfe6;\n background: #ffffff;\n}\n\n.my-button--primary {\n color: #fff;\n background-color: #409eff;\n border-color: #409eff;\n}\n\n.my-button--success {\n color: #fff;\n background-color: #67c23a;\n border-color: #67c23a;\n}\n\n.my-button--warning {\n color: #fff;\n background-color: #e6a23c;\n border-color: #e6a23c;\n}\n\n.my-button--danger {\n color: #fff;\n background-color: #f56c6c;\n border-color: #f56c6c;\n}\n\n.my-button.is-disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n.my-button__loading {\n display: inline-block;\n width: 14px;\n height: 14px;\n border: 2px solid currentColor;\n border-radius: 50%;\n border-right-color: transparent;\n margin-right: 5px;\n animation: rotate 1s linear infinite;\n}\n\n@keyframes rotate {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n</style> ","export enum LocaleTypeEnum {\n English = 'en',\n Chinese = 'zh-CN',\n}\n","import type { InjectionKey, ComputedRef } from 'vue';\nimport { LocaleTypeEnum } from '../constants/locale';\n\nexport interface NavTexts {\n loginText: string;\n logoutText: string;\n}\n\nexport const NAV_TEXTS_KEY: InjectionKey<ComputedRef<NavTexts>> = Symbol('nav-texts');\n\nexport const buildNavTexts = (lang: LocaleTypeEnum): NavTexts => {\n const isZh = lang === LocaleTypeEnum.Chinese;\n return {\n loginText: isZh ? '登录/注册' : 'Log In / Sign Up',\n logoutText: isZh ? '退出登录' : 'Log Out',\n };\n};\n","<template>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"icon/down\">\n <path id=\"Union\" d=\"M12.1382 5.86191C11.8778 5.60156 11.4557 5.60156 11.1954 5.86191L8.0001 9.05717L4.80484 5.86191C4.54449 5.60156 4.12238 5.60156 3.86203 5.86191C3.60168 6.12226 3.60168 6.54437 3.86203 6.80472L7.29299 10.2357C7.68352 10.6262 8.31668 10.6262 8.70721 10.2357L12.1382 6.80472C12.3985 6.54437 12.3985 6.12226 12.1382 5.86191Z\" fill=\"#2C364B\"/>\n </g>\n </svg>\n</template>","<template>\n <svg width=\"19px\" height=\"20px\" viewBox=\"0 0 19 20\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>yonghu-2</title>\n <g id=\"页面-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"flagos首页备份-4\" transform=\"translate(-1187, -32)\" fill=\"#FFFFFF\" fill-rule=\"nonzero\">\n <g id=\"yonghu-2\" transform=\"translate(1187, 32)\">\n <path d=\"M4.16667254,6.66658844 C4.16667254,3.9091208 6.40897956,1.66664712 9.1664472,1.66664712 C11.9239148,1.66664712 14.1663885,3.9091208 14.1663885,6.66658844 C14.1663885,9.42388942 11.9239148,11.6665298 9.1664472,11.6665298 C6.40897956,11.6665298 4.16650588,9.42388942 4.16650588,6.66658844 M18.3046733,18.9521109 C17.4853496,15.8829803 15.3253749,13.4830084 12.6130734,12.3621883 C14.5387175,11.192202 15.8330356,9.08056012 15.8330356,6.66642176 C15.832869,2.99079823 12.8420707,0 9.16628054,0 C5.49049035,0 2.4996921,2.99079823 2.4996921,6.66658844 C2.4996921,9.08056012 3.79384359,11.192202 5.72048764,12.3621883 C3.00801947,13.4838418 0.848044811,15.8829803 0.028221107,18.9521109 C-0.0900085115,19.3963877 0.174049854,19.8524478 0.618214182,19.971099 C1.06293982,20.0897021 1.51968816,19.8256771 1.63886887,19.3811059 C2.59002437,15.820481 5.68498805,13.3331769 9.16661386,13.3331769 C12.6482397,13.3331769 15.74387,15.8206477 16.6948589,19.3814392 C16.7515138,19.5951643 16.8909444,19.7775312 17.0823388,19.8882397 C17.2737332,19.9989483 17.5013346,20.0288842 17.7148469,19.9714323 C18.1590942,19.8527834 18.423176,19.3966084 18.30484,18.9522776\" id=\"形状\"></path>\n </g>\n </g>\n </g>\n </svg>\n</template>","<template>\n <el-dropdown popper-class=\"custom-dropdown\" size=\"large\" ref=\"dropdown\" trigger=\"click\" :show-arrow=\"false\" @visible-change=\"onVisibleChange\">\n <div class=\"flex items-center cursor-pointer\">\n <div class=\"w-24 h-24 rounded-50% font-600 flex-center mr-8\">\n <Header/>\n </div>\n\n <span>{{ userNickName }}</span>\n <el-icon\n class=\"el-icon--right !ml-16 transition-all duration-200\"\n :class=\"{\n ' rotate-180': dropdownVisible,\n }\"\n :size=\"16\"\n >\n <Down />\n </el-icon>\n </div>\n\n <template #dropdown>\n <el-dropdown-menu>\n <el-dropdown-item>\n <div class=\"flex items-center w-full text-14 mb-4\" @click=\"logout\">\n {{ navTexts?.logoutText }}\n </div>\n </el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n</template>\n\n<script setup lang=\"ts\">\nimport { inject, ref } from 'vue';\nimport { NAV_TEXTS_KEY } from './config/texts';\nimport Down from '../../../Icon/Down.vue';\nimport Header from '../../../Icon/Header.vue';\n\nconst navTexts = inject(NAV_TEXTS_KEY);\nconst dropdownVisible = ref(false);\nconst onVisibleChange = (visible: boolean) => {\n dropdownVisible.value = visible;\n};\ninterface Props {\n userNickName: string;\n currentPath: string;\n logout: () => void;\n}\n\ndefineProps<Props>();\n</script>\n\n<style scoped lang=\"scss\" >\n.reset-btn {\n border-color: #bec3cd;\n\n :deep(.el-button) {\n color: #3e4a54 !important;\n }\n &:hover {\n :deep(.el-button) {\n color: #3967e9 !important;\n }\n border-color: #3967e9;\n .el-icon {\n fill: #3967e9 !important;\n }\n }\n &:active {\n .el-icon {\n fill: #fff !important;\n }\n :deep(.el-button) {\n color: #fff !important;\n }\n border-color: transparent;\n background: #3967e9;\n }\n}\n</style>\n","<template>\n <el-button type=\"primary\" class=\"!rounded-4\" @click=\"login\">{{ navTexts?.loginText }}</el-button>\n</template>\n<script setup lang=\"ts\">\nimport { inject } from 'vue';\nimport { useRouter } from 'vue-router';\nimport { NAV_TEXTS_KEY } from './config/texts';\n\nconst navTexts = inject(NAV_TEXTS_KEY);\nconst router = useRouter();\n\nconst login = () => {\n router.push({ path: '/login', query: { redirect_url: encodeURIComponent(location.href) } });\n};\n</script>\n","import { LocaleTypeEnum } from '../constants/locale';\n\nexport const NAV_LOCALE_OPTIONS = [\n { value: LocaleTypeEnum.Chinese, label: '中文' },\n { value: LocaleTypeEnum.English, label: 'English' },\n];\n\nexport const NAV_LOCALE_TO_LANG: Record<LocaleTypeEnum, string> = {\n [LocaleTypeEnum.Chinese]: 'cn',\n [LocaleTypeEnum.English]: 'en',\n};\n\nexport const NAV_LANG_TO_LOCALE: Record<string, LocaleTypeEnum> = {\n cn: LocaleTypeEnum.Chinese,\n en: LocaleTypeEnum.English,\n};\n\nexport const NAV_WIKI_LANG_BY_LOCALE: Record<LocaleTypeEnum, string> = {\n [LocaleTypeEnum.Chinese]: 'zh',\n [LocaleTypeEnum.English]: 'en',\n};\n","<template>\n <el-dropdown class=\"cursor-pointer\" trigger=\"click\" popper-class=\"custom-dropdown\" placement=\"bottom\" @visible-change=\"handleChange\">\n <svg width=\"20px\" height=\"20px\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect fill=\"#D8D8D8\" opacity=\"0\" x=\"0\" y=\"0\" width=\"20\" height=\"20\"></rect>\n <path\n :fill=\"isWhite ? '#ffffff' : '#2C364B'\"\n fill-rule=\"nonzero\"\n d=\"M10,0 C4.48583334,0 0,4.48583334 0,10 C0,15.5141667 4.48583334,20 10,20 C15.5141667,20 20,15.5141667 20,10 C20,4.48583334 15.5141667,0 10,0 Z M18.6966667,10.9491667 L18.6925,10.9741667 C18.6575,11.2791667 18.6075,11.5791667 18.5425,11.8741667 L18.5425,11.875 L15.5258333,11.875 C15.657032,10.6284426 15.657032,9.37155738 15.5258333,8.125 L18.5425,8.125 C18.6075,8.42 18.6566667,8.72 18.6925,9.025 C18.6925,9.03333334 18.695,9.04166666 18.6966667,9.05083334 C18.7675,9.68166668 18.7675,10.3183333 18.6966667,10.9491667 L18.6966667,10.9491667 Z M13.34,18.0833333 C14.2783333,16.8683333 14.9891667,15.1491667 15.3516667,13.1241667 L18.1633333,13.1241667 C17.3009588,15.3668017 15.5579816,17.158563 13.34,18.0825 L13.34,18.0833333 Z M18.1625,6.87333334 L15.3516667,6.87333334 C14.9891667,4.84833334 14.2783333,3.13 13.34,1.915 C15.5576659,2.83912386 17.3003173,4.63085972 18.1625,6.87333334 L18.1625,6.87333334 Z M14.2658333,8.12333334 C14.4114344,9.36909341 14.4114344,10.6275733 14.2658333,11.8733333 L10.6241667,11.8733333 L10.6241667,8.12333334 L14.2658333,8.12333334 Z M10.6241667,6.87333334 L10.6241667,1.355 C12.1825,1.825 13.5008333,4.0025 14.07,6.87583334 L10.625,6.87583334 L10.6241667,6.87333334 Z M10.6241667,13.1233333 L14.07,13.1233333 C13.5008333,15.9983333 12.1825,18.175 10.625,18.645 L10.625,13.125 L10.6241667,13.1233333 Z M1.8375,13.1241667 L4.64833334,13.1241667 C5.01083334,15.1491667 5.72166668,16.8683333 6.66,18.0825 C4.44233408,17.1583761 2.69968275,15.3666403 1.8375,13.1241667 L1.8375,13.1241667 Z M6.66,1.91666666 C5.72166666,3.13 5.01083334,4.85 4.64833334,6.875 L1.83666666,6.875 C2.69923303,4.63220345 4.44253606,2.84041679 6.66083334,1.91666666 L6.66,1.91666666 Z M5.73416666,11.875 C5.58856559,10.6292399 5.58856559,9.37076007 5.73416666,8.125 L9.375,8.125 L9.375,11.875 L5.73333334,11.875 L5.73416666,11.875 Z M9.375,13.125 L9.375,18.6458333 C7.81666666,18.1758333 6.49916666,15.9983333 5.93,13.125 L9.375,13.125 Z M9.375,6.875 L5.93,6.875 C6.49916666,4.00166666 7.81666666,1.825 9.375,1.35416666 L9.375,6.875 Z M1.30416666,9.05 C1.30416666,9.04333334 1.30666666,9.03583334 1.3075,9.02833334 C1.34166666,8.725 1.39166666,8.42333334 1.4575,8.125 L4.47416666,8.125 C4.34243809,9.37152952 4.34243809,10.6284705 4.47416666,11.875 L1.4575,11.875 C1.39166666,11.5766667 1.34166666,11.275 1.3075,10.9716667 L1.30416666,10.9491667 C1.23220566,10.3184348 1.23220566,9.68156522 1.30416666,9.05083334 L1.30416666,9.05 Z\"\n />\n </svg>\n <template #dropdown>\n <el-dropdown-menu>\n <el-dropdown-item\n v-for=\"locale in localeOptions\"\n :key=\"locale.value\"\n :class=\"{ 'is-active': locale.value === currentLocale }\"\n @click=\"emitChangeLanguage(locale.value)\"\n >\n <span :class=\"{ 'color-primary': locale.value === currentLocale }\">\n {{ locale.label }}\n </span>\n </el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n</template>\n<script setup lang=\"tsx\">\nimport { ref, computed } from 'vue';\nimport { LocaleTypeEnum } from './constants/locale';\nimport { NAV_LOCALE_OPTIONS } from './config/locale';\n\nconst active = ref(false);\n\nconst handleChange = (val: boolean) => {\n active.value = val;\n};\n\ninterface LocaleOption {\n value: LocaleTypeEnum;\n label: string;\n}\n\ninterface Props {\n isWhiteTheme?: boolean;\n currentLocale: LocaleTypeEnum;\n localeOptions?: LocaleOption[];\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n isWhiteTheme: false,\n localeOptions: () => NAV_LOCALE_OPTIONS,\n});\n\nconst emits = defineEmits<{\n (e: 'change-language', locale: LocaleTypeEnum): void;\n}>();\n\nconst isWhite = computed(() => props.isWhiteTheme);\nconst currentLocale = computed(() => props.currentLocale);\nconst localeOptions = computed(() => props.localeOptions);\n\nconst emitChangeLanguage = (locale: LocaleTypeEnum) => {\n if (locale === currentLocale.value) {\n return;\n }\n emits('change-language', locale);\n};\n</script>\n<style scoped lang=\"scss\"></style>\n","export const matchPath = (path: string, targetPath: string): boolean => {\n if (!path || !targetPath) return false;\n return path.toLowerCase().indexOf(targetPath.toLowerCase()) >= 0;\n};\n\nexport const matchAnyPath = (path: string, targetPaths: string[]): boolean => {\n return targetPaths.some(targetPath => matchPath(path, targetPath));\n};\n","<template>\n <div\n class=\"w-full header-wrapper h-64px pl-120 pr-120 py-19 backdrop-blur-[14px] flex items-center justify-between text-#000 fixed left-0 top-0 z-99 bg-transparent overflow-x-scroll\"\n :class=\"{\n 'theme-white': isWhiteTheme,\n 'theme-scrolled': isScrolledTheme,\n '!b-0': matchPath(routePath, '/CommunityMembers'),\n }\"\n >\n <div class=\"flex-center\">\n <img\n class=\"logo\"\n :src=\"isWhiteTheme ? 'https://flagos.ks3-cn-beijing.ksyuncs.com/images/logo.svg' : 'https://flagos.ks3-cn-beijing.ksyuncs.com/images/logo-black.svg'\"\n @click=\"onLogoClick\"\n />\n <div class=\"flex gap-48 ml-80\">\n <div\n v-for=\"(menu, index) in menuList\"\n :index=\"index\"\n class=\"menu-item cursor-pointer whitespace-nowrap\"\n :class=\"{ active: menu.active }\"\n >\n <el-dropdown\n v-if=\"menu.dropdownList && menu.id === 'learn'\"\n popper-class=\"custom-dropdown-new\"\n :show-arrow=\"false\"\n >\n <span class=\"text-16\">{{ menu.label}}</span>\n <template #dropdown>\n <el-dropdown-menu class=\"flex-row\">\n <el-dropdown-item\n v-for=\"(childMenu, idx) in menu.dropdownList\"\n :key=\"idx\"\n :class=\"{ active: matchPath(routePath, childMenu.path) }\"\n @click=\"onJumpPage(menu, childMenu)\"\n >\n <span class=\"text-14 mb-16 !font-500\">{{ childMenu.label }}</span>\n <span class=\"text-14 whitespace-normal !font-400\">{{ childMenu.desc }}</span>\n </el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n <el-dropdown\n v-else-if=\"menu.dropdownList && menu.id === 'tools'\"\n popper-class=\"custom-dropdown-new\"\n :show-arrow=\"false\"\n >\n <span class=\"text-16\">{{ menu.label }}</span>\n <template #dropdown>\n <el-dropdown-menu>\n <el-dropdown-item v-for=\"(childMenu, idx) in menu.dropdownList\" :key=\"idx\" @click=\"onJumpPage(menu, childMenu)\">\n <span class=\"text-14 mb-16 !font-500\">{{childMenu.label }}</span>\n <span class=\"text-14 whitespace-normal !font-400\">{{ childMenu.desc }}</span>\n </el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n <el-dropdown v-else-if=\"menu.dropdownGroups && menu.id === 'projects'\" popper-class=\"custom-dropdown-new\" :show-arrow=\"false\">\n <span class=\"text-16\">{{ menu.label}}</span>\n <template #dropdown>\n <el-dropdown-menu class=\"flex gap-20 el-dropdown-menu_out\">\n <ul v-for=\"(group, idx) in menu.dropdownGroups\" :key=\"idx\" class=\"flex-1 el-dropdown-menu !w-[50%] !max-h-560px\">\n <span class=\"text-14 text-#bbbbbb leading-22 mb-20\">{{ group.label }}</span>\n <el-dropdown-item\n v-for=\"(childMenu, cidx) in group.list\"\n :key=\"cidx\"\n class=\"el-dropdown-menu__item !w-full\"\n @click=\"onJumpPage(menu, childMenu)\"\n >\n <span class=\"text-14 mb-16 !font-500\">{{ childMenu.label }}</span>\n <span class=\"text-14 whitespace-normal !font-400\">{{ childMenu.desc }}</span>\n </el-dropdown-item>\n </ul>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n <span v-else @click=\"onJumpPage(menu)\">{{ menu.label }}</span>\n </div>\n </div>\n </div>\n <div class=\"flex-center\" :class=\"isWhiteTheme ? 'text-#ffffff' : 'text-#262642'\">\n <Locale :isWhiteTheme=\"isWhiteTheme\" :current-locale=\"currentLocale\" @change-language=\"onChangeLanguage\" />\n <Login v-if=\"!userName\" class=\"ml-20\" />\n <Avatar\n v-if=\"userName\"\n class=\"header_avatar ml-20\"\n :class=\"isWhiteTheme ? 'text-#ffffff' : 'text-#262642'\"\n :user-nick-name=\"userNickName\"\n :current-path=\"routePath\"\n :logout=\"onLogout\"\n />\n </div>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport { computed, provide } from 'vue';\nimport Avatar from './Avatar.vue';\nimport Login from './Login.vue';\nimport Locale from './Locale.vue';\nimport { LocaleTypeEnum } from './constants/locale';\nimport { matchPath } from './utils/path';\nimport type { NavMenuItem, NavChildItem } from './config/menus';\nimport { NAV_TEXTS_KEY, buildNavTexts } from './config/texts';\nimport 'uno.css';\ninterface Props {\n routePath: string;\n menuList: NavMenuItem[];\n isWhiteTheme: boolean;\n isScrolledTheme: boolean;\n currentLocale: LocaleTypeEnum;\n userName?: string;\n userNickName: string;\n onLogoClick: () => void;\n onJumpPage: (menu: NavMenuItem, childMenu?: NavChildItem) => void;\n onChangeLanguage: (locale: LocaleTypeEnum) => void;\n onLogout: () => void;\n}\n\nconst props = defineProps<Props>();\n\nprovide(\n NAV_TEXTS_KEY,\n computed(() => buildNavTexts(props.currentLocale))\n);\n\n</script>\n<style scoped lang=\"scss\">\n.header-wrapper {\n transition: all 0.3s ease;\n border-bottom: 1px solid rgba(0, 0, 0, 0.13);\n &.theme-white {\n color: #fff;\n border: none;\n background: transparent;\n svg {\n color: #fff;\n }\n .menu-item {\n &::before {\n background-color: #fff;\n }\n :deep(.el-dropdown) {\n color: #fff;\n }\n }\n }\n &.theme-scrolled {\n background: #fff;\n color: #262642;\n border-bottom: 1px solid rgba(0, 0, 0, 0.13);\n svg {\n color: #262642;\n }\n .menu-item {\n &::before {\n background-color: #262642;\n }\n :deep(.el-dropdown) {\n color: #262642;\n }\n }\n }\n .logo {\n width: 100px;\n height: 38px;\n cursor: pointer;\n object-fit: contain;\n }\n svg {\n color: #262642;\n }\n .menu-item {\n display: flex;\n align-items: center;\n position: relative;\n font-size: 16px;\n &::before {\n content: '';\n display: block;\n position: absolute;\n left: 0;\n bottom: -2px;\n width: 0;\n height: 2px;\n border-radius: 1px;\n background-color: #262642;\n transition: all 0.3s ease;\n transform-origin: center;\n }\n &.active {\n font-weight: 600;\n &::before {\n width: 100%;\n }\n }\n :deep(.el-dropdown) {\n color: #262642;\n }\n }\n}\n</style>\n<style lang=\"scss\">\n .el-popper.custom-dropdown-new {\n padding: 0 !important;\n width: 100%;\n margin-left: -1px;\n // height: 90%;\n max-width: 100% !important;\n margin-top: 12px;\n // inset: 64px auto auto auto !important;\n box-shadow: none;\n background: #07111E;\n opacity: 0.95;\n .el-dropdown__list {\n width: 100% !important;\n height: 100% !important;\n padding: 56px 120px;\n \n .el-dropdown-menu_out{\n display: flex;\n flex-wrap: wrap;\n max-height: 90% !important;\n flex-direction: row !important;\n column-gap: 20px;\n row-gap: 4px;\n background: transparent !important;\n box-shadow: none !important;\n }\n \n .el-dropdown-menu {\n display: flex;\n max-height: 360px;\n flex-direction: column;\n flex-wrap: wrap;\n column-gap: 20px;\n row-gap: 4px;\n background: transparent !important;\n box-shadow: none !important;\n &.flex-row {\n flex-direction: row !important;\n flex-wrap: nowrap;\n }\n .el-dropdown-menu__item{\n width: calc((100% - 20px * 2) / 3);\n padding: 0 !important;\n min-height: 64px;\n font-family: PingFangSC, PingFang SC;\n font-weight: 600;\n font-size: 14px;\n color: #FFFFFF !important;\n line-height: 22px;\n padding: 20px 16px !important;\n border-radius: 8px;\n border: 1px solid transparent;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n }\n .el-dropdown-menu__item:hover, .el-dropdown-menu__item:focus {\n background: rgba(255,255,255, 0.05);\n border: 1px solid rgba(255,255,255, 0.2);\n \n }\n }\n }\n }\n</style>","import { LocaleTypeEnum } from '../constants/locale';\nimport { NAV_WIKI_LANG_BY_LOCALE } from './locale';\n\n// ---------- Types ----------\n\nexport interface NavChildItem {\n id: string;\n label: string;\n path: string;\n desc?: string;\n type: 'route' | 'link' | 'unopen';\n}\n\nexport interface NavDropdownGroup {\n id: string;\n label: string;\n list: NavChildItem[];\n}\n\nexport interface NavMenuItem {\n id: string;\n label: string;\n path?: string;\n active?: boolean;\n /** flat items (tools / learn) */\n dropdownList?: NavChildItem[];\n /** grouped items (projects) */\n dropdownGroups?: NavDropdownGroup[];\n}\nconst mainDevHost = ['platform-aiintegration-dev.baai.ac.cn']\nconst mainProdHost =['flagos.io', 'flagos.net', 'www.flagos.io', 'www.flagos.net']\nconst mainHost = [...mainProdHost, ...mainDevHost]\n// ---------- Mock data ----------\nconst isMainApp = () => {\n return mainHost.includes(location.host)\n\n}\nconst buildMenu = (lang: LocaleTypeEnum): NavMenuItem[] => {\n const isZh = lang === LocaleTypeEnum.Chinese;\n const wikiLang = NAV_WIKI_LANG_BY_LOCALE[lang];\n\n return [\n {\n id: 'home',\n label: isZh ? '首页' : 'Home',\n path: '/Home',\n },\n {\n id: 'projects',\n label: isZh ? '软件栈' : 'Software Stack',\n dropdownGroups: [\n {\n id: 'coreLib',\n label: isZh ? '开源核心库' : 'Open-Source Core Libraries',\n list: [\n {\n id: 'flagscale',\n label: 'FlagScale',\n path: '/FlagScale',\n desc: isZh\n ? '统一多芯片、多后端的大模型框架,提供覆盖训练、微调与推理部署的全流程能力'\n : 'A unified multi-backend large model framework across diverse chips, providing end-to-end capabilities spanning training, fine-tuning, and inference deployment.',\n type: 'route',\n },\n {\n id: 'flaggems',\n label: 'FlagGems',\n path: '/FlagGems',\n desc: isZh\n ? '基于Triton实现的高性能通用算子库'\n : 'A high-performance general operator library built on Triton.',\n type: 'route',\n },\n {\n id: 'flagtree',\n label: 'FlagTree',\n path: '/FlagTree',\n desc: isZh\n ? '面向多种硬件的开源、统一AI编译器'\n : 'An open-source unified AI compiler for diverse hardware.',\n type: 'route',\n },\n {\n id: 'flagcx',\n label: 'FlagCX',\n path: '/FlagCX',\n desc: isZh\n ? '一款专为大规模AI系统设计的可扩展、自适应高性能跨芯片通信库'\n : 'A scalable, adaptive, high-performance cross-chip communication library designed for large-scale AI systems.',\n type: 'route',\n },\n ],\n },\n {\n id: 'ecosystem',\n label: isZh ? '生态使能项目' : 'FlagOS Ecosystem Enablement Project',\n list: [\n {\n id: 'megatronfl',\n label: 'Megatron-FL',\n path: 'https://github.com/flagos-ai/Megatron-LM-FL',\n desc: isZh\n ? '为Megatron-LM打造的多芯片插件,实现大模型多芯片高效训练'\n : 'A multi-chip plugin for Megatron-LM, enabling efficient large-scale training across diverse chips.',\n type: 'link',\n },\n {\n id: 'vllmpluginfl',\n label: 'vLLM-plugin-FL',\n path: 'https://github.com/flagos-ai/vllm-plugin-FL',\n desc: isZh\n ? '为vLLM打造的多芯片插件,实现大模型多芯片高效推理部署'\n : 'A multi-chip plugin for vLLM, enabling efficient large model inference and deployment across diverse chips.',\n type: 'link',\n },\n {\n id: 'transformerenginefl',\n label: 'TransformerEngine-FL',\n path: 'https://github.com/flagos-ai/TransformerEngine-FL',\n desc: isZh\n ? '为TransformerEngine打造的多芯片插件,实现多种芯片上分布式算子'\n : 'A multi-chip plugin for TransformerEngine, enabling distributed operators across diverse chip architectures.',\n type: 'link',\n },\n ],\n },\n ],\n },\n {\n id: 'tools',\n label: isZh ? '工具' : 'Tools',\n dropdownList: [\n {\n id: 'skill',\n label: isZh ? 'Skill广场' : 'SkillHub',\n path: resolvePath('/SkillHub'),\n desc: isZh ? '一站式AI计算技能库' : 'One-stop AI computing skills library.',\n type: 'route',\n },\n {\n id: 'onlinelab',\n label: isZh ? '线上实验室' : 'Online Laboratory',\n path: isMainApp() ?'/OnlineLab': resolvePath('/OnlineLab'),\n desc: isZh ? '开箱即用的在线实验环境' : 'Ready-to-use online experiment environment.',\n type: 'route',\n },\n {\n id: 'modelplatform',\n label: isZh ? '模型服务平台' : 'MaaS',\n path: '',\n desc: isZh\n ? '全生命周期大模型API服务平台'\n : 'A full-lifecycle API service platform for large models.',\n type: 'unopen',\n },\n {\n id: 'kernelgen',\n label: 'KernelGen',\n path: 'https://kernelgen.flagos.io/',\n desc: isZh\n ? '分钟级构建Kernel,支持多芯片后端'\n : 'Build Kernels in Minutes with Multi-Backend Support.',\n type: 'link',\n },\n {\n id: 'flagrelease',\n label: 'FlagRelease',\n path: '',\n desc: isZh\n ? '一套自动化迁移大模型至不同硬件产品的工具平台'\n : 'An automated tool platform for migrating large model to diverse hardware.',\n type: 'unopen',\n },\n {\n id: 'flagcicd',\n label: 'FlagCICD',\n path: '',\n desc: isZh\n ? '面向 AI 开发的持续集成 / 持续部署工具链'\n : 'A CI/CD toolchain for AI development.',\n type: 'unopen',\n },\n {\n id: 'flagmodelhub',\n label: isZh ? '九鼎AI一体化平台' : 'Jiuding AI Integrated Platform',\n path: '',\n desc: isZh\n ? '整合 FlagOS 全栈能力,提供从模型开发、训练到部署的一站式 AI 工程化平台'\n : 'Jiuding AI Platform.',\n type: 'unopen',\n },\n ],\n },\n {\n id: 'docs',\n label: isZh ? '文档' : 'Docs',\n },\n {\n id: 'learn',\n label: isZh ? '学习' : 'Learn',\n dropdownList: [\n {\n id: 'wiki',\n label: 'Wiki',\n desc: isZh ? '智能文档,边看边问边学': 'AI-powered interactive docs: query and learn in real-time.',\n path: `https://wiki.flagos.io`,\n type: 'link',\n },\n { id: 'professionalcourse', label: isZh ? '专业课' : 'Core Courses', desc: isZh ? '众智FlagOS系列开源课程' : 'The official open-source course series for the FlagOS ecosystem.', path: 'https://flagos.educoder.net/paths', type: 'link' },\n { id: 'course',label: isZh ? '讲座' : 'Tech Talks', desc: isZh ? '大咖分享,业界前沿讲座' : 'Cutting-edge insights and deep dives from industry leaders.', path: '/LearnCenter', type: 'route' },\n ],\n },\n {\n id: 'events',\n label: isZh ? '活动赛事' : 'Event & Competition',\n path: isMainApp() ?'/events': resolvePath('/events'),\n },\n {\n id: 'onlinelab-top',\n label: isZh ? '线上实验室' : 'Online Laboratory',\n path: isMainApp() ?'/OnlineLab': resolvePath('/OnlineLab'),\n },\n ];\n};\nconst resolvePath = (path: string): string => {\n if(mainProdHost.includes(location.hostname)) {\n return `https://${location.hostname}${path}`;\n } else {\n return `${location.protocol}//${path.slice(1).toLocaleLowerCase()}.${mainDevHost[0]}`;\n }\n};\n\nconst resolveMenuPaths = (items: NavMenuItem[]): NavMenuItem[] => {\n return items;\n};\n\n/**\n * Fetch nav menu by lang.\n * Replace the mock body with a real HTTP call when the backend is ready:\n * return request({ method: 'get', url: '/nav/menus', params: { lang } }).then(res => res.data);\n */\nexport const getNavMenuApi = (lang: LocaleTypeEnum): NavMenuItem[] => {\n return resolveMenuPaths(buildMenu(lang));\n};\n","export const openLink = (url: string) => {\n window.open(url, '_blank');\n};\n","import { ref, watch } from 'vue';\nimport type { Ref } from 'vue';\nimport { ElMessage } from 'element-plus';\nimport type { LocaleTypeEnum } from '../constants/locale';\nimport { getNavMenuApi, type NavMenuItem, type NavChildItem } from '../config/menus';\nimport { openLink } from '../utils/openLink';\nimport { matchPath, matchAnyPath } from '../utils/path';\nimport { NavigationFailure } from 'vue-router';\n\nexport function useHeaderMenu(\n currentLocale: Ref<LocaleTypeEnum>,\n push: (path: any) => Promise<NavigationFailure | void | undefined>,\n /** String shown when user clicks an unavailable item (e.g. t('projects.unopentip')) */\n unopenTip: Ref<string> | string\n) {\n const menuList = ref<NavMenuItem[]>([]);\n\n const fetchMenu = (lang: LocaleTypeEnum) => {\n const data = getNavMenuApi(lang);\n // preserve active state across refetch\n const activeId = menuList.value.find(m => m.active)?.id;\n menuList.value = data.map(m => ({ ...m, active: m.id === activeId }));\n };\n\n watch(currentLocale, lang => fetchMenu(lang), { immediate: true });\n\n const syncActiveMenu = (route: any) => {\n menuList.value.forEach(item => (item.active = false));\n const curIdx = menuList.value.findIndex(item => {\n if (item.dropdownList) {\n return item.dropdownList.some(child => matchPath(route?.path, child.path));\n }\n if (item.dropdownGroups) {\n return item.dropdownGroups.some(group =>\n group.list.some(child => matchPath(route?.path, child.path))\n );\n }\n if (matchPath(item.path as string, '/events') && matchAnyPath(route?.path, ['/EventDetail', '/RaceDetail'])) return true;\n if (item.id === 'onlinelab-top' && matchPath(route?.path, '/OnlineLab')) return true;\n return matchPath(route?.path, item.path as string);\n });\n if (curIdx >= 0) menuList.value[curIdx].active = true;\n };\n\n const handleJumpPage = (menu: NavMenuItem, childMenu?: NavChildItem) => {\n const tip = typeof unopenTip === 'string' ? unopenTip : unopenTip.value;\n\n if (['tools', 'projects', 'learn'].includes(menu.id)) {\n if (!childMenu) return;\n if (childMenu.path.startsWith('http')) return openLink(childMenu.path);\n if (childMenu.path) return push(childMenu.path);\n if (childMenu.type === 'unopen') return ElMessage.warning(tip);\n }\n if (menu.id === 'docs') return openLink('https://docs.flagos.io/');\n\n menuList.value.forEach(item => (item.active = false));\n menu.active = true;\n push(childMenu ? childMenu.path : menu.path);\n };\n\n return { menuList, syncActiveMenu, handleJumpPage };\n}\n","import { ref, nextTick, onMounted, onUnmounted } from 'vue';\nimport throttle from 'lodash/throttle';\nimport { matchPath, matchAnyPath } from '../utils/path';\n\nexport function useHeaderTheme(route: any) {\n const lastScrollTop = ref(0);\n const isWhiteTheme = ref(false);\n const isScrolledTheme = ref(false);\n\n const SCROLL_THRESHOLDS = {\n home: { getThreshold: () => window.innerHeight - 80 },\n events: { getThreshold: () => 390 - 80 },\n onlineLab: { getThreshold: () => 180 - 80 },\n };\n\n const updateThemeByScroll = (scrollTop: number, threshold: number) => {\n if (scrollTop > threshold) {\n isWhiteTheme.value = false;\n isScrolledTheme.value = true;\n } else {\n isWhiteTheme.value = true;\n isScrolledTheme.value = false;\n }\n lastScrollTop.value = scrollTop <= 0 ? 0 : scrollTop;\n };\n\n const handleScroll = throttle(() => {\n const scrollTop = window.scrollY || document.documentElement.scrollTop || 0;\n updateThemeByScroll(scrollTop, SCROLL_THRESHOLDS.home.getThreshold());\n }, 200);\n\n const handleEventsScroll = throttle(() => {\n const scrollTop = window.scrollY || document.documentElement.scrollTop || 0;\n const threshold = matchPath(route?.path, '/OnlineLab') ? SCROLL_THRESHOLDS.onlineLab.getThreshold() : SCROLL_THRESHOLDS.events.getThreshold();\n updateThemeByScroll(scrollTop, threshold);\n }, 200);\n\n const bindByRoute = () => {\n window.removeEventListener('scroll', handleScroll);\n window.removeEventListener('scroll', handleEventsScroll);\n\n if (matchPath(route?.path, '/Home')) {\n isWhiteTheme.value = true;\n isScrolledTheme.value = false;\n window.addEventListener('scroll', handleScroll);\n nextTick(() => handleScroll());\n } else if (matchAnyPath(route?.path, ['/events', '/EventDetail', '/RaceDetail', '/OnlineLab'])) {\n isWhiteTheme.value = true;\n isScrolledTheme.value = false;\n window.addEventListener('scroll', handleEventsScroll);\n nextTick(() => handleEventsScroll());\n } else {\n isWhiteTheme.value = false;\n isScrolledTheme.value = false;\n }\n };\n\n onMounted(() => bindByRoute());\n onUnmounted(() => {\n window.removeEventListener('scroll', handleScroll);\n window.removeEventListener('scroll', handleEventsScroll);\n });\n\n return { lastScrollTop, isWhiteTheme, isScrolledTheme, bindByRoute, handleScroll, handleEventsScroll };\n}\n","import type { App } from 'vue';\nimport MyTable from './components/Table/index.vue';\nimport MyButton from './components/Button/index.vue';\nimport Header from './components/Header/src/Header.vue';\nexport * from './components/Header/src/index';\nexport { MyTable, MyButton, Header };\n\n// 插件安装方法\nexport default {\n install(app: App) {\n app.component('MyButton', MyButton);\n app.component('MyTable', MyTable);\n }\n}; "],"names":["_sfc_render","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_Fragment","_renderList","_normalizeStyle","_hoisted_3","_normalizeClass","_createCommentVNode","LocaleTypeEnum"],"mappings":";;;;AAqDA,MAAA,cAAe,gBAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,OAAO;AAAA,IACL,SAAS;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,IACZ;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS,MAAM,CAAC;AAAA,IAClB;AAAA,IACA,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACF;AACF,CAAC;;;;;;;;;;;;AAnEG,SAAAA,cAAA,MAsCQ,QAtCR,QAsCQ,QAAA,OAAA,UAAA;SArCNC,UAWQ,GAAAC,mBAAA,OAAAC,cAAA;AAAA,IAAAC,mBAVN,SASKC,cAAA;AAAA,MARHD,mBAAA,SAAA,MAAA;AAAA,QAAAA,mBAAA,MAAA,MAAA;AAAA,WAAAH,UAEQ,IAAO,GAAGC,mBAAAI,UAAA,MAAAC,WAAA,KAAA,SAAA,CAAA,WAAA;AACV,mBAAAN,UAAA,GAAAC,mBAAkB,MAAK;AAAA,cAC7B,KAAK,OAAC;AAAA,cAAA,OAAAM,eAEH,EAAO,OAAK,OAAA,MAAA,CAAA;AAAA,cAAA,OAAA;AAAA;;QAIrB,CAAA;AAAA,MAAA,CAAA;AAAA,MACEJ,mBAAA,SAAA,MAAA;AAAA,SAAAH,UAEQ,0BAAmBK,UAAY,MAAAC,WAAA,KAAA,MAAA,CAAA,KAAA,aAAA;AAChC,iBAAAN,UAAA,GAAmBC,mBAAA,MAAA;AAAA,YAAA,KAAA,KAAA,SAAA,IAAA,KAAA,UAAA;AAAA;;aAIhBD,UAAA,IAAO,GAAGC,mBAAAI,UAAA,MAAAC,WAAA,KAAA,SAAA,CAAA,WAAA;qBACXN,UAAC,GAAAC,mBAAA,MAAA;AAAA,gBAAA,KAAA,OAAA;AAAA,gBAEN,OAAA;AAAA,cAAA,GAAA;AAAA,2BAA4C,KAAQ,QAAA,OAAA,KAAA;AAAA,kBAAA;AAAA;;;;;;UAK7C,CAAA;AAAA,QAAA,CAAA,GAAA,GAAA;AAAA,cACT,QAKK,KAAA,KAAA,WAAA,KAAAD,aAJOC,mBAAc,MAAAO,cAAA;AAAA,UAClBL,mBAAA,MAAA;AAAA,YAAA,SAAA,KAAA,QAAA;AAAA,YAEN,OAAA;AAAA,UAAA,GAAA;AAAA;;;;;;;;;;ACbZ,MAAA,cAAe,gBAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,OAAO;AAAA,IACL,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,OAAO,CAAC,OAAO;AAAA,EACf,MAAM,OAAO,EAAE,QAAQ;AAEf,UAAA,cAAc,SAAS,MAAM;AACjC,cAAQ,MAAM,MAAM;AAAA,QAClB,KAAK;AACI,iBAAA;AAAA,QACT,KAAK;AACI,iBAAA;AAAA,QACT,KAAK;AACI,iBAAA;AAAA,QACT,KAAK;AACI,iBAAA;AAAA,QACT,KAAK;AACI,iBAAA;AAAA,QACT;AACS,iBAAA;AAAA,MACX;AAAA,IAAA,CACD;AAEK,UAAA,cAAc,CAAC,MAAkB;AACjC,UAAA,MAAM,YAAY,MAAM;AAAS;AACrC,WAAK,SAAS,CAAC;AAAA,IAAA;AAGV,WAAA;AAAA,MACL;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACF,CAAC;;;MAxDwBC,eAAM;AAAA,EAAA,KAAA;AAAA;;SAXtBL,cAAC,MAAA,QAAA,QAAA,QAAA,OAAA,UAAA;SACUC,UAAW,GAAAC,mBAAA,UAAA;AAAA,IAAA,OAAAQ,eAAA,CAAA,0IAAA;AAAA;;;;MAO1B;AAAA,IAAA,CACA,CAAA;AAAA,IAAA,UAAA,KAAA,YAAA,KAAA;AAAA,aAEW,OAAO,OAAA,OAAA,KAAA,IAAA,SAAA,KAAA,eAAA,KAAA,YAAA,GAAA,IAAA;AAAA,EAAA,GAAA;AAAA,oBACnBT,UAAa,GAAAC,mBAAA,QAAAG,YAAA,KAAAM,mBAAA,IAAA,IAAA;AAAA;;;;ACdL,IAAA,mCAAAC,oBAAL;AACHA,kBAAA,aAAU;AACVA,kBAAA,aAAU;AAFFA,SAAAA;AAAA,GAAA,kBAAA,CAAA,CAAA;ACQC,MAAA,gBAAqD,OAAO,WAAW;AAEvE,MAAA,gBAAgB,CAAC,SAAmC;AACvD,QAAA,OAAO,SAAS,eAAe;AAC9B,SAAA;AAAA,IACH,WAAW,OAAO,8BAAU;AAAA,IAC5B,YAAY,OAAO,6BAAS;AAAA,EAAA;AAEpC;;ACfQ,MAAAT,eAAU;AAAA,EAAC;EAAY;EAAoB,SAAW;AAAA,EAAC;;;AAA5D,SAAAH,cAAA,MAAA,QAAA;SAGSC,UAAA,GAAAC,mBAFa,OAAAC,cAAA,OAAA,OAAA,OAAA,KAAA;AAAA,uBACwV,KAAA,EAAA,IAAA,YAAA,GAAA;AAAA,MAAhWC,mBAAU,QAAA;AAAA,QAAC,IAAoU;AAAA,QAAC,GAAA;AAAA;;;;;;;ACFxV,MAAAD,eAAY;AAAA,EAAC;EAAc;EAAoB,SAAQ;AAAA,EAAM,SAAkC;AAAA,EAAC,OAAA;AAAA;;AAArG,SAAA,YAAA,MAAA,QAAA;AACI,SAAAF,UAAA,GAAuBC,mBAAR,OAAAC,cAAA,OAAA,OAAA,OAAA,KAAA;AAAA,IACfC,mBAMI,SAAA,MAAA,YAAA,EAAA;AAAA,IANDA,mBAAS,KAAA;AAAA,MAAC,IAAA;AAAA,MAAc,QAAA;AAAA,MAAiB,gBAAW;AAAA,MAAC,MAAA;AAAA;OAKhD;AAAA,MAJDA,mBAAiB,KAAA;AAAA,QAAC,IAAA;AAAA,QAAkC,WAAc;AAAA,QAAC,MAAA;AAAA;SAG9D;AAAA,QAFDA,mBAAa,KAAA;AAAA,UAAC,IAAA;AAAA;WACwoC;AAAA,UAA/oCA,mBAA+nC,QAAA;AAAA,YAAC;;;;;;;;;;;;;;;;;;;AC+BppC,UAAA,WAAW,OAAO,aAAa;AAC/B,UAAA,kBAAkB,IAAI,KAAK;AAC3B,UAAA,kBAAkB,CAAC,YAAqB;AAC1C,sBAAgB,QAAQ;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChCtB,UAAA,WAAW,OAAO,aAAa;AACrC,UAAM,SAAS;AAEf,UAAM,QAAQ,MAAM;AAChB,aAAO,KAAK,EAAE,MAAM,UAAU,OAAO,EAAE,cAAc,mBAAmB,SAAS,IAAI,EAAE,EAAG,CAAA;AAAA,IAAA;;;;;;;;;;;;;;;;;;;ACVvF,MAAM,qBAAqB;AAAA,EAC9B,EAAE,OAAO,eAAe,SAAS,OAAO,eAAK;AAAA,EAC7C,EAAE,OAAO,eAAe,SAAS,OAAO,UAAU;AACtD;AAEO,MAAM,qBAAqD;AAAA,EAC9D,CAAC,eAAe,UAAU;AAAA,EAC1B,CAAC,eAAe,UAAU;AAC9B;AAEO,MAAM,qBAAqD;AAAA,EAC9D,IAAI,eAAe;AAAA,EACnB,IAAI,eAAe;AACvB;AAEO,MAAM,0BAA0D;AAAA,EACnE,CAAC,eAAe,UAAU;AAAA,EAC1B,CAAC,eAAe,UAAU;AAC9B;;;;;;;;;;;;;;;;;ACWM,UAAA,SAAS,IAAI,KAAK;AAElB,UAAA,eAAe,CAAC,QAAiB;AACnC,aAAO,QAAQ;AAAA,IAAA;AAcnB,UAAM,QAAQ;AAKd,UAAM,QAAQ;AAId,UAAM,UAAU,SAAS,MAAM,MAAM,YAAY;AACjD,UAAM,gBAAgB,SAAS,MAAM,MAAM,aAAa;AACxD,UAAM,gBAAgB,SAAS,MAAM,MAAM,aAAa;AAElD,UAAA,qBAAqB,CAAC,WAA2B;AAC/C,UAAA,WAAW,cAAc,OAAO;AAChC;AAAA,MACJ;AACA,YAAM,mBAAmB,MAAM;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjEtB,MAAA,YAAY,CAAC,MAAc,eAAgC;AAChE,MAAA,CAAC,QAAQ,CAAC;AAAmB,WAAA;AACjC,SAAO,KAAK,cAAc,QAAQ,WAAW,YAAA,CAAa,KAAK;AACnE;AAEa,MAAA,eAAe,CAAC,MAAc,gBAAmC;AAC1E,SAAO,YAAY,KAAK,CAAA,eAAc,UAAU,MAAM,UAAU,CAAC;AACrE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC+GA,UAAM,QAAQ;AAEd;AAAA,MACI;AAAA,MACA,SAAS,MAAM,cAAc,MAAM,aAAa,CAAC;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7FrD,MAAM,cAAc,CAAC,uCAAuC;AAC5D,MAAM,eAAc,CAAC,aAAa,cAAc,iBAAiB,gBAAgB;AACjF,MAAM,WAAW,CAAC,GAAG,cAAc,GAAG,WAAW;AAEjD,MAAM,YAAY,MAAM;AACd,SAAA,SAAS,SAAS,SAAS,IAAI;AAEzC;AACA,MAAM,YAAY,CAAC,SAAwC;AACjD,QAAA,OAAO,SAAS,eAAe;AACpB,0BAAwB;AAElC,SAAA;AAAA,IACH;AAAA,MACI,IAAI;AAAA,MACJ,OAAO,OAAO,iBAAO;AAAA,MACrB,MAAM;AAAA,IACV;AAAA,IACA;AAAA,MACI,IAAI;AAAA,MACJ,OAAO,OAAO,uBAAQ;AAAA,MACtB,gBAAgB;AAAA,QACZ;AAAA,UACI,IAAI;AAAA,UACJ,OAAO,OAAO,mCAAU;AAAA,UACxB,MAAM;AAAA,YACF;AAAA,cACI,IAAI;AAAA,cACJ,OAAO;AAAA,cACP,MAAM;AAAA,cACN,MAAM,OACA,6NACA;AAAA,cACN,MAAM;AAAA,YACV;AAAA,YACA;AAAA,cACI,IAAI;AAAA,cACJ,OAAO;AAAA,cACP,MAAM;AAAA,cACN,MAAM,OACA,yFACA;AAAA,cACN,MAAM;AAAA,YACV;AAAA,YACA;AAAA,cACI,IAAI;AAAA,cACJ,OAAO;AAAA,cACP,MAAM;AAAA,cACN,MAAM,OACA,iGACA;AAAA,cACN,MAAM;AAAA,YACV;AAAA,YACA;AAAA,cACI,IAAI;AAAA,cACJ,OAAO;AAAA,cACP,MAAM;AAAA,cACN,MAAM,OACA,+KACA;AAAA,cACN,MAAM;AAAA,YACV;AAAA,UACJ;AAAA,QACJ;AAAA,QACA;AAAA,UACI,IAAI;AAAA,UACJ,OAAO,OAAO,yCAAW;AAAA,UACzB,MAAM;AAAA,YACF;AAAA,cACI,IAAI;AAAA,cACJ,OAAO;AAAA,cACP,MAAM;AAAA,cACN,MAAM,OACA,oJACA;AAAA,cACN,MAAM;AAAA,YACV;AAAA,YACA;AAAA,cACI,IAAI;AAAA,cACJ,OAAO;AAAA,cACP,MAAM;AAAA,cACN,MAAM,OACA,yJACA;AAAA,cACN,MAAM;AAAA,YACV;AAAA,YACA;AAAA,cACI,IAAI;AAAA,cACJ,OAAO;AAAA,cACP,MAAM;AAAA,cACN,MAAM,OACA,0JACA;AAAA,cACN,MAAM;AAAA,YACV;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,IAAI;AAAA,MACJ,OAAO,OAAO,iBAAO;AAAA,MACrB,cAAc;AAAA,QACV;AAAA,UACI,IAAI;AAAA,UACJ,OAAO,OAAO,sBAAY;AAAA,UAC1B,MAAM,YAAY,WAAW;AAAA,UAC7B,MAAM,OAAO,uDAAe;AAAA,UAC5B,MAAM;AAAA,QACV;AAAA,QACA;AAAA,UACI,IAAI;AAAA,UACJ,OAAO,OAAO,mCAAU;AAAA,UACxB,MAAM,UAAa,IAAA,eAAc,YAAY,YAAY;AAAA,UACzD,MAAM,OAAO,uEAAgB;AAAA,UAC7B,MAAM;AAAA,QACV;AAAA,QACA;AAAA,UACI,IAAI;AAAA,UACJ,OAAO,OAAO,yCAAW;AAAA,UACzB,MAAM;AAAA,UACN,MAAM,OACA,gFACA;AAAA,UACN,MAAM;AAAA,QACV;AAAA,QACA;AAAA,UACI,IAAI;AAAA,UACJ,OAAO;AAAA,UACP,MAAM;AAAA,UACN,MAAM,OACA,yFACA;AAAA,UACN,MAAM;AAAA,QACV;AAAA,QACA;AAAA,UACI,IAAI;AAAA,UACJ,OAAO;AAAA,UACP,MAAM;AAAA,UACN,MAAM,OACA,yIACA;AAAA,UACN,MAAM;AAAA,QACV;AAAA,QACA;AAAA,UACI,IAAI;AAAA,UACJ,OAAO;AAAA,UACP,MAAM;AAAA,UACN,MAAM,OACA,4GACA;AAAA,UACN,MAAM;AAAA,QACV;AAAA,QACA;AAAA,UACI,IAAI;AAAA,UACJ,OAAO,OAAO,iDAAc;AAAA,UAC5B,MAAM;AAAA,UACN,MAAM,OACA,+LACA;AAAA,UACN,MAAM;AAAA,QACV;AAAA,MACJ;AAAA,IACJ;AAAA,IACA;AAAA,MACI,IAAI;AAAA,MACJ,OAAO,OAAO,iBAAO;AAAA,IACzB;AAAA,IACC;AAAA,MACG,IAAI;AAAA,MACJ,OAAO,OAAO,iBAAO;AAAA,MACrB,cAAc;AAAA,QACV;AAAA,UACI,IAAI;AAAA,UACJ,OAAO;AAAA,UACP,MAAM,OAAO,uEAAe;AAAA,UAC5B,MAAM;AAAA,UACN,MAAM;AAAA,QACV;AAAA,QACA,EAAE,IAAI,sBAAsB,OAAO,OAAO,uBAAQ,gBAAgB,MAAM,OAAO,2DAAmB,oEAAoE,MAAM,qCAAqC,MAAM,OAAO;AAAA,QAC9N,EAAE,IAAI,UAAS,OAAO,OAAO,iBAAO,cAAc,MAAM,OAAO,uEAAgB,+DAA+D,MAAM,gBAAgB,MAAM,QAAQ;AAAA,MACtL;AAAA,IACJ;AAAA,IACA;AAAA,MACI,IAAI;AAAA,MACJ,OAAO,OAAO,6BAAS;AAAA,MACvB,MAAM,UAAa,IAAA,YAAW,YAAY,SAAS;AAAA,IACvD;AAAA,IACA;AAAA,MACI,IAAI;AAAA,MACJ,OAAO,OAAO,mCAAU;AAAA,MACxB,MAAM,UAAa,IAAA,eAAc,YAAY,YAAY;AAAA,IAC7D;AAAA,EAAA;AAER;AACA,MAAM,cAAc,CAAC,SAAyB;AAC1C,MAAG,aAAa,SAAS,SAAS,QAAQ,GAAG;AAClC,WAAA,WAAW,SAAS,WAAW;AAAA,EAAA,OACnC;AACI,WAAA,GAAG,SAAS,aAAa,KAAK,MAAM,CAAC,EAAE,kBAAkB,KAAK,YAAY;AAAA,EACrF;AACJ;AAEA,MAAM,mBAAmB,CAAC,UAAwC;AACvD,SAAA;AACX;AAOa,MAAA,gBAAgB,CAAC,SAAwC;AAC3D,SAAA,iBAAiB,UAAU,IAAI,CAAC;AAC3C;ACnPa,MAAA,WAAW,CAAC,QAAgB;AAC9B,SAAA,KAAK,KAAK,QAAQ;AAC7B;ACOgB,SAAA,cACZ,eACA,MAEA,WACF;AACQ,QAAA,WAAW,IAAmB,CAAA,CAAE;AAEhC,QAAA,YAAa,CAAC,SAAyB;;AACnC,UAAA,OAAQ,cAAc,IAAI;AAEhC,UAAM,YAAW,cAAS,MAAM,KAAK,CAAK,MAAA,EAAE,MAAM,MAAjC,mBAAoC;AAC5C,aAAA,QAAQ,KAAK,IAAI,CAAM,OAAA,EAAE,GAAG,GAAG,QAAQ,EAAE,OAAO,SAAA,EAAW;AAAA,EAAA;AAGlE,QAAA,eAAe,UAAQ,UAAU,IAAI,GAAG,EAAE,WAAW,MAAM;AAE3D,QAAA,iBAAiB,CAAC,UAAe;AACnC,aAAS,MAAM,QAAQ,CAAS,SAAA,KAAK,SAAS,KAAM;AACpD,UAAM,SAAS,SAAS,MAAM,UAAU,CAAQ,SAAA;AAC5C,UAAI,KAAK,cAAc;AACZ,eAAA,KAAK,aAAa,KAAK,CAAA,UAAS,UAAU,+BAAO,MAAM,MAAM,IAAI,CAAC;AAAA,MAC7E;AACA,UAAI,KAAK,gBAAgB;AACrB,eAAO,KAAK,eAAe;AAAA,UAAK,CAAA,UAC5B,MAAM,KAAK,KAAK,CAAA,UAAS,UAAU,+BAAO,MAAM,MAAM,IAAI,CAAC;AAAA,QAAA;AAAA,MAEnE;AACI,UAAA,UAAU,KAAK,MAAgB,SAAS,KAAK,aAAa,+BAAO,MAAM,CAAC,gBAAgB,aAAa,CAAC;AAAU,eAAA;AACpH,UAAI,KAAK,OAAO,mBAAmB,UAAU,+BAAO,MAAM,YAAY;AAAU,eAAA;AAChF,aAAO,UAAU,+BAAO,MAAM,KAAK,IAAc;AAAA,IAAA,CACpD;AACD,QAAI,UAAU;AAAY,eAAA,MAAM,QAAQ,SAAS;AAAA,EAAA;AAG/C,QAAA,iBAAiB,CAAC,MAAmB,cAA6B;AACpE,UAAM,MAAM,OAAO,cAAc,WAAW,YAAY,UAAU;AAE9D,QAAA,CAAC,SAAS,YAAY,OAAO,EAAE,SAAS,KAAK,EAAE,GAAG;AAClD,UAAI,CAAC;AAAW;AACZ,UAAA,UAAU,KAAK,WAAW,MAAM;AAAU,eAAA,SAAS,UAAU,IAAI;AACrE,UAAI,UAAU;AAAa,eAAA,KAAK,UAAU,IAAI;AAC9C,UAAI,UAAU,SAAS;AAAiB,eAAA,UAAU,QAAQ,GAAG;AAAA,IACjE;AACA,QAAI,KAAK,OAAO;AAAQ,aAAO,SAAS,yBAAyB;AAEjE,aAAS,MAAM,QAAQ,CAAS,SAAA,KAAK,SAAS,KAAM;AACpD,SAAK,SAAS;AACd,SAAK,YAAY,UAAU,OAAO,KAAK,IAAI;AAAA,EAAA;AAGxC,SAAA,EAAE,UAAU,gBAAgB;AACvC;ACzDO,SAAS,eAAe,OAAY;AACjC,QAAA,gBAAgB,IAAI,CAAC;AACrB,QAAA,eAAe,IAAI,KAAK;AACxB,QAAA,kBAAkB,IAAI,KAAK;AAEjC,QAAM,oBAAoB;AAAA,IACtB,MAAM,EAAE,cAAc,MAAM,OAAO,cAAc,GAAG;AAAA,IACpD,QAAQ,EAAE,cAAc,MAAM,MAAM,GAAG;AAAA,IACvC,WAAW,EAAE,cAAc,MAAM,MAAM,GAAG;AAAA,EAAA;AAGxC,QAAA,sBAAsB,CAAC,WAAmB,cAAsB;AAClE,QAAI,YAAY,WAAW;AACvB,mBAAa,QAAQ;AACrB,sBAAgB,QAAQ;AAAA,IAAA,OACrB;AACH,mBAAa,QAAQ;AACrB,sBAAgB,QAAQ;AAAA,IAC5B;AACc,kBAAA,QAAQ,aAAa,IAAI,IAAI;AAAA,EAAA;AAGzC,QAAA,eAAe,SAAS,MAAM;AAChC,UAAM,YAAY,OAAO,WAAW,SAAS,gBAAgB,aAAa;AAC1E,wBAAoB,WAAW,kBAAkB,KAAK,aAAc,CAAA;AAAA,KACrE,GAAG;AAEA,QAAA,qBAAqB,SAAS,MAAM;AACtC,UAAM,YAAY,OAAO,WAAW,SAAS,gBAAgB,aAAa;AAC1E,UAAM,YAAY,UAAU,+BAAO,MAAM,YAAY,IAAI,kBAAkB,UAAU,aAAa,IAAI,kBAAkB,OAAO,aAAa;AAC5I,wBAAoB,WAAW,SAAS;AAAA,KACzC,GAAG;AAEN,QAAM,cAAc,MAAM;AACf,WAAA,oBAAoB,UAAU,YAAY;AAC1C,WAAA,oBAAoB,UAAU,kBAAkB;AAEvD,QAAI,UAAU,+BAAO,MAAM,OAAO,GAAG;AACjC,mBAAa,QAAQ;AACrB,sBAAgB,QAAQ;AACjB,aAAA,iBAAiB,UAAU,YAAY;AACrC,eAAA,MAAM,cAAc;AAAA,IAAA,WACtB,aAAa,+BAAO,MAAM,CAAC,WAAW,gBAAgB,eAAe,YAAY,CAAC,GAAG;AAC5F,mBAAa,QAAQ;AACrB,sBAAgB,QAAQ;AACjB,aAAA,iBAAiB,UAAU,kBAAkB;AAC3C,eAAA,MAAM,oBAAoB;AAAA,IAAA,OAChC;AACH,mBAAa,QAAQ;AACrB,sBAAgB,QAAQ;AAAA,IAC5B;AAAA,EAAA;AAGM,YAAA,MAAM,aAAa;AAC7B,cAAY,MAAM;AACP,WAAA,oBAAoB,UAAU,YAAY;AAC1C,WAAA,oBAAoB,UAAU,kBAAkB;AAAA,EAAA,CAC1D;AAED,SAAO,EAAE,eAAe,cAAc,iBAAiB,aAAa,cAAc;AACtF;ACxDA,MAAe,QAAA;AAAA,EACb,QAAQ,KAAU;AACZ,QAAA,UAAU,YAAY,QAAQ;AAC9B,QAAA,UAAU,WAAW,OAAO;AAAA,EAClC;AACF;"}
|
package/dist/index.umd.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("vue"),require("vue-router"),require("element-plus"),require("lodash/throttle")):"function"==typeof define&&define.amd?define(["exports","vue","vue-router","element-plus","lodash/throttle"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).BaaiComponents={},e.Vue,e.VueRouter,e.ElementPlus,e.throttle)}(this,(function(e,t,o,l,n){"use strict";const a=(e=>e&&"object"==typeof e&&"default"in e?e:{default:e})(n),r=t.defineComponent({name:"MyTable",props:{columns:{type:Array,required:!0},data:{type:Array,default:()=>[]},rowKey:{type:String,default:""}}}),i=(e,t)=>{const o=e.__vccOpts||e;for(const[l,n]of t)o[l]=n;return o},s={class:"w-full overflow-auto"},c={class:"w-full border-collapse table-fixed"},d={key:0},p=["colspan"];const u=i(r,[["render",function(e,o,l,n,a,r){return t.openBlock(),t.createElementBlock("div",s,[t.createElementVNode("table",c,[t.createElementVNode("thead",null,[t.createElementVNode("tr",null,[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(e.columns,(e=>(t.openBlock(),t.createElementBlock("th",{key:e.key,style:t.normalizeStyle({width:e.width}),class:"p-3 text-left bg-gray-100 text-gray-700 font-medium text-sm border-b border-gray-200"},t.toDisplayString(e.title),5)))),128))])]),t.createElementVNode("tbody",null,[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(e.data,((o,l)=>(t.openBlock(),t.createElementBlock("tr",{key:e.rowKey?o[e.rowKey]:l,class:"hover:bg-gray-50"},[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(e.columns,(n=>(t.openBlock(),t.createElementBlock("td",{key:n.key,class:"p-3 text-left border-b border-gray-200 text-sm"},[t.renderSlot(e.$slots,n.key,{row:o,index:l},(()=>[t.createTextVNode(t.toDisplayString(o[n.key]),1)]))])))),128))])))),128)),e.data&&0!==e.data.length?t.createCommentVNode("",!0):(t.openBlock(),t.createElementBlock("tr",d,[t.createElementVNode("td",{colspan:e.columns.length,class:"p-8 text-center text-gray-500"},[t.renderSlot(e.$slots,"empty",{},(()=>[o[0]||(o[0]=t.createTextVNode("暂无数据"))]))],8,p)]))])])])}]]),m=t.defineComponent({name:"MyButton",props:{type:{type:String,default:"default"},disabled:{type:Boolean,default:!1},loading:{type:Boolean,default:!1}},emits:["click"],setup:(e,{emit:o})=>({typeClasses:t.computed((()=>{switch(e.type){case"primary":return"bg-primary hover:bg-blue-500 text-white border-transparent";case"success":return"bg-success hover:bg-green-500 text-white border-transparent";case"warning":return"bg-warning hover:bg-yellow-500 text-white border-transparent";case"danger":return"bg-danger hover:bg-red-500 text-white border-transparent";case"info":return"bg-info hover:bg-gray-500 text-white border-transparent";default:return"bg-white hover:bg-gray-100 text-gray-700 border border-gray-300"}})),handleClick:t=>{e.disabled||e.loading||o("click",t)}})}),h=["disabled"],g={key:0,class:"mr-2 w-4 h-4 i-svg-spinners-270-ring-with-bg"};const f=i(m,[["render",function(e,o,l,n,a,r){return t.openBlock(),t.createElementBlock("button",{class:t.normalizeClass(["inline-flex justify-center items-center h-8 px-4 py-2 rounded-md text-sm font-medium transition-colors duration-200 focus:outline-none",[e.typeClasses,{"opacity-50 cursor-not-allowed":e.disabled,relative:e.loading}]]),disabled:e.disabled||e.loading,onClick:o[0]||(o[0]=(...t)=>e.handleClick&&e.handleClick(...t))},[e.loading?(t.openBlock(),t.createElementBlock("span",g)):t.createCommentVNode("",!0),t.renderSlot(e.$slots,"default")],10,h)}]]);var w=(e=>(e.English="en",e.Chinese="zh-CN",e))(w||{});const C=Symbol("nav-texts"),v=e=>{const t=e===w.Chinese;return{loginText:t?"登录/注册":"Log In / Sign Up",logoutText:t?"退出登录":"Log Out"}},k={width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"};const b=i({},[["render",function(e,o){return t.openBlock(),t.createElementBlock("svg",k,o[0]||(o[0]=[t.createElementVNode("g",{id:"icon/down"},[t.createElementVNode("path",{id:"Union",d:"M12.1382 5.86191C11.8778 5.60156 11.4557 5.60156 11.1954 5.86191L8.0001 9.05717L4.80484 5.86191C4.54449 5.60156 4.12238 5.60156 3.86203 5.86191C3.60168 6.12226 3.60168 6.54437 3.86203 6.80472L7.29299 10.2357C7.68352 10.6262 8.31668 10.6262 8.70721 10.2357L12.1382 6.80472C12.3985 6.54437 12.3985 6.12226 12.1382 5.86191Z",fill:"#2C364B"})],-1)]))}]]),y={width:"19px",height:"20px",viewBox:"0 0 19 20",version:"1.1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"};const L=i({},[["render",function(e,o){return t.openBlock(),t.createElementBlock("svg",y,o[0]||(o[0]=[t.createElementVNode("title",null,"yonghu-2",-1),t.createElementVNode("g",{id:"页面-1",stroke:"none","stroke-width":"1",fill:"none","fill-rule":"evenodd"},[t.createElementVNode("g",{id:"flagos首页备份-4",transform:"translate(-1187, -32)",fill:"#FFFFFF","fill-rule":"nonzero"},[t.createElementVNode("g",{id:"yonghu-2",transform:"translate(1187, 32)"},[t.createElementVNode("path",{d:"M4.16667254,6.66658844 C4.16667254,3.9091208 6.40897956,1.66664712 9.1664472,1.66664712 C11.9239148,1.66664712 14.1663885,3.9091208 14.1663885,6.66658844 C14.1663885,9.42388942 11.9239148,11.6665298 9.1664472,11.6665298 C6.40897956,11.6665298 4.16650588,9.42388942 4.16650588,6.66658844 M18.3046733,18.9521109 C17.4853496,15.8829803 15.3253749,13.4830084 12.6130734,12.3621883 C14.5387175,11.192202 15.8330356,9.08056012 15.8330356,6.66642176 C15.832869,2.99079823 12.8420707,0 9.16628054,0 C5.49049035,0 2.4996921,2.99079823 2.4996921,6.66658844 C2.4996921,9.08056012 3.79384359,11.192202 5.72048764,12.3621883 C3.00801947,13.4838418 0.848044811,15.8829803 0.028221107,18.9521109 C-0.0900085115,19.3963877 0.174049854,19.8524478 0.618214182,19.971099 C1.06293982,20.0897021 1.51968816,19.8256771 1.63886887,19.3811059 C2.59002437,15.820481 5.68498805,13.3331769 9.16661386,13.3331769 C12.6482397,13.3331769 15.74387,15.8206477 16.6948589,19.3814392 C16.7515138,19.5951643 16.8909444,19.7775312 17.0823388,19.8882397 C17.2737332,19.9989483 17.5013346,20.0288842 17.7148469,19.9714323 C18.1590942,19.8527834 18.423176,19.3966084 18.30484,18.9522776",id:"形状"})])])],-1)]))}]]),x={class:"flex items-center cursor-pointer"},E={class:"w-24 h-24 rounded-50% font-600 flex-center mr-8"},B=i(t.defineComponent({__name:"Avatar",props:{userNickName:{},currentPath:{},logout:{type:Function}},setup(e){const o=t.inject(C),l=t.ref(!1),n=e=>{l.value=e};return(e,a)=>{const r=t.resolveComponent("el-icon"),i=t.resolveComponent("el-dropdown-item"),s=t.resolveComponent("el-dropdown-menu"),c=t.resolveComponent("el-dropdown");return t.openBlock(),t.createBlock(c,{"popper-class":"custom-dropdown",size:"large",ref:"dropdown",trigger:"click","show-arrow":!1,onVisibleChange:n},{dropdown:t.withCtx((()=>[t.createVNode(s,null,{default:t.withCtx((()=>[t.createVNode(i,null,{default:t.withCtx((()=>{var l;return[t.createElementVNode("div",{class:"flex items-center w-full text-14 mb-4",onClick:a[0]||(a[0]=(...t)=>e.logout&&e.logout(...t))},t.toDisplayString(null==(l=t.unref(o))?void 0:l.logoutText),1)]})),_:1})])),_:1})])),default:t.withCtx((()=>[t.createElementVNode("div",x,[t.createElementVNode("div",E,[t.createVNode(L)]),t.createElementVNode("span",null,t.toDisplayString(e.userNickName),1),t.createVNode(r,{class:t.normalizeClass(["el-icon--right !ml-16 transition-all duration-200",{" rotate-180":l.value}]),size:16},{default:t.withCtx((()=>[t.createVNode(b)])),_:1},8,["class"])])])),_:1},512)}}}),[["__scopeId","data-v-35cafb1a"]]),N=t.defineComponent({__name:"Login",setup(e){const l=t.inject(C),n=o.useRouter(),a=()=>{n.push({path:"/login",query:{redirect_url:encodeURIComponent(location.href)}})};return(e,o)=>{const n=t.resolveComponent("el-button");return t.openBlock(),t.createBlock(n,{type:"primary",class:"!rounded-4",onClick:a},{default:t.withCtx((()=>{var e;return[t.createTextVNode(t.toDisplayString(null==(e=t.unref(l))?void 0:e.loginText),1)]})),_:1})}}}),V=[{value:w.Chinese,label:"中文"},{value:w.English,label:"English"}],T={[w.Chinese]:"cn",[w.English]:"en"},_={cn:w.Chinese,en:w.English},S={[w.Chinese]:"zh",[w.English]:"en"},A={width:"20px",height:"20px",viewBox:"0 0 20 20",xmlns:"http://www.w3.org/2000/svg"},M=["fill"],F=t.defineComponent({__name:"Locale",props:{isWhiteTheme:{type:Boolean,default:!1},currentLocale:{},localeOptions:{default:()=>V}},emits:["change-language"],setup(e,{emit:o}){const l=t.ref(!1),n=e=>{l.value=e},a=e,r=o,i=t.computed((()=>a.isWhiteTheme)),s=t.computed((()=>a.currentLocale)),c=t.computed((()=>a.localeOptions));return(e,o)=>{const l=t.resolveComponent("el-dropdown-item"),a=t.resolveComponent("el-dropdown-menu"),d=t.resolveComponent("el-dropdown");return t.openBlock(),t.createBlock(d,{class:"cursor-pointer",trigger:"click","popper-class":"custom-dropdown",placement:"bottom",onVisibleChange:n},{dropdown:t.withCtx((()=>[t.createVNode(a,null,{default:t.withCtx((()=>[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(c.value,(e=>(t.openBlock(),t.createBlock(l,{key:e.value,class:t.normalizeClass({"is-active":e.value===s.value}),onClick:t=>(e=>{e!==s.value&&r("change-language",e)})(e.value)},{default:t.withCtx((()=>[t.createElementVNode("span",{class:t.normalizeClass({"color-primary":e.value===s.value})},t.toDisplayString(e.label),3)])),_:2},1032,["class","onClick"])))),128))])),_:1})])),default:t.withCtx((()=>[(t.openBlock(),t.createElementBlock("svg",A,[o[0]||(o[0]=t.createElementVNode("rect",{fill:"#D8D8D8",opacity:"0",x:"0",y:"0",width:"20",height:"20"},null,-1)),t.createElementVNode("path",{fill:i.value?"#ffffff":"#2C364B","fill-rule":"nonzero",d:"M10,0 C4.48583334,0 0,4.48583334 0,10 C0,15.5141667 4.48583334,20 10,20 C15.5141667,20 20,15.5141667 20,10 C20,4.48583334 15.5141667,0 10,0 Z M18.6966667,10.9491667 L18.6925,10.9741667 C18.6575,11.2791667 18.6075,11.5791667 18.5425,11.8741667 L18.5425,11.875 L15.5258333,11.875 C15.657032,10.6284426 15.657032,9.37155738 15.5258333,8.125 L18.5425,8.125 C18.6075,8.42 18.6566667,8.72 18.6925,9.025 C18.6925,9.03333334 18.695,9.04166666 18.6966667,9.05083334 C18.7675,9.68166668 18.7675,10.3183333 18.6966667,10.9491667 L18.6966667,10.9491667 Z M13.34,18.0833333 C14.2783333,16.8683333 14.9891667,15.1491667 15.3516667,13.1241667 L18.1633333,13.1241667 C17.3009588,15.3668017 15.5579816,17.158563 13.34,18.0825 L13.34,18.0833333 Z M18.1625,6.87333334 L15.3516667,6.87333334 C14.9891667,4.84833334 14.2783333,3.13 13.34,1.915 C15.5576659,2.83912386 17.3003173,4.63085972 18.1625,6.87333334 L18.1625,6.87333334 Z M14.2658333,8.12333334 C14.4114344,9.36909341 14.4114344,10.6275733 14.2658333,11.8733333 L10.6241667,11.8733333 L10.6241667,8.12333334 L14.2658333,8.12333334 Z M10.6241667,6.87333334 L10.6241667,1.355 C12.1825,1.825 13.5008333,4.0025 14.07,6.87583334 L10.625,6.87583334 L10.6241667,6.87333334 Z M10.6241667,13.1233333 L14.07,13.1233333 C13.5008333,15.9983333 12.1825,18.175 10.625,18.645 L10.625,13.125 L10.6241667,13.1233333 Z M1.8375,13.1241667 L4.64833334,13.1241667 C5.01083334,15.1491667 5.72166668,16.8683333 6.66,18.0825 C4.44233408,17.1583761 2.69968275,15.3666403 1.8375,13.1241667 L1.8375,13.1241667 Z M6.66,1.91666666 C5.72166666,3.13 5.01083334,4.85 4.64833334,6.875 L1.83666666,6.875 C2.69923303,4.63220345 4.44253606,2.84041679 6.66083334,1.91666666 L6.66,1.91666666 Z M5.73416666,11.875 C5.58856559,10.6292399 5.58856559,9.37076007 5.73416666,8.125 L9.375,8.125 L9.375,11.875 L5.73333334,11.875 L5.73416666,11.875 Z M9.375,13.125 L9.375,18.6458333 C7.81666666,18.1758333 6.49916666,15.9983333 5.93,13.125 L9.375,13.125 Z M9.375,6.875 L5.93,6.875 C6.49916666,4.00166666 7.81666666,1.825 9.375,1.35416666 L9.375,6.875 Z M1.30416666,9.05 C1.30416666,9.04333334 1.30666666,9.03583334 1.3075,9.02833334 C1.34166666,8.725 1.39166666,8.42333334 1.4575,8.125 L4.47416666,8.125 C4.34243809,9.37152952 4.34243809,10.6284705 4.47416666,11.875 L1.4575,11.875 C1.39166666,11.5766667 1.34166666,11.275 1.3075,10.9716667 L1.30416666,10.9491667 C1.23220566,10.3184348 1.23220566,9.68156522 1.30416666,9.05083334 L1.30416666,9.05 Z"},null,8,M)]))])),_:1})}}}),O=(e,t)=>!(!e||!t)&&e.toLowerCase().indexOf(t.toLowerCase())>=0,D=(e,t)=>t.some((t=>O(e,t))),I={class:"flex-center"},P=["src"],z={class:"flex gap-48 ml-80"},W=["index"],Z={class:"text-16"},j={class:"text-14 mb-16 !font-500"},G={class:"text-14 whitespace-normal !font-400"},H={class:"text-16"},J={class:"text-14 mb-16 !font-500"},K={class:"text-14 whitespace-normal !font-400"},R={class:"text-16"},$={class:"text-14 text-#bbbbbb leading-22 mb-20"},q={class:"text-14 mb-16 !font-500"},U={class:"text-14 whitespace-normal !font-400"},Y=["onClick"],X=i(t.defineComponent({__name:"Header",props:{routePath:{},menuList:{},isWhiteTheme:{type:Boolean},isScrolledTheme:{type:Boolean},currentLocale:{},userName:{},userNickName:{},onLogoClick:{type:Function},onJumpPage:{type:Function},onChangeLanguage:{type:Function},onLogout:{type:Function}},setup(e){const o=e;return t.provide(C,t.computed((()=>v(o.currentLocale)))),(e,o)=>{const l=t.resolveComponent("el-dropdown-item"),n=t.resolveComponent("el-dropdown-menu"),a=t.resolveComponent("el-dropdown");return t.openBlock(),t.createElementBlock("div",{class:t.normalizeClass(["w-[calc(100vw-160px)] header-wrapper h-64px pl-120 pr-120 py-19 backdrop-blur-[14px] flex items-center justify-between text-#000 fixed left-0 top-0 z-99 bg-transparent overflow-x-scroll",{"theme-white":e.isWhiteTheme,"theme-scrolled":e.isScrolledTheme,"!b-0":t.unref(O)(e.routePath,"/CommunityMembers")}])},[t.createElementVNode("div",I,[t.createElementVNode("img",{class:"logo",src:e.isWhiteTheme?"https://flagos.ks3-cn-beijing.ksyuncs.com/images/logo.svg":"https://flagos.ks3-cn-beijing.ksyuncs.com/images/logo-black.svg",onClick:o[0]||(o[0]=(...t)=>e.onLogoClick&&e.onLogoClick(...t))},null,8,P),t.createElementVNode("div",z,[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(e.menuList,((o,r)=>(t.openBlock(),t.createElementBlock("div",{index:r,class:t.normalizeClass(["menu-item cursor-pointer whitespace-nowrap",{active:o.active}])},[o.dropdownList&&"learn"===o.id?(t.openBlock(),t.createBlock(a,{key:0,"popper-class":"custom-dropdown-new","show-arrow":!1},{dropdown:t.withCtx((()=>[t.createVNode(n,{class:"flex-row"},{default:t.withCtx((()=>[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(o.dropdownList,((n,a)=>(t.openBlock(),t.createBlock(l,{key:a,class:t.normalizeClass({active:t.unref(O)(e.routePath,n.path)}),onClick:t=>e.onJumpPage(o,n)},{default:t.withCtx((()=>[t.createElementVNode("span",j,t.toDisplayString(n.label),1),t.createElementVNode("span",G,t.toDisplayString(n.desc),1)])),_:2},1032,["class","onClick"])))),128))])),_:2},1024)])),default:t.withCtx((()=>[t.createElementVNode("span",Z,t.toDisplayString(o.label),1)])),_:2},1024)):o.dropdownList&&"tools"===o.id?(t.openBlock(),t.createBlock(a,{key:1,"popper-class":"custom-dropdown-new","show-arrow":!1},{dropdown:t.withCtx((()=>[t.createVNode(n,null,{default:t.withCtx((()=>[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(o.dropdownList,((n,a)=>(t.openBlock(),t.createBlock(l,{key:a,onClick:t=>e.onJumpPage(o,n)},{default:t.withCtx((()=>[t.createElementVNode("span",J,t.toDisplayString(n.label),1),t.createElementVNode("span",K,t.toDisplayString(n.desc),1)])),_:2},1032,["onClick"])))),128))])),_:2},1024)])),default:t.withCtx((()=>[t.createElementVNode("span",H,t.toDisplayString(o.label),1)])),_:2},1024)):o.dropdownGroups&&"projects"===o.id?(t.openBlock(),t.createBlock(a,{key:2,"popper-class":"custom-dropdown-new","show-arrow":!1},{dropdown:t.withCtx((()=>[t.createVNode(n,{class:"flex gap-20 el-dropdown-menu_out"},{default:t.withCtx((()=>[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(o.dropdownGroups,((n,a)=>(t.openBlock(),t.createElementBlock("ul",{key:a,class:"flex-1 el-dropdown-menu !w-[50%] !max-h-560px"},[t.createElementVNode("span",$,t.toDisplayString(n.label),1),(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(n.list,((n,a)=>(t.openBlock(),t.createBlock(l,{key:a,class:"el-dropdown-menu__item !w-full",onClick:t=>e.onJumpPage(o,n)},{default:t.withCtx((()=>[t.createElementVNode("span",q,t.toDisplayString(n.label),1),t.createElementVNode("span",U,t.toDisplayString(n.desc),1)])),_:2},1032,["onClick"])))),128))])))),128))])),_:2},1024)])),default:t.withCtx((()=>[t.createElementVNode("span",R,t.toDisplayString(o.label),1)])),_:2},1024)):(t.openBlock(),t.createElementBlock("span",{key:3,onClick:t=>e.onJumpPage(o)},t.toDisplayString(o.label),9,Y))],10,W)))),256))])]),t.createElementVNode("div",{class:t.normalizeClass(["flex-center",e.isWhiteTheme?"text-#ffffff":"text-#262642"])},[t.createVNode(F,{isWhiteTheme:e.isWhiteTheme,"current-locale":e.currentLocale,onChangeLanguage:e.onChangeLanguage},null,8,["isWhiteTheme","current-locale","onChangeLanguage"]),e.userName?t.createCommentVNode("",!0):(t.openBlock(),t.createBlock(N,{key:0,class:"ml-20"})),e.userName?(t.openBlock(),t.createBlock(B,{key:1,class:t.normalizeClass(["header_avatar ml-20",e.isWhiteTheme?"text-#ffffff":"text-#262642"]),"user-nick-name":e.userNickName,"current-path":e.routePath,logout:e.onLogout},null,8,["class","user-nick-name","current-path","logout"])):t.createCommentVNode("",!0)],2)],2)}}}),[["__scopeId","data-v-0da7041c"]]),Q=["platform-aiintegration-dev.baai.ac.cn"],ee=["flagos.io","flagos.net","www.flagos.io","www.flagos.net"],te=[...ee,...Q],oe=()=>te.includes(location.host),le=e=>ee.includes(location.hostname)?`https://${location.hostname}${e}`:`${location.protocol}//${e.slice(1).toLocaleLowerCase()}.${Q[0]}`,ne=e=>(e=>{const t=e===w.Chinese;return[{id:"home",label:t?"首页":"Home",path:"/Home"},{id:"projects",label:t?"软件栈":"Software Stack",dropdownGroups:[{id:"coreLib",label:t?"开源核心库":"Open-Source Core Libraries",list:[{id:"flagscale",label:"FlagScale",path:"/FlagScale",desc:t?"统一多芯片、多后端的大模型框架,提供覆盖训练、微调与推理部署的全流程能力":"A unified multi-backend large model framework across diverse chips, providing end-to-end capabilities spanning training, fine-tuning, and inference deployment.",type:"route"},{id:"flaggems",label:"FlagGems",path:"/FlagGems",desc:t?"基于Triton实现的高性能通用算子库":"A high-performance general operator library built on Triton.",type:"route"},{id:"flagtree",label:"FlagTree",path:"/FlagTree",desc:t?"面向多种硬件的开源、统一AI编译器":"An open-source unified AI compiler for diverse hardware.",type:"route"},{id:"flagcx",label:"FlagCX",path:"/FlagCX",desc:t?"一款专为大规模AI系统设计的可扩展、自适应高性能跨芯片通信库":"A scalable, adaptive, high-performance cross-chip communication library designed for large-scale AI systems.",type:"route"}]},{id:"ecosystem",label:t?"生态使能项目":"FlagOS Ecosystem Enablement Project",list:[{id:"megatronfl",label:"Megatron-FL",path:"https://github.com/flagos-ai/Megatron-LM-FL",desc:t?"为Megatron-LM打造的多芯片插件,实现大模型多芯片高效训练":"A multi-chip plugin for Megatron-LM, enabling efficient large-scale training across diverse chips.",type:"link"},{id:"vllmpluginfl",label:"vLLM-plugin-FL",path:"https://github.com/flagos-ai/vllm-plugin-FL",desc:t?"为vLLM打造的多芯片插件,实现大模型多芯片高效推理部署":"A multi-chip plugin for vLLM, enabling efficient large model inference and deployment across diverse chips.",type:"link"},{id:"transformerenginefl",label:"TransformerEngine-FL",path:"https://github.com/flagos-ai/TransformerEngine-FL",desc:t?"为TransformerEngine打造的多芯片插件,实现多种芯片上分布式算子":"A multi-chip plugin for TransformerEngine, enabling distributed operators across diverse chip architectures.",type:"link"}]}]},{id:"tools",label:t?"工具":"Tools",dropdownList:[{id:"skill",label:t?"Skill广场":"SkillHub",path:le("/SkillHub"),desc:t?"一站式AI计算技能库":"One-stop AI computing skills library.",type:"route"},{id:"onlinelab",label:t?"线上实验室":"Online Laboratory",path:oe()?"/OnlineLab":le("/OnlineLab"),desc:t?"开箱即用的在线实验环境":"Ready-to-use online experiment environment.",type:"route"},{id:"modelplatform",label:t?"模型服务平台":"MaaS",path:"",desc:t?"全生命周期大模型API服务平台":"A full-lifecycle API service platform for large models.",type:"unopen"},{id:"kernelgen",label:"KernelGen",path:"https://kernelgen.flagos.io/",desc:t?"分钟级构建Kernel,支持多芯片后端":"Build Kernels in Minutes with Multi-Backend Support.",type:"link"},{id:"flagrelease",label:"FlagRelease",path:"",desc:t?"一套自动化迁移大模型至不同硬件产品的工具平台":"An automated tool platform for migrating large model to diverse hardware.",type:"unopen"},{id:"flagcicd",label:"FlagCICD",path:"",desc:t?"面向 AI 开发的持续集成 / 持续部署工具链":"A CI/CD toolchain for AI development.",type:"unopen"},{id:"flagmodelhub",label:t?"九鼎AI一体化平台":"Jiuding AI Integrated Platform",path:"",desc:t?"整合 FlagOS 全栈能力,提供从模型开发、训练到部署的一站式 AI 工程化平台":"Jiuding AI Platform.",type:"unopen"}]},{id:"docs",label:t?"文档":"Docs"},{id:"learn",label:t?"学习":"Learn",dropdownList:[{id:"wiki",label:"Wiki",desc:t?"智能文档,边看边问边学":"AI-powered interactive docs: query and learn in real-time.",path:"https://wiki.flagos.io",type:"link"},{id:"professionalcourse",label:t?"专业课":"Core Courses",desc:t?"众智FlagOS系列开源课程":"The official open-source course series for the FlagOS ecosystem.",path:"https://flagos.educoder.net/paths",type:"link"},{id:"course",label:t?"讲座":"Tech Talks",desc:t?"大咖分享,业界前沿讲座":"Cutting-edge insights and deep dives from industry leaders.",path:"/LearnCenter",type:"route"}]},{id:"events",label:t?"活动赛事":"Event & Competition",path:oe()?"/events":le("/events")},{id:"onlinelab-top",label:t?"线上实验室":"Online Laboratory",path:oe()?"/OnlineLab":le("/OnlineLab")}]})(e),ae=e=>{window.open(e,"_blank")};const re={install(e){e.component("MyButton",f),e.component("MyTable",u)}};e.Header=X,e.LocaleTypeEnum=w,e.MyButton=f,e.MyTable=u,e.NAV_LANG_TO_LOCALE=_,e.NAV_LOCALE_OPTIONS=V,e.NAV_LOCALE_TO_LANG=T,e.NAV_TEXTS_KEY=C,e.NAV_WIKI_LANG_BY_LOCALE=S,e.NavAvatar=B,e.NavHeader=X,e.NavLocale=F,e.NavLogin=N,e.buildNavTexts=v,e.default=re,e.getNavMenuApi=ne,e.matchAnyPath=D,e.matchPath=O,e.useHeaderMenu=function(e,o,n,a){const r=t.ref([]);return t.watch(e,(e=>(e=>{var t;const o=ne(e),l=null==(t=r.value.find((e=>e.active)))?void 0:t.id;r.value=o.map((e=>({...e,active:e.id===l})))})(e)),{immediate:!0}),{menuList:r,syncActiveMenu:()=>{r.value.forEach((e=>e.active=!1));const e=r.value.findIndex((e=>e.dropdownList?e.dropdownList.some((e=>O(null==o?void 0:o.path,e.path))):e.dropdownGroups?e.dropdownGroups.some((e=>e.list.some((e=>O(null==o?void 0:o.path,e.path))))):!(!O(e.path,"/events")||!D(null==o?void 0:o.path,["/EventDetail","/RaceDetail"]))||(!("onlinelab-top"!==e.id||!O(null==o?void 0:o.path,"/OnlineLab"))||O(null==o?void 0:o.path,e.path))));e>=0&&(r.value[e].active=!0)},handleJumpPage:(e,t)=>{const o="string"==typeof a?a:a.value;if(["tools","projects","learn"].includes(e.id)){if(!t)return;if(t.path.startsWith("http"))return ae(t.path);if(t.path)return n.push(t.path);if("unopen"===t.type)return l.ElMessage.warning(o)}if("docs"===e.id)return ae("https://docs.flagos.io/");r.value.forEach((e=>e.active=!1)),e.active=!0,n.push(t?t.path:e.path)}}},e.useHeaderTheme=function(e){const o=t.ref(0),l=t.ref(!1),n=t.ref(!1),r={getThreshold:()=>window.innerHeight-80},i={getThreshold:()=>310},s={getThreshold:()=>100},c=(e,t)=>{e>t?(l.value=!1,n.value=!0):(l.value=!0,n.value=!1),o.value=e<=0?0:e},d=a.default((()=>{const e=window.scrollY||document.documentElement.scrollTop||0;c(e,r.getThreshold())}),200),p=a.default((()=>{const t=window.scrollY||document.documentElement.scrollTop||0,o=O(null==e?void 0:e.path,"/OnlineLab")?s.getThreshold():i.getThreshold();c(t,o)}),200),u=()=>{window.removeEventListener("scroll",d),window.removeEventListener("scroll",p),O(null==e?void 0:e.path,"/Home")?(l.value=!0,n.value=!1,window.addEventListener("scroll",d),t.nextTick((()=>d()))):D(null==e?void 0:e.path,["/events","/EventDetail","/RaceDetail","/OnlineLab"])?(l.value=!0,n.value=!1,window.addEventListener("scroll",p),t.nextTick((()=>p()))):(l.value=!1,n.value=!1)};return t.onMounted((()=>u())),t.onUnmounted((()=>{window.removeEventListener("scroll",d),window.removeEventListener("scroll",p)})),{lastScrollTop:o,isWhiteTheme:l,isScrolledTheme:n,bindByRoute:u,handleScroll:d,handleEventsScroll:p}},Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("vue"),require("vue-router"),require("element-plus"),require("lodash/throttle")):"function"==typeof define&&define.amd?define(["exports","vue","vue-router","element-plus","lodash/throttle"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).BaaiComponents={},e.Vue,e.VueRouter,e.ElementPlus,e.throttle)}(this,(function(e,t,o,l,n){"use strict";const a=(e=>e&&"object"==typeof e&&"default"in e?e:{default:e})(n),r=t.defineComponent({name:"MyTable",props:{columns:{type:Array,required:!0},data:{type:Array,default:()=>[]},rowKey:{type:String,default:""}}}),i=(e,t)=>{const o=e.__vccOpts||e;for(const[l,n]of t)o[l]=n;return o},s={class:"w-full overflow-auto"},c={class:"w-full border-collapse table-fixed"},d={key:0},p=["colspan"];const u=i(r,[["render",function(e,o,l,n,a,r){return t.openBlock(),t.createElementBlock("div",s,[t.createElementVNode("table",c,[t.createElementVNode("thead",null,[t.createElementVNode("tr",null,[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(e.columns,(e=>(t.openBlock(),t.createElementBlock("th",{key:e.key,style:t.normalizeStyle({width:e.width}),class:"p-3 text-left bg-gray-100 text-gray-700 font-medium text-sm border-b border-gray-200"},t.toDisplayString(e.title),5)))),128))])]),t.createElementVNode("tbody",null,[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(e.data,((o,l)=>(t.openBlock(),t.createElementBlock("tr",{key:e.rowKey?o[e.rowKey]:l,class:"hover:bg-gray-50"},[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(e.columns,(n=>(t.openBlock(),t.createElementBlock("td",{key:n.key,class:"p-3 text-left border-b border-gray-200 text-sm"},[t.renderSlot(e.$slots,n.key,{row:o,index:l},(()=>[t.createTextVNode(t.toDisplayString(o[n.key]),1)]))])))),128))])))),128)),e.data&&0!==e.data.length?t.createCommentVNode("",!0):(t.openBlock(),t.createElementBlock("tr",d,[t.createElementVNode("td",{colspan:e.columns.length,class:"p-8 text-center text-gray-500"},[t.renderSlot(e.$slots,"empty",{},(()=>[o[0]||(o[0]=t.createTextVNode("暂无数据"))]))],8,p)]))])])])}]]),m=t.defineComponent({name:"MyButton",props:{type:{type:String,default:"default"},disabled:{type:Boolean,default:!1},loading:{type:Boolean,default:!1}},emits:["click"],setup:(e,{emit:o})=>({typeClasses:t.computed((()=>{switch(e.type){case"primary":return"bg-primary hover:bg-blue-500 text-white border-transparent";case"success":return"bg-success hover:bg-green-500 text-white border-transparent";case"warning":return"bg-warning hover:bg-yellow-500 text-white border-transparent";case"danger":return"bg-danger hover:bg-red-500 text-white border-transparent";case"info":return"bg-info hover:bg-gray-500 text-white border-transparent";default:return"bg-white hover:bg-gray-100 text-gray-700 border border-gray-300"}})),handleClick:t=>{e.disabled||e.loading||o("click",t)}})}),g=["disabled"],h={key:0,class:"mr-2 w-4 h-4 i-svg-spinners-270-ring-with-bg"};const f=i(m,[["render",function(e,o,l,n,a,r){return t.openBlock(),t.createElementBlock("button",{class:t.normalizeClass(["inline-flex justify-center items-center h-8 px-4 py-2 rounded-md text-sm font-medium transition-colors duration-200 focus:outline-none",[e.typeClasses,{"opacity-50 cursor-not-allowed":e.disabled,relative:e.loading}]]),disabled:e.disabled||e.loading,onClick:o[0]||(o[0]=(...t)=>e.handleClick&&e.handleClick(...t))},[e.loading?(t.openBlock(),t.createElementBlock("span",h)):t.createCommentVNode("",!0),t.renderSlot(e.$slots,"default")],10,g)}]]);var w=(e=>(e.English="en",e.Chinese="zh-CN",e))(w||{});const C=Symbol("nav-texts"),v=e=>{const t=e===w.Chinese;return{loginText:t?"登录/注册":"Log In / Sign Up",logoutText:t?"退出登录":"Log Out"}},k={width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"};const b=i({},[["render",function(e,o){return t.openBlock(),t.createElementBlock("svg",k,o[0]||(o[0]=[t.createElementVNode("g",{id:"icon/down"},[t.createElementVNode("path",{id:"Union",d:"M12.1382 5.86191C11.8778 5.60156 11.4557 5.60156 11.1954 5.86191L8.0001 9.05717L4.80484 5.86191C4.54449 5.60156 4.12238 5.60156 3.86203 5.86191C3.60168 6.12226 3.60168 6.54437 3.86203 6.80472L7.29299 10.2357C7.68352 10.6262 8.31668 10.6262 8.70721 10.2357L12.1382 6.80472C12.3985 6.54437 12.3985 6.12226 12.1382 5.86191Z",fill:"#2C364B"})],-1)]))}]]),y={width:"19px",height:"20px",viewBox:"0 0 19 20",version:"1.1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"};const L=i({},[["render",function(e,o){return t.openBlock(),t.createElementBlock("svg",y,o[0]||(o[0]=[t.createElementVNode("title",null,"yonghu-2",-1),t.createElementVNode("g",{id:"页面-1",stroke:"none","stroke-width":"1",fill:"none","fill-rule":"evenodd"},[t.createElementVNode("g",{id:"flagos首页备份-4",transform:"translate(-1187, -32)",fill:"#FFFFFF","fill-rule":"nonzero"},[t.createElementVNode("g",{id:"yonghu-2",transform:"translate(1187, 32)"},[t.createElementVNode("path",{d:"M4.16667254,6.66658844 C4.16667254,3.9091208 6.40897956,1.66664712 9.1664472,1.66664712 C11.9239148,1.66664712 14.1663885,3.9091208 14.1663885,6.66658844 C14.1663885,9.42388942 11.9239148,11.6665298 9.1664472,11.6665298 C6.40897956,11.6665298 4.16650588,9.42388942 4.16650588,6.66658844 M18.3046733,18.9521109 C17.4853496,15.8829803 15.3253749,13.4830084 12.6130734,12.3621883 C14.5387175,11.192202 15.8330356,9.08056012 15.8330356,6.66642176 C15.832869,2.99079823 12.8420707,0 9.16628054,0 C5.49049035,0 2.4996921,2.99079823 2.4996921,6.66658844 C2.4996921,9.08056012 3.79384359,11.192202 5.72048764,12.3621883 C3.00801947,13.4838418 0.848044811,15.8829803 0.028221107,18.9521109 C-0.0900085115,19.3963877 0.174049854,19.8524478 0.618214182,19.971099 C1.06293982,20.0897021 1.51968816,19.8256771 1.63886887,19.3811059 C2.59002437,15.820481 5.68498805,13.3331769 9.16661386,13.3331769 C12.6482397,13.3331769 15.74387,15.8206477 16.6948589,19.3814392 C16.7515138,19.5951643 16.8909444,19.7775312 17.0823388,19.8882397 C17.2737332,19.9989483 17.5013346,20.0288842 17.7148469,19.9714323 C18.1590942,19.8527834 18.423176,19.3966084 18.30484,18.9522776",id:"形状"})])])],-1)]))}]]),x={class:"flex items-center cursor-pointer"},E={class:"w-24 h-24 rounded-50% font-600 flex-center mr-8"},B=i(t.defineComponent({__name:"Avatar",props:{userNickName:{},currentPath:{},logout:{type:Function}},setup(e){const o=t.inject(C),l=t.ref(!1),n=e=>{l.value=e};return(e,a)=>{const r=t.resolveComponent("el-icon"),i=t.resolveComponent("el-dropdown-item"),s=t.resolveComponent("el-dropdown-menu"),c=t.resolveComponent("el-dropdown");return t.openBlock(),t.createBlock(c,{"popper-class":"custom-dropdown",size:"large",ref:"dropdown",trigger:"click","show-arrow":!1,onVisibleChange:n},{dropdown:t.withCtx((()=>[t.createVNode(s,null,{default:t.withCtx((()=>[t.createVNode(i,null,{default:t.withCtx((()=>{var l;return[t.createElementVNode("div",{class:"flex items-center w-full text-14 mb-4",onClick:a[0]||(a[0]=(...t)=>e.logout&&e.logout(...t))},t.toDisplayString(null==(l=t.unref(o))?void 0:l.logoutText),1)]})),_:1})])),_:1})])),default:t.withCtx((()=>[t.createElementVNode("div",x,[t.createElementVNode("div",E,[t.createVNode(L)]),t.createElementVNode("span",null,t.toDisplayString(e.userNickName),1),t.createVNode(r,{class:t.normalizeClass(["el-icon--right !ml-16 transition-all duration-200",{" rotate-180":l.value}]),size:16},{default:t.withCtx((()=>[t.createVNode(b)])),_:1},8,["class"])])])),_:1},512)}}}),[["__scopeId","data-v-35cafb1a"]]),N=t.defineComponent({__name:"Login",setup(e){const l=t.inject(C),n=o.useRouter(),a=()=>{n.push({path:"/login",query:{redirect_url:encodeURIComponent(location.href)}})};return(e,o)=>{const n=t.resolveComponent("el-button");return t.openBlock(),t.createBlock(n,{type:"primary",class:"!rounded-4",onClick:a},{default:t.withCtx((()=>{var e;return[t.createTextVNode(t.toDisplayString(null==(e=t.unref(l))?void 0:e.loginText),1)]})),_:1})}}}),V=[{value:w.Chinese,label:"中文"},{value:w.English,label:"English"}],T={[w.Chinese]:"cn",[w.English]:"en"},_={cn:w.Chinese,en:w.English},S={[w.Chinese]:"zh",[w.English]:"en"},A={width:"20px",height:"20px",viewBox:"0 0 20 20",xmlns:"http://www.w3.org/2000/svg"},M=["fill"],F=t.defineComponent({__name:"Locale",props:{isWhiteTheme:{type:Boolean,default:!1},currentLocale:{},localeOptions:{default:()=>V}},emits:["change-language"],setup(e,{emit:o}){const l=t.ref(!1),n=e=>{l.value=e},a=e,r=o,i=t.computed((()=>a.isWhiteTheme)),s=t.computed((()=>a.currentLocale)),c=t.computed((()=>a.localeOptions));return(e,o)=>{const l=t.resolveComponent("el-dropdown-item"),a=t.resolveComponent("el-dropdown-menu"),d=t.resolveComponent("el-dropdown");return t.openBlock(),t.createBlock(d,{class:"cursor-pointer",trigger:"click","popper-class":"custom-dropdown",placement:"bottom",onVisibleChange:n},{dropdown:t.withCtx((()=>[t.createVNode(a,null,{default:t.withCtx((()=>[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(c.value,(e=>(t.openBlock(),t.createBlock(l,{key:e.value,class:t.normalizeClass({"is-active":e.value===s.value}),onClick:t=>(e=>{e!==s.value&&r("change-language",e)})(e.value)},{default:t.withCtx((()=>[t.createElementVNode("span",{class:t.normalizeClass({"color-primary":e.value===s.value})},t.toDisplayString(e.label),3)])),_:2},1032,["class","onClick"])))),128))])),_:1})])),default:t.withCtx((()=>[(t.openBlock(),t.createElementBlock("svg",A,[o[0]||(o[0]=t.createElementVNode("rect",{fill:"#D8D8D8",opacity:"0",x:"0",y:"0",width:"20",height:"20"},null,-1)),t.createElementVNode("path",{fill:i.value?"#ffffff":"#2C364B","fill-rule":"nonzero",d:"M10,0 C4.48583334,0 0,4.48583334 0,10 C0,15.5141667 4.48583334,20 10,20 C15.5141667,20 20,15.5141667 20,10 C20,4.48583334 15.5141667,0 10,0 Z M18.6966667,10.9491667 L18.6925,10.9741667 C18.6575,11.2791667 18.6075,11.5791667 18.5425,11.8741667 L18.5425,11.875 L15.5258333,11.875 C15.657032,10.6284426 15.657032,9.37155738 15.5258333,8.125 L18.5425,8.125 C18.6075,8.42 18.6566667,8.72 18.6925,9.025 C18.6925,9.03333334 18.695,9.04166666 18.6966667,9.05083334 C18.7675,9.68166668 18.7675,10.3183333 18.6966667,10.9491667 L18.6966667,10.9491667 Z M13.34,18.0833333 C14.2783333,16.8683333 14.9891667,15.1491667 15.3516667,13.1241667 L18.1633333,13.1241667 C17.3009588,15.3668017 15.5579816,17.158563 13.34,18.0825 L13.34,18.0833333 Z M18.1625,6.87333334 L15.3516667,6.87333334 C14.9891667,4.84833334 14.2783333,3.13 13.34,1.915 C15.5576659,2.83912386 17.3003173,4.63085972 18.1625,6.87333334 L18.1625,6.87333334 Z M14.2658333,8.12333334 C14.4114344,9.36909341 14.4114344,10.6275733 14.2658333,11.8733333 L10.6241667,11.8733333 L10.6241667,8.12333334 L14.2658333,8.12333334 Z M10.6241667,6.87333334 L10.6241667,1.355 C12.1825,1.825 13.5008333,4.0025 14.07,6.87583334 L10.625,6.87583334 L10.6241667,6.87333334 Z M10.6241667,13.1233333 L14.07,13.1233333 C13.5008333,15.9983333 12.1825,18.175 10.625,18.645 L10.625,13.125 L10.6241667,13.1233333 Z M1.8375,13.1241667 L4.64833334,13.1241667 C5.01083334,15.1491667 5.72166668,16.8683333 6.66,18.0825 C4.44233408,17.1583761 2.69968275,15.3666403 1.8375,13.1241667 L1.8375,13.1241667 Z M6.66,1.91666666 C5.72166666,3.13 5.01083334,4.85 4.64833334,6.875 L1.83666666,6.875 C2.69923303,4.63220345 4.44253606,2.84041679 6.66083334,1.91666666 L6.66,1.91666666 Z M5.73416666,11.875 C5.58856559,10.6292399 5.58856559,9.37076007 5.73416666,8.125 L9.375,8.125 L9.375,11.875 L5.73333334,11.875 L5.73416666,11.875 Z M9.375,13.125 L9.375,18.6458333 C7.81666666,18.1758333 6.49916666,15.9983333 5.93,13.125 L9.375,13.125 Z M9.375,6.875 L5.93,6.875 C6.49916666,4.00166666 7.81666666,1.825 9.375,1.35416666 L9.375,6.875 Z M1.30416666,9.05 C1.30416666,9.04333334 1.30666666,9.03583334 1.3075,9.02833334 C1.34166666,8.725 1.39166666,8.42333334 1.4575,8.125 L4.47416666,8.125 C4.34243809,9.37152952 4.34243809,10.6284705 4.47416666,11.875 L1.4575,11.875 C1.39166666,11.5766667 1.34166666,11.275 1.3075,10.9716667 L1.30416666,10.9491667 C1.23220566,10.3184348 1.23220566,9.68156522 1.30416666,9.05083334 L1.30416666,9.05 Z"},null,8,M)]))])),_:1})}}}),O=(e,t)=>!(!e||!t)&&e.toLowerCase().indexOf(t.toLowerCase())>=0,D=(e,t)=>t.some((t=>O(e,t))),I={class:"flex-center"},P=["src"],z={class:"flex gap-48 ml-80"},W=["index"],Z={class:"text-16"},j={class:"text-14 mb-16 !font-500"},G={class:"text-14 whitespace-normal !font-400"},H={class:"text-16"},J={class:"text-14 mb-16 !font-500"},K={class:"text-14 whitespace-normal !font-400"},R={class:"text-16"},$={class:"text-14 text-#bbbbbb leading-22 mb-20"},q={class:"text-14 mb-16 !font-500"},U={class:"text-14 whitespace-normal !font-400"},Y=["onClick"],X=i(t.defineComponent({__name:"Header",props:{routePath:{},menuList:{},isWhiteTheme:{type:Boolean},isScrolledTheme:{type:Boolean},currentLocale:{},userName:{},userNickName:{},onLogoClick:{type:Function},onJumpPage:{type:Function},onChangeLanguage:{type:Function},onLogout:{type:Function}},setup(e){const o=e;return t.provide(C,t.computed((()=>v(o.currentLocale)))),(e,o)=>{const l=t.resolveComponent("el-dropdown-item"),n=t.resolveComponent("el-dropdown-menu"),a=t.resolveComponent("el-dropdown");return t.openBlock(),t.createElementBlock("div",{class:t.normalizeClass(["w-full header-wrapper h-64px pl-120 pr-120 py-19 backdrop-blur-[14px] flex items-center justify-between text-#000 fixed left-0 top-0 z-99 bg-transparent overflow-x-scroll",{"theme-white":e.isWhiteTheme,"theme-scrolled":e.isScrolledTheme,"!b-0":t.unref(O)(e.routePath,"/CommunityMembers")}])},[t.createElementVNode("div",I,[t.createElementVNode("img",{class:"logo",src:e.isWhiteTheme?"https://flagos.ks3-cn-beijing.ksyuncs.com/images/logo.svg":"https://flagos.ks3-cn-beijing.ksyuncs.com/images/logo-black.svg",onClick:o[0]||(o[0]=(...t)=>e.onLogoClick&&e.onLogoClick(...t))},null,8,P),t.createElementVNode("div",z,[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(e.menuList,((o,r)=>(t.openBlock(),t.createElementBlock("div",{index:r,class:t.normalizeClass(["menu-item cursor-pointer whitespace-nowrap",{active:o.active}])},[o.dropdownList&&"learn"===o.id?(t.openBlock(),t.createBlock(a,{key:0,"popper-class":"custom-dropdown-new","show-arrow":!1},{dropdown:t.withCtx((()=>[t.createVNode(n,{class:"flex-row"},{default:t.withCtx((()=>[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(o.dropdownList,((n,a)=>(t.openBlock(),t.createBlock(l,{key:a,class:t.normalizeClass({active:t.unref(O)(e.routePath,n.path)}),onClick:t=>e.onJumpPage(o,n)},{default:t.withCtx((()=>[t.createElementVNode("span",j,t.toDisplayString(n.label),1),t.createElementVNode("span",G,t.toDisplayString(n.desc),1)])),_:2},1032,["class","onClick"])))),128))])),_:2},1024)])),default:t.withCtx((()=>[t.createElementVNode("span",Z,t.toDisplayString(o.label),1)])),_:2},1024)):o.dropdownList&&"tools"===o.id?(t.openBlock(),t.createBlock(a,{key:1,"popper-class":"custom-dropdown-new","show-arrow":!1},{dropdown:t.withCtx((()=>[t.createVNode(n,null,{default:t.withCtx((()=>[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(o.dropdownList,((n,a)=>(t.openBlock(),t.createBlock(l,{key:a,onClick:t=>e.onJumpPage(o,n)},{default:t.withCtx((()=>[t.createElementVNode("span",J,t.toDisplayString(n.label),1),t.createElementVNode("span",K,t.toDisplayString(n.desc),1)])),_:2},1032,["onClick"])))),128))])),_:2},1024)])),default:t.withCtx((()=>[t.createElementVNode("span",H,t.toDisplayString(o.label),1)])),_:2},1024)):o.dropdownGroups&&"projects"===o.id?(t.openBlock(),t.createBlock(a,{key:2,"popper-class":"custom-dropdown-new","show-arrow":!1},{dropdown:t.withCtx((()=>[t.createVNode(n,{class:"flex gap-20 el-dropdown-menu_out"},{default:t.withCtx((()=>[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(o.dropdownGroups,((n,a)=>(t.openBlock(),t.createElementBlock("ul",{key:a,class:"flex-1 el-dropdown-menu !w-[50%] !max-h-560px"},[t.createElementVNode("span",$,t.toDisplayString(n.label),1),(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(n.list,((n,a)=>(t.openBlock(),t.createBlock(l,{key:a,class:"el-dropdown-menu__item !w-full",onClick:t=>e.onJumpPage(o,n)},{default:t.withCtx((()=>[t.createElementVNode("span",q,t.toDisplayString(n.label),1),t.createElementVNode("span",U,t.toDisplayString(n.desc),1)])),_:2},1032,["onClick"])))),128))])))),128))])),_:2},1024)])),default:t.withCtx((()=>[t.createElementVNode("span",R,t.toDisplayString(o.label),1)])),_:2},1024)):(t.openBlock(),t.createElementBlock("span",{key:3,onClick:t=>e.onJumpPage(o)},t.toDisplayString(o.label),9,Y))],10,W)))),256))])]),t.createElementVNode("div",{class:t.normalizeClass(["flex-center",e.isWhiteTheme?"text-#ffffff":"text-#262642"])},[t.createVNode(F,{isWhiteTheme:e.isWhiteTheme,"current-locale":e.currentLocale,onChangeLanguage:e.onChangeLanguage},null,8,["isWhiteTheme","current-locale","onChangeLanguage"]),e.userName?t.createCommentVNode("",!0):(t.openBlock(),t.createBlock(N,{key:0,class:"ml-20"})),e.userName?(t.openBlock(),t.createBlock(B,{key:1,class:t.normalizeClass(["header_avatar ml-20",e.isWhiteTheme?"text-#ffffff":"text-#262642"]),"user-nick-name":e.userNickName,"current-path":e.routePath,logout:e.onLogout},null,8,["class","user-nick-name","current-path","logout"])):t.createCommentVNode("",!0)],2)],2)}}}),[["__scopeId","data-v-bfee58b2"]]),Q=["platform-aiintegration-dev.baai.ac.cn"],ee=["flagos.io","flagos.net","www.flagos.io","www.flagos.net"],te=[...ee,...Q],oe=()=>te.includes(location.host),le=e=>ee.includes(location.hostname)?`https://${location.hostname}${e}`:`${location.protocol}//${e.slice(1).toLocaleLowerCase()}.${Q[0]}`,ne=e=>(e=>{const t=e===w.Chinese;return[{id:"home",label:t?"首页":"Home",path:"/Home"},{id:"projects",label:t?"软件栈":"Software Stack",dropdownGroups:[{id:"coreLib",label:t?"开源核心库":"Open-Source Core Libraries",list:[{id:"flagscale",label:"FlagScale",path:"/FlagScale",desc:t?"统一多芯片、多后端的大模型框架,提供覆盖训练、微调与推理部署的全流程能力":"A unified multi-backend large model framework across diverse chips, providing end-to-end capabilities spanning training, fine-tuning, and inference deployment.",type:"route"},{id:"flaggems",label:"FlagGems",path:"/FlagGems",desc:t?"基于Triton实现的高性能通用算子库":"A high-performance general operator library built on Triton.",type:"route"},{id:"flagtree",label:"FlagTree",path:"/FlagTree",desc:t?"面向多种硬件的开源、统一AI编译器":"An open-source unified AI compiler for diverse hardware.",type:"route"},{id:"flagcx",label:"FlagCX",path:"/FlagCX",desc:t?"一款专为大规模AI系统设计的可扩展、自适应高性能跨芯片通信库":"A scalable, adaptive, high-performance cross-chip communication library designed for large-scale AI systems.",type:"route"}]},{id:"ecosystem",label:t?"生态使能项目":"FlagOS Ecosystem Enablement Project",list:[{id:"megatronfl",label:"Megatron-FL",path:"https://github.com/flagos-ai/Megatron-LM-FL",desc:t?"为Megatron-LM打造的多芯片插件,实现大模型多芯片高效训练":"A multi-chip plugin for Megatron-LM, enabling efficient large-scale training across diverse chips.",type:"link"},{id:"vllmpluginfl",label:"vLLM-plugin-FL",path:"https://github.com/flagos-ai/vllm-plugin-FL",desc:t?"为vLLM打造的多芯片插件,实现大模型多芯片高效推理部署":"A multi-chip plugin for vLLM, enabling efficient large model inference and deployment across diverse chips.",type:"link"},{id:"transformerenginefl",label:"TransformerEngine-FL",path:"https://github.com/flagos-ai/TransformerEngine-FL",desc:t?"为TransformerEngine打造的多芯片插件,实现多种芯片上分布式算子":"A multi-chip plugin for TransformerEngine, enabling distributed operators across diverse chip architectures.",type:"link"}]}]},{id:"tools",label:t?"工具":"Tools",dropdownList:[{id:"skill",label:t?"Skill广场":"SkillHub",path:le("/SkillHub"),desc:t?"一站式AI计算技能库":"One-stop AI computing skills library.",type:"route"},{id:"onlinelab",label:t?"线上实验室":"Online Laboratory",path:oe()?"/OnlineLab":le("/OnlineLab"),desc:t?"开箱即用的在线实验环境":"Ready-to-use online experiment environment.",type:"route"},{id:"modelplatform",label:t?"模型服务平台":"MaaS",path:"",desc:t?"全生命周期大模型API服务平台":"A full-lifecycle API service platform for large models.",type:"unopen"},{id:"kernelgen",label:"KernelGen",path:"https://kernelgen.flagos.io/",desc:t?"分钟级构建Kernel,支持多芯片后端":"Build Kernels in Minutes with Multi-Backend Support.",type:"link"},{id:"flagrelease",label:"FlagRelease",path:"",desc:t?"一套自动化迁移大模型至不同硬件产品的工具平台":"An automated tool platform for migrating large model to diverse hardware.",type:"unopen"},{id:"flagcicd",label:"FlagCICD",path:"",desc:t?"面向 AI 开发的持续集成 / 持续部署工具链":"A CI/CD toolchain for AI development.",type:"unopen"},{id:"flagmodelhub",label:t?"九鼎AI一体化平台":"Jiuding AI Integrated Platform",path:"",desc:t?"整合 FlagOS 全栈能力,提供从模型开发、训练到部署的一站式 AI 工程化平台":"Jiuding AI Platform.",type:"unopen"}]},{id:"docs",label:t?"文档":"Docs"},{id:"learn",label:t?"学习":"Learn",dropdownList:[{id:"wiki",label:"Wiki",desc:t?"智能文档,边看边问边学":"AI-powered interactive docs: query and learn in real-time.",path:"https://wiki.flagos.io",type:"link"},{id:"professionalcourse",label:t?"专业课":"Core Courses",desc:t?"众智FlagOS系列开源课程":"The official open-source course series for the FlagOS ecosystem.",path:"https://flagos.educoder.net/paths",type:"link"},{id:"course",label:t?"讲座":"Tech Talks",desc:t?"大咖分享,业界前沿讲座":"Cutting-edge insights and deep dives from industry leaders.",path:"/LearnCenter",type:"route"}]},{id:"events",label:t?"活动赛事":"Event & Competition",path:oe()?"/events":le("/events")},{id:"onlinelab-top",label:t?"线上实验室":"Online Laboratory",path:oe()?"/OnlineLab":le("/OnlineLab")}]})(e),ae=e=>{window.open(e,"_blank")};const re={install(e){e.component("MyButton",f),e.component("MyTable",u)}};e.Header=X,e.LocaleTypeEnum=w,e.MyButton=f,e.MyTable=u,e.NAV_LANG_TO_LOCALE=_,e.NAV_LOCALE_OPTIONS=V,e.NAV_LOCALE_TO_LANG=T,e.NAV_TEXTS_KEY=C,e.NAV_WIKI_LANG_BY_LOCALE=S,e.NavAvatar=B,e.NavHeader=X,e.NavLocale=F,e.NavLogin=N,e.buildNavTexts=v,e.default=re,e.getNavMenuApi=ne,e.matchAnyPath=D,e.matchPath=O,e.useHeaderMenu=function(e,o,n){const a=t.ref([]);return t.watch(e,(e=>(e=>{var t;const o=ne(e),l=null==(t=a.value.find((e=>e.active)))?void 0:t.id;a.value=o.map((e=>({...e,active:e.id===l})))})(e)),{immediate:!0}),{menuList:a,syncActiveMenu:e=>{a.value.forEach((e=>e.active=!1));const t=a.value.findIndex((t=>t.dropdownList?t.dropdownList.some((t=>O(null==e?void 0:e.path,t.path))):t.dropdownGroups?t.dropdownGroups.some((t=>t.list.some((t=>O(null==e?void 0:e.path,t.path))))):!(!O(t.path,"/events")||!D(null==e?void 0:e.path,["/EventDetail","/RaceDetail"]))||(!("onlinelab-top"!==t.id||!O(null==e?void 0:e.path,"/OnlineLab"))||O(null==e?void 0:e.path,t.path))));t>=0&&(a.value[t].active=!0)},handleJumpPage:(e,t)=>{const r="string"==typeof n?n:n.value;if(["tools","projects","learn"].includes(e.id)){if(!t)return;if(t.path.startsWith("http"))return ae(t.path);if(t.path)return o(t.path);if("unopen"===t.type)return l.ElMessage.warning(r)}if("docs"===e.id)return ae("https://docs.flagos.io/");a.value.forEach((e=>e.active=!1)),e.active=!0,o(t?t.path:e.path)}}},e.useHeaderTheme=function(e){const o=t.ref(0),l=t.ref(!1),n=t.ref(!1),r={getThreshold:()=>window.innerHeight-80},i={getThreshold:()=>310},s={getThreshold:()=>100},c=(e,t)=>{e>t?(l.value=!1,n.value=!0):(l.value=!0,n.value=!1),o.value=e<=0?0:e},d=a.default((()=>{const e=window.scrollY||document.documentElement.scrollTop||0;c(e,r.getThreshold())}),200),p=a.default((()=>{const t=window.scrollY||document.documentElement.scrollTop||0,o=O(null==e?void 0:e.path,"/OnlineLab")?s.getThreshold():i.getThreshold();c(t,o)}),200),u=()=>{window.removeEventListener("scroll",d),window.removeEventListener("scroll",p),O(null==e?void 0:e.path,"/Home")?(l.value=!0,n.value=!1,window.addEventListener("scroll",d),t.nextTick((()=>d()))):D(null==e?void 0:e.path,["/events","/EventDetail","/RaceDetail","/OnlineLab"])?(l.value=!0,n.value=!1,window.addEventListener("scroll",p),t.nextTick((()=>p()))):(l.value=!1,n.value=!1)};return t.onMounted((()=>u())),t.onUnmounted((()=>{window.removeEventListener("scroll",d),window.removeEventListener("scroll",p)})),{lastScrollTop:o,isWhiteTheme:l,isScrolledTheme:n,bindByRoute:u,handleScroll:d,handleEventsScroll:p}},Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));
|
|
2
2
|
//# sourceMappingURL=index.umd.js.map
|
package/dist/index.umd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.umd.js","sources":["../src/components/Table/index.vue","../src/components/Button/index.vue","../src/components/Header/src/constants/locale.ts","../src/components/Header/src/config/texts.ts","../src/Icon/Down.vue","../src/Icon/Header.vue","../src/components/Header/src/Avatar.vue","../src/components/Header/src/Login.vue","../src/components/Header/src/config/locale.ts","../src/components/Header/src/Locale.vue","../src/components/Header/src/utils/path.ts","../src/components/Header/src/Header.vue","../src/components/Header/src/config/menus.ts","../src/components/Header/src/utils/openLink.ts","../src/index.ts","../src/components/Header/src/hooks/useHeaderMenu.ts","../src/components/Header/src/hooks/useHeaderTheme.ts"],"sourcesContent":["<template>\n <div class=\"w-full overflow-auto\">\n <table class=\"w-full border-collapse table-fixed\">\n <thead>\n <tr>\n <th \n v-for=\"column in columns\" \n :key=\"column.key\" \n :style=\"{ width: column.width }\"\n class=\"p-3 text-left bg-gray-100 text-gray-700 font-medium text-sm border-b border-gray-200\"\n >\n {{ column.title }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr \n v-for=\"(row, rowIndex) in data\" \n :key=\"rowKey ? row[rowKey] : rowIndex\"\n class=\"hover:bg-gray-50\"\n >\n <td \n v-for=\"column in columns\" \n :key=\"column.key\"\n class=\"p-3 text-left border-b border-gray-200 text-sm\"\n >\n <slot :name=\"column.key\" :row=\"row\" :index=\"rowIndex\">\n {{ row[column.key] }}\n </slot>\n </td>\n </tr>\n <tr v-if=\"!data || data.length === 0\">\n <td \n :colspan=\"columns.length\" \n class=\"p-8 text-center text-gray-500\"\n >\n <slot name=\"empty\">暂无数据</slot>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, PropType } from 'vue';\n\nexport interface TableColumn {\n key: string;\n title: string;\n width?: string;\n}\n\nexport default defineComponent({\n name: 'MyTable',\n props: {\n columns: {\n type: Array as PropType<TableColumn[]>,\n required: true\n },\n data: {\n type: Array as PropType<Record<string, any>[]>,\n default: () => []\n },\n rowKey: {\n type: String,\n default: ''\n }\n }\n});\n</script> ","<template>\n <button\n class=\"inline-flex justify-center items-center h-8 px-4 py-2 rounded-md text-sm font-medium transition-colors duration-200 focus:outline-none\"\n :class=\"[\n typeClasses,\n {\n 'opacity-50 cursor-not-allowed': disabled,\n 'relative': loading\n }\n ]\"\n :disabled=\"disabled || loading\"\n @click=\"handleClick\"\n >\n <span v-if=\"loading\" class=\"mr-2 w-4 h-4 i-svg-spinners-270-ring-with-bg\"></span>\n <slot></slot>\n </button>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed, PropType } from 'vue';\n\ntype ButtonType = 'primary' | 'success' | 'warning' | 'danger' | 'info' | 'default';\n\nexport default defineComponent({\n name: 'MyButton',\n props: {\n type: {\n type: String as PropType<ButtonType>,\n default: 'default'\n },\n disabled: {\n type: Boolean,\n default: false\n },\n loading: {\n type: Boolean,\n default: false\n }\n },\n emits: ['click'],\n setup(props, { emit }) {\n // 根据类型计算样式类\n const typeClasses = computed(() => {\n switch (props.type) {\n case 'primary':\n return 'bg-primary hover:bg-blue-500 text-white border-transparent';\n case 'success':\n return 'bg-success hover:bg-green-500 text-white border-transparent';\n case 'warning':\n return 'bg-warning hover:bg-yellow-500 text-white border-transparent';\n case 'danger':\n return 'bg-danger hover:bg-red-500 text-white border-transparent';\n case 'info':\n return 'bg-info hover:bg-gray-500 text-white border-transparent';\n default:\n return 'bg-white hover:bg-gray-100 text-gray-700 border border-gray-300';\n }\n });\n\n const handleClick = (e: MouseEvent) => {\n if (props.disabled || props.loading) return;\n emit('click', e);\n };\n\n return {\n typeClasses,\n handleClick\n };\n }\n});\n</script>\n\n<style>\n.my-button {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n line-height: 1;\n height: 32px;\n white-space: nowrap;\n cursor: pointer;\n color: #606266;\n text-align: center;\n box-sizing: border-box;\n outline: none;\n transition: 0.1s;\n font-weight: 500;\n padding: 8px 15px;\n font-size: 14px;\n border-radius: 4px;\n border: 1px solid #dcdfe6;\n background: #ffffff;\n}\n\n.my-button--primary {\n color: #fff;\n background-color: #409eff;\n border-color: #409eff;\n}\n\n.my-button--success {\n color: #fff;\n background-color: #67c23a;\n border-color: #67c23a;\n}\n\n.my-button--warning {\n color: #fff;\n background-color: #e6a23c;\n border-color: #e6a23c;\n}\n\n.my-button--danger {\n color: #fff;\n background-color: #f56c6c;\n border-color: #f56c6c;\n}\n\n.my-button.is-disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n.my-button__loading {\n display: inline-block;\n width: 14px;\n height: 14px;\n border: 2px solid currentColor;\n border-radius: 50%;\n border-right-color: transparent;\n margin-right: 5px;\n animation: rotate 1s linear infinite;\n}\n\n@keyframes rotate {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n</style> ","export enum LocaleTypeEnum {\n English = 'en',\n Chinese = 'zh-CN',\n}\n","import type { InjectionKey, ComputedRef } from 'vue';\nimport { LocaleTypeEnum } from '../constants/locale';\n\nexport interface NavTexts {\n loginText: string;\n logoutText: string;\n}\n\nexport const NAV_TEXTS_KEY: InjectionKey<ComputedRef<NavTexts>> = Symbol('nav-texts');\n\nexport const buildNavTexts = (lang: LocaleTypeEnum): NavTexts => {\n const isZh = lang === LocaleTypeEnum.Chinese;\n return {\n loginText: isZh ? '登录/注册' : 'Log In / Sign Up',\n logoutText: isZh ? '退出登录' : 'Log Out',\n };\n};\n","<template>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"icon/down\">\n <path id=\"Union\" d=\"M12.1382 5.86191C11.8778 5.60156 11.4557 5.60156 11.1954 5.86191L8.0001 9.05717L4.80484 5.86191C4.54449 5.60156 4.12238 5.60156 3.86203 5.86191C3.60168 6.12226 3.60168 6.54437 3.86203 6.80472L7.29299 10.2357C7.68352 10.6262 8.31668 10.6262 8.70721 10.2357L12.1382 6.80472C12.3985 6.54437 12.3985 6.12226 12.1382 5.86191Z\" fill=\"#2C364B\"/>\n </g>\n </svg>\n</template>","<template>\n <svg width=\"19px\" height=\"20px\" viewBox=\"0 0 19 20\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>yonghu-2</title>\n <g id=\"页面-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"flagos首页备份-4\" transform=\"translate(-1187, -32)\" fill=\"#FFFFFF\" fill-rule=\"nonzero\">\n <g id=\"yonghu-2\" transform=\"translate(1187, 32)\">\n <path d=\"M4.16667254,6.66658844 C4.16667254,3.9091208 6.40897956,1.66664712 9.1664472,1.66664712 C11.9239148,1.66664712 14.1663885,3.9091208 14.1663885,6.66658844 C14.1663885,9.42388942 11.9239148,11.6665298 9.1664472,11.6665298 C6.40897956,11.6665298 4.16650588,9.42388942 4.16650588,6.66658844 M18.3046733,18.9521109 C17.4853496,15.8829803 15.3253749,13.4830084 12.6130734,12.3621883 C14.5387175,11.192202 15.8330356,9.08056012 15.8330356,6.66642176 C15.832869,2.99079823 12.8420707,0 9.16628054,0 C5.49049035,0 2.4996921,2.99079823 2.4996921,6.66658844 C2.4996921,9.08056012 3.79384359,11.192202 5.72048764,12.3621883 C3.00801947,13.4838418 0.848044811,15.8829803 0.028221107,18.9521109 C-0.0900085115,19.3963877 0.174049854,19.8524478 0.618214182,19.971099 C1.06293982,20.0897021 1.51968816,19.8256771 1.63886887,19.3811059 C2.59002437,15.820481 5.68498805,13.3331769 9.16661386,13.3331769 C12.6482397,13.3331769 15.74387,15.8206477 16.6948589,19.3814392 C16.7515138,19.5951643 16.8909444,19.7775312 17.0823388,19.8882397 C17.2737332,19.9989483 17.5013346,20.0288842 17.7148469,19.9714323 C18.1590942,19.8527834 18.423176,19.3966084 18.30484,18.9522776\" id=\"形状\"></path>\n </g>\n </g>\n </g>\n </svg>\n</template>","<template>\n <el-dropdown popper-class=\"custom-dropdown\" size=\"large\" ref=\"dropdown\" trigger=\"click\" :show-arrow=\"false\" @visible-change=\"onVisibleChange\">\n <div class=\"flex items-center cursor-pointer\">\n <div class=\"w-24 h-24 rounded-50% font-600 flex-center mr-8\">\n <Header/>\n </div>\n\n <span>{{ userNickName }}</span>\n <el-icon\n class=\"el-icon--right !ml-16 transition-all duration-200\"\n :class=\"{\n ' rotate-180': dropdownVisible,\n }\"\n :size=\"16\"\n >\n <Down />\n </el-icon>\n </div>\n\n <template #dropdown>\n <el-dropdown-menu>\n <el-dropdown-item>\n <div class=\"flex items-center w-full text-14 mb-4\" @click=\"logout\">\n {{ navTexts?.logoutText }}\n </div>\n </el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n</template>\n\n<script setup lang=\"ts\">\nimport { inject, ref } from 'vue';\nimport { NAV_TEXTS_KEY } from './config/texts';\nimport Down from '../../../Icon/Down.vue';\nimport Header from '../../../Icon/Header.vue';\n\nconst navTexts = inject(NAV_TEXTS_KEY);\nconst dropdownVisible = ref(false);\nconst onVisibleChange = (visible: boolean) => {\n dropdownVisible.value = visible;\n};\ninterface Props {\n userNickName: string;\n currentPath: string;\n logout: () => void;\n}\n\ndefineProps<Props>();\n</script>\n\n<style scoped lang=\"scss\" >\n.reset-btn {\n border-color: #bec3cd;\n\n :deep(.el-button) {\n color: #3e4a54 !important;\n }\n &:hover {\n :deep(.el-button) {\n color: #3967e9 !important;\n }\n border-color: #3967e9;\n .el-icon {\n fill: #3967e9 !important;\n }\n }\n &:active {\n .el-icon {\n fill: #fff !important;\n }\n :deep(.el-button) {\n color: #fff !important;\n }\n border-color: transparent;\n background: #3967e9;\n }\n}\n</style>\n","<template>\n <el-button type=\"primary\" class=\"!rounded-4\" @click=\"login\">{{ navTexts?.loginText }}</el-button>\n</template>\n<script setup lang=\"ts\">\nimport { inject } from 'vue';\nimport { useRouter } from 'vue-router';\nimport { NAV_TEXTS_KEY } from './config/texts';\n\nconst navTexts = inject(NAV_TEXTS_KEY);\nconst router = useRouter();\n\nconst login = () => {\n router.push({ path: '/login', query: { redirect_url: encodeURIComponent(location.href) } });\n};\n</script>\n","import { LocaleTypeEnum } from '../constants/locale';\n\nexport const NAV_LOCALE_OPTIONS = [\n { value: LocaleTypeEnum.Chinese, label: '中文' },\n { value: LocaleTypeEnum.English, label: 'English' },\n];\n\nexport const NAV_LOCALE_TO_LANG: Record<LocaleTypeEnum, string> = {\n [LocaleTypeEnum.Chinese]: 'cn',\n [LocaleTypeEnum.English]: 'en',\n};\n\nexport const NAV_LANG_TO_LOCALE: Record<string, LocaleTypeEnum> = {\n cn: LocaleTypeEnum.Chinese,\n en: LocaleTypeEnum.English,\n};\n\nexport const NAV_WIKI_LANG_BY_LOCALE: Record<LocaleTypeEnum, string> = {\n [LocaleTypeEnum.Chinese]: 'zh',\n [LocaleTypeEnum.English]: 'en',\n};\n","<template>\n <el-dropdown class=\"cursor-pointer\" trigger=\"click\" popper-class=\"custom-dropdown\" placement=\"bottom\" @visible-change=\"handleChange\">\n <svg width=\"20px\" height=\"20px\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect fill=\"#D8D8D8\" opacity=\"0\" x=\"0\" y=\"0\" width=\"20\" height=\"20\"></rect>\n <path\n :fill=\"isWhite ? '#ffffff' : '#2C364B'\"\n fill-rule=\"nonzero\"\n d=\"M10,0 C4.48583334,0 0,4.48583334 0,10 C0,15.5141667 4.48583334,20 10,20 C15.5141667,20 20,15.5141667 20,10 C20,4.48583334 15.5141667,0 10,0 Z M18.6966667,10.9491667 L18.6925,10.9741667 C18.6575,11.2791667 18.6075,11.5791667 18.5425,11.8741667 L18.5425,11.875 L15.5258333,11.875 C15.657032,10.6284426 15.657032,9.37155738 15.5258333,8.125 L18.5425,8.125 C18.6075,8.42 18.6566667,8.72 18.6925,9.025 C18.6925,9.03333334 18.695,9.04166666 18.6966667,9.05083334 C18.7675,9.68166668 18.7675,10.3183333 18.6966667,10.9491667 L18.6966667,10.9491667 Z M13.34,18.0833333 C14.2783333,16.8683333 14.9891667,15.1491667 15.3516667,13.1241667 L18.1633333,13.1241667 C17.3009588,15.3668017 15.5579816,17.158563 13.34,18.0825 L13.34,18.0833333 Z M18.1625,6.87333334 L15.3516667,6.87333334 C14.9891667,4.84833334 14.2783333,3.13 13.34,1.915 C15.5576659,2.83912386 17.3003173,4.63085972 18.1625,6.87333334 L18.1625,6.87333334 Z M14.2658333,8.12333334 C14.4114344,9.36909341 14.4114344,10.6275733 14.2658333,11.8733333 L10.6241667,11.8733333 L10.6241667,8.12333334 L14.2658333,8.12333334 Z M10.6241667,6.87333334 L10.6241667,1.355 C12.1825,1.825 13.5008333,4.0025 14.07,6.87583334 L10.625,6.87583334 L10.6241667,6.87333334 Z M10.6241667,13.1233333 L14.07,13.1233333 C13.5008333,15.9983333 12.1825,18.175 10.625,18.645 L10.625,13.125 L10.6241667,13.1233333 Z M1.8375,13.1241667 L4.64833334,13.1241667 C5.01083334,15.1491667 5.72166668,16.8683333 6.66,18.0825 C4.44233408,17.1583761 2.69968275,15.3666403 1.8375,13.1241667 L1.8375,13.1241667 Z M6.66,1.91666666 C5.72166666,3.13 5.01083334,4.85 4.64833334,6.875 L1.83666666,6.875 C2.69923303,4.63220345 4.44253606,2.84041679 6.66083334,1.91666666 L6.66,1.91666666 Z M5.73416666,11.875 C5.58856559,10.6292399 5.58856559,9.37076007 5.73416666,8.125 L9.375,8.125 L9.375,11.875 L5.73333334,11.875 L5.73416666,11.875 Z M9.375,13.125 L9.375,18.6458333 C7.81666666,18.1758333 6.49916666,15.9983333 5.93,13.125 L9.375,13.125 Z M9.375,6.875 L5.93,6.875 C6.49916666,4.00166666 7.81666666,1.825 9.375,1.35416666 L9.375,6.875 Z M1.30416666,9.05 C1.30416666,9.04333334 1.30666666,9.03583334 1.3075,9.02833334 C1.34166666,8.725 1.39166666,8.42333334 1.4575,8.125 L4.47416666,8.125 C4.34243809,9.37152952 4.34243809,10.6284705 4.47416666,11.875 L1.4575,11.875 C1.39166666,11.5766667 1.34166666,11.275 1.3075,10.9716667 L1.30416666,10.9491667 C1.23220566,10.3184348 1.23220566,9.68156522 1.30416666,9.05083334 L1.30416666,9.05 Z\"\n />\n </svg>\n <template #dropdown>\n <el-dropdown-menu>\n <el-dropdown-item\n v-for=\"locale in localeOptions\"\n :key=\"locale.value\"\n :class=\"{ 'is-active': locale.value === currentLocale }\"\n @click=\"emitChangeLanguage(locale.value)\"\n >\n <span :class=\"{ 'color-primary': locale.value === currentLocale }\">\n {{ locale.label }}\n </span>\n </el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n</template>\n<script setup lang=\"tsx\">\nimport { ref, computed } from 'vue';\nimport { LocaleTypeEnum } from './constants/locale';\nimport { NAV_LOCALE_OPTIONS } from './config/locale';\n\nconst active = ref(false);\n\nconst handleChange = (val: boolean) => {\n active.value = val;\n};\n\ninterface LocaleOption {\n value: LocaleTypeEnum;\n label: string;\n}\n\ninterface Props {\n isWhiteTheme?: boolean;\n currentLocale: LocaleTypeEnum;\n localeOptions?: LocaleOption[];\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n isWhiteTheme: false,\n localeOptions: () => NAV_LOCALE_OPTIONS,\n});\n\nconst emits = defineEmits<{\n (e: 'change-language', locale: LocaleTypeEnum): void;\n}>();\n\nconst isWhite = computed(() => props.isWhiteTheme);\nconst currentLocale = computed(() => props.currentLocale);\nconst localeOptions = computed(() => props.localeOptions);\n\nconst emitChangeLanguage = (locale: LocaleTypeEnum) => {\n if (locale === currentLocale.value) {\n return;\n }\n emits('change-language', locale);\n};\n</script>\n<style scoped lang=\"scss\"></style>\n","export const matchPath = (path: string, targetPath: string): boolean => {\n if (!path || !targetPath) return false;\n return path.toLowerCase().indexOf(targetPath.toLowerCase()) >= 0;\n};\n\nexport const matchAnyPath = (path: string, targetPaths: string[]): boolean => {\n return targetPaths.some(targetPath => matchPath(path, targetPath));\n};\n","<template>\n <div\n class=\"w-[calc(100vw-160px)] header-wrapper h-64px pl-120 pr-120 py-19 backdrop-blur-[14px] flex items-center justify-between text-#000 fixed left-0 top-0 z-99 bg-transparent overflow-x-scroll\"\n :class=\"{\n 'theme-white': isWhiteTheme,\n 'theme-scrolled': isScrolledTheme,\n '!b-0': matchPath(routePath, '/CommunityMembers'),\n }\"\n >\n <div class=\"flex-center\">\n <img\n class=\"logo\"\n :src=\"isWhiteTheme ? 'https://flagos.ks3-cn-beijing.ksyuncs.com/images/logo.svg' : 'https://flagos.ks3-cn-beijing.ksyuncs.com/images/logo-black.svg'\"\n @click=\"onLogoClick\"\n />\n <div class=\"flex gap-48 ml-80\">\n <div\n v-for=\"(menu, index) in menuList\"\n :index=\"index\"\n class=\"menu-item cursor-pointer whitespace-nowrap\"\n :class=\"{ active: menu.active }\"\n >\n <el-dropdown\n v-if=\"menu.dropdownList && menu.id === 'learn'\"\n popper-class=\"custom-dropdown-new\"\n :show-arrow=\"false\"\n >\n <span class=\"text-16\">{{ menu.label}}</span>\n <template #dropdown>\n <el-dropdown-menu class=\"flex-row\">\n <el-dropdown-item\n v-for=\"(childMenu, idx) in menu.dropdownList\"\n :key=\"idx\"\n :class=\"{ active: matchPath(routePath, childMenu.path) }\"\n @click=\"onJumpPage(menu, childMenu)\"\n >\n <span class=\"text-14 mb-16 !font-500\">{{ childMenu.label }}</span>\n <span class=\"text-14 whitespace-normal !font-400\">{{ childMenu.desc }}</span>\n </el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n <el-dropdown\n v-else-if=\"menu.dropdownList && menu.id === 'tools'\"\n popper-class=\"custom-dropdown-new\"\n :show-arrow=\"false\"\n >\n <span class=\"text-16\">{{ menu.label }}</span>\n <template #dropdown>\n <el-dropdown-menu>\n <el-dropdown-item v-for=\"(childMenu, idx) in menu.dropdownList\" :key=\"idx\" @click=\"onJumpPage(menu, childMenu)\">\n <span class=\"text-14 mb-16 !font-500\">{{childMenu.label }}</span>\n <span class=\"text-14 whitespace-normal !font-400\">{{ childMenu.desc }}</span>\n </el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n <el-dropdown v-else-if=\"menu.dropdownGroups && menu.id === 'projects'\" popper-class=\"custom-dropdown-new\" :show-arrow=\"false\">\n <span class=\"text-16\">{{ menu.label}}</span>\n <template #dropdown>\n <el-dropdown-menu class=\"flex gap-20 el-dropdown-menu_out\">\n <ul v-for=\"(group, idx) in menu.dropdownGroups\" :key=\"idx\" class=\"flex-1 el-dropdown-menu !w-[50%] !max-h-560px\">\n <span class=\"text-14 text-#bbbbbb leading-22 mb-20\">{{ group.label }}</span>\n <el-dropdown-item\n v-for=\"(childMenu, cidx) in group.list\"\n :key=\"cidx\"\n class=\"el-dropdown-menu__item !w-full\"\n @click=\"onJumpPage(menu, childMenu)\"\n >\n <span class=\"text-14 mb-16 !font-500\">{{ childMenu.label }}</span>\n <span class=\"text-14 whitespace-normal !font-400\">{{ childMenu.desc }}</span>\n </el-dropdown-item>\n </ul>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n <span v-else @click=\"onJumpPage(menu)\">{{ menu.label }}</span>\n </div>\n </div>\n </div>\n <div class=\"flex-center\" :class=\"isWhiteTheme ? 'text-#ffffff' : 'text-#262642'\">\n <Locale :isWhiteTheme=\"isWhiteTheme\" :current-locale=\"currentLocale\" @change-language=\"onChangeLanguage\" />\n <Login v-if=\"!userName\" class=\"ml-20\" />\n <Avatar\n v-if=\"userName\"\n class=\"header_avatar ml-20\"\n :class=\"isWhiteTheme ? 'text-#ffffff' : 'text-#262642'\"\n :user-nick-name=\"userNickName\"\n :current-path=\"routePath\"\n :logout=\"onLogout\"\n />\n </div>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport { computed, provide } from 'vue';\nimport Avatar from './Avatar.vue';\nimport Login from './Login.vue';\nimport Locale from './Locale.vue';\nimport { LocaleTypeEnum } from './constants/locale';\nimport { matchPath } from './utils/path';\nimport type { NavMenuItem, NavChildItem } from './config/menus';\nimport { NAV_TEXTS_KEY, buildNavTexts } from './config/texts';\nimport 'uno.css';\ninterface Props {\n routePath: string;\n menuList: NavMenuItem[];\n isWhiteTheme: boolean;\n isScrolledTheme: boolean;\n currentLocale: LocaleTypeEnum;\n userName?: string;\n userNickName: string;\n onLogoClick: () => void;\n onJumpPage: (menu: NavMenuItem, childMenu?: NavChildItem) => void;\n onChangeLanguage: (locale: LocaleTypeEnum) => void;\n onLogout: () => void;\n}\n\nconst props = defineProps<Props>();\n\nprovide(\n NAV_TEXTS_KEY,\n computed(() => buildNavTexts(props.currentLocale))\n);\n\n</script>\n<style scoped lang=\"scss\">\n.header-wrapper {\n transition: all 0.3s ease;\n border-bottom: 1px solid rgba(0, 0, 0, 0.13);\n &.theme-white {\n color: #fff;\n border: none;\n background: transparent;\n svg {\n color: #fff;\n }\n .menu-item {\n &::before {\n background-color: #fff;\n }\n :deep(.el-dropdown) {\n color: #fff;\n }\n }\n }\n &.theme-scrolled {\n background: #fff;\n color: #262642;\n border-bottom: 1px solid rgba(0, 0, 0, 0.13);\n svg {\n color: #262642;\n }\n .menu-item {\n &::before {\n background-color: #262642;\n }\n :deep(.el-dropdown) {\n color: #262642;\n }\n }\n }\n .logo {\n width: 100px;\n height: 38px;\n cursor: pointer;\n object-fit: contain;\n }\n svg {\n color: #262642;\n }\n .menu-item {\n display: flex;\n align-items: center;\n position: relative;\n font-size: 16px;\n &::before {\n content: '';\n display: block;\n position: absolute;\n left: 0;\n bottom: -2px;\n width: 0;\n height: 2px;\n border-radius: 1px;\n background-color: #262642;\n transition: all 0.3s ease;\n transform-origin: center;\n }\n &.active {\n font-weight: 600;\n &::before {\n width: 100%;\n }\n }\n :deep(.el-dropdown) {\n color: #262642;\n }\n }\n}\n</style>\n<style lang=\"scss\">\n .el-popper.custom-dropdown-new {\n padding: 0 !important;\n width: 100%;\n margin-left: -1px;\n // height: 90%;\n max-width: 100% !important;\n margin-top: 12px;\n // inset: 64px auto auto auto !important;\n box-shadow: none;\n background: #07111E;\n opacity: 0.95;\n .el-dropdown__list {\n width: 100% !important;\n height: 100% !important;\n padding: 56px 120px;\n \n .el-dropdown-menu_out{\n display: flex;\n flex-wrap: wrap;\n max-height: 90% !important;\n flex-direction: row !important;\n column-gap: 20px;\n row-gap: 4px;\n background: transparent !important;\n box-shadow: none !important;\n }\n \n .el-dropdown-menu {\n display: flex;\n max-height: 360px;\n flex-direction: column;\n flex-wrap: wrap;\n column-gap: 20px;\n row-gap: 4px;\n background: transparent !important;\n box-shadow: none !important;\n &.flex-row {\n flex-direction: row !important;\n flex-wrap: nowrap;\n }\n .el-dropdown-menu__item{\n width: calc((100% - 20px * 2) / 3);\n padding: 0 !important;\n min-height: 64px;\n font-family: PingFangSC, PingFang SC;\n font-weight: 600;\n font-size: 14px;\n color: #FFFFFF !important;\n line-height: 22px;\n padding: 20px 16px !important;\n border-radius: 8px;\n border: 1px solid transparent;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n }\n .el-dropdown-menu__item:hover, .el-dropdown-menu__item:focus {\n background: rgba(255,255,255, 0.05);\n border: 1px solid rgba(255,255,255, 0.2);\n \n }\n }\n }\n }\n</style>","import { LocaleTypeEnum } from '../constants/locale';\nimport { NAV_WIKI_LANG_BY_LOCALE } from './locale';\n\n// ---------- Types ----------\n\nexport interface NavChildItem {\n id: string;\n label: string;\n path: string;\n desc?: string;\n type: 'route' | 'link' | 'unopen';\n}\n\nexport interface NavDropdownGroup {\n id: string;\n label: string;\n list: NavChildItem[];\n}\n\nexport interface NavMenuItem {\n id: string;\n label: string;\n path?: string;\n active?: boolean;\n /** flat items (tools / learn) */\n dropdownList?: NavChildItem[];\n /** grouped items (projects) */\n dropdownGroups?: NavDropdownGroup[];\n}\nconst mainDevHost = ['platform-aiintegration-dev.baai.ac.cn']\nconst mainProdHost =['flagos.io', 'flagos.net', 'www.flagos.io', 'www.flagos.net']\nconst mainHost = [...mainProdHost, ...mainDevHost]\n// ---------- Mock data ----------\nconst isMainApp = () => {\n return mainHost.includes(location.host)\n\n}\nconst buildMenu = (lang: LocaleTypeEnum): NavMenuItem[] => {\n const isZh = lang === LocaleTypeEnum.Chinese;\n const wikiLang = NAV_WIKI_LANG_BY_LOCALE[lang];\n\n return [\n {\n id: 'home',\n label: isZh ? '首页' : 'Home',\n path: '/Home',\n },\n {\n id: 'projects',\n label: isZh ? '软件栈' : 'Software Stack',\n dropdownGroups: [\n {\n id: 'coreLib',\n label: isZh ? '开源核心库' : 'Open-Source Core Libraries',\n list: [\n {\n id: 'flagscale',\n label: 'FlagScale',\n path: '/FlagScale',\n desc: isZh\n ? '统一多芯片、多后端的大模型框架,提供覆盖训练、微调与推理部署的全流程能力'\n : 'A unified multi-backend large model framework across diverse chips, providing end-to-end capabilities spanning training, fine-tuning, and inference deployment.',\n type: 'route',\n },\n {\n id: 'flaggems',\n label: 'FlagGems',\n path: '/FlagGems',\n desc: isZh\n ? '基于Triton实现的高性能通用算子库'\n : 'A high-performance general operator library built on Triton.',\n type: 'route',\n },\n {\n id: 'flagtree',\n label: 'FlagTree',\n path: '/FlagTree',\n desc: isZh\n ? '面向多种硬件的开源、统一AI编译器'\n : 'An open-source unified AI compiler for diverse hardware.',\n type: 'route',\n },\n {\n id: 'flagcx',\n label: 'FlagCX',\n path: '/FlagCX',\n desc: isZh\n ? '一款专为大规模AI系统设计的可扩展、自适应高性能跨芯片通信库'\n : 'A scalable, adaptive, high-performance cross-chip communication library designed for large-scale AI systems.',\n type: 'route',\n },\n ],\n },\n {\n id: 'ecosystem',\n label: isZh ? '生态使能项目' : 'FlagOS Ecosystem Enablement Project',\n list: [\n {\n id: 'megatronfl',\n label: 'Megatron-FL',\n path: 'https://github.com/flagos-ai/Megatron-LM-FL',\n desc: isZh\n ? '为Megatron-LM打造的多芯片插件,实现大模型多芯片高效训练'\n : 'A multi-chip plugin for Megatron-LM, enabling efficient large-scale training across diverse chips.',\n type: 'link',\n },\n {\n id: 'vllmpluginfl',\n label: 'vLLM-plugin-FL',\n path: 'https://github.com/flagos-ai/vllm-plugin-FL',\n desc: isZh\n ? '为vLLM打造的多芯片插件,实现大模型多芯片高效推理部署'\n : 'A multi-chip plugin for vLLM, enabling efficient large model inference and deployment across diverse chips.',\n type: 'link',\n },\n {\n id: 'transformerenginefl',\n label: 'TransformerEngine-FL',\n path: 'https://github.com/flagos-ai/TransformerEngine-FL',\n desc: isZh\n ? '为TransformerEngine打造的多芯片插件,实现多种芯片上分布式算子'\n : 'A multi-chip plugin for TransformerEngine, enabling distributed operators across diverse chip architectures.',\n type: 'link',\n },\n ],\n },\n ],\n },\n {\n id: 'tools',\n label: isZh ? '工具' : 'Tools',\n dropdownList: [\n {\n id: 'skill',\n label: isZh ? 'Skill广场' : 'SkillHub',\n path: resolvePath('/SkillHub'),\n desc: isZh ? '一站式AI计算技能库' : 'One-stop AI computing skills library.',\n type: 'route',\n },\n {\n id: 'onlinelab',\n label: isZh ? '线上实验室' : 'Online Laboratory',\n path: isMainApp() ?'/OnlineLab': resolvePath('/OnlineLab'),\n desc: isZh ? '开箱即用的在线实验环境' : 'Ready-to-use online experiment environment.',\n type: 'route',\n },\n {\n id: 'modelplatform',\n label: isZh ? '模型服务平台' : 'MaaS',\n path: '',\n desc: isZh\n ? '全生命周期大模型API服务平台'\n : 'A full-lifecycle API service platform for large models.',\n type: 'unopen',\n },\n {\n id: 'kernelgen',\n label: 'KernelGen',\n path: 'https://kernelgen.flagos.io/',\n desc: isZh\n ? '分钟级构建Kernel,支持多芯片后端'\n : 'Build Kernels in Minutes with Multi-Backend Support.',\n type: 'link',\n },\n {\n id: 'flagrelease',\n label: 'FlagRelease',\n path: '',\n desc: isZh\n ? '一套自动化迁移大模型至不同硬件产品的工具平台'\n : 'An automated tool platform for migrating large model to diverse hardware.',\n type: 'unopen',\n },\n {\n id: 'flagcicd',\n label: 'FlagCICD',\n path: '',\n desc: isZh\n ? '面向 AI 开发的持续集成 / 持续部署工具链'\n : 'A CI/CD toolchain for AI development.',\n type: 'unopen',\n },\n {\n id: 'flagmodelhub',\n label: isZh ? '九鼎AI一体化平台' : 'Jiuding AI Integrated Platform',\n path: '',\n desc: isZh\n ? '整合 FlagOS 全栈能力,提供从模型开发、训练到部署的一站式 AI 工程化平台'\n : 'Jiuding AI Platform.',\n type: 'unopen',\n },\n ],\n },\n {\n id: 'docs',\n label: isZh ? '文档' : 'Docs',\n },\n {\n id: 'learn',\n label: isZh ? '学习' : 'Learn',\n dropdownList: [\n {\n id: 'wiki',\n label: 'Wiki',\n desc: isZh ? '智能文档,边看边问边学': 'AI-powered interactive docs: query and learn in real-time.',\n path: `https://wiki.flagos.io`,\n type: 'link',\n },\n { id: 'professionalcourse', label: isZh ? '专业课' : 'Core Courses', desc: isZh ? '众智FlagOS系列开源课程' : 'The official open-source course series for the FlagOS ecosystem.', path: 'https://flagos.educoder.net/paths', type: 'link' },\n { id: 'course',label: isZh ? '讲座' : 'Tech Talks', desc: isZh ? '大咖分享,业界前沿讲座' : 'Cutting-edge insights and deep dives from industry leaders.', path: '/LearnCenter', type: 'route' },\n ],\n },\n {\n id: 'events',\n label: isZh ? '活动赛事' : 'Event & Competition',\n path: isMainApp() ?'/events': resolvePath('/events'),\n },\n {\n id: 'onlinelab-top',\n label: isZh ? '线上实验室' : 'Online Laboratory',\n path: isMainApp() ?'/OnlineLab': resolvePath('/OnlineLab'),\n },\n ];\n};\nconst resolvePath = (path: string): string => {\n if(mainProdHost.includes(location.hostname)) {\n return `https://${location.hostname}${path}`;\n } else {\n return `${location.protocol}//${path.slice(1).toLocaleLowerCase()}.${mainDevHost[0]}`;\n }\n};\n\nconst resolveMenuPaths = (items: NavMenuItem[]): NavMenuItem[] => {\n return items;\n};\n\n/**\n * Fetch nav menu by lang.\n * Replace the mock body with a real HTTP call when the backend is ready:\n * return request({ method: 'get', url: '/nav/menus', params: { lang } }).then(res => res.data);\n */\nexport const getNavMenuApi = (lang: LocaleTypeEnum): NavMenuItem[] => {\n return resolveMenuPaths(buildMenu(lang));\n};\n","export const openLink = (url: string) => {\n window.open(url, '_blank');\n};\n","import type { App } from 'vue';\nimport MyTable from './components/Table/index.vue';\nimport MyButton from './components/Button/index.vue';\nimport Header from './components/Header/src/Header.vue';\nexport * from './components/Header/src/index';\nexport { MyTable, MyButton, Header };\n\n// 插件安装方法\nexport default {\n install(app: App) {\n app.component('MyButton', MyButton);\n app.component('MyTable', MyTable);\n }\n}; ","import { ref, watch } from 'vue';\nimport type { Ref } from 'vue';\nimport { ElMessage } from 'element-plus';\nimport type { LocaleTypeEnum } from '../constants/locale';\nimport { getNavMenuApi, type NavMenuItem, type NavChildItem } from '../config/menus';\nimport { openLink } from '../utils/openLink';\nimport { matchPath, matchAnyPath } from '../utils/path';\n\nexport function useHeaderMenu(\n currentLocale: Ref<LocaleTypeEnum>,\n route: any,\n router: any,\n /** String shown when user clicks an unavailable item (e.g. t('projects.unopentip')) */\n unopenTip: Ref<string> | string\n) {\n const menuList = ref<NavMenuItem[]>([]);\n\n const fetchMenu = (lang: LocaleTypeEnum) => {\n const data = getNavMenuApi(lang);\n // preserve active state across refetch\n const activeId = menuList.value.find(m => m.active)?.id;\n menuList.value = data.map(m => ({ ...m, active: m.id === activeId }));\n };\n\n watch(currentLocale, lang => fetchMenu(lang), { immediate: true });\n\n const syncActiveMenu = () => {\n menuList.value.forEach(item => (item.active = false));\n const curIdx = menuList.value.findIndex(item => {\n if (item.dropdownList) {\n return item.dropdownList.some(child => matchPath(route?.path, child.path));\n }\n if (item.dropdownGroups) {\n return item.dropdownGroups.some(group =>\n group.list.some(child => matchPath(route?.path, child.path))\n );\n }\n if (matchPath(item.path as string, '/events') && matchAnyPath(route?.path, ['/EventDetail', '/RaceDetail'])) return true;\n if (item.id === 'onlinelab-top' && matchPath(route?.path, '/OnlineLab')) return true;\n return matchPath(route?.path, item.path as string);\n });\n if (curIdx >= 0) menuList.value[curIdx].active = true;\n };\n\n const handleJumpPage = (menu: NavMenuItem, childMenu?: NavChildItem) => {\n const tip = typeof unopenTip === 'string' ? unopenTip : unopenTip.value;\n\n if (['tools', 'projects', 'learn'].includes(menu.id)) {\n if (!childMenu) return;\n if (childMenu.path.startsWith('http')) return openLink(childMenu.path);\n if (childMenu.path) return router.push(childMenu.path);\n if (childMenu.type === 'unopen') return ElMessage.warning(tip);\n }\n if (menu.id === 'docs') return openLink('https://docs.flagos.io/');\n\n menuList.value.forEach(item => (item.active = false));\n menu.active = true;\n router.push(childMenu ? childMenu.path : menu.path);\n };\n\n return { menuList, syncActiveMenu, handleJumpPage };\n}\n","import { ref, nextTick, onMounted, onUnmounted } from 'vue';\nimport throttle from 'lodash/throttle';\nimport { matchPath, matchAnyPath } from '../utils/path';\n\nexport function useHeaderTheme(route: any) {\n const lastScrollTop = ref(0);\n const isWhiteTheme = ref(false);\n const isScrolledTheme = ref(false);\n\n const SCROLL_THRESHOLDS = {\n home: { getThreshold: () => window.innerHeight - 80 },\n events: { getThreshold: () => 390 - 80 },\n onlineLab: { getThreshold: () => 180 - 80 },\n };\n\n const updateThemeByScroll = (scrollTop: number, threshold: number) => {\n if (scrollTop > threshold) {\n isWhiteTheme.value = false;\n isScrolledTheme.value = true;\n } else {\n isWhiteTheme.value = true;\n isScrolledTheme.value = false;\n }\n lastScrollTop.value = scrollTop <= 0 ? 0 : scrollTop;\n };\n\n const handleScroll = throttle(() => {\n const scrollTop = window.scrollY || document.documentElement.scrollTop || 0;\n updateThemeByScroll(scrollTop, SCROLL_THRESHOLDS.home.getThreshold());\n }, 200);\n\n const handleEventsScroll = throttle(() => {\n const scrollTop = window.scrollY || document.documentElement.scrollTop || 0;\n const threshold = matchPath(route?.path, '/OnlineLab') ? SCROLL_THRESHOLDS.onlineLab.getThreshold() : SCROLL_THRESHOLDS.events.getThreshold();\n updateThemeByScroll(scrollTop, threshold);\n }, 200);\n\n const bindByRoute = () => {\n window.removeEventListener('scroll', handleScroll);\n window.removeEventListener('scroll', handleEventsScroll);\n\n if (matchPath(route?.path, '/Home')) {\n isWhiteTheme.value = true;\n isScrolledTheme.value = false;\n window.addEventListener('scroll', handleScroll);\n nextTick(() => handleScroll());\n } else if (matchAnyPath(route?.path, ['/events', '/EventDetail', '/RaceDetail', '/OnlineLab'])) {\n isWhiteTheme.value = true;\n isScrolledTheme.value = false;\n window.addEventListener('scroll', handleEventsScroll);\n nextTick(() => handleEventsScroll());\n } else {\n isWhiteTheme.value = false;\n isScrolledTheme.value = false;\n }\n };\n\n onMounted(() => bindByRoute());\n onUnmounted(() => {\n window.removeEventListener('scroll', handleScroll);\n window.removeEventListener('scroll', handleEventsScroll);\n });\n\n return { lastScrollTop, isWhiteTheme, isScrolledTheme, bindByRoute, handleScroll, handleEventsScroll };\n}\n"],"names":["_sfc_main$7","defineComponent","name","props","columns","type","Array","required","data","default","rowKey","String","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","createElementVNode","_hoisted_2","_Fragment","Fragment","_renderList","column","openBlock","createElementBlock","key","style","_normalizeStyle","width","class","renderList","row","rowIndex","$slots","length","_hoisted_3","colspan","_sfc_main$6","disabled","Boolean","loading","emits","setup","emit","typeClasses","computed","handleClick","e","_normalizeClass","args","_createCommentVNode","LocaleTypeEnum","NAV_TEXTS_KEY","Symbol","buildNavTexts","lang","isZh","Chinese","loginText","logoutText","height","viewBox","fill","_sfc_render","id","d","version","xmlns","stroke","transform","navTexts","inject","dropdownVisible","ref","onVisibleChange","visible","value","router","useRouter","login","push","path","query","redirect_url","encodeURIComponent","location","href","NAV_LOCALE_OPTIONS","label","English","NAV_LOCALE_TO_LANG","NAV_LANG_TO_LOCALE","cn","en","NAV_WIKI_LANG_BY_LOCALE","active","handleChange","val","__props","__emit","isWhite","isWhiteTheme","currentLocale","localeOptions","locale","matchPath","targetPath","toLowerCase","indexOf","matchAnyPath","targetPaths","some","vue","provide","mainDevHost","mainProdHost","mainHost","isMainApp","includes","host","resolvePath","hostname","protocol","slice","toLocaleLowerCase","getNavMenuApi","dropdownGroups","list","desc","dropdownList","buildMenu","openLink","url","window","open","index","install","app","component","MyButton","MyTable","route","unopenTip","menuList","activeId","_a","find","m","map","fetchMenu","immediate","syncActiveMenu","forEach","item","curIdx","findIndex","child","group","handleJumpPage","menu","childMenu","tip","startsWith","ElMessage","warning","lastScrollTop","isScrolledTheme","SCROLL_THRESHOLDS","getThreshold","innerHeight","updateThemeByScroll","scrollTop","threshold","handleScroll","throttle","scrollY","document","documentElement","handleEventsScroll","bindByRoute","removeEventListener","addEventListener","onUnmounted"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.umd.js","sources":["../src/components/Table/index.vue","../src/components/Button/index.vue","../src/components/Header/src/constants/locale.ts","../src/components/Header/src/config/texts.ts","../src/Icon/Down.vue","../src/Icon/Header.vue","../src/components/Header/src/Avatar.vue","../src/components/Header/src/Login.vue","../src/components/Header/src/config/locale.ts","../src/components/Header/src/Locale.vue","../src/components/Header/src/utils/path.ts","../src/components/Header/src/Header.vue","../src/components/Header/src/config/menus.ts","../src/components/Header/src/utils/openLink.ts","../src/index.ts","../src/components/Header/src/hooks/useHeaderMenu.ts","../src/components/Header/src/hooks/useHeaderTheme.ts"],"sourcesContent":["<template>\n <div class=\"w-full overflow-auto\">\n <table class=\"w-full border-collapse table-fixed\">\n <thead>\n <tr>\n <th \n v-for=\"column in columns\" \n :key=\"column.key\" \n :style=\"{ width: column.width }\"\n class=\"p-3 text-left bg-gray-100 text-gray-700 font-medium text-sm border-b border-gray-200\"\n >\n {{ column.title }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr \n v-for=\"(row, rowIndex) in data\" \n :key=\"rowKey ? row[rowKey] : rowIndex\"\n class=\"hover:bg-gray-50\"\n >\n <td \n v-for=\"column in columns\" \n :key=\"column.key\"\n class=\"p-3 text-left border-b border-gray-200 text-sm\"\n >\n <slot :name=\"column.key\" :row=\"row\" :index=\"rowIndex\">\n {{ row[column.key] }}\n </slot>\n </td>\n </tr>\n <tr v-if=\"!data || data.length === 0\">\n <td \n :colspan=\"columns.length\" \n class=\"p-8 text-center text-gray-500\"\n >\n <slot name=\"empty\">暂无数据</slot>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, PropType } from 'vue';\n\nexport interface TableColumn {\n key: string;\n title: string;\n width?: string;\n}\n\nexport default defineComponent({\n name: 'MyTable',\n props: {\n columns: {\n type: Array as PropType<TableColumn[]>,\n required: true\n },\n data: {\n type: Array as PropType<Record<string, any>[]>,\n default: () => []\n },\n rowKey: {\n type: String,\n default: ''\n }\n }\n});\n</script> ","<template>\n <button\n class=\"inline-flex justify-center items-center h-8 px-4 py-2 rounded-md text-sm font-medium transition-colors duration-200 focus:outline-none\"\n :class=\"[\n typeClasses,\n {\n 'opacity-50 cursor-not-allowed': disabled,\n 'relative': loading\n }\n ]\"\n :disabled=\"disabled || loading\"\n @click=\"handleClick\"\n >\n <span v-if=\"loading\" class=\"mr-2 w-4 h-4 i-svg-spinners-270-ring-with-bg\"></span>\n <slot></slot>\n </button>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed, PropType } from 'vue';\n\ntype ButtonType = 'primary' | 'success' | 'warning' | 'danger' | 'info' | 'default';\n\nexport default defineComponent({\n name: 'MyButton',\n props: {\n type: {\n type: String as PropType<ButtonType>,\n default: 'default'\n },\n disabled: {\n type: Boolean,\n default: false\n },\n loading: {\n type: Boolean,\n default: false\n }\n },\n emits: ['click'],\n setup(props, { emit }) {\n // 根据类型计算样式类\n const typeClasses = computed(() => {\n switch (props.type) {\n case 'primary':\n return 'bg-primary hover:bg-blue-500 text-white border-transparent';\n case 'success':\n return 'bg-success hover:bg-green-500 text-white border-transparent';\n case 'warning':\n return 'bg-warning hover:bg-yellow-500 text-white border-transparent';\n case 'danger':\n return 'bg-danger hover:bg-red-500 text-white border-transparent';\n case 'info':\n return 'bg-info hover:bg-gray-500 text-white border-transparent';\n default:\n return 'bg-white hover:bg-gray-100 text-gray-700 border border-gray-300';\n }\n });\n\n const handleClick = (e: MouseEvent) => {\n if (props.disabled || props.loading) return;\n emit('click', e);\n };\n\n return {\n typeClasses,\n handleClick\n };\n }\n});\n</script>\n\n<style>\n.my-button {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n line-height: 1;\n height: 32px;\n white-space: nowrap;\n cursor: pointer;\n color: #606266;\n text-align: center;\n box-sizing: border-box;\n outline: none;\n transition: 0.1s;\n font-weight: 500;\n padding: 8px 15px;\n font-size: 14px;\n border-radius: 4px;\n border: 1px solid #dcdfe6;\n background: #ffffff;\n}\n\n.my-button--primary {\n color: #fff;\n background-color: #409eff;\n border-color: #409eff;\n}\n\n.my-button--success {\n color: #fff;\n background-color: #67c23a;\n border-color: #67c23a;\n}\n\n.my-button--warning {\n color: #fff;\n background-color: #e6a23c;\n border-color: #e6a23c;\n}\n\n.my-button--danger {\n color: #fff;\n background-color: #f56c6c;\n border-color: #f56c6c;\n}\n\n.my-button.is-disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n.my-button__loading {\n display: inline-block;\n width: 14px;\n height: 14px;\n border: 2px solid currentColor;\n border-radius: 50%;\n border-right-color: transparent;\n margin-right: 5px;\n animation: rotate 1s linear infinite;\n}\n\n@keyframes rotate {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n</style> ","export enum LocaleTypeEnum {\n English = 'en',\n Chinese = 'zh-CN',\n}\n","import type { InjectionKey, ComputedRef } from 'vue';\nimport { LocaleTypeEnum } from '../constants/locale';\n\nexport interface NavTexts {\n loginText: string;\n logoutText: string;\n}\n\nexport const NAV_TEXTS_KEY: InjectionKey<ComputedRef<NavTexts>> = Symbol('nav-texts');\n\nexport const buildNavTexts = (lang: LocaleTypeEnum): NavTexts => {\n const isZh = lang === LocaleTypeEnum.Chinese;\n return {\n loginText: isZh ? '登录/注册' : 'Log In / Sign Up',\n logoutText: isZh ? '退出登录' : 'Log Out',\n };\n};\n","<template>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"icon/down\">\n <path id=\"Union\" d=\"M12.1382 5.86191C11.8778 5.60156 11.4557 5.60156 11.1954 5.86191L8.0001 9.05717L4.80484 5.86191C4.54449 5.60156 4.12238 5.60156 3.86203 5.86191C3.60168 6.12226 3.60168 6.54437 3.86203 6.80472L7.29299 10.2357C7.68352 10.6262 8.31668 10.6262 8.70721 10.2357L12.1382 6.80472C12.3985 6.54437 12.3985 6.12226 12.1382 5.86191Z\" fill=\"#2C364B\"/>\n </g>\n </svg>\n</template>","<template>\n <svg width=\"19px\" height=\"20px\" viewBox=\"0 0 19 20\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>yonghu-2</title>\n <g id=\"页面-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"flagos首页备份-4\" transform=\"translate(-1187, -32)\" fill=\"#FFFFFF\" fill-rule=\"nonzero\">\n <g id=\"yonghu-2\" transform=\"translate(1187, 32)\">\n <path d=\"M4.16667254,6.66658844 C4.16667254,3.9091208 6.40897956,1.66664712 9.1664472,1.66664712 C11.9239148,1.66664712 14.1663885,3.9091208 14.1663885,6.66658844 C14.1663885,9.42388942 11.9239148,11.6665298 9.1664472,11.6665298 C6.40897956,11.6665298 4.16650588,9.42388942 4.16650588,6.66658844 M18.3046733,18.9521109 C17.4853496,15.8829803 15.3253749,13.4830084 12.6130734,12.3621883 C14.5387175,11.192202 15.8330356,9.08056012 15.8330356,6.66642176 C15.832869,2.99079823 12.8420707,0 9.16628054,0 C5.49049035,0 2.4996921,2.99079823 2.4996921,6.66658844 C2.4996921,9.08056012 3.79384359,11.192202 5.72048764,12.3621883 C3.00801947,13.4838418 0.848044811,15.8829803 0.028221107,18.9521109 C-0.0900085115,19.3963877 0.174049854,19.8524478 0.618214182,19.971099 C1.06293982,20.0897021 1.51968816,19.8256771 1.63886887,19.3811059 C2.59002437,15.820481 5.68498805,13.3331769 9.16661386,13.3331769 C12.6482397,13.3331769 15.74387,15.8206477 16.6948589,19.3814392 C16.7515138,19.5951643 16.8909444,19.7775312 17.0823388,19.8882397 C17.2737332,19.9989483 17.5013346,20.0288842 17.7148469,19.9714323 C18.1590942,19.8527834 18.423176,19.3966084 18.30484,18.9522776\" id=\"形状\"></path>\n </g>\n </g>\n </g>\n </svg>\n</template>","<template>\n <el-dropdown popper-class=\"custom-dropdown\" size=\"large\" ref=\"dropdown\" trigger=\"click\" :show-arrow=\"false\" @visible-change=\"onVisibleChange\">\n <div class=\"flex items-center cursor-pointer\">\n <div class=\"w-24 h-24 rounded-50% font-600 flex-center mr-8\">\n <Header/>\n </div>\n\n <span>{{ userNickName }}</span>\n <el-icon\n class=\"el-icon--right !ml-16 transition-all duration-200\"\n :class=\"{\n ' rotate-180': dropdownVisible,\n }\"\n :size=\"16\"\n >\n <Down />\n </el-icon>\n </div>\n\n <template #dropdown>\n <el-dropdown-menu>\n <el-dropdown-item>\n <div class=\"flex items-center w-full text-14 mb-4\" @click=\"logout\">\n {{ navTexts?.logoutText }}\n </div>\n </el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n</template>\n\n<script setup lang=\"ts\">\nimport { inject, ref } from 'vue';\nimport { NAV_TEXTS_KEY } from './config/texts';\nimport Down from '../../../Icon/Down.vue';\nimport Header from '../../../Icon/Header.vue';\n\nconst navTexts = inject(NAV_TEXTS_KEY);\nconst dropdownVisible = ref(false);\nconst onVisibleChange = (visible: boolean) => {\n dropdownVisible.value = visible;\n};\ninterface Props {\n userNickName: string;\n currentPath: string;\n logout: () => void;\n}\n\ndefineProps<Props>();\n</script>\n\n<style scoped lang=\"scss\" >\n.reset-btn {\n border-color: #bec3cd;\n\n :deep(.el-button) {\n color: #3e4a54 !important;\n }\n &:hover {\n :deep(.el-button) {\n color: #3967e9 !important;\n }\n border-color: #3967e9;\n .el-icon {\n fill: #3967e9 !important;\n }\n }\n &:active {\n .el-icon {\n fill: #fff !important;\n }\n :deep(.el-button) {\n color: #fff !important;\n }\n border-color: transparent;\n background: #3967e9;\n }\n}\n</style>\n","<template>\n <el-button type=\"primary\" class=\"!rounded-4\" @click=\"login\">{{ navTexts?.loginText }}</el-button>\n</template>\n<script setup lang=\"ts\">\nimport { inject } from 'vue';\nimport { useRouter } from 'vue-router';\nimport { NAV_TEXTS_KEY } from './config/texts';\n\nconst navTexts = inject(NAV_TEXTS_KEY);\nconst router = useRouter();\n\nconst login = () => {\n router.push({ path: '/login', query: { redirect_url: encodeURIComponent(location.href) } });\n};\n</script>\n","import { LocaleTypeEnum } from '../constants/locale';\n\nexport const NAV_LOCALE_OPTIONS = [\n { value: LocaleTypeEnum.Chinese, label: '中文' },\n { value: LocaleTypeEnum.English, label: 'English' },\n];\n\nexport const NAV_LOCALE_TO_LANG: Record<LocaleTypeEnum, string> = {\n [LocaleTypeEnum.Chinese]: 'cn',\n [LocaleTypeEnum.English]: 'en',\n};\n\nexport const NAV_LANG_TO_LOCALE: Record<string, LocaleTypeEnum> = {\n cn: LocaleTypeEnum.Chinese,\n en: LocaleTypeEnum.English,\n};\n\nexport const NAV_WIKI_LANG_BY_LOCALE: Record<LocaleTypeEnum, string> = {\n [LocaleTypeEnum.Chinese]: 'zh',\n [LocaleTypeEnum.English]: 'en',\n};\n","<template>\n <el-dropdown class=\"cursor-pointer\" trigger=\"click\" popper-class=\"custom-dropdown\" placement=\"bottom\" @visible-change=\"handleChange\">\n <svg width=\"20px\" height=\"20px\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect fill=\"#D8D8D8\" opacity=\"0\" x=\"0\" y=\"0\" width=\"20\" height=\"20\"></rect>\n <path\n :fill=\"isWhite ? '#ffffff' : '#2C364B'\"\n fill-rule=\"nonzero\"\n d=\"M10,0 C4.48583334,0 0,4.48583334 0,10 C0,15.5141667 4.48583334,20 10,20 C15.5141667,20 20,15.5141667 20,10 C20,4.48583334 15.5141667,0 10,0 Z M18.6966667,10.9491667 L18.6925,10.9741667 C18.6575,11.2791667 18.6075,11.5791667 18.5425,11.8741667 L18.5425,11.875 L15.5258333,11.875 C15.657032,10.6284426 15.657032,9.37155738 15.5258333,8.125 L18.5425,8.125 C18.6075,8.42 18.6566667,8.72 18.6925,9.025 C18.6925,9.03333334 18.695,9.04166666 18.6966667,9.05083334 C18.7675,9.68166668 18.7675,10.3183333 18.6966667,10.9491667 L18.6966667,10.9491667 Z M13.34,18.0833333 C14.2783333,16.8683333 14.9891667,15.1491667 15.3516667,13.1241667 L18.1633333,13.1241667 C17.3009588,15.3668017 15.5579816,17.158563 13.34,18.0825 L13.34,18.0833333 Z M18.1625,6.87333334 L15.3516667,6.87333334 C14.9891667,4.84833334 14.2783333,3.13 13.34,1.915 C15.5576659,2.83912386 17.3003173,4.63085972 18.1625,6.87333334 L18.1625,6.87333334 Z M14.2658333,8.12333334 C14.4114344,9.36909341 14.4114344,10.6275733 14.2658333,11.8733333 L10.6241667,11.8733333 L10.6241667,8.12333334 L14.2658333,8.12333334 Z M10.6241667,6.87333334 L10.6241667,1.355 C12.1825,1.825 13.5008333,4.0025 14.07,6.87583334 L10.625,6.87583334 L10.6241667,6.87333334 Z M10.6241667,13.1233333 L14.07,13.1233333 C13.5008333,15.9983333 12.1825,18.175 10.625,18.645 L10.625,13.125 L10.6241667,13.1233333 Z M1.8375,13.1241667 L4.64833334,13.1241667 C5.01083334,15.1491667 5.72166668,16.8683333 6.66,18.0825 C4.44233408,17.1583761 2.69968275,15.3666403 1.8375,13.1241667 L1.8375,13.1241667 Z M6.66,1.91666666 C5.72166666,3.13 5.01083334,4.85 4.64833334,6.875 L1.83666666,6.875 C2.69923303,4.63220345 4.44253606,2.84041679 6.66083334,1.91666666 L6.66,1.91666666 Z M5.73416666,11.875 C5.58856559,10.6292399 5.58856559,9.37076007 5.73416666,8.125 L9.375,8.125 L9.375,11.875 L5.73333334,11.875 L5.73416666,11.875 Z M9.375,13.125 L9.375,18.6458333 C7.81666666,18.1758333 6.49916666,15.9983333 5.93,13.125 L9.375,13.125 Z M9.375,6.875 L5.93,6.875 C6.49916666,4.00166666 7.81666666,1.825 9.375,1.35416666 L9.375,6.875 Z M1.30416666,9.05 C1.30416666,9.04333334 1.30666666,9.03583334 1.3075,9.02833334 C1.34166666,8.725 1.39166666,8.42333334 1.4575,8.125 L4.47416666,8.125 C4.34243809,9.37152952 4.34243809,10.6284705 4.47416666,11.875 L1.4575,11.875 C1.39166666,11.5766667 1.34166666,11.275 1.3075,10.9716667 L1.30416666,10.9491667 C1.23220566,10.3184348 1.23220566,9.68156522 1.30416666,9.05083334 L1.30416666,9.05 Z\"\n />\n </svg>\n <template #dropdown>\n <el-dropdown-menu>\n <el-dropdown-item\n v-for=\"locale in localeOptions\"\n :key=\"locale.value\"\n :class=\"{ 'is-active': locale.value === currentLocale }\"\n @click=\"emitChangeLanguage(locale.value)\"\n >\n <span :class=\"{ 'color-primary': locale.value === currentLocale }\">\n {{ locale.label }}\n </span>\n </el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n</template>\n<script setup lang=\"tsx\">\nimport { ref, computed } from 'vue';\nimport { LocaleTypeEnum } from './constants/locale';\nimport { NAV_LOCALE_OPTIONS } from './config/locale';\n\nconst active = ref(false);\n\nconst handleChange = (val: boolean) => {\n active.value = val;\n};\n\ninterface LocaleOption {\n value: LocaleTypeEnum;\n label: string;\n}\n\ninterface Props {\n isWhiteTheme?: boolean;\n currentLocale: LocaleTypeEnum;\n localeOptions?: LocaleOption[];\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n isWhiteTheme: false,\n localeOptions: () => NAV_LOCALE_OPTIONS,\n});\n\nconst emits = defineEmits<{\n (e: 'change-language', locale: LocaleTypeEnum): void;\n}>();\n\nconst isWhite = computed(() => props.isWhiteTheme);\nconst currentLocale = computed(() => props.currentLocale);\nconst localeOptions = computed(() => props.localeOptions);\n\nconst emitChangeLanguage = (locale: LocaleTypeEnum) => {\n if (locale === currentLocale.value) {\n return;\n }\n emits('change-language', locale);\n};\n</script>\n<style scoped lang=\"scss\"></style>\n","export const matchPath = (path: string, targetPath: string): boolean => {\n if (!path || !targetPath) return false;\n return path.toLowerCase().indexOf(targetPath.toLowerCase()) >= 0;\n};\n\nexport const matchAnyPath = (path: string, targetPaths: string[]): boolean => {\n return targetPaths.some(targetPath => matchPath(path, targetPath));\n};\n","<template>\n <div\n class=\"w-full header-wrapper h-64px pl-120 pr-120 py-19 backdrop-blur-[14px] flex items-center justify-between text-#000 fixed left-0 top-0 z-99 bg-transparent overflow-x-scroll\"\n :class=\"{\n 'theme-white': isWhiteTheme,\n 'theme-scrolled': isScrolledTheme,\n '!b-0': matchPath(routePath, '/CommunityMembers'),\n }\"\n >\n <div class=\"flex-center\">\n <img\n class=\"logo\"\n :src=\"isWhiteTheme ? 'https://flagos.ks3-cn-beijing.ksyuncs.com/images/logo.svg' : 'https://flagos.ks3-cn-beijing.ksyuncs.com/images/logo-black.svg'\"\n @click=\"onLogoClick\"\n />\n <div class=\"flex gap-48 ml-80\">\n <div\n v-for=\"(menu, index) in menuList\"\n :index=\"index\"\n class=\"menu-item cursor-pointer whitespace-nowrap\"\n :class=\"{ active: menu.active }\"\n >\n <el-dropdown\n v-if=\"menu.dropdownList && menu.id === 'learn'\"\n popper-class=\"custom-dropdown-new\"\n :show-arrow=\"false\"\n >\n <span class=\"text-16\">{{ menu.label}}</span>\n <template #dropdown>\n <el-dropdown-menu class=\"flex-row\">\n <el-dropdown-item\n v-for=\"(childMenu, idx) in menu.dropdownList\"\n :key=\"idx\"\n :class=\"{ active: matchPath(routePath, childMenu.path) }\"\n @click=\"onJumpPage(menu, childMenu)\"\n >\n <span class=\"text-14 mb-16 !font-500\">{{ childMenu.label }}</span>\n <span class=\"text-14 whitespace-normal !font-400\">{{ childMenu.desc }}</span>\n </el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n <el-dropdown\n v-else-if=\"menu.dropdownList && menu.id === 'tools'\"\n popper-class=\"custom-dropdown-new\"\n :show-arrow=\"false\"\n >\n <span class=\"text-16\">{{ menu.label }}</span>\n <template #dropdown>\n <el-dropdown-menu>\n <el-dropdown-item v-for=\"(childMenu, idx) in menu.dropdownList\" :key=\"idx\" @click=\"onJumpPage(menu, childMenu)\">\n <span class=\"text-14 mb-16 !font-500\">{{childMenu.label }}</span>\n <span class=\"text-14 whitespace-normal !font-400\">{{ childMenu.desc }}</span>\n </el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n <el-dropdown v-else-if=\"menu.dropdownGroups && menu.id === 'projects'\" popper-class=\"custom-dropdown-new\" :show-arrow=\"false\">\n <span class=\"text-16\">{{ menu.label}}</span>\n <template #dropdown>\n <el-dropdown-menu class=\"flex gap-20 el-dropdown-menu_out\">\n <ul v-for=\"(group, idx) in menu.dropdownGroups\" :key=\"idx\" class=\"flex-1 el-dropdown-menu !w-[50%] !max-h-560px\">\n <span class=\"text-14 text-#bbbbbb leading-22 mb-20\">{{ group.label }}</span>\n <el-dropdown-item\n v-for=\"(childMenu, cidx) in group.list\"\n :key=\"cidx\"\n class=\"el-dropdown-menu__item !w-full\"\n @click=\"onJumpPage(menu, childMenu)\"\n >\n <span class=\"text-14 mb-16 !font-500\">{{ childMenu.label }}</span>\n <span class=\"text-14 whitespace-normal !font-400\">{{ childMenu.desc }}</span>\n </el-dropdown-item>\n </ul>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n <span v-else @click=\"onJumpPage(menu)\">{{ menu.label }}</span>\n </div>\n </div>\n </div>\n <div class=\"flex-center\" :class=\"isWhiteTheme ? 'text-#ffffff' : 'text-#262642'\">\n <Locale :isWhiteTheme=\"isWhiteTheme\" :current-locale=\"currentLocale\" @change-language=\"onChangeLanguage\" />\n <Login v-if=\"!userName\" class=\"ml-20\" />\n <Avatar\n v-if=\"userName\"\n class=\"header_avatar ml-20\"\n :class=\"isWhiteTheme ? 'text-#ffffff' : 'text-#262642'\"\n :user-nick-name=\"userNickName\"\n :current-path=\"routePath\"\n :logout=\"onLogout\"\n />\n </div>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport { computed, provide } from 'vue';\nimport Avatar from './Avatar.vue';\nimport Login from './Login.vue';\nimport Locale from './Locale.vue';\nimport { LocaleTypeEnum } from './constants/locale';\nimport { matchPath } from './utils/path';\nimport type { NavMenuItem, NavChildItem } from './config/menus';\nimport { NAV_TEXTS_KEY, buildNavTexts } from './config/texts';\nimport 'uno.css';\ninterface Props {\n routePath: string;\n menuList: NavMenuItem[];\n isWhiteTheme: boolean;\n isScrolledTheme: boolean;\n currentLocale: LocaleTypeEnum;\n userName?: string;\n userNickName: string;\n onLogoClick: () => void;\n onJumpPage: (menu: NavMenuItem, childMenu?: NavChildItem) => void;\n onChangeLanguage: (locale: LocaleTypeEnum) => void;\n onLogout: () => void;\n}\n\nconst props = defineProps<Props>();\n\nprovide(\n NAV_TEXTS_KEY,\n computed(() => buildNavTexts(props.currentLocale))\n);\n\n</script>\n<style scoped lang=\"scss\">\n.header-wrapper {\n transition: all 0.3s ease;\n border-bottom: 1px solid rgba(0, 0, 0, 0.13);\n &.theme-white {\n color: #fff;\n border: none;\n background: transparent;\n svg {\n color: #fff;\n }\n .menu-item {\n &::before {\n background-color: #fff;\n }\n :deep(.el-dropdown) {\n color: #fff;\n }\n }\n }\n &.theme-scrolled {\n background: #fff;\n color: #262642;\n border-bottom: 1px solid rgba(0, 0, 0, 0.13);\n svg {\n color: #262642;\n }\n .menu-item {\n &::before {\n background-color: #262642;\n }\n :deep(.el-dropdown) {\n color: #262642;\n }\n }\n }\n .logo {\n width: 100px;\n height: 38px;\n cursor: pointer;\n object-fit: contain;\n }\n svg {\n color: #262642;\n }\n .menu-item {\n display: flex;\n align-items: center;\n position: relative;\n font-size: 16px;\n &::before {\n content: '';\n display: block;\n position: absolute;\n left: 0;\n bottom: -2px;\n width: 0;\n height: 2px;\n border-radius: 1px;\n background-color: #262642;\n transition: all 0.3s ease;\n transform-origin: center;\n }\n &.active {\n font-weight: 600;\n &::before {\n width: 100%;\n }\n }\n :deep(.el-dropdown) {\n color: #262642;\n }\n }\n}\n</style>\n<style lang=\"scss\">\n .el-popper.custom-dropdown-new {\n padding: 0 !important;\n width: 100%;\n margin-left: -1px;\n // height: 90%;\n max-width: 100% !important;\n margin-top: 12px;\n // inset: 64px auto auto auto !important;\n box-shadow: none;\n background: #07111E;\n opacity: 0.95;\n .el-dropdown__list {\n width: 100% !important;\n height: 100% !important;\n padding: 56px 120px;\n \n .el-dropdown-menu_out{\n display: flex;\n flex-wrap: wrap;\n max-height: 90% !important;\n flex-direction: row !important;\n column-gap: 20px;\n row-gap: 4px;\n background: transparent !important;\n box-shadow: none !important;\n }\n \n .el-dropdown-menu {\n display: flex;\n max-height: 360px;\n flex-direction: column;\n flex-wrap: wrap;\n column-gap: 20px;\n row-gap: 4px;\n background: transparent !important;\n box-shadow: none !important;\n &.flex-row {\n flex-direction: row !important;\n flex-wrap: nowrap;\n }\n .el-dropdown-menu__item{\n width: calc((100% - 20px * 2) / 3);\n padding: 0 !important;\n min-height: 64px;\n font-family: PingFangSC, PingFang SC;\n font-weight: 600;\n font-size: 14px;\n color: #FFFFFF !important;\n line-height: 22px;\n padding: 20px 16px !important;\n border-radius: 8px;\n border: 1px solid transparent;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n }\n .el-dropdown-menu__item:hover, .el-dropdown-menu__item:focus {\n background: rgba(255,255,255, 0.05);\n border: 1px solid rgba(255,255,255, 0.2);\n \n }\n }\n }\n }\n</style>","import { LocaleTypeEnum } from '../constants/locale';\nimport { NAV_WIKI_LANG_BY_LOCALE } from './locale';\n\n// ---------- Types ----------\n\nexport interface NavChildItem {\n id: string;\n label: string;\n path: string;\n desc?: string;\n type: 'route' | 'link' | 'unopen';\n}\n\nexport interface NavDropdownGroup {\n id: string;\n label: string;\n list: NavChildItem[];\n}\n\nexport interface NavMenuItem {\n id: string;\n label: string;\n path?: string;\n active?: boolean;\n /** flat items (tools / learn) */\n dropdownList?: NavChildItem[];\n /** grouped items (projects) */\n dropdownGroups?: NavDropdownGroup[];\n}\nconst mainDevHost = ['platform-aiintegration-dev.baai.ac.cn']\nconst mainProdHost =['flagos.io', 'flagos.net', 'www.flagos.io', 'www.flagos.net']\nconst mainHost = [...mainProdHost, ...mainDevHost]\n// ---------- Mock data ----------\nconst isMainApp = () => {\n return mainHost.includes(location.host)\n\n}\nconst buildMenu = (lang: LocaleTypeEnum): NavMenuItem[] => {\n const isZh = lang === LocaleTypeEnum.Chinese;\n const wikiLang = NAV_WIKI_LANG_BY_LOCALE[lang];\n\n return [\n {\n id: 'home',\n label: isZh ? '首页' : 'Home',\n path: '/Home',\n },\n {\n id: 'projects',\n label: isZh ? '软件栈' : 'Software Stack',\n dropdownGroups: [\n {\n id: 'coreLib',\n label: isZh ? '开源核心库' : 'Open-Source Core Libraries',\n list: [\n {\n id: 'flagscale',\n label: 'FlagScale',\n path: '/FlagScale',\n desc: isZh\n ? '统一多芯片、多后端的大模型框架,提供覆盖训练、微调与推理部署的全流程能力'\n : 'A unified multi-backend large model framework across diverse chips, providing end-to-end capabilities spanning training, fine-tuning, and inference deployment.',\n type: 'route',\n },\n {\n id: 'flaggems',\n label: 'FlagGems',\n path: '/FlagGems',\n desc: isZh\n ? '基于Triton实现的高性能通用算子库'\n : 'A high-performance general operator library built on Triton.',\n type: 'route',\n },\n {\n id: 'flagtree',\n label: 'FlagTree',\n path: '/FlagTree',\n desc: isZh\n ? '面向多种硬件的开源、统一AI编译器'\n : 'An open-source unified AI compiler for diverse hardware.',\n type: 'route',\n },\n {\n id: 'flagcx',\n label: 'FlagCX',\n path: '/FlagCX',\n desc: isZh\n ? '一款专为大规模AI系统设计的可扩展、自适应高性能跨芯片通信库'\n : 'A scalable, adaptive, high-performance cross-chip communication library designed for large-scale AI systems.',\n type: 'route',\n },\n ],\n },\n {\n id: 'ecosystem',\n label: isZh ? '生态使能项目' : 'FlagOS Ecosystem Enablement Project',\n list: [\n {\n id: 'megatronfl',\n label: 'Megatron-FL',\n path: 'https://github.com/flagos-ai/Megatron-LM-FL',\n desc: isZh\n ? '为Megatron-LM打造的多芯片插件,实现大模型多芯片高效训练'\n : 'A multi-chip plugin for Megatron-LM, enabling efficient large-scale training across diverse chips.',\n type: 'link',\n },\n {\n id: 'vllmpluginfl',\n label: 'vLLM-plugin-FL',\n path: 'https://github.com/flagos-ai/vllm-plugin-FL',\n desc: isZh\n ? '为vLLM打造的多芯片插件,实现大模型多芯片高效推理部署'\n : 'A multi-chip plugin for vLLM, enabling efficient large model inference and deployment across diverse chips.',\n type: 'link',\n },\n {\n id: 'transformerenginefl',\n label: 'TransformerEngine-FL',\n path: 'https://github.com/flagos-ai/TransformerEngine-FL',\n desc: isZh\n ? '为TransformerEngine打造的多芯片插件,实现多种芯片上分布式算子'\n : 'A multi-chip plugin for TransformerEngine, enabling distributed operators across diverse chip architectures.',\n type: 'link',\n },\n ],\n },\n ],\n },\n {\n id: 'tools',\n label: isZh ? '工具' : 'Tools',\n dropdownList: [\n {\n id: 'skill',\n label: isZh ? 'Skill广场' : 'SkillHub',\n path: resolvePath('/SkillHub'),\n desc: isZh ? '一站式AI计算技能库' : 'One-stop AI computing skills library.',\n type: 'route',\n },\n {\n id: 'onlinelab',\n label: isZh ? '线上实验室' : 'Online Laboratory',\n path: isMainApp() ?'/OnlineLab': resolvePath('/OnlineLab'),\n desc: isZh ? '开箱即用的在线实验环境' : 'Ready-to-use online experiment environment.',\n type: 'route',\n },\n {\n id: 'modelplatform',\n label: isZh ? '模型服务平台' : 'MaaS',\n path: '',\n desc: isZh\n ? '全生命周期大模型API服务平台'\n : 'A full-lifecycle API service platform for large models.',\n type: 'unopen',\n },\n {\n id: 'kernelgen',\n label: 'KernelGen',\n path: 'https://kernelgen.flagos.io/',\n desc: isZh\n ? '分钟级构建Kernel,支持多芯片后端'\n : 'Build Kernels in Minutes with Multi-Backend Support.',\n type: 'link',\n },\n {\n id: 'flagrelease',\n label: 'FlagRelease',\n path: '',\n desc: isZh\n ? '一套自动化迁移大模型至不同硬件产品的工具平台'\n : 'An automated tool platform for migrating large model to diverse hardware.',\n type: 'unopen',\n },\n {\n id: 'flagcicd',\n label: 'FlagCICD',\n path: '',\n desc: isZh\n ? '面向 AI 开发的持续集成 / 持续部署工具链'\n : 'A CI/CD toolchain for AI development.',\n type: 'unopen',\n },\n {\n id: 'flagmodelhub',\n label: isZh ? '九鼎AI一体化平台' : 'Jiuding AI Integrated Platform',\n path: '',\n desc: isZh\n ? '整合 FlagOS 全栈能力,提供从模型开发、训练到部署的一站式 AI 工程化平台'\n : 'Jiuding AI Platform.',\n type: 'unopen',\n },\n ],\n },\n {\n id: 'docs',\n label: isZh ? '文档' : 'Docs',\n },\n {\n id: 'learn',\n label: isZh ? '学习' : 'Learn',\n dropdownList: [\n {\n id: 'wiki',\n label: 'Wiki',\n desc: isZh ? '智能文档,边看边问边学': 'AI-powered interactive docs: query and learn in real-time.',\n path: `https://wiki.flagos.io`,\n type: 'link',\n },\n { id: 'professionalcourse', label: isZh ? '专业课' : 'Core Courses', desc: isZh ? '众智FlagOS系列开源课程' : 'The official open-source course series for the FlagOS ecosystem.', path: 'https://flagos.educoder.net/paths', type: 'link' },\n { id: 'course',label: isZh ? '讲座' : 'Tech Talks', desc: isZh ? '大咖分享,业界前沿讲座' : 'Cutting-edge insights and deep dives from industry leaders.', path: '/LearnCenter', type: 'route' },\n ],\n },\n {\n id: 'events',\n label: isZh ? '活动赛事' : 'Event & Competition',\n path: isMainApp() ?'/events': resolvePath('/events'),\n },\n {\n id: 'onlinelab-top',\n label: isZh ? '线上实验室' : 'Online Laboratory',\n path: isMainApp() ?'/OnlineLab': resolvePath('/OnlineLab'),\n },\n ];\n};\nconst resolvePath = (path: string): string => {\n if(mainProdHost.includes(location.hostname)) {\n return `https://${location.hostname}${path}`;\n } else {\n return `${location.protocol}//${path.slice(1).toLocaleLowerCase()}.${mainDevHost[0]}`;\n }\n};\n\nconst resolveMenuPaths = (items: NavMenuItem[]): NavMenuItem[] => {\n return items;\n};\n\n/**\n * Fetch nav menu by lang.\n * Replace the mock body with a real HTTP call when the backend is ready:\n * return request({ method: 'get', url: '/nav/menus', params: { lang } }).then(res => res.data);\n */\nexport const getNavMenuApi = (lang: LocaleTypeEnum): NavMenuItem[] => {\n return resolveMenuPaths(buildMenu(lang));\n};\n","export const openLink = (url: string) => {\n window.open(url, '_blank');\n};\n","import type { App } from 'vue';\nimport MyTable from './components/Table/index.vue';\nimport MyButton from './components/Button/index.vue';\nimport Header from './components/Header/src/Header.vue';\nexport * from './components/Header/src/index';\nexport { MyTable, MyButton, Header };\n\n// 插件安装方法\nexport default {\n install(app: App) {\n app.component('MyButton', MyButton);\n app.component('MyTable', MyTable);\n }\n}; ","import { ref, watch } from 'vue';\nimport type { Ref } from 'vue';\nimport { ElMessage } from 'element-plus';\nimport type { LocaleTypeEnum } from '../constants/locale';\nimport { getNavMenuApi, type NavMenuItem, type NavChildItem } from '../config/menus';\nimport { openLink } from '../utils/openLink';\nimport { matchPath, matchAnyPath } from '../utils/path';\nimport { NavigationFailure } from 'vue-router';\n\nexport function useHeaderMenu(\n currentLocale: Ref<LocaleTypeEnum>,\n push: (path: any) => Promise<NavigationFailure | void | undefined>,\n /** String shown when user clicks an unavailable item (e.g. t('projects.unopentip')) */\n unopenTip: Ref<string> | string\n) {\n const menuList = ref<NavMenuItem[]>([]);\n\n const fetchMenu = (lang: LocaleTypeEnum) => {\n const data = getNavMenuApi(lang);\n // preserve active state across refetch\n const activeId = menuList.value.find(m => m.active)?.id;\n menuList.value = data.map(m => ({ ...m, active: m.id === activeId }));\n };\n\n watch(currentLocale, lang => fetchMenu(lang), { immediate: true });\n\n const syncActiveMenu = (route: any) => {\n menuList.value.forEach(item => (item.active = false));\n const curIdx = menuList.value.findIndex(item => {\n if (item.dropdownList) {\n return item.dropdownList.some(child => matchPath(route?.path, child.path));\n }\n if (item.dropdownGroups) {\n return item.dropdownGroups.some(group =>\n group.list.some(child => matchPath(route?.path, child.path))\n );\n }\n if (matchPath(item.path as string, '/events') && matchAnyPath(route?.path, ['/EventDetail', '/RaceDetail'])) return true;\n if (item.id === 'onlinelab-top' && matchPath(route?.path, '/OnlineLab')) return true;\n return matchPath(route?.path, item.path as string);\n });\n if (curIdx >= 0) menuList.value[curIdx].active = true;\n };\n\n const handleJumpPage = (menu: NavMenuItem, childMenu?: NavChildItem) => {\n const tip = typeof unopenTip === 'string' ? unopenTip : unopenTip.value;\n\n if (['tools', 'projects', 'learn'].includes(menu.id)) {\n if (!childMenu) return;\n if (childMenu.path.startsWith('http')) return openLink(childMenu.path);\n if (childMenu.path) return push(childMenu.path);\n if (childMenu.type === 'unopen') return ElMessage.warning(tip);\n }\n if (menu.id === 'docs') return openLink('https://docs.flagos.io/');\n\n menuList.value.forEach(item => (item.active = false));\n menu.active = true;\n push(childMenu ? childMenu.path : menu.path);\n };\n\n return { menuList, syncActiveMenu, handleJumpPage };\n}\n","import { ref, nextTick, onMounted, onUnmounted } from 'vue';\nimport throttle from 'lodash/throttle';\nimport { matchPath, matchAnyPath } from '../utils/path';\n\nexport function useHeaderTheme(route: any) {\n const lastScrollTop = ref(0);\n const isWhiteTheme = ref(false);\n const isScrolledTheme = ref(false);\n\n const SCROLL_THRESHOLDS = {\n home: { getThreshold: () => window.innerHeight - 80 },\n events: { getThreshold: () => 390 - 80 },\n onlineLab: { getThreshold: () => 180 - 80 },\n };\n\n const updateThemeByScroll = (scrollTop: number, threshold: number) => {\n if (scrollTop > threshold) {\n isWhiteTheme.value = false;\n isScrolledTheme.value = true;\n } else {\n isWhiteTheme.value = true;\n isScrolledTheme.value = false;\n }\n lastScrollTop.value = scrollTop <= 0 ? 0 : scrollTop;\n };\n\n const handleScroll = throttle(() => {\n const scrollTop = window.scrollY || document.documentElement.scrollTop || 0;\n updateThemeByScroll(scrollTop, SCROLL_THRESHOLDS.home.getThreshold());\n }, 200);\n\n const handleEventsScroll = throttle(() => {\n const scrollTop = window.scrollY || document.documentElement.scrollTop || 0;\n const threshold = matchPath(route?.path, '/OnlineLab') ? SCROLL_THRESHOLDS.onlineLab.getThreshold() : SCROLL_THRESHOLDS.events.getThreshold();\n updateThemeByScroll(scrollTop, threshold);\n }, 200);\n\n const bindByRoute = () => {\n window.removeEventListener('scroll', handleScroll);\n window.removeEventListener('scroll', handleEventsScroll);\n\n if (matchPath(route?.path, '/Home')) {\n isWhiteTheme.value = true;\n isScrolledTheme.value = false;\n window.addEventListener('scroll', handleScroll);\n nextTick(() => handleScroll());\n } else if (matchAnyPath(route?.path, ['/events', '/EventDetail', '/RaceDetail', '/OnlineLab'])) {\n isWhiteTheme.value = true;\n isScrolledTheme.value = false;\n window.addEventListener('scroll', handleEventsScroll);\n nextTick(() => handleEventsScroll());\n } else {\n isWhiteTheme.value = false;\n isScrolledTheme.value = false;\n }\n };\n\n onMounted(() => bindByRoute());\n onUnmounted(() => {\n window.removeEventListener('scroll', handleScroll);\n window.removeEventListener('scroll', handleEventsScroll);\n });\n\n return { lastScrollTop, isWhiteTheme, isScrolledTheme, bindByRoute, handleScroll, handleEventsScroll };\n}\n"],"names":["_sfc_main$7","defineComponent","name","props","columns","type","Array","required","data","default","rowKey","String","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","createElementVNode","_hoisted_2","_Fragment","Fragment","_renderList","column","openBlock","createElementBlock","key","style","_normalizeStyle","width","class","renderList","row","rowIndex","$slots","length","_hoisted_3","colspan","_sfc_main$6","disabled","Boolean","loading","emits","setup","emit","typeClasses","computed","handleClick","e","_normalizeClass","args","_createCommentVNode","LocaleTypeEnum","NAV_TEXTS_KEY","Symbol","buildNavTexts","lang","isZh","Chinese","loginText","logoutText","height","viewBox","fill","_sfc_render","id","d","version","xmlns","stroke","transform","navTexts","inject","dropdownVisible","ref","onVisibleChange","visible","value","router","useRouter","login","push","path","query","redirect_url","encodeURIComponent","location","href","NAV_LOCALE_OPTIONS","label","English","NAV_LOCALE_TO_LANG","NAV_LANG_TO_LOCALE","cn","en","NAV_WIKI_LANG_BY_LOCALE","active","handleChange","val","__props","__emit","isWhite","isWhiteTheme","currentLocale","localeOptions","locale","matchPath","targetPath","toLowerCase","indexOf","matchAnyPath","targetPaths","some","vue","provide","mainDevHost","mainProdHost","mainHost","isMainApp","includes","host","resolvePath","hostname","protocol","slice","toLocaleLowerCase","getNavMenuApi","dropdownGroups","list","desc","dropdownList","buildMenu","openLink","url","window","open","index","install","app","component","MyButton","MyTable","unopenTip","menuList","activeId","_a","find","m","map","fetchMenu","immediate","syncActiveMenu","route","forEach","item","curIdx","findIndex","child","group","handleJumpPage","menu","childMenu","tip","startsWith","ElMessage","warning","lastScrollTop","isScrolledTheme","SCROLL_THRESHOLDS","getThreshold","innerHeight","updateThemeByScroll","scrollTop","threshold","handleScroll","throttle","scrollY","document","documentElement","handleEventsScroll","bindByRoute","removeEventListener","addEventListener","onUnmounted"],"mappings":"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"}
|
package/dist/style.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.my-button{display:inline-flex;justify-content:center;align-items:center;line-height:1;height:32px;white-space:nowrap;cursor:pointer;color:#606266;text-align:center;box-sizing:border-box;outline:none;transition:.1s;font-weight:500;padding:8px 15px;font-size:14px;border-radius:4px;border:1px solid #dcdfe6;background:#ffffff}.my-button--primary{color:#fff;background-color:#409eff;border-color:#409eff}.my-button--success{color:#fff;background-color:#67c23a;border-color:#67c23a}.my-button--warning{color:#fff;background-color:#e6a23c;border-color:#e6a23c}.my-button--danger{color:#fff;background-color:#f56c6c;border-color:#f56c6c}.my-button.is-disabled{cursor:not-allowed;opacity:.5}.my-button__loading{display:inline-block;width:14px;height:14px;border:2px solid currentColor;border-radius:50%;border-right-color:transparent;margin-right:5px;animation:rotate 1s linear infinite}@keyframes rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.reset-btn[data-v-35cafb1a]{border-color:#bec3cd}.reset-btn[data-v-35cafb1a] .el-button{color:#3e4a54!important}.reset-btn[data-v-35cafb1a]:hover .el-button{color:#3967e9!important}.reset-btn[data-v-35cafb1a]:hover{border-color:#3967e9}.reset-btn:hover .el-icon[data-v-35cafb1a]{fill:#3967e9!important}.reset-btn:active .el-icon[data-v-35cafb1a]{fill:#fff!important}.reset-btn[data-v-35cafb1a]:active .el-button{color:#fff!important}.reset-btn[data-v-35cafb1a]:active{border-color:transparent;background:#3967e9}*,:before,:after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / .5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / .5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.left-0{left:0}.top-0{top:0}.z-99{z-index:99}.\!ml-16{margin-left:16px!important}.mb-16{margin-bottom:16px}.mb-20{margin-bottom:20px}.mb-4{margin-bottom:4px}.ml-20{margin-left:20px}.ml-80{margin-left:80px}.mr-2{margin-right:2px}.mr-8{margin-right:8px}.block{display:block}.inline-block{display:inline-block}[size~="16"]{width:16px;height:16px}.\!max-h-560px{max-height:560px!important}.\!w-\[50\%\]{width:50%!important}.\!w-full{width:100%!important}.h-24{height:24px}.h-4{height:4px}.h-64px{height:64px}.h-8{height:8px}.w-\[calc\(100vw-160px\)\]{width:calc(100vw - 160px)}.w-24{width:24px}.w-4{width:4px}.w-full{width:100%}.flex{display:flex}.inline-flex{display:inline-flex}.flex-1{flex:1 1 0%}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.border-collapse{border-collapse:collapse}.table-fixed{table-layout:fixed}.rotate-180{--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-rotate:180deg;transform:translate(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotate(var(--un-rotate-z)) skew(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z))}.transform{transform:translate(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotate(var(--un-rotate-z)) skew(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z))}.cursor-pointer{cursor:pointer}.cursor-not-allowed{cursor:not-allowed}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-20{gap:20px}.gap-48{gap:48px}.overflow-auto{overflow:auto}.overflow-x-scroll{overflow-x:scroll}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.\!b-0{border-width:0px!important}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-gray-200{--un-border-opacity:1;border-color:rgb(229 231 235 / var(--un-border-opacity))}.border-gray-300{--un-border-opacity:1;border-color:rgb(209 213 219 / var(--un-border-opacity))}.border-transparent{border-color:transparent}.\!rounded-4{border-radius:4px!important}.rounded-50\%{border-radius:50%}.rounded-md{border-radius:1.5px}.bg-gray-100{--un-bg-opacity:1;background-color:rgb(243 244 246 / var(--un-bg-opacity))}.bg-transparent{background-color:transparent}.bg-white{--un-bg-opacity:1;background-color:rgb(255 255 255 / var(--un-bg-opacity))}.hover\:bg-blue-500:hover{--un-bg-opacity:1;background-color:rgb(59 130 246 / var(--un-bg-opacity))}.hover\:bg-gray-100:hover{--un-bg-opacity:1;background-color:rgb(243 244 246 / var(--un-bg-opacity))}.hover\:bg-gray-50:hover{--un-bg-opacity:1;background-color:rgb(249 250 251 / var(--un-bg-opacity))}.hover\:bg-gray-500:hover{--un-bg-opacity:1;background-color:rgb(107 114 128 / var(--un-bg-opacity))}.hover\:bg-green-500:hover{--un-bg-opacity:1;background-color:rgb(34 197 94 / var(--un-bg-opacity))}.hover\:bg-red-500:hover{--un-bg-opacity:1;background-color:rgb(239 68 68 / var(--un-bg-opacity))}.hover\:bg-yellow-500:hover{--un-bg-opacity:1;background-color:rgb(234 179 8 / var(--un-bg-opacity))}[fill~="#2C364B"]{--un-fill-opacity:1;fill:rgb(44 54 75 / var(--un-fill-opacity))}[fill~="#ffffff"]{--un-fill-opacity:1;fill:rgb(255 255 255 / var(--un-fill-opacity))}[stroke-width~="1"]{stroke-width:1px}[stroke~=none]{stroke:none}.p-3{padding:3px}.p-8{padding:8px}.px-4{padding-left:4px;padding-right:4px}.py-19{padding-top:19px;padding-bottom:19px}.py-2{padding-top:2px;padding-bottom:2px}.pl-120{padding-left:120px}.pr-120{padding-right:120px}.text-center{text-align:center}.text-left{text-align:left}.text-14{font-size:14px}.text-16{font-size:16px}.text-sm{font-size:3.5px;line-height:5px}.text-\#000{--un-text-opacity:1;color:rgb(0 0 0 / var(--un-text-opacity))}.text-\#262642{--un-text-opacity:1;color:rgb(38 38 66 / var(--un-text-opacity))}.text-\#bbbbbb{--un-text-opacity:1;color:rgb(187 187 187 / var(--un-text-opacity))}.text-\#ffffff,.text-white{--un-text-opacity:1;color:rgb(255 255 255 / var(--un-text-opacity))}.text-gray-500{--un-text-opacity:1;color:rgb(107 114 128 / var(--un-text-opacity))}.text-gray-700{--un-text-opacity:1;color:rgb(55 65 81 / var(--un-text-opacity))}.\!font-400{font-weight:400!important}.\!font-500{font-weight:500!important}.font-600{font-weight:600}.font-medium{font-weight:500}.leading-22{line-height:22px}.opacity-50{opacity:.5}.outline{outline-style:solid}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.backdrop-blur-\[14px\]{--un-backdrop-blur:blur(14px);-webkit-backdrop-filter:var(--un-backdrop-blur) var(--un-backdrop-brightness) var(--un-backdrop-contrast) var(--un-backdrop-grayscale) var(--un-backdrop-hue-rotate) var(--un-backdrop-invert) var(--un-backdrop-opacity) var(--un-backdrop-saturate) var(--un-backdrop-sepia);backdrop-filter:var(--un-backdrop-blur) var(--un-backdrop-brightness) var(--un-backdrop-contrast) var(--un-backdrop-grayscale) var(--un-backdrop-hue-rotate) var(--un-backdrop-invert) var(--un-backdrop-opacity) var(--un-backdrop-saturate) var(--un-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}.ease{transition-timing-function:cubic-bezier(.4,0,.2,1)}.flex-center{display:flex;justify-content:center;align-items:center}.header-wrapper[data-v-0da7041c]{transition:all .3s ease;border-bottom:1px solid rgba(0,0,0,.13)}.header-wrapper.theme-white[data-v-0da7041c]{color:#fff;border:none;background:transparent}.header-wrapper.theme-white svg[data-v-0da7041c]{color:#fff}.header-wrapper.theme-white .menu-item[data-v-0da7041c]:before{background-color:#fff}.header-wrapper.theme-white .menu-item[data-v-0da7041c] .el-dropdown{color:#fff}.header-wrapper.theme-scrolled[data-v-0da7041c]{background:#fff;color:#262642;border-bottom:1px solid rgba(0,0,0,.13)}.header-wrapper.theme-scrolled svg[data-v-0da7041c]{color:#262642}.header-wrapper.theme-scrolled .menu-item[data-v-0da7041c]:before{background-color:#262642}.header-wrapper.theme-scrolled .menu-item[data-v-0da7041c] .el-dropdown{color:#262642}.header-wrapper .logo[data-v-0da7041c]{width:100px;height:38px;cursor:pointer;object-fit:contain}.header-wrapper svg[data-v-0da7041c]{color:#262642}.header-wrapper .menu-item[data-v-0da7041c]{display:flex;align-items:center;position:relative;font-size:16px}.header-wrapper .menu-item[data-v-0da7041c]:before{content:"";display:block;position:absolute;left:0;bottom:-2px;width:0;height:2px;border-radius:1px;background-color:#262642;transition:all .3s ease;transform-origin:center}.header-wrapper .menu-item.active[data-v-0da7041c]{font-weight:600}.header-wrapper .menu-item.active[data-v-0da7041c]:before{width:100%}.header-wrapper .menu-item[data-v-0da7041c] .el-dropdown{color:#262642}.el-popper.custom-dropdown-new{padding:0!important;width:100%;margin-left:-1px;max-width:100%!important;margin-top:12px;box-shadow:none;background:#07111E;opacity:.95}.el-popper.custom-dropdown-new .el-dropdown__list{width:100%!important;height:100%!important;padding:56px 120px}.el-popper.custom-dropdown-new .el-dropdown__list .el-dropdown-menu_out{display:flex;flex-wrap:wrap;max-height:90%!important;flex-direction:row!important;column-gap:20px;row-gap:4px;background:transparent!important;box-shadow:none!important}.el-popper.custom-dropdown-new .el-dropdown__list .el-dropdown-menu{display:flex;max-height:360px;flex-direction:column;flex-wrap:wrap;column-gap:20px;row-gap:4px;background:transparent!important;box-shadow:none!important}.el-popper.custom-dropdown-new .el-dropdown__list .el-dropdown-menu.flex-row{flex-direction:row!important;flex-wrap:nowrap}.el-popper.custom-dropdown-new .el-dropdown__list .el-dropdown-menu .el-dropdown-menu__item{width:calc((100% - 40px) / 3);min-height:64px;font-family:PingFangSC,PingFang SC;font-weight:600;font-size:14px;color:#fff!important;line-height:22px;padding:20px 16px!important;border-radius:8px;border:1px solid transparent;display:flex;flex-direction:column;align-items:flex-start}.el-popper.custom-dropdown-new .el-dropdown__list .el-dropdown-menu .el-dropdown-menu__item:hover,.el-popper.custom-dropdown-new .el-dropdown__list .el-dropdown-menu .el-dropdown-menu__item:focus{background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.2)}
|
|
1
|
+
.my-button{display:inline-flex;justify-content:center;align-items:center;line-height:1;height:32px;white-space:nowrap;cursor:pointer;color:#606266;text-align:center;box-sizing:border-box;outline:none;transition:.1s;font-weight:500;padding:8px 15px;font-size:14px;border-radius:4px;border:1px solid #dcdfe6;background:#ffffff}.my-button--primary{color:#fff;background-color:#409eff;border-color:#409eff}.my-button--success{color:#fff;background-color:#67c23a;border-color:#67c23a}.my-button--warning{color:#fff;background-color:#e6a23c;border-color:#e6a23c}.my-button--danger{color:#fff;background-color:#f56c6c;border-color:#f56c6c}.my-button.is-disabled{cursor:not-allowed;opacity:.5}.my-button__loading{display:inline-block;width:14px;height:14px;border:2px solid currentColor;border-radius:50%;border-right-color:transparent;margin-right:5px;animation:rotate 1s linear infinite}@keyframes rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.reset-btn[data-v-35cafb1a]{border-color:#bec3cd}.reset-btn[data-v-35cafb1a] .el-button{color:#3e4a54!important}.reset-btn[data-v-35cafb1a]:hover .el-button{color:#3967e9!important}.reset-btn[data-v-35cafb1a]:hover{border-color:#3967e9}.reset-btn:hover .el-icon[data-v-35cafb1a]{fill:#3967e9!important}.reset-btn:active .el-icon[data-v-35cafb1a]{fill:#fff!important}.reset-btn[data-v-35cafb1a]:active .el-button{color:#fff!important}.reset-btn[data-v-35cafb1a]:active{border-color:transparent;background:#3967e9}*,:before,:after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / .5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / .5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.left-0{left:0}.top-0{top:0}.z-99{z-index:99}.\!ml-16{margin-left:16px!important}.mb-16{margin-bottom:16px}.mb-20{margin-bottom:20px}.mb-4{margin-bottom:4px}.ml-20{margin-left:20px}.ml-80{margin-left:80px}.mr-2{margin-right:2px}.mr-8{margin-right:8px}.block{display:block}.inline-block{display:inline-block}[size~="16"]{width:16px;height:16px}.\!max-h-560px{max-height:560px!important}.\!w-\[50\%\]{width:50%!important}.\!w-full{width:100%!important}.h-24{height:24px}.h-4{height:4px}.h-64px{height:64px}.h-8{height:8px}.w-24{width:24px}.w-4{width:4px}.w-full{width:100%}.flex{display:flex}.inline-flex{display:inline-flex}.flex-1{flex:1 1 0%}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.border-collapse{border-collapse:collapse}.table-fixed{table-layout:fixed}.rotate-180{--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-rotate:180deg;transform:translate(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotate(var(--un-rotate-z)) skew(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z))}.transform{transform:translate(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotate(var(--un-rotate-z)) skew(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z))}.cursor-pointer{cursor:pointer}.cursor-not-allowed{cursor:not-allowed}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-20{gap:20px}.gap-48{gap:48px}.overflow-auto{overflow:auto}.overflow-x-scroll{overflow-x:scroll}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.\!b-0{border-width:0px!important}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-gray-200{--un-border-opacity:1;border-color:rgb(229 231 235 / var(--un-border-opacity))}.border-gray-300{--un-border-opacity:1;border-color:rgb(209 213 219 / var(--un-border-opacity))}.border-transparent{border-color:transparent}.\!rounded-4{border-radius:4px!important}.rounded-50\%{border-radius:50%}.rounded-md{border-radius:1.5px}.bg-gray-100{--un-bg-opacity:1;background-color:rgb(243 244 246 / var(--un-bg-opacity))}.bg-transparent{background-color:transparent}.bg-white{--un-bg-opacity:1;background-color:rgb(255 255 255 / var(--un-bg-opacity))}.hover\:bg-blue-500:hover{--un-bg-opacity:1;background-color:rgb(59 130 246 / var(--un-bg-opacity))}.hover\:bg-gray-100:hover{--un-bg-opacity:1;background-color:rgb(243 244 246 / var(--un-bg-opacity))}.hover\:bg-gray-50:hover{--un-bg-opacity:1;background-color:rgb(249 250 251 / var(--un-bg-opacity))}.hover\:bg-gray-500:hover{--un-bg-opacity:1;background-color:rgb(107 114 128 / var(--un-bg-opacity))}.hover\:bg-green-500:hover{--un-bg-opacity:1;background-color:rgb(34 197 94 / var(--un-bg-opacity))}.hover\:bg-red-500:hover{--un-bg-opacity:1;background-color:rgb(239 68 68 / var(--un-bg-opacity))}.hover\:bg-yellow-500:hover{--un-bg-opacity:1;background-color:rgb(234 179 8 / var(--un-bg-opacity))}[fill~="#2C364B"]{--un-fill-opacity:1;fill:rgb(44 54 75 / var(--un-fill-opacity))}[fill~="#ffffff"]{--un-fill-opacity:1;fill:rgb(255 255 255 / var(--un-fill-opacity))}[stroke-width~="1"]{stroke-width:1px}[stroke~=none]{stroke:none}.p-3{padding:3px}.p-8{padding:8px}.px-4{padding-left:4px;padding-right:4px}.py-19{padding-top:19px;padding-bottom:19px}.py-2{padding-top:2px;padding-bottom:2px}.pl-120{padding-left:120px}.pr-120{padding-right:120px}.text-center{text-align:center}.text-left{text-align:left}.text-14{font-size:14px}.text-16{font-size:16px}.text-sm{font-size:3.5px;line-height:5px}.text-\#000{--un-text-opacity:1;color:rgb(0 0 0 / var(--un-text-opacity))}.text-\#262642{--un-text-opacity:1;color:rgb(38 38 66 / var(--un-text-opacity))}.text-\#bbbbbb{--un-text-opacity:1;color:rgb(187 187 187 / var(--un-text-opacity))}.text-\#ffffff,.text-white{--un-text-opacity:1;color:rgb(255 255 255 / var(--un-text-opacity))}.text-gray-500{--un-text-opacity:1;color:rgb(107 114 128 / var(--un-text-opacity))}.text-gray-700{--un-text-opacity:1;color:rgb(55 65 81 / var(--un-text-opacity))}.\!font-400{font-weight:400!important}.\!font-500{font-weight:500!important}.font-600{font-weight:600}.font-medium{font-weight:500}.leading-22{line-height:22px}.opacity-50{opacity:.5}.outline{outline-style:solid}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.backdrop-blur-\[14px\]{--un-backdrop-blur:blur(14px);-webkit-backdrop-filter:var(--un-backdrop-blur) var(--un-backdrop-brightness) var(--un-backdrop-contrast) var(--un-backdrop-grayscale) var(--un-backdrop-hue-rotate) var(--un-backdrop-invert) var(--un-backdrop-opacity) var(--un-backdrop-saturate) var(--un-backdrop-sepia);backdrop-filter:var(--un-backdrop-blur) var(--un-backdrop-brightness) var(--un-backdrop-contrast) var(--un-backdrop-grayscale) var(--un-backdrop-hue-rotate) var(--un-backdrop-invert) var(--un-backdrop-opacity) var(--un-backdrop-saturate) var(--un-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}.ease{transition-timing-function:cubic-bezier(.4,0,.2,1)}.flex-center{display:flex;justify-content:center;align-items:center}.header-wrapper[data-v-bfee58b2]{transition:all .3s ease;border-bottom:1px solid rgba(0,0,0,.13)}.header-wrapper.theme-white[data-v-bfee58b2]{color:#fff;border:none;background:transparent}.header-wrapper.theme-white svg[data-v-bfee58b2]{color:#fff}.header-wrapper.theme-white .menu-item[data-v-bfee58b2]:before{background-color:#fff}.header-wrapper.theme-white .menu-item[data-v-bfee58b2] .el-dropdown{color:#fff}.header-wrapper.theme-scrolled[data-v-bfee58b2]{background:#fff;color:#262642;border-bottom:1px solid rgba(0,0,0,.13)}.header-wrapper.theme-scrolled svg[data-v-bfee58b2]{color:#262642}.header-wrapper.theme-scrolled .menu-item[data-v-bfee58b2]:before{background-color:#262642}.header-wrapper.theme-scrolled .menu-item[data-v-bfee58b2] .el-dropdown{color:#262642}.header-wrapper .logo[data-v-bfee58b2]{width:100px;height:38px;cursor:pointer;object-fit:contain}.header-wrapper svg[data-v-bfee58b2]{color:#262642}.header-wrapper .menu-item[data-v-bfee58b2]{display:flex;align-items:center;position:relative;font-size:16px}.header-wrapper .menu-item[data-v-bfee58b2]:before{content:"";display:block;position:absolute;left:0;bottom:-2px;width:0;height:2px;border-radius:1px;background-color:#262642;transition:all .3s ease;transform-origin:center}.header-wrapper .menu-item.active[data-v-bfee58b2]{font-weight:600}.header-wrapper .menu-item.active[data-v-bfee58b2]:before{width:100%}.header-wrapper .menu-item[data-v-bfee58b2] .el-dropdown{color:#262642}.el-popper.custom-dropdown-new{padding:0!important;width:100%;margin-left:-1px;max-width:100%!important;margin-top:12px;box-shadow:none;background:#07111E;opacity:.95}.el-popper.custom-dropdown-new .el-dropdown__list{width:100%!important;height:100%!important;padding:56px 120px}.el-popper.custom-dropdown-new .el-dropdown__list .el-dropdown-menu_out{display:flex;flex-wrap:wrap;max-height:90%!important;flex-direction:row!important;column-gap:20px;row-gap:4px;background:transparent!important;box-shadow:none!important}.el-popper.custom-dropdown-new .el-dropdown__list .el-dropdown-menu{display:flex;max-height:360px;flex-direction:column;flex-wrap:wrap;column-gap:20px;row-gap:4px;background:transparent!important;box-shadow:none!important}.el-popper.custom-dropdown-new .el-dropdown__list .el-dropdown-menu.flex-row{flex-direction:row!important;flex-wrap:nowrap}.el-popper.custom-dropdown-new .el-dropdown__list .el-dropdown-menu .el-dropdown-menu__item{width:calc((100% - 40px) / 3);min-height:64px;font-family:PingFangSC,PingFang SC;font-weight:600;font-size:14px;color:#fff!important;line-height:22px;padding:20px 16px!important;border-radius:8px;border:1px solid transparent;display:flex;flex-direction:column;align-items:flex-start}.el-popper.custom-dropdown-new .el-dropdown__list .el-dropdown-menu .el-dropdown-menu__item:hover,.el-popper.custom-dropdown-new .el-dropdown__list .el-dropdown-menu .el-dropdown-menu__item:focus{background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.2)}
|