@opencompass-fe/oc-webkit-eval 0.1.0 → 0.1.2

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.
Files changed (38) hide show
  1. package/README.md +37 -37
  2. package/dist/components/dropdown/dropdown.js +1 -1
  3. package/dist/components/footer/footer.js +1 -1
  4. package/dist/components/footer/index.js +1 -1
  5. package/dist/components/footer-expansion/footer-expansion.js +1 -1
  6. package/dist/components/footer-expansion/index.js +1 -1
  7. package/dist/components/header/components/create-online-evaluation/component/create-evaluation/create-evaluation.js +1 -1
  8. package/dist/components/header/components/create-online-evaluation/component/evaluation-button/evaluation-button.js +1 -1
  9. package/dist/components/header/components/create-online-evaluation/component/evaluation-button/evaluation-button.module.less.js +2 -2
  10. package/dist/components/header/components/create-online-evaluation/component/pre-create-evaluation/index.js +1 -1
  11. package/dist/components/header/header.js +1 -1
  12. package/dist/components/header/hooks/useUrl.js +1 -1
  13. package/dist/components/header/index.js +1 -1
  14. package/dist/components/header/secondHeader.js +1 -1
  15. package/dist/components/md-render/index.js +4 -4
  16. package/dist/components/online-evaluation/index.js +1 -1
  17. package/dist/components/online-evaluation/online-evaluation.js +1 -1
  18. package/dist/components/side-nav/index.js +1 -1
  19. package/dist/components/side-nav/side-nav.js +1 -1
  20. package/dist/components/side-nav/side-nav.module.less.js +2 -2
  21. package/dist/components/top-nav/index.js +1 -1
  22. package/dist/components/top-nav/shared.js +1 -1
  23. package/dist/components/top-nav/top-nav.js +1 -1
  24. package/dist/constants/enums.js +1 -1
  25. package/dist/extraComponents/button/button.js +1 -1
  26. package/dist/helper/index.js +1 -1
  27. package/dist/index.js +1 -1
  28. package/dist/locale/index.js +1 -1
  29. package/dist/mobile/components/top-nav/top-nav.js +1 -1
  30. package/dist/providers/OcContext.js +1 -1
  31. package/dist/types/components/dropdown/dropdown.d.ts +34 -34
  32. package/dist/types/components/md-render/index.d.ts +4 -4
  33. package/dist/types/components/top-nav/index.d.ts +2 -2
  34. package/dist/types/constants/enums.d.ts +19 -19
  35. package/dist/types/google-log/home.d.ts +6 -6
  36. package/dist/types/helper/index.d.ts +10 -10
  37. package/dist/types/index.d.ts +149 -149
  38. package/package.json +149 -149
@@ -1 +1 @@
1
- import n,{useState as h,useEffect as y}from"react";import p from"classnames";import{langTypeEnum as U}from"../../constants/enums.js";import I from"../../assets/svg/top-nav/arena-flag.svg.js";import S from"../../assets/svg/top-nav/arrow-up.svg.js";import W from"../../assets/svg/top-nav/logo-mark.svg.js";import Z from"../../assets/svg/top-nav/logo-word.svg.js";import K from"../../assets/svg/top-nav/nav-down.svg.js";import{Dropdown as q}from"antd";import a from"./top-nav.module.less.js";import{useTopNavCommon as O,IconBox as m,renderDropdownContent as X,renderUserAvatar as G}from"./shared.js";const J=k=>{const{brandHref:A,locale:g,onToggleLocale:L,onArenaClick:w,navItems:x,arenaLabel:b,userInfo:C,onAvatarClick:_,userMenuItems:D,locales:d,triggerLogin:j,performLogout:F,isLoggedIn:u,hasUserMenu:z}=O(k),B=e=>{var l,t,o,r,s,c;return g===U.en?(o=(t=(l=e.labelEn)!=null?l:e.label)!=null?t:e.labelZh)!=null?o:"":(c=(s=(r=e.labelZh)!=null?r:e.label)!=null?s:e.labelEn)!=null?c:""},T=(e,l)=>{var t,o,r,s,c;return(c=(s=(r=(o=(t=e.key)!=null?t:e.href)!=null?o:e.label)!=null?r:e.labelZh)!=null?s:e.labelEn)!=null?c:`nav-${l}`},[v,Y]=h(!1),[f,H]=h(()=>window.innerWidth>860),M=v&&f?{width:"448px",height:"52px",padding:"8px",backgroundColor:"var(--oc-white)",borderColor:"rgba(226, 227, 228, 1)",boxShadow:"0 4px 10px rgba(0, 0, 0, 0.15)",transform:"translateX(-50%) translateY(6px)"}:void 0,i=v&&f,$=i?{pointerEvents:"none",opacity:0,transform:"translateY(-8px) scale(0.96)"}:void 0,R=i?{pointerEvents:"auto",opacity:1}:void 0;y(()=>{let e=0,l=-1;const t=()=>{if(e=0,window.scrollY===l)return;l=window.scrollY;const s=window.scrollY>24;Y(c=>c===s?c:s)},o=()=>{e===0&&(e=window.requestAnimationFrame(t))};t(),window.addEventListener("scroll",o,{passive:!0});const r=window.setInterval(t,120);return()=>{window.removeEventListener("scroll",o),window.clearInterval(r),e!==0&&window.cancelAnimationFrame(e)}},[]),y(()=>{const e=()=>H(window.innerWidth>860);return e(),window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]);const E=e=>X({items:e,locale:g,performLogout:F,styles:a}),N=e=>G({customDropdownRender:E,dropdownTrigger:["hover"],extra:e,hasUserMenu:z,isLoggedIn:u,onAvatarClick:_,styles:a,userInfo:C,userMenuItems:D});return n.createElement("header",{className:p(a.topbar,v&&a.scrolled)},n.createElement("a",{className:a.brand,href:A,"aria-label":d.topNavBrandAria},n.createElement("img",{className:a.brandMark,src:W,alt:""}),n.createElement("img",{className:a.brandWord,src:Z,alt:d.topNavBrandName})),n.createElement("nav",{className:p(a.nav,v&&a.navScrolled),"aria-label":d.topNavNavAria,style:M},x.map((e,l)=>{const t=T(e,l),o=B(e),r=n.createElement("div",{className:p(a.navLink,e.active&&a.navLinkActive,e.withDown&&a.withDown)},n.createElement("span",null,o),e.withDown?n.createElement(m,{src:K,size:16,styles:a}):null);return!!e.dropdownItems&&e.dropdownItems.length>0?n.createElement(q,{key:t,trigger:["hover"],popupRender:()=>E(e.dropdownItems),placement:"bottom",styles:{root:{paddingTop:8}}},r):n.createElement(n.Fragment,{key:t},r)})),n.createElement("div",{className:a.actions,style:$,"aria-hidden":i},n.createElement("button",{className:a.arenaButton,type:"button",onClick:w},n.createElement(m,{src:I,size:16,className:a.arenaIconDefault,styles:a}),n.createElement(m,{src:S,size:16,className:a.arenaIconHover,styles:a}),n.createElement("span",null,b)),n.createElement("button",{className:a.langButton,type:"button",onClick:L},d.topNavLangSwitch),u?N():n.createElement("button",{className:a.loginButton,type:"button",onClick:j},d.login)),n.createElement("div",{className:p(a.floatingArena,i&&a.visible),style:R,"aria-hidden":!i},n.createElement("button",{className:a.floatingArenaButton,type:"button",tabIndex:i?0:-1,onClick:w},n.createElement(m,{src:I,size:16,className:a.arenaIconDefault,styles:a}),n.createElement(m,{src:S,size:16,className:a.arenaIconHover,styles:a}),n.createElement("span",null,b)),u?N({className:a.floatingAvatar,tabIndex:i?0:-1}):null))};export{J as default};
1
+ import a,{useState as h,useEffect as y}from"react";import u from"classnames";import{langTypeEnum as W}from"../../constants/enums.js";import I from"../../assets/svg/top-nav/arena-flag.svg.js";import S from"../../assets/svg/top-nav/arrow-up.svg.js";import Z from"../../assets/svg/top-nav/logo-mark.svg.js";import K from"../../assets/svg/top-nav/logo-word.svg.js";import q from"../../assets/svg/top-nav/nav-down.svg.js";import{Dropdown as O}from"antd";import n from"./top-nav.module.less.js";import{useTopNavCommon as X,IconBox as d,renderDropdownContent as j,renderUserAvatar as G}from"./shared.js";const J=k=>{const{brandHref:A,locale:w,onToggleLocale:L,onArenaClick:g,navItems:x,arenaLabel:b,userInfo:C,onAvatarClick:D,userMenuItems:_,locales:m,triggerLogin:F,performLogout:z,isLoggedIn:v,hasUserMenu:B}=X(k),T=e=>{var l,t,r,o,s,c;return w===W.en?(r=(t=(l=e.labelEn)!=null?l:e.label)!=null?t:e.labelZh)!=null?r:"":(c=(s=(o=e.labelZh)!=null?o:e.label)!=null?s:e.labelEn)!=null?c:""},Y=(e,l)=>{var t,r,o,s,c;return(c=(s=(o=(r=(t=e.key)!=null?t:e.href)!=null?r:e.label)!=null?o:e.labelZh)!=null?s:e.labelEn)!=null?c:`nav-${l}`},[p,H]=h(!1),[f,M]=h(()=>window.innerWidth>860),$=p&&f?{width:"448px",height:"52px",padding:"8px",backgroundColor:"var(--oc-white)",borderColor:"rgba(226, 227, 228, 1)",boxShadow:"0 4px 10px rgba(0, 0, 0, 0.15)",transform:"translateX(-50%) translateY(6px)"}:void 0,i=p&&f,R=i?{pointerEvents:"none",opacity:0,transform:"translateY(-8px) scale(0.96)"}:void 0,U=i?{pointerEvents:"auto",opacity:1}:void 0;y(()=>{let e=0,l=-1;const t=()=>{if(e=0,window.scrollY===l)return;l=window.scrollY;const s=window.scrollY>24;H(c=>c===s?c:s)},r=()=>{e===0&&(e=window.requestAnimationFrame(t))};t(),window.addEventListener("scroll",r,{passive:!0});const o=window.setInterval(t,120);return()=>{window.removeEventListener("scroll",r),window.clearInterval(o),e!==0&&window.cancelAnimationFrame(e)}},[]),y(()=>{const e=()=>M(window.innerWidth>860);return e(),window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]);const E=e=>j({items:e,locale:w,performLogout:z,styles:n}),N=e=>G({customDropdownRender:E,dropdownTrigger:["hover"],extra:e,hasUserMenu:B,isLoggedIn:v,onAvatarClick:D,styles:n,userInfo:C,userMenuItems:_});return a.createElement("header",{className:u(n.topbar,p&&n.scrolled)},a.createElement("a",{className:n.brand,href:A,"aria-label":m.topNavBrandAria},a.createElement("img",{className:n.brandMark,src:Z,alt:""}),a.createElement("img",{className:n.brandWord,src:K,alt:m.topNavBrandName})),a.createElement("nav",{className:u(n.nav,p&&n.navScrolled),"aria-label":m.topNavNavAria,style:$},x.map((e,l)=>{const t=Y(e,l),r=T(e),o=a.createElement("div",{className:u(n.navLink,e.active&&n.navLinkActive,e.withDown&&n.withDown)},a.createElement("span",null,r),e.withDown?a.createElement(d,{src:q,size:16,styles:n}):null);return!!e.dropdownItems&&e.dropdownItems.length>0?a.createElement(O,{key:t,trigger:["hover"],popupRender:()=>E(e.dropdownItems),placement:"bottom",styles:{root:{paddingTop:8}}},o):a.createElement(a.Fragment,{key:t},o)})),a.createElement("div",{className:n.actions,style:R,"aria-hidden":i},a.createElement("button",{className:n.arenaButton,type:"button",onClick:g},a.createElement(d,{src:I,size:16,className:n.arenaIconDefault,styles:n}),a.createElement(d,{src:S,size:16,className:n.arenaIconHover,styles:n}),a.createElement("span",null,b)),a.createElement("button",{className:n.langButton,type:"button",onClick:L},m.topNavLangSwitch),v?N():a.createElement("button",{className:n.loginButton,type:"button",onClick:F},m.login)),a.createElement("div",{className:u(n.floatingArena,i&&n.visible),style:U,"aria-hidden":!i},a.createElement("button",{className:n.floatingArenaButton,type:"button",tabIndex:i?0:-1,onClick:g},a.createElement(d,{src:I,size:16,className:n.arenaIconDefault,styles:n}),a.createElement(d,{src:S,size:16,className:n.arenaIconHover,styles:n}),a.createElement("span",null,b)),v?N({className:n.floatingAvatar,tabIndex:i?0:-1}):null))};export{J as default};
@@ -1 +1 @@
1
- var n;(function(i){i.en="en-US",i.zh="zh-CN"})(n||(n={}));var t;(function(i){i.development="development",i.staging="staging",i.production="production"})(t||(t={}));var e;(function(i){i.lightWeb="lightWeb",i.blueWeb="blueWeb",i.miniWeb="miniWeb",i.lightMiniWeb="lightMiniWeb",i.transparentWeb="transparentWeb"})(e||(e={}));var l;(function(i){i.llm="llm",i.mm="mm"})(l||(l={}));export{t as envTypeEnum,l as evaluationTypeEnum,n as langTypeEnum,e as webTypeEnum};
1
+ var t=(r=>(r.en="en-US",r.zh="zh-CN",r))(t||{}),i=(r=>(r.development="development",r.staging="staging",r.production="production",r))(i||{}),e=(r=>(r.lightWeb="lightWeb",r.blueWeb="blueWeb",r.miniWeb="miniWeb",r.lightMiniWeb="lightMiniWeb",r.transparentWeb="transparentWeb",r))(e||{}),l=(r=>(r.llm="llm",r.mm="mm",r))(l||{});export{i as envTypeEnum,l as evaluationTypeEnum,t as langTypeEnum,e as webTypeEnum};
@@ -1 +1 @@
1
- import _ from"react";import v from"classnames";import n from"./button.module.less.js";var y=Object.defineProperty,l=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,s=Object.prototype.propertyIsEnumerable,f=(r,t,e)=>t in r?y(r,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[t]=e,u=(r,t)=>{for(var e in t||(t={}))o.call(t,e)&&f(r,e,t[e]);if(l)for(var e of l(t))s.call(t,e)&&f(r,e,t[e]);return r},O=(r,t)=>{var e={};for(var a in r)o.call(r,a)&&t.indexOf(a)<0&&(e[a]=r[a]);if(r!=null&&l)for(var a of l(r))t.indexOf(a)<0&&s.call(r,a)&&(e[a]=r[a]);return e};const d=r=>{const t=r,{type:e,className:a,style:i,children:m,onClick:c}=t,p=O(t,["type","className","style","children","onClick"]);return _.createElement("button",u({onClick:c,className:v(n.button,a,n[e]),style:i},p),m)};export{d as default};
1
+ import c from"react";import v from"classnames";import n from"./button.module.less.js";var y=Object.defineProperty,l=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,f=Object.prototype.propertyIsEnumerable,i=(r,t,e)=>t in r?y(r,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[t]=e,O=(r,t)=>{for(var e in t||(t={}))o.call(t,e)&&i(r,e,t[e]);if(l)for(var e of l(t))f.call(t,e)&&i(r,e,t[e]);return r},d=(r,t)=>{var e={};for(var a in r)o.call(r,a)&&t.indexOf(a)<0&&(e[a]=r[a]);if(r!=null&&l)for(var a of l(r))t.indexOf(a)<0&&f.call(r,a)&&(e[a]=r[a]);return e};const u=r=>{const t=r,{type:e,className:a,style:s,children:m,onClick:p}=t,_=d(t,["type","className","style","children","onClick"]);return c.createElement("button",O({onClick:p,className:v(n.button,a,n[e]),style:s},_),m)};export{u as default};
@@ -1 +1 @@
1
- var a;(function(r){r[r.LLM=0]="LLM",r[r.MM=1]="MM"})(a||(a={}));const g={["zh-CN"]:{year:"\u5E74",month:"\u6708",leaderboard:"\u699C",currRanking:"\u672C\u6708\u5B9E\u65F6\u699C"},["en-US"]:{year:"year",month:"month",leaderboard:"",currRanking:"Real-time"}},C=(r,h,R)=>{var v,c,s,y,m,$,f,M,_,b,k,E;const e=g[h],d=[],o=[],l=r==null?void 0:r.filter(n=>R===0?n.month==="REALTIME"||n.month>"24-01":n.month);for(let n=0;n<(l==null?void 0:l.length);n++)if(((v=l==null?void 0:l[n])==null?void 0:v.month)==="REALTIME"){const u=new Date().getFullYear();d.indexOf(`${u}`)<0?(d.push(`${u}`),o.push({label:`${u} ${e.year}`,key:`${u}`,children:[{label:e==null?void 0:e.currRanking,key:"REALTIME"}]})):(y=(s=(c=o==null?void 0:o.filter(t=>t.label===`${u}`))==null?void 0:c[0])==null?void 0:s.children)==null||y.push({label:e==null?void 0:e.currRanking,key:"REALTIME"})}else{const[u,t]=(($=(m=l==null?void 0:l[n])==null?void 0:m.month)==null?void 0:$.split("-"))||[],i=`20${u}`,L=h==="zh-CN"?`${u} ${e.year} ${t} ${e.month}${e.leaderboard}`:((f=l==null?void 0:l[n])==null?void 0:f.month)||"";d.indexOf(i)<0?(d.push(i),o==null||o.push({label:`${i} ${e.year}`,key:i,children:[{label:L,key:((M=l==null?void 0:l[n])==null?void 0:M.month)||""}]})):(E=(b=(_=o==null?void 0:o.filter(p=>p.key===i))==null?void 0:_[0])==null?void 0:b.children)==null||E.push({label:L,key:((k=l==null?void 0:l[n])==null?void 0:k.month)||""})}return o||[]};export{a as RankingType,C as getMenuData};
1
+ const M={"zh-CN":{year:"\u5E74",month:"\u6708",leaderboard:"\u699C",currRanking:"\u672C\u6708\u5B9E\u65F6\u699C"},"en-US":{year:"year",month:"month",leaderboard:"",currRanking:"Real-time"}},C=(t,a,p)=>{var h,v,s,c,y,m,$,f,k,_,b,E;const e=M[a],r=[],o=[],l=t==null?void 0:t.filter(n=>p===0?n.month==="REALTIME"||n.month>"24-01":n.month);for(let n=0;n<(l==null?void 0:l.length);n++)if(((h=l==null?void 0:l[n])==null?void 0:h.month)==="REALTIME"){const u=new Date().getFullYear();r.indexOf(`${u}`)<0?(r.push(`${u}`),o.push({label:`${u} ${e.year}`,key:`${u}`,children:[{label:e==null?void 0:e.currRanking,key:"REALTIME"}]})):(c=(s=(v=o==null?void 0:o.filter(d=>d.label===`${u}`))==null?void 0:v[0])==null?void 0:s.children)==null||c.push({label:e==null?void 0:e.currRanking,key:"REALTIME"})}else{const[u,d]=((m=(y=l==null?void 0:l[n])==null?void 0:y.month)==null?void 0:m.split("-"))||[],i=`20${u}`,R=a==="zh-CN"?`${u} ${e.year} ${d} ${e.month}${e.leaderboard}`:(($=l==null?void 0:l[n])==null?void 0:$.month)||"";r.indexOf(i)<0?(r.push(i),o==null||o.push({label:`${i} ${e.year}`,key:i,children:[{label:R,key:((f=l==null?void 0:l[n])==null?void 0:f.month)||""}]})):(E=(_=(k=o==null?void 0:o.filter(g=>g.key===i))==null?void 0:k[0])==null?void 0:_.children)==null||E.push({label:R,key:((b=l==null?void 0:l[n])==null?void 0:b.month)||""})}return o||[]};export{C as getMenuData};
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- export{default as OcHeader}from"./components/header/index.js";export{default as TopNav}from"./components/top-nav/index.js";export{default as OcOnlineEvaluation}from"./components/online-evaluation/index.js";export{default as OcSideNav}from"./components/side-nav/index.js";export{default as OcFooter}from"./components/footer/index.js";export{default as OcDropdown}from"./components/dropdown/dropdown.js";export{goData,goHub,goInternDiscoveryEvalKit,goKit,goOCHome,goRank,goRules}from"./google-log/home.js";export{default as OcFooterExpansion}from"./components/footer-expansion/index.js";export{default as OcMdRender}from"./components/md-render/index.js";export{envTypeEnum,evaluationTypeEnum,langTypeEnum,webTypeEnum}from"./constants/enums.js";export{getMenuData}from"./helper/index.js";
1
+ export{default as OcHeader}from"./components/header/index.js";export{default as OcTopNav}from"./components/top-nav/index.js";export{default as OcOnlineEvaluation}from"./components/online-evaluation/index.js";export{default as OcSideNav}from"./components/side-nav/index.js";export{default as OcFooter}from"./components/footer/index.js";export{default as OcDropdown}from"./components/dropdown/dropdown.js";export{goData,goHub,goInternDiscoveryEvalKit,goKit,goOCHome,goRank,goRules}from"./google-log/home.js";export{default as OcFooterExpansion}from"./components/footer-expansion/index.js";export{default as OcMdRender}from"./components/md-render/index.js";export{envTypeEnum,evaluationTypeEnum,langTypeEnum,webTypeEnum}from"./constants/enums.js";export{getMenuData}from"./helper/index.js";
@@ -1 +1 @@
1
- import{EN as o}from"./en.js";import{ZH as r}from"./zh.js";var e={"zh-CN":r,"en-US":o};const t="zh-CN";export{t as DEFAULT_LANG,e as default};
1
+ import{EN as o}from"./en.js";import{ZH as r}from"./zh.js";var t={"zh-CN":r,"en-US":o};const a="zh-CN";export{a as DEFAULT_LANG,t as default};
@@ -1 +1 @@
1
- import e,{useState as C,useEffect as H}from"react";import i from"classnames";import{CloseOutlined as P,MenuOutlined as W}from"@ant-design/icons";import{langTypeEnum as b}from"../../../constants/enums.js";import q from"../../../assets/svg/top-nav/logo-mark.svg.js";import J from"../../../assets/svg/top-nav/logo-word.svg.js";import Q from"../../../assets/svg/top-nav/nav-down.svg.js";import V from"../../../assets/svg/top-nav/arena-flag-mobile.svg.js";import X from"../../../assets/svg/top-nav/arrow-right-up.svg.js";import n from"./top-nav.module.less.js";import{useTopNavCommon as Y,getCollapsibleKeysFromNavItems as ee,renderUserAvatar as ne,getCollapsibleKeysFromDropdownItems as ae,isDropdownGroupItem as te,renderDropdownItemIcon as A,renderDropdownContent as se}from"../../../components/top-nav/shared.js";const le=D=>{const{brandHref:x,locale:d,onToggleLocale:R,navItems:N,onArenaClick:k,arena:v,userInfo:S,onAvatarClick:O,userMenuItems:j,arenaLabel:K,locales:m,triggerLogin:M,performLogout:B,isLoggedIn:h,hasUserMenu:T}=Y(D),[u,p]=C(!1),[E,w]=C(()=>new Set);H(()=>{u||w(new Set)},[u]);const $=(a,s)=>{w(t=>{const l=new Set(t);return l.has(a)?l.delete(a):(s.forEach(r=>l.delete(r)),l.add(a)),l})},L=(a,s)=>{const t=E.has(a);return e.createElement("button",{type:"button",className:i(n.expandBtn,t&&n.expandBtnOpen),"aria-expanded":t,"aria-label":t?"Collapse":"Expand",onClick:l=>{l.preventDefault(),l.stopPropagation(),$(a,s)}},e.createElement("img",{src:Q,alt:"",className:n.expandIconImg}))},I=(a,s)=>{const t=a.label||(d===b.en?a.labelEn:a.labelZh),l=a.key||a.id||`item-${s}`,r=A(a,18);return e.createElement("a",{key:l,className:i(n.menuLink,n.menuRow),href:a.href||"#",onClick:c=>{var o;a.href||c.preventDefault(),(o=a.onClick)==null||o.call(a,c),p(!1)}},r?e.createElement("span",{className:n.menuRowIcon},r):null,e.createElement("span",{className:n.menuRowLabel},t))},F=a=>{const s=ae(a);return a.map((t,l)=>{if(t.type==="divider")return null;const r=t.id||t.key||`drop-${l}`;if(te(t)){const o=t.label||(d===b.en?t.labelEn:t.labelZh),g=E.has(r),y=A(t,18);return e.createElement("div",{key:r,className:n.menuGroup},e.createElement("div",{className:n.menuRow},e.createElement("span",{className:n.menuRowIcon},y),e.createElement("span",{className:n.menuRowLabel},o),L(r,s)),g&&t.children?e.createElement("div",{className:n.menuSubList},t.children.map((f,z)=>I(f,z))):null)}return I(t,l)})},G=()=>{const a=ee(N);return N.map((s,t)=>{var l,r,c;const o=(r=(l=s.key)!=null?l:s.href)!=null?r:`nav-${t}`,g=d===b.en?s.labelEn:s.labelZh;if(!!((c=s.dropdownItems)==null?void 0:c.length)){const f=E.has(o);return e.createElement("div",{key:o,className:n.menuSection},e.createElement("div",{className:i(n.menuRow,s.active&&n.menuRowActive)},e.createElement("span",{className:n.menuRowLabel},g),L(o,a)),f?e.createElement("div",{className:n.menuSubList},F(s.dropdownItems)):null)}return e.createElement("a",{key:o,className:i(n.menuLink,s.active&&n.menuLinkActive),href:s.href||"#",onClick:()=>p(!1)},e.createElement("span",{className:n.menuLinkLabel},g))})},_=()=>{const a=s=>{(v==null?void 0:v.href)||(s.preventDefault(),k==null||k()),p(!1)};return e.createElement("a",{key:"arena",className:i(n.menuLink,n.menuLinkArena),href:(v==null?void 0:v.href)||"#",onClick:a},e.createElement("span",{className:n.menuLinkContent},e.createElement("span",{className:n.menuLinkIcon},e.createElement("img",{src:V,alt:""})),e.createElement("span",{className:n.menuLinkLabel},K)),e.createElement("span",{className:n.menuLinkExternalIcon},e.createElement("img",{src:X,alt:""})))},U=a=>se({items:a,locale:d,performLogout:B,styles:n}),Z=a=>ne({avatarSize:32,customDropdownRender:U,dropdownTrigger:["click"],extra:a,hasUserMenu:T,isLoggedIn:h,onAvatarClick:O,styles:n,userInfo:S,userMenuItems:j});return e.createElement(e.Fragment,null,e.createElement("header",{className:n.topbar},e.createElement("a",{className:n.brand,href:x,"aria-label":m.topNavBrandAria},e.createElement("img",{className:n.brandMark,src:q,alt:""}),e.createElement("img",{className:n.brandWord,src:J,alt:m.topNavBrandName})),e.createElement("div",{className:n.actions},e.createElement("button",{className:n.langButton,type:"button",onClick:R},m.topNavLangSwitch),h?Z():e.createElement("button",{className:n.loginButton,type:"button",onClick:M},m.login),e.createElement("button",{className:n.menuButton,type:"button",onClick:()=>p(!u),"aria-label":"Toggle menu"},u?e.createElement(P,null):e.createElement(W,null)))),u&&e.createElement(e.Fragment,null,e.createElement("div",{className:n.mask,onClick:()=>p(!1)}),e.createElement("nav",{className:n.menuContainer,"aria-label":m.topNavNavAria},G(),_())))};export{le as default};
1
+ import e,{useState as C,useEffect as P}from"react";import p from"classnames";import{CloseOutlined as W,MenuOutlined as j}from"@ant-design/icons";import{langTypeEnum as g}from"../../../constants/enums.js";import q from"../../../assets/svg/top-nav/logo-mark.svg.js";import J from"../../../assets/svg/top-nav/logo-word.svg.js";import Q from"../../../assets/svg/top-nav/nav-down.svg.js";import V from"../../../assets/svg/top-nav/arena-flag-mobile.svg.js";import X from"../../../assets/svg/top-nav/arrow-right-up.svg.js";import n from"./top-nav.module.less.js";import{useTopNavCommon as Y,getCollapsibleKeysFromNavItems as ee,renderUserAvatar as ne,getCollapsibleKeysFromDropdownItems as ae,isDropdownGroupItem as te,renderDropdownItemIcon as A,renderDropdownContent as le}from"../../../components/top-nav/shared.js";const re=D=>{const{brandHref:x,locale:d,onToggleLocale:R,navItems:v,onArenaClick:k,arena:E,userInfo:S,onAvatarClick:O,userMenuItems:K,arenaLabel:M,locales:m,triggerLogin:B,performLogout:T,isLoggedIn:h,hasUserMenu:$}=Y(D),[u,i]=C(!1),[N,w]=C(()=>new Set);P(()=>{u||w(new Set)},[u]);const F=(a,l)=>{w(t=>{const r=new Set(t);return r.has(a)?r.delete(a):(l.forEach(o=>r.delete(o)),r.add(a)),r})},L=(a,l)=>{const t=N.has(a);return e.createElement("button",{type:"button",className:p(n.expandBtn,t&&n.expandBtnOpen),"aria-expanded":t,"aria-label":t?"Collapse":"Expand",onClick:r=>{r.preventDefault(),r.stopPropagation(),F(a,l)}},e.createElement("img",{src:Q,alt:"",className:n.expandIconImg}))},I=(a,l)=>{const t=a.label||(d===g.en?a.labelEn:a.labelZh),r=a.key||a.id||`item-${l}`,o=A(a,18);return e.createElement("a",{key:r,className:p(n.menuLink,n.menuRow),href:a.href||"#",onClick:c=>{var s;a.href||c.preventDefault(),(s=a.onClick)==null||s.call(a,c),i(!1)}},o?e.createElement("span",{className:n.menuRowIcon},o):null,e.createElement("span",{className:n.menuRowLabel},t))},G=a=>{const l=ae(a);return a.map((t,r)=>{if(t.type==="divider")return null;const o=t.id||t.key||`drop-${r}`;if(te(t)){const s=t.label||(d===g.en?t.labelEn:t.labelZh),f=N.has(o),y=A(t,18);return e.createElement("div",{key:o,className:n.menuGroup},e.createElement("div",{className:n.menuRow},e.createElement("span",{className:n.menuRowIcon},y),e.createElement("span",{className:n.menuRowLabel},s),L(o,l)),f&&t.children?e.createElement("div",{className:n.menuSubList},t.children.map((b,H)=>I(b,H))):null)}return I(t,r)})},_=()=>{const a=ee(v);return v.map((l,t)=>{var r,o,c;const s=(o=(r=l.key)!=null?r:l.href)!=null?o:`nav-${t}`,f=d===g.en?l.labelEn:l.labelZh;if(!!((c=l.dropdownItems)!=null&&c.length)){const b=N.has(s);return e.createElement("div",{key:s,className:n.menuSection},e.createElement("div",{className:p(n.menuRow,l.active&&n.menuRowActive)},e.createElement("span",{className:n.menuRowLabel},f),L(s,a)),b?e.createElement("div",{className:n.menuSubList},G(l.dropdownItems)):null)}return e.createElement("a",{key:s,className:p(n.menuLink,l.active&&n.menuLinkActive),href:l.href||"#",onClick:()=>i(!1)},e.createElement("span",{className:n.menuLinkLabel},f))})},U=()=>{const a=l=>{E!=null&&E.href||(l.preventDefault(),k==null||k()),i(!1)};return e.createElement("a",{key:"arena",className:p(n.menuLink,n.menuLinkArena),href:(E==null?void 0:E.href)||"#",onClick:a},e.createElement("span",{className:n.menuLinkContent},e.createElement("span",{className:n.menuLinkIcon},e.createElement("img",{src:V,alt:""})),e.createElement("span",{className:n.menuLinkLabel},M)),e.createElement("span",{className:n.menuLinkExternalIcon},e.createElement("img",{src:X,alt:""})))},Z=a=>le({items:a,locale:d,performLogout:T,styles:n}),z=a=>ne({avatarSize:32,customDropdownRender:Z,dropdownTrigger:["click"],extra:a,hasUserMenu:$,isLoggedIn:h,onAvatarClick:O,styles:n,userInfo:S,userMenuItems:K});return e.createElement(e.Fragment,null,e.createElement("header",{className:n.topbar},e.createElement("a",{className:n.brand,href:x,"aria-label":m.topNavBrandAria},e.createElement("img",{className:n.brandMark,src:q,alt:""}),e.createElement("img",{className:n.brandWord,src:J,alt:m.topNavBrandName})),e.createElement("div",{className:n.actions},e.createElement("button",{className:n.langButton,type:"button",onClick:R},m.topNavLangSwitch),h?z():e.createElement("button",{className:n.loginButton,type:"button",onClick:B},m.login),e.createElement("button",{className:n.menuButton,type:"button",onClick:()=>i(!u),"aria-label":"Toggle menu"},u?e.createElement(W,null):e.createElement(j,null)))),u&&e.createElement(e.Fragment,null,e.createElement("div",{className:n.mask,onClick:()=>i(!1)}),e.createElement("nav",{className:n.menuContainer,"aria-label":m.topNavNavAria},_(),U())))};export{re as default};
@@ -1 +1 @@
1
- import a,{createContext as l,useContext as s,useMemo as i}from"react";import t from"../locale/index.js";import{OcConfigContext as x}from"./OcConfigContext.js";const o=l({locales:{}}),C=({children:c})=>{const{config:n}=s(x),{locale:e}=n,r=i(()=>({locales:t[e]}),[e,t]);return a.createElement(o.Provider,{value:r},c)};export{o as OcContext,C as default};
1
+ import a,{createContext as l,useContext as s,useMemo as m}from"react";import e from"../locale/index.js";import{OcConfigContext as i}from"./OcConfigContext.js";const o=l({locales:{}}),u=({children:c})=>{const{config:r}=s(i),{locale:t}=r,n=m(()=>({locales:e[t]}),[t,e]);return a.createElement(o.Provider,{value:n},c)};export{o as OcContext,u as default};
@@ -1,39 +1,39 @@
1
1
  import React, { ReactNode } from 'react';
2
2
 
3
- interface Item {
4
- key: string;
5
- label: ReactNode;
6
- }
7
- interface MenuProps {
8
- items: Item[];
9
- onClick?: ({ key }: {
10
- key: any;
11
- }) => void;
12
- }
13
- interface CascadeMenus {
14
- key: string;
15
- label: ReactNode;
16
- children: Item[];
17
- }
18
- interface CascadeMenuProps {
19
- items: CascadeMenus;
20
- onClick?: ({ key }: {
21
- key: any;
22
- }) => void;
23
- }
24
- interface DropdownProps {
25
- content?: ReactNode;
26
- theme?: 'light' | 'dark';
27
- menu?: MenuProps;
28
- className?: string;
29
- placement?: 'right-bottom' | 'left-bottom' | 'left-top' | 'right-top';
30
- trigger?: Array<'click' | 'hover'>;
31
- children?: ReactNode;
32
- isCascadeMenu?: boolean;
33
- cascadeMenu?: CascadeMenuProps;
34
- isFirstLevelOpen?: boolean;
35
- isDefaultSelectFirstOne?: boolean;
36
- }
3
+ interface Item {
4
+ key: string;
5
+ label: ReactNode;
6
+ }
7
+ interface MenuProps {
8
+ items: Item[];
9
+ onClick?: ({ key }: {
10
+ key: any;
11
+ }) => void;
12
+ }
13
+ interface CascadeMenus {
14
+ key: string;
15
+ label: ReactNode;
16
+ children: Item[];
17
+ }
18
+ interface CascadeMenuProps {
19
+ items: CascadeMenus;
20
+ onClick?: ({ key }: {
21
+ key: any;
22
+ }) => void;
23
+ }
24
+ interface DropdownProps {
25
+ content?: ReactNode;
26
+ theme?: 'light' | 'dark';
27
+ menu?: MenuProps;
28
+ className?: string;
29
+ placement?: 'right-bottom' | 'left-bottom' | 'left-top' | 'right-top';
30
+ trigger?: Array<'click' | 'hover'>;
31
+ children?: ReactNode;
32
+ isCascadeMenu?: boolean;
33
+ cascadeMenu?: CascadeMenuProps;
34
+ isFirstLevelOpen?: boolean;
35
+ isDefaultSelectFirstOne?: boolean;
36
+ }
37
37
  declare const Dropdown: React.FC<DropdownProps>;
38
38
 
39
39
  export { CascadeMenus, DropdownProps, Item, Dropdown as default };
@@ -1,9 +1,9 @@
1
1
  import React from 'react';
2
2
 
3
- interface IProps {
4
- message: string;
5
- baseImgUrl?: string;
6
- }
3
+ interface IProps {
4
+ message: string;
5
+ baseImgUrl?: string;
6
+ }
7
7
  declare const _default: React.NamedExoticComponent<IProps>;
8
8
 
9
9
  export { _default as default };
@@ -1,6 +1,6 @@
1
1
  import { TopNavProps } from '../../index.js';
2
2
  import React from 'react';
3
3
 
4
- declare const TopNav: React.FC<TopNavProps>;
4
+ declare const OcTopNav: React.FC<TopNavProps>;
5
5
 
6
- export { TopNav as default };
6
+ export { OcTopNav as default };
@@ -1,22 +1,22 @@
1
- declare enum langTypeEnum {
2
- en = "en-US",
3
- zh = "zh-CN"
4
- }
5
- declare enum envTypeEnum {
6
- development = "development",
7
- staging = "staging",
8
- production = "production"
9
- }
10
- declare enum webTypeEnum {
11
- lightWeb = "lightWeb",
12
- blueWeb = "blueWeb",
13
- miniWeb = "miniWeb",
14
- lightMiniWeb = "lightMiniWeb",
15
- transparentWeb = "transparentWeb"
16
- }
17
- declare enum evaluationTypeEnum {
18
- llm = "llm",
19
- mm = "mm"
1
+ declare enum langTypeEnum {
2
+ en = "en-US",
3
+ zh = "zh-CN"
4
+ }
5
+ declare enum envTypeEnum {
6
+ development = "development",
7
+ staging = "staging",
8
+ production = "production"
9
+ }
10
+ declare enum webTypeEnum {
11
+ lightWeb = "lightWeb",
12
+ blueWeb = "blueWeb",
13
+ miniWeb = "miniWeb",
14
+ lightMiniWeb = "lightMiniWeb",
15
+ transparentWeb = "transparentWeb"
16
+ }
17
+ declare enum evaluationTypeEnum {
18
+ llm = "llm",
19
+ mm = "mm"
20
20
  }
21
21
 
22
22
  export { envTypeEnum, evaluationTypeEnum, langTypeEnum, webTypeEnum };
@@ -1,9 +1,9 @@
1
- declare const goOCHome: (lang: any, source: any, url: any) => void;
2
- declare const goRank: (lang: any, source: any, url: any) => void;
3
- declare const goHub: (lang: any, source: any, url: any) => void;
4
- declare const goKit: (lang: any, source: any, url: any) => void;
5
- declare const goRules: (lang: any, source: any, url: any) => void;
6
- declare const goData: (lang: any, source: any, url: any) => void;
1
+ declare const goOCHome: (lang: any, source: any, url: any) => void;
2
+ declare const goRank: (lang: any, source: any, url: any) => void;
3
+ declare const goHub: (lang: any, source: any, url: any) => void;
4
+ declare const goKit: (lang: any, source: any, url: any) => void;
5
+ declare const goRules: (lang: any, source: any, url: any) => void;
6
+ declare const goData: (lang: any, source: any, url: any) => void;
7
7
  declare const goInternDiscoveryEvalKit: (lang: any, source: any, url: any) => void;
8
8
 
9
9
  export { goData, goHub, goInternDiscoveryEvalKit, goKit, goOCHome, goRank, goRules };
@@ -1,13 +1,13 @@
1
- declare enum RankingType {
2
- LLM = 0,
3
- MM = 1
4
- }
5
- interface AvailableMonth {
6
- fileName: string;
7
- month: string;
8
- updateTime: string;
9
- columnFileName: string;
10
- }
1
+ declare enum RankingType {
2
+ LLM = 0,
3
+ MM = 1
4
+ }
5
+ interface AvailableMonth {
6
+ fileName: string;
7
+ month: string;
8
+ updateTime: string;
9
+ columnFileName: string;
10
+ }
11
11
  declare const getMenuData: (res: AvailableMonth[], lang: string, type: RankingType) => any;
12
12
 
13
13
  export { AvailableMonth, RankingType, getMenuData };
@@ -1,5 +1,5 @@
1
1
  export { default as OcHeader } from './components/header/index.js';
2
- export { default as TopNav } from './components/top-nav/index.js';
2
+ export { default as OcTopNav } from './components/top-nav/index.js';
3
3
  export { default as OcOnlineEvaluation } from './components/online-evaluation/index.js';
4
4
  export { default as OcSideNav } from './components/side-nav/index.js';
5
5
  export { default as OcFooter } from './components/footer/index.js';
@@ -11,154 +11,154 @@ import { envTypeEnum, langTypeEnum, webTypeEnum } from './constants/enums.js';
11
11
  export { envTypeEnum, evaluationTypeEnum, langTypeEnum, webTypeEnum } from './constants/enums.js';
12
12
  export { getMenuData } from './helper/index.js';
13
13
 
14
- interface DefaultRespDTO<T> {
15
- msgCode: number;
16
- msg: string;
17
- success: boolean;
18
- data: T;
19
- }
20
- interface ApplyEvalRequest {
21
- modelName: string;
22
- orgName: string;
23
- modelScenarios: string;
24
- email: string;
25
- phoneNumber: string;
26
- }
27
- interface IUserInfo {
28
- active?: number;
29
- avatar?: string;
30
- contribution?: null;
31
- email?: string;
32
- githubAccount?: null;
33
- lastLoginAt?: string;
34
- phone?: string;
35
- userId: string;
36
- username?: string;
37
- nickname?: string;
38
- access?: string;
39
- bio?: string;
40
- birth?: string;
41
- location?: string;
42
- locationEn?: string;
43
- organization?: string;
44
- qq?: string;
45
- twitter?: string;
46
- website?: string;
47
- wechat?: string;
48
- zhihu?: string;
49
- ssoUid?: string;
50
- token?: string;
51
- roleIds?: string[];
52
- }
53
- interface SubMenu {
54
- title: {
55
- zh: string;
56
- en: string;
57
- };
58
- key: string;
59
- isExternal?: boolean;
60
- href?: {
61
- zh: string;
62
- en: string;
63
- } | string;
64
- onClick?: (lang: any, source: any, url: any) => void;
65
- isActive: boolean;
66
- customNode?: React.ReactNode;
67
- }
68
- interface HeaderProps {
69
- envType: envTypeEnum;
70
- handleUnauth: () => void;
71
- locale: langTypeEnum;
72
- setLocale: (locale: langTypeEnum) => void;
73
- logout: () => Promise<unknown>;
74
- userInfo: IUserInfo;
75
- jumpLogin: () => void;
76
- webType: webTypeEnum;
77
- applyAbilityEval: (data: ApplyEvalRequest) => Promise<DefaultRespDTO<any>>;
78
- navMenuList?: SubMenu[];
79
- isLLM: boolean;
80
- isDefaultShowSecondMenu?: boolean;
81
- }
82
- interface OnlineEvaluationProps {
83
- envType: envTypeEnum;
84
- webType: webTypeEnum;
85
- locale: langTypeEnum;
86
- children?: React.ReactElement;
87
- }
88
- interface SideNavProps {
89
- locale: langTypeEnum;
90
- envType: envTypeEnum;
91
- children?: React.ReactElement;
92
- }
93
- interface DropdownItem {
94
- key?: string;
95
- id?: string;
96
- type?: 'group' | 'item' | 'divider';
97
- labelZh?: string;
98
- labelEn?: string;
99
- label?: string;
100
- href?: string;
101
- icon?: React.ReactNode;
102
- onClick?: (event: React.MouseEvent<HTMLAnchorElement>) => void;
103
- children?: DropdownItem[];
104
- }
105
- interface TopNavNavItem {
106
- key?: string;
107
- label?: string;
108
- labelZh?: string;
109
- labelEn?: string;
110
- href?: string;
111
- active?: boolean;
112
- withDown?: boolean;
113
- dropdownItems?: DropdownItem[];
114
- }
115
- interface TopNavArenaConfig {
116
- /** 中文名称,默认 'Arena' */
117
- labelZh?: string;
118
- /** 英文名称,默认 'Arena' */
119
- labelEn?: string;
120
- /** 跳转地址,传入后渲染为 <a>,支持中键开新标签 */
121
- href?: string;
122
- }
123
- interface TopNavProps {
124
- /** 当前语言,用于导航文案和链接参数渲染 */
125
- locale: langTypeEnum;
126
- /** 当前运行环境,用于读取对应环境配置 */
127
- envType: envTypeEnum;
128
- /** 点击品牌 Logo 后跳转的地址 */
129
- brandHref?: string;
130
- /** 点击语言切换按钮时触发,语言状态由父组件维护 */
131
- onToggleLocale?: () => void;
132
- /** 点击登录按钮时触发 */
133
- onLogin?: () => void;
134
- /** 兼容旧 Header 的登录跳转方法,onLogin 未传时使用 */
135
- jumpLogin?: () => void;
136
- /** 点击 Arena 入口时触发 */
137
- onArenaClick?: () => void;
138
- /** Arena 入口的文案和跳转配置 */
139
- arena?: TopNavArenaConfig;
140
- /** 顶部导航菜单配置,未传时使用默认菜单 */
141
- navItems?: TopNavNavItem[];
142
- /**
143
- * 由父组件在登录成功后回传的用户信息;
144
- * 传入有效值时,TopNav 会用头像替换登录按钮。
145
- * 设为 null/undefined 表示未登录,显示登录按钮。
146
- */
147
- userInfo?: IUserInfo | null;
148
- /** 头像点击事件,无 userMenuItems 时通常用来触发父组件的用户菜单/跳转 */
149
- onAvatarClick?: () => void;
150
- /** 可选:点击头像时弹出的下拉菜单项(如个人中心/退出登录) */
151
- userMenuItems?: DropdownItem[];
152
- /** 退出登录的接口调用,与 header 组件保持一致 */
153
- logout?: () => Promise<unknown>;
154
- /** 退出登录后的清理回调,与 header 组件保持一致 */
155
- handleUnauth?: () => void;
156
- }
157
- interface FooterProps {
158
- locale: langTypeEnum;
159
- envType: envTypeEnum;
160
- isSticky?: boolean;
161
- customClassname?: string;
14
+ interface DefaultRespDTO<T> {
15
+ msgCode: number;
16
+ msg: string;
17
+ success: boolean;
18
+ data: T;
19
+ }
20
+ interface ApplyEvalRequest {
21
+ modelName: string;
22
+ orgName: string;
23
+ modelScenarios: string;
24
+ email: string;
25
+ phoneNumber: string;
26
+ }
27
+ interface IUserInfo {
28
+ active?: number;
29
+ avatar?: string;
30
+ contribution?: null;
31
+ email?: string;
32
+ githubAccount?: null;
33
+ lastLoginAt?: string;
34
+ phone?: string;
35
+ userId: string;
36
+ username?: string;
37
+ nickname?: string;
38
+ access?: string;
39
+ bio?: string;
40
+ birth?: string;
41
+ location?: string;
42
+ locationEn?: string;
43
+ organization?: string;
44
+ qq?: string;
45
+ twitter?: string;
46
+ website?: string;
47
+ wechat?: string;
48
+ zhihu?: string;
49
+ ssoUid?: string;
50
+ token?: string;
51
+ roleIds?: string[];
52
+ }
53
+ interface SubMenu {
54
+ title: {
55
+ zh: string;
56
+ en: string;
57
+ };
58
+ key: string;
59
+ isExternal?: boolean;
60
+ href?: {
61
+ zh: string;
62
+ en: string;
63
+ } | string;
64
+ onClick?: (lang: any, source: any, url: any) => void;
65
+ isActive: boolean;
66
+ customNode?: React.ReactNode;
67
+ }
68
+ interface HeaderProps {
69
+ envType: envTypeEnum;
70
+ handleUnauth: () => void;
71
+ locale: langTypeEnum;
72
+ setLocale: (locale: langTypeEnum) => void;
73
+ logout: () => Promise<unknown>;
74
+ userInfo: IUserInfo;
75
+ jumpLogin: () => void;
76
+ webType: webTypeEnum;
77
+ applyAbilityEval: (data: ApplyEvalRequest) => Promise<DefaultRespDTO<any>>;
78
+ navMenuList?: SubMenu[];
79
+ isLLM: boolean;
80
+ isDefaultShowSecondMenu?: boolean;
81
+ }
82
+ interface OnlineEvaluationProps {
83
+ envType: envTypeEnum;
84
+ webType: webTypeEnum;
85
+ locale: langTypeEnum;
86
+ children?: React.ReactElement;
87
+ }
88
+ interface SideNavProps {
89
+ locale: langTypeEnum;
90
+ envType: envTypeEnum;
91
+ children?: React.ReactElement;
92
+ }
93
+ interface DropdownItem {
94
+ key?: string;
95
+ id?: string;
96
+ type?: 'group' | 'item' | 'divider';
97
+ labelZh?: string;
98
+ labelEn?: string;
99
+ label?: string;
100
+ href?: string;
101
+ icon?: React.ReactNode;
102
+ onClick?: (event: React.MouseEvent<HTMLAnchorElement>) => void;
103
+ children?: DropdownItem[];
104
+ }
105
+ interface TopNavNavItem {
106
+ key?: string;
107
+ label?: string;
108
+ labelZh?: string;
109
+ labelEn?: string;
110
+ href?: string;
111
+ active?: boolean;
112
+ withDown?: boolean;
113
+ dropdownItems?: DropdownItem[];
114
+ }
115
+ interface TopNavArenaConfig {
116
+ /** 中文名称,默认 'Arena' */
117
+ labelZh?: string;
118
+ /** 英文名称,默认 'Arena' */
119
+ labelEn?: string;
120
+ /** 跳转地址,传入后渲染为 <a>,支持中键开新标签 */
121
+ href?: string;
122
+ }
123
+ interface TopNavProps {
124
+ /** 当前语言,用于导航文案和链接参数渲染 */
125
+ locale: langTypeEnum;
126
+ /** 当前运行环境,用于读取对应环境配置 */
127
+ envType: envTypeEnum;
128
+ /** 点击品牌 Logo 后跳转的地址 */
129
+ brandHref?: string;
130
+ /** 点击语言切换按钮时触发,语言状态由父组件维护 */
131
+ onToggleLocale?: () => void;
132
+ /** 点击登录按钮时触发 */
133
+ onLogin?: () => void;
134
+ /** 兼容旧 Header 的登录跳转方法,onLogin 未传时使用 */
135
+ jumpLogin?: () => void;
136
+ /** 点击 Arena 入口时触发 */
137
+ onArenaClick?: () => void;
138
+ /** Arena 入口的文案和跳转配置 */
139
+ arena?: TopNavArenaConfig;
140
+ /** 顶部导航菜单配置,未传时使用默认菜单 */
141
+ navItems?: TopNavNavItem[];
142
+ /**
143
+ * 由父组件在登录成功后回传的用户信息;
144
+ * 传入有效值时,OcTopNav 会用头像替换登录按钮。
145
+ * 设为 null/undefined 表示未登录,显示登录按钮。
146
+ */
147
+ userInfo?: IUserInfo | null;
148
+ /** 头像点击事件,无 userMenuItems 时通常用来触发父组件的用户菜单/跳转 */
149
+ onAvatarClick?: () => void;
150
+ /** 可选:点击头像时弹出的下拉菜单项(如个人中心/退出登录) */
151
+ userMenuItems?: DropdownItem[];
152
+ /** 退出登录的接口调用,与 header 组件保持一致 */
153
+ logout?: () => Promise<unknown>;
154
+ /** 退出登录后的清理回调,与 header 组件保持一致 */
155
+ handleUnauth?: () => void;
156
+ }
157
+ interface FooterProps {
158
+ locale: langTypeEnum;
159
+ envType: envTypeEnum;
160
+ isSticky?: boolean;
161
+ customClassname?: string;
162
162
  }
163
163
 
164
164
  export { ApplyEvalRequest, DefaultRespDTO, DropdownItem, FooterProps, HeaderProps, IUserInfo, OnlineEvaluationProps, SideNavProps, TopNavArenaConfig, TopNavNavItem, TopNavProps };