@fudanda/admin-antd 2.20261109.1-beta.1 → 2.20261109.1-beta.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.
- package/dist/chunks/ApiTokensPage-w3JGRNQC.js +2 -0
- package/dist/chunks/ApiTokensPage-w3JGRNQC.js.map +1 -0
- package/dist/chunks/{App-CfQx7jWq.js → App-nh6_qOo8.js} +5 -5
- package/dist/chunks/{App-CfQx7jWq.js.map → App-nh6_qOo8.js.map} +1 -1
- package/dist/chunks/{AppModal-CVoUC2t3.js → AppModal-CEouaU03.js} +2 -2
- package/dist/chunks/{AppModal-CVoUC2t3.js.map → AppModal-CEouaU03.js.map} +1 -1
- package/dist/chunks/{ArcBaseAdmin-DQyddbFC.js → ArcBaseAdmin-CX7fQz4x.js} +2 -2
- package/dist/chunks/{ArcBaseAdmin-DQyddbFC.js.map → ArcBaseAdmin-CX7fQz4x.js.map} +1 -1
- package/dist/chunks/{DepartmentsPage-CQx53QGE.js → DepartmentsPage-BdD9VfDI.js} +2 -2
- package/dist/chunks/{DepartmentsPage-CQx53QGE.js.map → DepartmentsPage-BdD9VfDI.js.map} +1 -1
- package/dist/chunks/{DictsPage-BGnamkWk.js → DictsPage-fxBdV1-3.js} +2 -2
- package/dist/chunks/{DictsPage-BGnamkWk.js.map → DictsPage-fxBdV1-3.js.map} +1 -1
- package/dist/chunks/{EntityContextRuntime-CbzeMNXR.js → EntityContextRuntime-CMhoj6qe.js} +2 -2
- package/dist/chunks/{EntityContextRuntime-CbzeMNXR.js.map → EntityContextRuntime-CMhoj6qe.js.map} +1 -1
- package/dist/chunks/EntityContextRuntime-Dc89ZSnM.js +1 -0
- package/dist/chunks/{ExportButton-sMPAV2hd.js → ExportButton-DGxB2tcu.js} +2 -2
- package/dist/chunks/{ExportButton-sMPAV2hd.js.map → ExportButton-DGxB2tcu.js.map} +1 -1
- package/dist/chunks/{FileViewerPreviewPanel-Rti7pUhU.js → FileViewerPreviewPanel-BMZ7FdKV.js} +3 -3
- package/dist/chunks/{FileViewerPreviewPanel-Rti7pUhU.js.map → FileViewerPreviewPanel-BMZ7FdKV.js.map} +1 -1
- package/dist/chunks/{FilesPage-D_iYsUwl.js → FilesPage-DrgWELKy.js} +3 -3
- package/dist/chunks/{FilesPage-D_iYsUwl.js.map → FilesPage-DrgWELKy.js.map} +1 -1
- package/dist/chunks/{IdentitySecurityPage-rDYX5ksX.js → IdentitySecurityPage-BjTKvr-O.js} +2 -2
- package/dist/chunks/{IdentitySecurityPage-rDYX5ksX.js.map → IdentitySecurityPage-BjTKvr-O.js.map} +1 -1
- package/dist/chunks/{LogStatsScaffold-CMIz4z0a.js → LogStatsScaffold-DaB0JeAN.js} +2 -2
- package/dist/chunks/{LogStatsScaffold-CMIz4z0a.js.map → LogStatsScaffold-DaB0JeAN.js.map} +1 -1
- package/dist/chunks/{LoginLogsPage-Bv5pPJb2.js → LoginLogsPage-VmYC7i6q.js} +2 -2
- package/dist/chunks/{LoginLogsPage-Bv5pPJb2.js.map → LoginLogsPage-VmYC7i6q.js.map} +1 -1
- package/dist/chunks/{LoginLogsTable-DYcTx2oR.js → LoginLogsTable-CULcc_e8.js} +2 -2
- package/dist/chunks/{LoginLogsTable-DYcTx2oR.js.map → LoginLogsTable-CULcc_e8.js.map} +1 -1
- package/dist/chunks/{MarkdownPreviewPanel-lqs6AsoN.js → MarkdownPreviewPanel-CBcPc7Wv.js} +2 -2
- package/dist/chunks/{MarkdownPreviewPanel-lqs6AsoN.js.map → MarkdownPreviewPanel-CBcPc7Wv.js.map} +1 -1
- package/dist/chunks/{MasterDetailLayout-B5uqvh98.js → MasterDetailLayout-ByIBpmkZ.js} +2 -2
- package/dist/chunks/{MasterDetailLayout-B5uqvh98.js.map → MasterDetailLayout-ByIBpmkZ.js.map} +1 -1
- package/dist/chunks/{McpSettingsPage-Cdej9Evi.js → McpSettingsPage-C5V_rj2V.js} +2 -2
- package/dist/chunks/{McpSettingsPage-Cdej9Evi.js.map → McpSettingsPage-C5V_rj2V.js.map} +1 -1
- package/dist/chunks/{MemberAssignmentSheet-AKvLbbYW.js → MemberAssignmentSheet-DL0fg1Yf.js} +2 -2
- package/dist/chunks/{MemberAssignmentSheet-AKvLbbYW.js.map → MemberAssignmentSheet-DL0fg1Yf.js.map} +1 -1
- package/dist/chunks/{MenuCommandPalette-ia0pSIFg.js → MenuCommandPalette-C2PvK3Gh.js} +2 -2
- package/dist/chunks/{MenuCommandPalette-ia0pSIFg.js.map → MenuCommandPalette-C2PvK3Gh.js.map} +1 -1
- package/dist/chunks/{MenusPage-Bh55bvKH.js → MenusPage-Bytd1HlW.js} +2 -2
- package/dist/chunks/{MenusPage-Bh55bvKH.js.map → MenusPage-Bytd1HlW.js.map} +1 -1
- package/dist/chunks/{MonacoPreviewPanel-CT_sjf7Z.js → MonacoPreviewPanel-BZrNIcFZ.js} +2 -2
- package/dist/chunks/{MonacoPreviewPanel-CT_sjf7Z.js.map → MonacoPreviewPanel-BZrNIcFZ.js.map} +1 -1
- package/dist/chunks/{NavListPanel-DMIUMh7q.js → NavListPanel-zwUDIYSP.js} +2 -2
- package/dist/chunks/{NavListPanel-DMIUMh7q.js.map → NavListPanel-zwUDIYSP.js.map} +1 -1
- package/dist/chunks/{OperationLogsPage-7XVfmhxP.js → OperationLogsPage-D2BQdGNp.js} +2 -2
- package/dist/chunks/{OperationLogsPage-7XVfmhxP.js.map → OperationLogsPage-D2BQdGNp.js.map} +1 -1
- package/dist/chunks/{OperationLogsTable-gp-WZxiF.js → OperationLogsTable-DaaON4QR.js} +3 -3
- package/dist/chunks/{OperationLogsTable-gp-WZxiF.js.map → OperationLogsTable-DaaON4QR.js.map} +1 -1
- package/dist/chunks/{PDFPreviewPanel-CyfhyWav.js → PDFPreviewPanel-CMmnWBKW.js} +3 -3
- package/dist/chunks/{PDFPreviewPanel-CyfhyWav.js.map → PDFPreviewPanel-CMmnWBKW.js.map} +1 -1
- package/dist/chunks/{PositionsPage-Bwua1vNV.js → PositionsPage-CBZITssT.js} +2 -2
- package/dist/chunks/{PositionsPage-Bwua1vNV.js.map → PositionsPage-CBZITssT.js.map} +1 -1
- package/dist/chunks/{PreferencesSheetBody-C80D3dOM.js → PreferencesSheetBody-B0poTPEA.js} +2 -2
- package/dist/chunks/{PreferencesSheetBody-C80D3dOM.js.map → PreferencesSheetBody-B0poTPEA.js.map} +1 -1
- package/dist/chunks/{ProfilePage-DeTw-59a.js → ProfilePage-DLhacdWt.js} +2 -2
- package/dist/chunks/{ProfilePage-DeTw-59a.js.map → ProfilePage-DLhacdWt.js.map} +1 -1
- package/dist/chunks/{ProjectInfoPage-Bqn3gfXa.js → ProjectInfoPage-CJpGxpu5.js} +2 -2
- package/dist/chunks/{ProjectInfoPage-Bqn3gfXa.js.map → ProjectInfoPage-CJpGxpu5.js.map} +1 -1
- package/dist/chunks/{RelationPanel-Bio-ig-l.js → RelationPanel-BsbfEDo2.js} +2 -2
- package/dist/chunks/{RelationPanel-Bio-ig-l.js.map → RelationPanel-BsbfEDo2.js.map} +1 -1
- package/dist/chunks/{RolesPage-fwUSs2HR.js → RolesPage-46dzdiah.js} +2 -2
- package/dist/chunks/{RolesPage-fwUSs2HR.js.map → RolesPage-46dzdiah.js.map} +1 -1
- package/dist/chunks/{SessionConflictModal-Dw4opoNP.js → SessionConflictModal-Bm38eExL.js} +2 -2
- package/dist/chunks/{SessionConflictModal-Dw4opoNP.js.map → SessionConflictModal-Bm38eExL.js.map} +1 -1
- package/dist/chunks/SettingModuleDetail-BjxUJeH5.js +17 -0
- package/dist/chunks/SettingModuleDetail-BjxUJeH5.js.map +1 -0
- package/dist/chunks/{SettingsPage-Cy5-q-P6.js → SettingsPage-C32Vuizm.js} +2 -2
- package/dist/chunks/{SettingsPage-Cy5-q-P6.js.map → SettingsPage-C32Vuizm.js.map} +1 -1
- package/dist/chunks/{StatCard-BROG4NSp.js → StatCard-CRPfkSBY.js} +2 -2
- package/dist/chunks/{StatCard-BROG4NSp.js.map → StatCard-CRPfkSBY.js.map} +1 -1
- package/dist/chunks/{UserGroupsPage-CsTBkUPy.js → UserGroupsPage-08G5MdGm.js} +2 -2
- package/dist/chunks/{UserGroupsPage-CsTBkUPy.js.map → UserGroupsPage-08G5MdGm.js.map} +1 -1
- package/dist/chunks/{UserLogsPanels-3u8Z93YU.js → UserLogsPanels-nbIrMym9.js} +2 -2
- package/dist/chunks/{UserLogsPanels-3u8Z93YU.js.map → UserLogsPanels-nbIrMym9.js.map} +1 -1
- package/dist/chunks/{UserTransferSelect-ChLj4EkS.js → UserTransferSelect-C8betaWG.js} +2 -2
- package/dist/chunks/{UserTransferSelect-ChLj4EkS.js.map → UserTransferSelect-C8betaWG.js.map} +1 -1
- package/dist/chunks/{UsersPage-CfNnQJi4.js → UsersPage-BjTiNEqF.js} +2 -2
- package/dist/chunks/{UsersPage-CfNnQJi4.js.map → UsersPage-BjTiNEqF.js.map} +1 -1
- package/dist/chunks/{browser-BKLM0ThC-D0TgzKTC.js → browser-BKLM0ThC-Cp7Gi4-F.js} +1 -1
- package/dist/chunks/{code-BkkeN2fd.js → code-LswxAr98.js} +1 -1
- package/dist/chunks/{direct-engine-m32m22nx.js → direct-engine-Dv_6v4sx.js} +1 -1
- package/dist/chunks/{html-BGNWR_Bp.js → html-BokjxlLb.js} +1 -1
- package/dist/chunks/{line-CsTeuEcK.js → line-Bqh6atHH.js} +1 -1
- package/dist/chunks/{lrc-D6gjnGZ5.js → lrc-T5e1svZG.js} +1 -1
- package/dist/chunks/{markdown-BglUe9j8.js → markdown-BpWokN1s.js} +1 -1
- package/dist/chunks/{patch-C97Yl3jr.js → patch-BYVX5C9G.js} +1 -1
- package/dist/chunks/{worker-engine-B7_3qQVS.js → worker-engine-CtUAeI4G.js} +1 -1
- package/dist/index.js +1 -1
- package/dist/{src-DAkFn9SG.js → src-D6UlLiVN.js} +2 -2
- package/dist/{src-DAkFn9SG.js.map → src-D6UlLiVN.js.map} +1 -1
- package/package.json +9 -9
- package/dist/chunks/ApiTokensPage-DiRMgViD.js +0 -2
- package/dist/chunks/ApiTokensPage-DiRMgViD.js.map +0 -1
- package/dist/chunks/EntityContextRuntime-C9q95WDf.js +0 -1
- package/dist/chunks/SettingModuleDetail-I9CSJ-fh.js +0 -17
- package/dist/chunks/SettingModuleDetail-I9CSJ-fh.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-Bruge11p.js";import{n as t,r as n}from"./code-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-Bruge11p.js";import{n as t,r as n}from"./code-LswxAr98.js";import{createFileViewerZoomChangeEmitter as r,decodeFileViewerTextBuffer as i,registerFileViewerZoomProvider as a,resolveFileViewerLocale as o,unregisterFileViewerZoomProvider as s}from"@file-viewer/core";function c(e){let t=d.exec(e);if(!t)return null;let n=Number(t[2])*6e4+Number(t[3])*1e3+Number((t[4]||``).padEnd(3,`0`));return(t[1]?-1:1)*n}function l(e){let t=Math.abs(e);return`${e<0?`-`:``}${String(Math.floor(t/6e4)).padStart(2,`0`)}:${String(Math.floor(t/1e3)%60).padStart(2,`0`)}.${String(t%1e3).padStart(3,`0`)}`}function u(e){if(e.length>2e6)throw RangeError(`LRC source preview required`);let t={source:e,offsetMs:0,metadata:[],cues:[]},n=null,r=0,i=e.replace(/^\uFEFF/,``).split(/\r\n|\r|\n/);for(let e=0;e<i.length;e++){let a=i[e],o=/^\[([a-z][a-z0-9_-]*):(.*)\]\s*$/i.exec(a);if(o){if(t.metadata.push({key:o[1],value:o[2]}),o[1].toLowerCase()===`offset`&&/^[+-]?\d+$/.test(o[2].trim())){let e=Number(o[2]);Number.isSafeInteger(e)&&Math.abs(e)<=0xe8d4a51000&&(t.offsetMs=e)}continue}let s=0,l=[];for(;a[s]===`[`;){let e=a.indexOf(`]`,s+1);if(e<0||e-s>24)break;let n=c(a.slice(s+1,e));if(n===null)break;if(l.push(n),s=e+1,l.length+t.cues.length>1e4)throw RangeError(`Too many LRC cues`)}let u=a.slice(s),d=l.length?/^([MFD]):/.exec(u):null;d&&(n=d[1],u=u.slice(2));let f=[],p=/<(-?\d{1,8}:[0-5]\d(?:[.:]\d{1,3})?)>/g,m=0,h=null;for(let e=p.exec(u);e;e=p.exec(u))e.index>m&&f.push({text:u.slice(m,e.index),timeMs:h}),h=c(e[1]),m=e.index+e[0].length;if((m<u.length||!f.length)&&f.push({text:u.slice(m),timeMs:h}),r+=f.length*Math.max(1,l.length),r>5e4||t.cues.length>=1e4)throw RangeError(`LRC source preview required`);let g=f.map(e=>e.text).join(``),_=l.length?l:[null];for(let r of _){let i=r===null?0:r-l[0];t.cues.push({line:e+1,timeMs:r,text:g,role:l.length?n:null,words:f.map(e=>({text:e.text,timeMs:e.timeMs===null?null:e.timeMs+i}))})}}for(let e of t.cues){e.timeMs!==null&&(e.timeMs-=t.offsetMs);for(let n of e.words)n.timeMs!==null&&(n.timeMs-=t.offsetMs)}return t}var d;function f(){return(f=e((()=>{d=/^(-?)(\d{1,8}):([0-5]\d)(?:[.:](\d{1,3}))?$/})))()}async function p(e,t,c,d){var f;if(d?.signal?.aborted)throw new DOMException(`Aborted`,`AbortError`);if(e.byteLength>4e6)return n(e,t,c,d);let p=i(e,d?.options?.text?.encoding,d?.options?.text?.fallbackEncoding).text,g;try{g=u(p)}catch(r){if(!(r instanceof RangeError))throw r;return n(e,t,c,d)}let _=t.ownerDocument,v=m[o(d?.options)],y=_.createElement(`div`);y.className=`fv-lrc`,y.dataset.wrap=String(d?.options?.text?.wrapLongLines!==!1),y.dataset.viewerTheme=d?.options?.theme||`system`;let b=_.createElement(`style`);b.textContent=h;let x=_.createElement(`div`);x.className=`lrc-toolbar`,x.hidden=d?.options?.text?.toolbar===!1;let S=_.createElement(`div`);S.className=`lrc-scroll`;let C=_.createElement(`div`);C.className=`lrc-content`,S.append(C);let w=v.slice(0,3).map((e,t)=>{let n=_.createElement(`button`);return n.type=`button`,n.textContent=e,n.dataset.lrcMode=String(t),x.append(n),n}),T=_.createElement(`button`);T.type=`button`,T.textContent=v[3],T.dataset.lrcWrap=``,T.setAttribute(`aria-pressed`,y.dataset.wrap),x.append(T);let E=_.createElement(`span`);E.className=`lrc-note`,E.textContent=v[4],x.append(E),y.append(b,x,S),t.replaceChildren(y);let D=!1,O=0,k=1,A=r();function j(){return{scale:k,label:`${Math.round(k*100)}%`,canZoomIn:k<2.6,canZoomOut:k>.6,canReset:k!==1,minScale:.6,maxScale:2.6}}function M(e){return!D&&Number.isFinite(e)&&(k=Math.max(.6,Math.min(2.6,Math.round(e*100)/100)),y.style.setProperty(`--lrc-font-size`,`${16*k}px`),A.emit()),j()}function N(){if(D)return;w.forEach((e,t)=>e.setAttribute(`aria-pressed`,String(O===t)));let e=_.createDocumentFragment();if(O===2){let t=_.createElement(`pre`);t.className=`lrc-source`,t.textContent=p,e.append(t)}else{let t=_.createElement(`div`);t.className=`lrc-metadata`,t.textContent=g.metadata.map(e=>`${e.key}: ${e.value}`).join(`
|
|
2
2
|
`),e.append(t);for(let t of g.cues){let n=_.createElement(`div`);if(n.className=`lrc-cue`,n.dataset.sourceLine=String(t.line),t.timeMs!==null&&(n.dataset.timeMs=String(t.timeMs)),O===0){let e=_.createElement(`span`);e.className=`lrc-time`,e.textContent=t.timeMs===null?`·`:l(t.timeMs),n.append(e)}let r=_.createElement(`span`);if(r.className=`lrc-phrase`,r.dir=`auto`,t.role){let e=_.createElement(`sup`);e.className=`lrc-role`,e.textContent=t.role,r.append(e)}for(let e of t.words)if(O===0&&e.timeMs!==null){let t=_.createElement(`ruby`);t.dataset.wordTimeMs=String(e.timeMs),t.append(_.createTextNode(e.text));let n=_.createElement(`rt`);n.textContent=l(e.timeMs),t.append(n),r.append(t)}else r.append(_.createTextNode(e.text));n.append(r),e.append(n)}}C.replaceChildren(e)}function P(e){let t=e.target?.closest(`button`);t&&x.contains(t)&&(t===T?(y.dataset.wrap=String(y.dataset.wrap!==`true`),T.setAttribute(`aria-pressed`,y.dataset.wrap)):t.dataset.lrcMode!==void 0&&(O=Number(t.dataset.lrcMode),N()))}function F(){var e;D||(D=!0,x.removeEventListener(`click`,P),(e=d?.signal)==null||e.removeEventListener(`abort`,F),s(y),A.clear(),y.remove())}return x.addEventListener(`click`,P),(f=d?.signal)==null||f.addEventListener(`abort`,F,{once:!0}),a(y,{getState:j,setZoom:M,zoomIn:()=>M(k+.1),zoomOut:()=>M(k-.1),resetZoom:()=>M(1),subscribe:A.subscribe}),N(),{$el:y,unmount:F}}var m,h;function g(){return(g=e((()=>{f(),t(),m={"en-US":[`Annotated`,`Lyrics`,`Source`,`Wrap lines`,`Static lyrics preview; no audio playback.`],"zh-CN":[`时间标注`,`歌词`,`原文`,`自动换行`,`静态歌词预览,不播放音频。`],"ja-JP":[`時間付き`,`歌詞`,`原文`,`折り返し`,`歌詞の静的プレビューです。音声は再生しません。`],"de-DE":[`Mit Zeitangaben`,`Liedtext`,`Quelltext`,`Zeilenumbruch`,`Statische Liedtextvorschau ohne Audiowiedergabe.`]},h=`
|
|
3
3
|
.fv-lrc{--lrc-bg:#fff;--lrc-fg:#1f2937;height:100%;min-height:0;display:flex;flex-direction:column;color:var(--lrc-fg);background:var(--lrc-bg);font:14px/1.65 system-ui,sans-serif}
|
|
4
4
|
.fv-lrc .lrc-toolbar{display:flex;flex-wrap:wrap;gap:6px;padding:10px;border-bottom:1px solid #8885;align-items:center}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-Bruge11p.js";import{a as t,i as n,n as r,r as i}from"./syntaxHighlight-DhXkiAYL.js";import{i as a,n as o}from"./optionalCapabilities-CNoFW0wA.js";import{n as s,t as c}from"./purify.es-DCwfX_CO.js";import{i as l,r as u}from"./FileViewerPreviewPanel-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-Bruge11p.js";import{a as t,i as n,n as r,r as i}from"./syntaxHighlight-DhXkiAYL.js";import{i as a,n as o}from"./optionalCapabilities-CNoFW0wA.js";import{n as s,t as c}from"./purify.es-DCwfX_CO.js";import{i as l,r as u}from"./FileViewerPreviewPanel-BMZ7FdKV.js";import{assertFileViewerMermaidSourceHasNoExternalResources as d,createFileViewerZoomChangeEmitter as f,decodeFileViewerTextBuffer as p,registerFileViewerZoomProvider as m,resolveFileViewerFitScale as h,sanitizeFileViewerSvgResources as g,unregisterFileViewerZoomProvider as ee}from"@file-viewer/core";function te(e,t){let n=new Set(Array.from(t.querySelectorAll(`[id]`),e=>e.id));for(let e of Array.from(t.querySelectorAll(`h1,h2,h3,h4,h5,h6`))){if(e.id)continue;let t=(e.textContent||``).trim().toLowerCase().replace(/[^\p{L}\p{M}\p{N}_\-\s]/gu,``).replace(/\s/g,`-`)||`section`,r=t;for(let e=1;n.has(r);e++)r=`${t}-${e}`;e.id=r,n.add(r)}let r=/* @__PURE__ */ new Set,i=n=>{if(n.defaultPrevented||n.button!==0||n.metaKey||n.ctrlKey||n.shiftKey||n.altKey)return;let i=n.target,a=(i?.closest)?.call(i,`a[href]`);if(!a||!t.contains(a)||a.hasAttribute(`download`))return;let o=a.getAttribute(`target`);if(o&&o.toLowerCase()!==`_self`)return;let s=(a.getAttribute(`href`)||``).trim();if(!s.startsWith(`#`)||s===`#`)return;let c;try{c=decodeURIComponent(s.slice(1))}catch{return}let l=Array.from(t.querySelectorAll(`[id]`)).find(e=>e.id===c);if(!l)return;n.preventDefault();let u=e.getBoundingClientRect(),d=e.offsetHeight>0?u.height/e.offsetHeight:1,f=(l.getBoundingClientRect().top-u.top)/(d||1);e.scrollTop+=f-e.clientTop,l.hasAttribute(`tabindex`)||(l.setAttribute(`tabindex`,`-1`),r.add(l)),l.focus({preventScroll:!0})};return t.addEventListener(`click`,i),()=>{t.removeEventListener(`click`,i);for(let e of r)e.getAttribute(`tabindex`)===`-1`&&e.removeAttribute(`tabindex`)}}function _(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}function ne(e){E=e}function v(e){let t=[];return n=>{let r=Math.max(0,Math.min(3,n-1)),i=t[r];return i||(i=e(r),t[r]=i),i}}function y(e,t=``){let n=typeof e==`string`?e:e.source,r={replace:(e,t)=>{let i=typeof t==`string`?t:t.source;return i=i.replace(O.caret,`$1`),n=n.replace(e,i),r},getRegex:()=>new RegExp(n,t)};return r}function b(e,t){if(t){if(O.escapeTest.test(e))return e.replace(O.escapeReplace,xt)}else if(O.escapeTestNoEncode.test(e))return e.replace(O.escapeReplaceNoEncode,xt);return e}function re(e){return O.numericCharacterReference.test(e)?e.replace(O.numericCharacterReferenceOrAmpersand,(e,t,n)=>{if(t===void 0&&n===void 0)return`&`;let r=t===void 0?Number.parseInt(n,16):Number.parseInt(t,10);return r===0||r>1114111||r>=55296&&r<=57343?`�`:r===38?`&`:String.fromCodePoint(r)}):e}function ie(e){try{e=encodeURI(e).replace(O.percentDecode,`%`)}catch{return null}return e}function ae(e,t){let n=e.replace(O.findPipe,(e,t,n)=>{let r=!1,i=t;for(;--i>=0&&n[i]===`\\`;)r=!r;return r?`|`:` |`}).split(O.splitPipe),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),t){if(n.length>t)n.splice(t);else for(;n.length<t;)n.push(``)}for(;r<n.length;r++)n[r]=n[r].trim().replace(O.slashPipe,`|`);return n}function x(e,t,n){let r=e.length;if(r===0)return``;let i=0;for(;i<r;){let a=e.charAt(r-i-1);if(a===t&&!n)i++;else if(a!==t&&n)i++;else break}return e.slice(0,r-i)}function oe(e){let t=e.split(`
|
|
2
2
|
`),n=t.length-1;for(;n>=0&&O.blankLine.test(t[n]);)n--;return t.length-n<=2?e:t.slice(0,n+1).join(`
|
|
3
3
|
`)}function S(e){return e.trim().replace(O.multipleSpaceGlobal,` `).toLowerCase().toUpperCase().toLowerCase()}function se(e,t){if(e.indexOf(t[0])===-1&&e.indexOf(t[1])===-1)return-1;let n=0;for(let r=0;r<e.length;r++)if(e[r]===`\\`)r++;else if(e[r]===t[0])n++;else if(e[r]===t[1]&&(n--,n<0))return r;return n>0?-2:-1}function ce(e){let t={"*":-1,_:-1},n=-1,r=e.length;for(let i=0;i<r;i++){let a=e[i];if(a!==`*`&&a!==`_`&&a!==`~`)continue;let o=i===0?`
|
|
4
4
|
`:e[i-1],s=i+1;for(;s<r&&e[s]===a;)s++;o!==` `&&o!==` `&&o!==`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-Bruge11p.js";import{i as t,t as n}from"./optionalCapabilities-CNoFW0wA.js";import{i as r,r as i}from"./FileViewerPreviewPanel-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-Bruge11p.js";import{i as t,t as n}from"./optionalCapabilities-CNoFW0wA.js";import{i as r,r as i}from"./FileViewerPreviewPanel-BMZ7FdKV.js";import{createFileViewerZoomChangeEmitter as a,decodeFileViewerTextBuffer as o,registerFileViewerZoomProvider as s,unregisterFileViewerZoomProvider as c}from"@file-viewer/core";async function l(e,t,i=`patch`,l){let u=t.ownerDocument||document,h=o(e,l?.options?.text?.encoding,l?.options?.text?.fallbackEncoding).text,g=1,_=a(),v=d(u,`div`,`patch-viewer`);v.dataset.viewerZoomProvider=`patch`;let y=d(u,`div`,`patch-toolbar`);y.append(d(u,`span`,void 0,i.toUpperCase()),d(u,`strong`,void 0,`${m(h)} files · side-by-side`));let b=d(u,`div`,`patch-body`);try{let e=n();if(!e)throw Error("Patch side-by-side rendering is opt-in. Run `npx file-viewer-cli add text-tools --write`, then `npx file-viewer-cli install --yes`.");let t=e(h,{drawFileList:!0,matching:`lines`,outputFormat:`side-by-side`,renderNothingWhenEmpty:!1});b.replaceChildren(r(u,t,{allowSvg:!0}))}catch{let e=d(u,`pre`,`patch-fallback`);e.textContent=h,b.replaceChildren(e)}v.append(y,b),v.style.setProperty(`--patch-font-size`,`${13*g}px`),t.replaceChildren(f(u),v);let x=()=>({scale:g,label:`${Math.round(g*100)}%`,canZoomIn:g<2.4,canZoomOut:g>.6,canReset:g!==1,minScale:.6,maxScale:2.4}),S=e=>(g=p(e),v.style.setProperty(`--patch-font-size`,`${13*g}px`),_.emit(),x());return s(v,{zoomIn:()=>S(g+.1),zoomOut:()=>S(g-.1),resetZoom:()=>S(1),setZoom:S,getState:x,subscribe:_.subscribe}),{$el:v,unmount(){c(v),t.replaceChildren()}}}var u,d,f,p,m;function h(){return(h=e((()=>{t(),i(),u=`
|
|
2
2
|
.patch-viewer{min-height:100%;--patch-bg:#f6f8fa;--patch-surface:#fff;--patch-border:rgba(31,35,40,.12);--patch-text:#24292f;--patch-muted:#57606a;--patch-add:#dafbe1;--patch-del:#ffebe9;--patch-info:#ddf4ff;--patch-font-size:13px;background:var(--patch-bg);color:var(--patch-text);box-sizing:border-box}
|
|
3
3
|
.patch-toolbar{position:sticky;top:0;z-index:2;display:flex;height:46px;align-items:center;justify-content:space-between;gap:12px;padding:0 16px;border-bottom:1px solid var(--patch-border);background:rgba(255,255,255,.92);backdrop-filter:blur(12px);box-sizing:border-box}
|
|
4
4
|
.patch-toolbar span,.patch-toolbar strong{color:var(--patch-muted);font-size:12px;font-weight:800;letter-spacing:0}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-Bruge11p.js";import{a as t,i as n,n as r,r as i}from"./browser-BKLM0ThC-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-Bruge11p.js";import{a as t,i as n,n as r,r as i}from"./browser-BKLM0ThC-Cp7Gi4-F.js";import{B as a,N as o,O as s,_ as c,a as l}from"./PDFPreviewPanel-CMmnWBKW.js";function u(e,t){let{logger:i,encoderPoolSize:a,fontFallback:o}=t instanceof Object&&`debug`in t?{logger:t}:t||{},s=new Worker(URL.createObjectURL(new Blob([`var Rotation = /* @__PURE__ */ ((Rotation2) => {
|
|
2
2
|
Rotation2[Rotation2["Degree0"] = 0] = "Degree0";
|
|
3
3
|
Rotation2[Rotation2["Degree90"] = 1] = "Degree90";
|
|
4
4
|
Rotation2[Rotation2["Degree180"] = 2] = "Degree180";
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e,r as t}from"./chunks/updates-BzsxLSMm.js";import{n,r,t as i}from"./src-
|
|
1
|
+
import{i as e,r as t}from"./chunks/updates-BzsxLSMm.js";import{n,r,t as i}from"./src-D6UlLiVN.js";r();export{i as ArcBaseAdmin,n as BasicTable,t as markSafeUpdateFormSaved,e as useSafeUpdateGuard};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import{n as e}from"./chunks/rolldown-runtime-Bruge11p.js";import{n as t}from"./chunks/updates-BzsxLSMm.js";import{n,t as r}from"./chunks/preload-helper-mKj9XlrD.js";import{Component as i,Suspense as a,createContext as o,lazy as s,useContext as c}from"react";import{reportAdminError as l}from"@fudanda/admin-antd/core/admin/runtime";import{Fragment as u,jsx as d,jsxs as f}from"react/jsx-runtime";import{readCachedPreferences as p}from"@fudanda/admin-antd/core/lib/preference-cache";import{defaultPreferences as m,isLoadingStyle as h,useOptionalPreferences as g}from"@fudanda/admin-antd/core/hooks/usePreferences";import{BasicTable as _}from"@fudanda/admin-antd/table";function v(){return(v=e((()=>{})))()}function y(){return c(b)}var b;function x(){return(x=e((()=>{b=o(void 0)})))()}function S({value:e,children:t}){return/* @__PURE__ */ d(b.Provider,{value:e,children:t})}function C(){return(C=e((()=>{x()})))()}function w(){return p().loadingStyle}function T({variant:e}){return/* @__PURE__ */ f(`span`,{className:`page-loading-indicator page-loading-indicator--${e}`,"data-loading-style":e,"aria-hidden":`true`,children:[e===`dots`&&/* @__PURE__ */ f(u,{children:[/* @__PURE__ */ d(`span`,{className:`page-loading__dot`}),/* @__PURE__ */ d(`span`,{className:`page-loading__dot`}),/* @__PURE__ */ d(`span`,{className:`page-loading__dot`})]}),e===`ring`&&/* @__PURE__ */ d(`span`,{className:`page-loading__ring`}),e===`flip`&&/* @__PURE__ */ d(`span`,{className:`page-loading__flip`}),e===`bars`&&/* @__PURE__ */ f(u,{children:[/* @__PURE__ */ d(`span`,{className:`page-loading__bar`}),/* @__PURE__ */ d(`span`,{className:`page-loading__bar`}),/* @__PURE__ */ d(`span`,{className:`page-loading__bar`}),/* @__PURE__ */ d(`span`,{className:`page-loading__bar`})]}),e===`spinner`&&/* @__PURE__ */ d(`span`,{className:`page-loading__spinner`,children:Array.from({length:8},(e,t)=>/* @__PURE__ */ d(`i`,{},t))}),e===`bounce`&&/* @__PURE__ */ f(u,{children:[/* @__PURE__ */ d(`span`,{className:`page-loading__bounce-dot`}),/* @__PURE__ */ d(`span`,{className:`page-loading__bounce-dot`})]}),e===`ripple`&&/* @__PURE__ */ f(`span`,{className:`page-loading__ripple`,children:[/* @__PURE__ */ d(`i`,{}),/* @__PURE__ */ d(`i`,{})]}),e===`progress`&&/* @__PURE__ */ d(`span`,{className:`page-loading__track`,children:/* @__PURE__ */ d(`i`,{className:`page-loading__thumb`})}),e===`orbit`&&/* @__PURE__ */ f(`span`,{className:`page-loading__orbit`,children:[/* @__PURE__ */ d(`i`,{}),/* @__PURE__ */ d(`i`,{})]}),e===`grid`&&/* @__PURE__ */ d(`span`,{className:`page-loading__grid`,children:Array.from({length:9},(e,t)=>/* @__PURE__ */ d(`i`,{},t))}),e===`travel`&&/* @__PURE__ */ d(`span`,{className:`page-loading__travel`}),e===`ellipsis`&&/* @__PURE__ */ f(u,{children:[/* @__PURE__ */ d(`span`,{className:`page-loading__ellipsis-dot`}),/* @__PURE__ */ d(`span`,{className:`page-loading__ellipsis-dot`}),/* @__PURE__ */ d(`span`,{className:`page-loading__ellipsis-dot`})]}),e===`carousel`&&/* @__PURE__ */ f(`span`,{className:`page-loading__carousel`,children:[/* @__PURE__ */ d(`i`,{className:`page-loading__carousel-slot`}),/* @__PURE__ */ d(`i`,{className:`page-loading__carousel-slot`}),/* @__PURE__ */ d(`i`,{className:`page-loading__carousel-slot`}),/* @__PURE__ */ d(`i`,{className:`page-loading__carousel-bead`})]}),e===`landing`&&/* @__PURE__ */ f(`span`,{className:`page-loading__landing`,children:[/* @__PURE__ */ d(`i`,{className:`page-loading__landing-ball`}),/* @__PURE__ */ d(`i`,{className:`page-loading__landing-shadow`})]}),e===`pendulum`&&/* @__PURE__ */ f(`span`,{className:`page-loading__pendulum`,children:[/* @__PURE__ */ d(`i`,{className:`page-loading__pendulum-pivot`}),/* @__PURE__ */ d(`span`,{className:`page-loading__pendulum-arm`,children:/* @__PURE__ */ d(`i`,{className:`page-loading__pendulum-bob`})})]}),e===`marquee`&&/* @__PURE__ */ d(`span`,{className:`page-loading__marquee`,children:/* @__PURE__ */ d(`i`,{className:`page-loading__marquee-track`})})]})}function E({inline:e=!1,variant:t,label:n=`页面加载中`}){let r=g(),i=t??r?.preferences.loadingStyle??w(),a=h(i)?i:m.loadingStyle;return/* @__PURE__ */ d(`div`,{className:`page-loading${e?` page-loading--inline`:``}`,"data-loading-style":a,role:`status`,"aria-label":n,children:/* @__PURE__ */ d(T,{variant:a})})}function D(){return(D=e((()=>{})))()}function O({preview:e,...t}){return/* @__PURE__ */ d(S,{value:e,children:/* @__PURE__ */ d(A,{fallback:t.errorFallback,telemetry:t.telemetry,children:/* @__PURE__ */ d(a,{fallback:t.loading??/* @__PURE__ */ d(E,{}),children:/* @__PURE__ */ d(k,{...t,assetBasePath:t.assetBasePath??new URL(
|
|
2
2
|
/* @vite-ignore */
|
|
3
|
-
`./public/`,import.meta.url).href})})})})}var k,A;function j(){return(j=e((()=>{C(),t(),D(),n(),k=s(()=>r(()=>import(`./chunks/ArcBaseAdmin-
|
|
4
|
-
//# sourceMappingURL=src-
|
|
3
|
+
`./public/`,import.meta.url).href})})})})}var k,A;function j(){return(j=e((()=>{C(),t(),D(),n(),k=s(()=>r(()=>import(`./chunks/ArcBaseAdmin-CX7fQz4x.js`).then(e=>(e.n(),e.t)).then(e=>({default:e.ArcBaseAdmin})),[],import.meta.url)),A=class extends i{state={error:null};static getDerivedStateFromError(e){return{error:e}}componentDidCatch(e,t){l(this.props.telemetry,e,t)}render(){return this.state.error?this.props.fallback?.(this.state.error)??/* @__PURE__ */ d(`div`,{role:`alert`,children:this.state.error.message}):this.props.children}}})))()}export{E as a,y as c,T as i,v as l,_ as n,D as o,j as r,x as s,O as t};
|
|
4
|
+
//# sourceMappingURL=src-D6UlLiVN.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"src-DAkFn9SG.js","mappings":"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","names":["usePreviewOptions","useContext","PreviewContext","createContext","PreviewProvider","readCachedLoadingStyle","readCachedPreferences","LoadingIndicator","variant","_Fragment","index","PageLoading","preferencesContext","useOptionalPreferences","preferredStyle","resolvedStyle","isLoadingStyle","defaultPreferences","inline","label","ArcBaseAdmin","props","preview","LoadingBoundary","Suspense","Admin","lazy","__vitePreload","n","module","Component","reportAdminError","error","info"],"ignoreList":[],"sources":["../src/preview-context.ts","../src/preview.tsx","../src/components/PageLoading.tsx","../src/index.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\nimport type { ViewerOptions } from '@file-viewer/react';\nimport type { FileRenderHandler, FileViewerRendererPluginInput } from '@file-viewer/core';\n\nexport interface ArcBasePreviewOptions {\n /** Host-installed legacy PPT renderer and its self-hosted engine resources. */\n legacyPpt?: { renderers: FileViewerRendererPluginInput<FileRenderHandler<unknown, HTMLDivElement>>; presentation?: ViewerOptions['presentation'] };\n}\nexport const PreviewContext = createContext<ArcBasePreviewOptions | undefined>(undefined);\nexport function usePreviewOptions() { return useContext(PreviewContext); }\n","import type { ReactNode } from 'react';\nimport { PreviewContext, type ArcBasePreviewOptions } from './preview-context';\nexport type { ArcBasePreviewOptions } from './preview-context';\nexport function PreviewProvider({ value, children }: { value?: ArcBasePreviewOptions; children: ReactNode }) {\n return <PreviewContext.Provider value={value}>{children}</PreviewContext.Provider>;\n}\n","import { readCachedPreferences } from \"@fudanda/react-core/lib/preference-cache\";\nimport { defaultPreferences, isLoadingStyle, useOptionalPreferences } from \"@fudanda/react-core/hooks/usePreferences\";\nimport type { LoadingStyle } from \"@fudanda/react-core/hooks/usePreferences\";\nfunction readCachedLoadingStyle(): LoadingStyle {\n return readCachedPreferences().loadingStyle;\n}\nexport function LoadingIndicator({ variant }: Readonly<{\n variant: LoadingStyle;\n}>) {\n return (<span className={`page-loading-indicator page-loading-indicator--${variant}`} data-loading-style={variant} aria-hidden=\"true\">\n {variant === 'dots' && (<>\n <span className=\"page-loading__dot\"/>\n <span className=\"page-loading__dot\"/>\n <span className=\"page-loading__dot\"/>\n </>)}\n {variant === 'ring' && <span className=\"page-loading__ring\"/>}\n {variant === 'flip' && <span className=\"page-loading__flip\"/>}\n {variant === 'bars' && (<>\n <span className=\"page-loading__bar\"/>\n <span className=\"page-loading__bar\"/>\n <span className=\"page-loading__bar\"/>\n <span className=\"page-loading__bar\"/>\n </>)}\n {variant === 'spinner' && (<span className=\"page-loading__spinner\">\n {Array.from({ length: 8 }, (_, index) => <i key={index}/>)}\n </span>)}\n {variant === 'bounce' && (<>\n <span className=\"page-loading__bounce-dot\"/>\n <span className=\"page-loading__bounce-dot\"/>\n </>)}\n {variant === 'ripple' && (<span className=\"page-loading__ripple\">\n <i />\n <i />\n </span>)}\n {variant === 'progress' && (<span className=\"page-loading__track\">\n <i className=\"page-loading__thumb\"/>\n </span>)}\n {variant === 'orbit' && (\n // 两颗圆点固定在旋转容器的上下极:容器自转即两点绕圈,圆点自身无需再动\n <span className=\"page-loading__orbit\">\n <i />\n <i />\n </span>)}\n {variant === 'grid' && (<span className=\"page-loading__grid\">\n {Array.from({ length: 9 }, (_, index) => <i key={index}/>)}\n </span>)}\n {variant === 'travel' && <span className=\"page-loading__travel\"/>}\n {variant === 'ellipsis' && (<>\n <span className=\"page-loading__ellipsis-dot\"/>\n <span className=\"page-loading__ellipsis-dot\"/>\n <span className=\"page-loading__ellipsis-dot\"/>\n </>)}\n {variant === 'carousel' && (\n // 三个静态槽位 + 一颗游走的光点:单程从左到右,在首尾不可见时重置,故看不到回弹\n <span className=\"page-loading__carousel\">\n <i className=\"page-loading__carousel-slot\"/>\n <i className=\"page-loading__carousel-slot\"/>\n <i className=\"page-loading__carousel-slot\"/>\n <i className=\"page-loading__carousel-bead\"/>\n </span>)}\n {variant === 'landing' && (\n // 地面参照(影子)与球分开:球靠 transform-origin 落在底部做压扁,影子随高度缩放\n <span className=\"page-loading__landing\">\n <i className=\"page-loading__landing-ball\"/>\n <i className=\"page-loading__landing-shadow\"/>\n </span>)}\n {variant === 'pendulum' && (\n // 摆锤是摆杆的子元素:刚性由结构保证。曾把两者做成各自旋转的兄弟以避开透明度继承,\n // 但那样要求两个 transform-origin 换算到同一世界点(锤的轴心在自身负 y 方向),\n // 极易写错且错了看不出来 —— 两元素变换矩阵相同只代表角度相同,不代表轴心相同。\n <span className=\"page-loading__pendulum\">\n <i className=\"page-loading__pendulum-pivot\"/>\n <span className=\"page-loading__pendulum-arm\">\n <i className=\"page-loading__pendulum-bob\"/>\n </span>\n </span>)}\n {variant === 'marquee' && (\n // 轨道比可视区宽一倍,位移恰好等于虚线一个周期的整数倍,循环无缝\n <span className=\"page-loading__marquee\">\n <i className=\"page-loading__marquee-track\"/>\n </span>)}\n </span>);\n}\nexport default function PageLoading({ inline = false, variant, label = '页面加载中', }: Readonly<{\n inline?: boolean;\n variant?: LoadingStyle;\n label?: string;\n}>) {\n const preferencesContext = useOptionalPreferences();\n const preferredStyle = variant\n ?? preferencesContext?.preferences.loadingStyle\n ?? readCachedLoadingStyle();\n const resolvedStyle = isLoadingStyle(preferredStyle)\n ? preferredStyle\n : defaultPreferences.loadingStyle;\n return (<div className={`page-loading${inline ? ' page-loading--inline' : ''}`} data-loading-style={resolvedStyle} role=\"status\" aria-label={label}>\n <LoadingIndicator variant={resolvedStyle}/>\n </div>);\n}\n","import './styles.css';\nimport {Component,lazy,Suspense,type ReactNode} from 'react';\nimport type {ArcBaseAdminProps as CoreAdminProps} from '@fudanda/react-core/admin/types';\nimport {reportAdminError} from '@fudanda/react-core/admin/runtime';\nimport {PreviewProvider, type ArcBasePreviewOptions} from './preview';\nimport type {ArcBaseWebMcpOptions} from './webmcp-types';\nimport type {ArcBaseUpdateOptions} from './updates';\nexport {useSafeUpdateGuard, markSafeUpdateFormSaved} from './updates';\nexport type {ArcBaseUpdateOptions} from './updates';\nexport type {ArcBaseWebMcpOptions} from './webmcp-types';\nexport type {ArcBasePreviewOptions} from './preview';\nexport interface ArcBaseAdminProps extends CoreAdminProps { preview?: ArcBasePreviewOptions; webmcp?: ArcBaseWebMcpOptions; updates?: ArcBaseUpdateOptions | false }\nimport PageLoading from './components/PageLoading';\nconst Admin=lazy(()=>import('./admin/ArcBaseAdmin').then(module=>({default:module.ArcBaseAdmin})));\nclass LoadingBoundary extends Component<{children:ReactNode;fallback:ArcBaseAdminProps['errorFallback'];telemetry:ArcBaseAdminProps['telemetry']},{error:Error|null}> {\n state={error:null as Error|null};\n static getDerivedStateFromError(error:Error){return {error};}\n componentDidCatch(error:Error,info:{componentStack?:string|null}){reportAdminError(this.props.telemetry,error,info);}\n render(){return this.state.error?(this.props.fallback?.(this.state.error)??<div role=\"alert\">{this.state.error.message}</div>):this.props.children;}\n}\n// The build keeps this entry beside the public resources copied after bundling.\nexport function ArcBaseAdmin({preview,...props}:ArcBaseAdminProps){return <PreviewProvider value={preview}><LoadingBoundary fallback={props.errorFallback} telemetry={props.telemetry}><Suspense fallback={props.loading??<PageLoading/>}><Admin {...props} assetBasePath={props.assetBasePath??new URL(/* @vite-ignore */ './public/',import.meta.url).href}/></Suspense></LoadingBoundary></PreviewProvider>;}\nexport type {ArcBaseBrand,ArcBaseLocale,ArcBaseTheme,ArcBaseSessionAdapter,ArcBaseAdminModule,ArcBaseAdminPage,ArcBasePageProps,ArcBaseVersionInfo,ArcBaseFrontendProjectInfo,ArcBaseFrontendDependency} from '@fudanda/react-core/admin/types';\nexport {BasicTable,type BasicTableProps} from '@fudanda/table-antd';\n"]}
|
|
1
|
+
{"version":3,"file":"src-D6UlLiVN.js","mappings":"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","names":["usePreviewOptions","useContext","PreviewContext","createContext","PreviewProvider","readCachedLoadingStyle","readCachedPreferences","LoadingIndicator","variant","_Fragment","index","PageLoading","preferencesContext","useOptionalPreferences","preferredStyle","resolvedStyle","isLoadingStyle","defaultPreferences","inline","label","ArcBaseAdmin","props","preview","LoadingBoundary","Suspense","Admin","lazy","__vitePreload","n","module","Component","reportAdminError","error","info"],"ignoreList":[],"sources":["../src/preview-context.ts","../src/preview.tsx","../src/components/PageLoading.tsx","../src/index.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\nimport type { ViewerOptions } from '@file-viewer/react';\nimport type { FileRenderHandler, FileViewerRendererPluginInput } from '@file-viewer/core';\n\nexport interface ArcBasePreviewOptions {\n /** Host-installed legacy PPT renderer and its self-hosted engine resources. */\n legacyPpt?: { renderers: FileViewerRendererPluginInput<FileRenderHandler<unknown, HTMLDivElement>>; presentation?: ViewerOptions['presentation'] };\n}\nexport const PreviewContext = createContext<ArcBasePreviewOptions | undefined>(undefined);\nexport function usePreviewOptions() { return useContext(PreviewContext); }\n","import type { ReactNode } from 'react';\nimport { PreviewContext, type ArcBasePreviewOptions } from './preview-context';\nexport type { ArcBasePreviewOptions } from './preview-context';\nexport function PreviewProvider({ value, children }: { value?: ArcBasePreviewOptions; children: ReactNode }) {\n return <PreviewContext.Provider value={value}>{children}</PreviewContext.Provider>;\n}\n","import { readCachedPreferences } from \"@fudanda/react-core/lib/preference-cache\";\nimport { defaultPreferences, isLoadingStyle, useOptionalPreferences } from \"@fudanda/react-core/hooks/usePreferences\";\nimport type { LoadingStyle } from \"@fudanda/react-core/hooks/usePreferences\";\nfunction readCachedLoadingStyle(): LoadingStyle {\n return readCachedPreferences().loadingStyle;\n}\nexport function LoadingIndicator({ variant }: Readonly<{\n variant: LoadingStyle;\n}>) {\n return (<span className={`page-loading-indicator page-loading-indicator--${variant}`} data-loading-style={variant} aria-hidden=\"true\">\n {variant === 'dots' && (<>\n <span className=\"page-loading__dot\"/>\n <span className=\"page-loading__dot\"/>\n <span className=\"page-loading__dot\"/>\n </>)}\n {variant === 'ring' && <span className=\"page-loading__ring\"/>}\n {variant === 'flip' && <span className=\"page-loading__flip\"/>}\n {variant === 'bars' && (<>\n <span className=\"page-loading__bar\"/>\n <span className=\"page-loading__bar\"/>\n <span className=\"page-loading__bar\"/>\n <span className=\"page-loading__bar\"/>\n </>)}\n {variant === 'spinner' && (<span className=\"page-loading__spinner\">\n {Array.from({ length: 8 }, (_, index) => <i key={index}/>)}\n </span>)}\n {variant === 'bounce' && (<>\n <span className=\"page-loading__bounce-dot\"/>\n <span className=\"page-loading__bounce-dot\"/>\n </>)}\n {variant === 'ripple' && (<span className=\"page-loading__ripple\">\n <i />\n <i />\n </span>)}\n {variant === 'progress' && (<span className=\"page-loading__track\">\n <i className=\"page-loading__thumb\"/>\n </span>)}\n {variant === 'orbit' && (\n // 两颗圆点固定在旋转容器的上下极:容器自转即两点绕圈,圆点自身无需再动\n <span className=\"page-loading__orbit\">\n <i />\n <i />\n </span>)}\n {variant === 'grid' && (<span className=\"page-loading__grid\">\n {Array.from({ length: 9 }, (_, index) => <i key={index}/>)}\n </span>)}\n {variant === 'travel' && <span className=\"page-loading__travel\"/>}\n {variant === 'ellipsis' && (<>\n <span className=\"page-loading__ellipsis-dot\"/>\n <span className=\"page-loading__ellipsis-dot\"/>\n <span className=\"page-loading__ellipsis-dot\"/>\n </>)}\n {variant === 'carousel' && (\n // 三个静态槽位 + 一颗游走的光点:单程从左到右,在首尾不可见时重置,故看不到回弹\n <span className=\"page-loading__carousel\">\n <i className=\"page-loading__carousel-slot\"/>\n <i className=\"page-loading__carousel-slot\"/>\n <i className=\"page-loading__carousel-slot\"/>\n <i className=\"page-loading__carousel-bead\"/>\n </span>)}\n {variant === 'landing' && (\n // 地面参照(影子)与球分开:球靠 transform-origin 落在底部做压扁,影子随高度缩放\n <span className=\"page-loading__landing\">\n <i className=\"page-loading__landing-ball\"/>\n <i className=\"page-loading__landing-shadow\"/>\n </span>)}\n {variant === 'pendulum' && (\n // 摆锤是摆杆的子元素:刚性由结构保证。曾把两者做成各自旋转的兄弟以避开透明度继承,\n // 但那样要求两个 transform-origin 换算到同一世界点(锤的轴心在自身负 y 方向),\n // 极易写错且错了看不出来 —— 两元素变换矩阵相同只代表角度相同,不代表轴心相同。\n <span className=\"page-loading__pendulum\">\n <i className=\"page-loading__pendulum-pivot\"/>\n <span className=\"page-loading__pendulum-arm\">\n <i className=\"page-loading__pendulum-bob\"/>\n </span>\n </span>)}\n {variant === 'marquee' && (\n // 轨道比可视区宽一倍,位移恰好等于虚线一个周期的整数倍,循环无缝\n <span className=\"page-loading__marquee\">\n <i className=\"page-loading__marquee-track\"/>\n </span>)}\n </span>);\n}\nexport default function PageLoading({ inline = false, variant, label = '页面加载中', }: Readonly<{\n inline?: boolean;\n variant?: LoadingStyle;\n label?: string;\n}>) {\n const preferencesContext = useOptionalPreferences();\n const preferredStyle = variant\n ?? preferencesContext?.preferences.loadingStyle\n ?? readCachedLoadingStyle();\n const resolvedStyle = isLoadingStyle(preferredStyle)\n ? preferredStyle\n : defaultPreferences.loadingStyle;\n return (<div className={`page-loading${inline ? ' page-loading--inline' : ''}`} data-loading-style={resolvedStyle} role=\"status\" aria-label={label}>\n <LoadingIndicator variant={resolvedStyle}/>\n </div>);\n}\n","import './styles.css';\nimport {Component,lazy,Suspense,type ReactNode} from 'react';\nimport type {ArcBaseAdminProps as CoreAdminProps} from '@fudanda/react-core/admin/types';\nimport {reportAdminError} from '@fudanda/react-core/admin/runtime';\nimport {PreviewProvider, type ArcBasePreviewOptions} from './preview';\nimport type {ArcBaseWebMcpOptions} from './webmcp-types';\nimport type {ArcBaseUpdateOptions} from './updates';\nexport {useSafeUpdateGuard, markSafeUpdateFormSaved} from './updates';\nexport type {ArcBaseUpdateOptions} from './updates';\nexport type {ArcBaseWebMcpOptions} from './webmcp-types';\nexport type {ArcBasePreviewOptions} from './preview';\nexport interface ArcBaseAdminProps extends CoreAdminProps { preview?: ArcBasePreviewOptions; webmcp?: ArcBaseWebMcpOptions; updates?: ArcBaseUpdateOptions | false }\nimport PageLoading from './components/PageLoading';\nconst Admin=lazy(()=>import('./admin/ArcBaseAdmin').then(module=>({default:module.ArcBaseAdmin})));\nclass LoadingBoundary extends Component<{children:ReactNode;fallback:ArcBaseAdminProps['errorFallback'];telemetry:ArcBaseAdminProps['telemetry']},{error:Error|null}> {\n state={error:null as Error|null};\n static getDerivedStateFromError(error:Error){return {error};}\n componentDidCatch(error:Error,info:{componentStack?:string|null}){reportAdminError(this.props.telemetry,error,info);}\n render(){return this.state.error?(this.props.fallback?.(this.state.error)??<div role=\"alert\">{this.state.error.message}</div>):this.props.children;}\n}\n// The build keeps this entry beside the public resources copied after bundling.\nexport function ArcBaseAdmin({preview,...props}:ArcBaseAdminProps){return <PreviewProvider value={preview}><LoadingBoundary fallback={props.errorFallback} telemetry={props.telemetry}><Suspense fallback={props.loading??<PageLoading/>}><Admin {...props} assetBasePath={props.assetBasePath??new URL(/* @vite-ignore */ './public/',import.meta.url).href}/></Suspense></LoadingBoundary></PreviewProvider>;}\nexport type {ArcBaseBrand,ArcBaseLocale,ArcBaseTheme,ArcBaseSessionAdapter,ArcBaseAdminModule,ArcBaseAdminPage,ArcBasePageProps,ArcBaseVersionInfo,ArcBaseFrontendProjectInfo,ArcBaseFrontendDependency} from '@fudanda/react-core/admin/types';\nexport {BasicTable,type BasicTableProps} from '@fudanda/table-antd';\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fudanda/admin-antd",
|
|
3
|
-
"version": "2.20261109.1-beta.
|
|
3
|
+
"version": "2.20261109.1-beta.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "ArcBase admin-antd SDK.",
|
|
6
6
|
"sideEffects": [
|
|
@@ -564,13 +564,13 @@
|
|
|
564
564
|
"lint": "eslint src --max-warnings 0 && stylelint \"src/**/*.css\""
|
|
565
565
|
},
|
|
566
566
|
"peerDependencies": {
|
|
567
|
-
"@fudanda/client": "2.20261109.1-beta.
|
|
567
|
+
"@fudanda/client": "2.20261109.1-beta.2",
|
|
568
568
|
"react": "^19.0.0",
|
|
569
569
|
"react-dom": "^19.0.0",
|
|
570
570
|
"antd": "6.6.8",
|
|
571
571
|
"@tanstack/react-query": "^5.0.0",
|
|
572
572
|
"react-router-dom": "^7.18.4",
|
|
573
|
-
"@fudanda/workflow": "2.20261109.1-beta.
|
|
573
|
+
"@fudanda/workflow": "2.20261109.1-beta.2"
|
|
574
574
|
},
|
|
575
575
|
"dependencies": {
|
|
576
576
|
"dayjs": "^1.11.23",
|
|
@@ -585,7 +585,7 @@
|
|
|
585
585
|
"overlayscrollbars": "2.17.0",
|
|
586
586
|
"@json-render/core": "0.21.4",
|
|
587
587
|
"@json-render/react": "0.21.4",
|
|
588
|
-
"@fudanda/client": "2.20261109.1-beta.
|
|
588
|
+
"@fudanda/client": "2.20261109.1-beta.2",
|
|
589
589
|
"@file-viewer/core": "3.3.3",
|
|
590
590
|
"@file-viewer/react": "3.3.3",
|
|
591
591
|
"@openobserve/browser-rum": "0.4.3",
|
|
@@ -626,11 +626,11 @@
|
|
|
626
626
|
"@embedpdf/plugin-pan": "2.15.1",
|
|
627
627
|
"@embedpdf/plugin-thumbnail": "2.15.1",
|
|
628
628
|
"@embedpdf/plugin-print": "2.15.1",
|
|
629
|
-
"@fudanda/shared": "2.20261109.1-beta.
|
|
630
|
-
"@fudanda/react-core": "2.20261109.1-beta.
|
|
631
|
-
"@fudanda/elements-antd": "2.20261109.1-beta.
|
|
632
|
-
"@fudanda/table-antd": "2.20261109.1-beta.
|
|
633
|
-
"@fudanda/json-render-antd": "2.20261109.1-beta.
|
|
629
|
+
"@fudanda/shared": "2.20261109.1-beta.2",
|
|
630
|
+
"@fudanda/react-core": "2.20261109.1-beta.2",
|
|
631
|
+
"@fudanda/elements-antd": "2.20261109.1-beta.2",
|
|
632
|
+
"@fudanda/table-antd": "2.20261109.1-beta.2",
|
|
633
|
+
"@fudanda/json-render-antd": "2.20261109.1-beta.2",
|
|
634
634
|
"@file-viewer/renderer-pptx": "3.3.3",
|
|
635
635
|
"@mcp-b/webmcp-local-relay": "6.0.3",
|
|
636
636
|
"webmcp-types": "0.1.10",
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-Bruge11p.js";import{E as t,It as n,M as r,O as i,R as a,Rt as o,T as s,U as c,f as l,m as u,r as d,t as f,vt as p,yt as m,zt as h}from"./clipboard-dpqHdCyy.js";import{i as g,n as _}from"./feedback-B1UL2ETz.js";import{n as v,t as ee}from"./circle-check-big-BacE3WpZ.js";import{n as y,t as b}from"./plus-C_Qg8uc3.js";import{n as te,t as x}from"./useCrudOperationColumn-CPAzNGXp.js";import{n as ne}from"./listTableProps-BAghXGb4.js";import{i as S,n as C,r as w}from"./table-columns-CvT6OHd2.js";import{a as T,o as re,r as E,t as D}from"./EditFormModal-DVQksS9R.js";import{n as O,t as k}from"./ConfigurableTable-8sYmeul2.js";import{useEffect as A,useState as j}from"react";import{Fragment as M,jsx as N,jsxs as P}from"react/jsx-runtime";import{abortSubmit as F}from"@fudanda/admin-antd/core/lib/abort-submit";import{useLocation as I}from"react-router-dom";import{usePagination as L}from"@fudanda/admin-antd/core/hooks/usePagination";import{useAuth as R}from"@fudanda/admin-antd/core/hooks/useAuth";import{TOKEN_PERMISSION_KIND_LABELS as z,tokenPermissionGroups as B,tokenPermissionPreset as V,tokenPermissionPreview as H,useApiKeyPermissions as U,useApiTokenDetail as W,useApiTokenSecret as G,useDeleteApiToken as K,useProfileApiTokens as q,useSaveApiToken as J}from"@fudanda/admin-antd/core/hooks/queries/profile";function Y({permissions:e}){let t=H(e);return/* @__PURE__ */ P(`div`,{className:`token-permission-preview`,children:[/* @__PURE__ */ P(`p`,{role:`status`,children:[`已选 `,new Set(e).size,` 项权限 · 内置 MCP 工具 `,t.tools.length,` 项 · 已知 API 接口 `,t.operations.length,` 项`]}),/* @__PURE__ */ N(`p`,{children:`实际访问仍受账号当前权限、数据范围和宿主已开放接口限制。这些权限也可用于普通 API,MCP 查询预设不限制 Token 的接入方式。`}),t.tools.length>0&&/* @__PURE__ */ N(`div`,{className:`token-permission-tools`,children:t.tools.map(e=>/* @__PURE__ */ P(i,{children:[e.label,` `,/* @__PURE__ */ N(`code`,{children:e.name})]},e.name))}),t.operations.length>0&&/* @__PURE__ */ P(`details`,{children:[/* @__PURE__ */ N(`summary`,{children:`查看已知 API 接口`}),/* @__PURE__ */ N(`ul`,{children:t.operations.map(e=>/* @__PURE__ */ N(`li`,{children:/* @__PURE__ */ P(`code`,{children:[e.method,` `,e.path]})},e.id))})]}),t.extensions.length>0&&/* @__PURE__ */ P(`p`,{children:[`扩展权限的具体能力请核对宿主说明:`,t.extensions.join(`、`),`。`]})]})}function ie({permissions:e}){return/* @__PURE__ */ P(M,{children:[B(e).map(e=>/* @__PURE__ */ P(`section`,{className:`token-permission-group`,children:[/* @__PURE__ */ N(`h4`,{children:e.label}),e.items.map(e=>/* @__PURE__ */ P(`div`,{className:`token-permission-row`,children:[/* @__PURE__ */ P(`span`,{className:`token-permission-label`,children:[e.label,/* @__PURE__ */ N(`code`,{children:e.code})]}),/* @__PURE__ */ N(i,{className:`token-permission-kind`,children:z[e.kind]})]},e.code))]},e.label)),/* @__PURE__ */ N(Y,{permissions:e})]})}function ae({permissions:e,onDetails:t}){let n=B(e);return/* @__PURE__ */ P(`div`,{className:`token-permission-summary`,children:[/* @__PURE__ */ N(`span`,{children:e.length?`${new Set(e).size} 项 · ${n.slice(0,3).map(e=>e.label).join(`、`)}${n.length>3?`等`:``}`:`未授予权限`}),/* @__PURE__ */ N(u,{theme:`borderless`,size:`small`,onClick:t,children:`查看范围`})]})}function oe({value:e=[],onChange:t,permissions:n,disabled:r}){let[a,c]=j(``),d=B(n,a),f=new Set(e),p=e=>t?.(V(n,e)),m=(n,r)=>t?.(r?[.../* @__PURE__ */ new Set([...e,n])]:e.filter(e=>e!==n));return/* @__PURE__ */ P(`div`,{className:`token-permission-picker`,children:[/* @__PURE__ */ P(s,{wrap:!0,children:[/* @__PURE__ */ N(u,{size:`small`,disabled:r||!V(n,`mcp`).length,onClick:()=>p(`mcp`),children:`MCP 查询`}),/* @__PURE__ */ N(u,{size:`small`,disabled:r||!V(n,`read`).length,onClick:()=>p(`read`),children:`API 只读`}),/* @__PURE__ */ N(u,{size:`small`,disabled:r||!e.length,onClick:()=>t?.([]),children:`清空选择`})]}),/* @__PURE__ */ N(`p`,{className:`token-permission-hint`,children:`快捷选择会替换当前勾选;也可逐项自定义。只读按已知接口判断,未知扩展权限需手动选择。`}),/* @__PURE__ */ N(h,{"aria-label":`搜索权限`,placeholder:`搜索模块、中文名称或权限代码`,value:a,onChange:c,showClear:!0,disabled:r}),/* @__PURE__ */ P(`div`,{className:`token-permission-options`,"aria-label":`可授予权限`,children:[d.map(e=>/* @__PURE__ */ P(`fieldset`,{className:`token-permission-group`,children:[/* @__PURE__ */ N(`legend`,{children:e.label}),e.items.map(e=>/* @__PURE__ */ P(`div`,{className:`token-permission-row`,children:[/* @__PURE__ */ N(o,{disabled:r,checked:f.has(e.code),onChange:t=>m(e.code,!!t.target.checked),children:/* @__PURE__ */ P(`span`,{className:`token-permission-label`,children:[e.label,/* @__PURE__ */ N(`code`,{children:e.code})]})}),/* @__PURE__ */ N(i,{className:`token-permission-kind`,children:z[e.kind]})]},e.code))]},e.label)),!d.length&&/* @__PURE__ */ N(`p`,{children:n.length?`没有匹配的权限,已选项仍然保留。`:`当前没有可授予的权限。`})]}),e.some(e=>!n.includes(e))&&/* @__PURE__ */ N(l,{type:`warning`,description:`部分已选权限当前不可授予,请清空并重新选择。`}),/* @__PURE__ */ N(Y,{permissions:e})]})}var X;function Z(){return(Z=e((()=>{r(),X=c(oe)})))()}function se(){let{user:e}=R(),n=e.id,r=I().pathname===`/system/api-tokens`,[i,o]=j(null),s=G(n,r),c=s.value,[d,m]=j(!1),h=q(r),v=L({resetKey:n}),y=U(r),x=J(n,r),S=K(),T=re({save:{mutateAsync:({id:e,values:t})=>x.mutateAsync({id:e,values:t}),isPending:x.isPending},useDetail:W,toValues:e=>({name:e.name,expiresAt:`expiresAt`in e?e.expiresAt:void 0,permissions:`permissions`in e?e.permissions:[]}),beforeSave:e=>{let t=e.name.trim();return t||(g.error(`请填写 Token 名称`),F(`validation`)),e.permissions?.length||(g.error(`请选择 API Key 权限`),F(`validation`)),{name:t,...e.expiresAt?{expiresAt:new Date(e.expiresAt).toISOString()}:{},permissions:e.permissions}},defaults:{name:``,permissions:[]},successMessage:({isEdit:e})=>e?`Token 已更新`:null,onSaved:e=>{e&&`token`in e&&(m(!1),s.showCreated(e))}}),E=T.close;A(()=>{E(),o(null),m(!1)},[r,n,E]);async function O(e){await S.mutateAsync({params:{id:e}}),g.success(`Token 已撤销`)}function M(e){f(e).then(e=>{e?(m(!0),setTimeout(()=>m(!1),2e3)):g.error(`复制失败,请手动复制`)})}let z=te({edit:e=>T.openEdit(e),remove:e=>O(e.id),title:`确定要撤销该 Token 吗?`,content:`撤销后将无法恢复,使用该 Token 的调用将立即失效。`,successMessage:null,removeLabel:`撤销`,width:200,extra:e=>[{key:`view`,label:`查看 Key`,disabled:!e.canReveal,onClick:()=>{m(!1),s.reveal(e.id)}}]});return/* @__PURE__ */ P(`div`,{className:`page-container page-container--stretch`,children:[/* @__PURE__ */ P(Q,{type:`tertiary`,size:`small`,style:{display:`block`},children:[`Token 可通过 `,/* @__PURE__ */ N(`code`,{children:`Authorization: Bearer YOUR_TOKEN`}),` 头访问 API,每人最多 20 个。`]}),/* @__PURE__ */ N(k,{...ne(h,{pagination:v.buildPagination}),headerTitle:`API Token`,toolBarRender:()=>[/* @__PURE__ */ N(u,{type:`primary`,icon:/* @__PURE__ */ N(b,{size:14}),onClick:T.openCreate,children:`新建 Token`},`create`)],columns:[{title:`名称`,dataIndex:`name`,minWidth:150,render:e=>/* @__PURE__ */ N(Q,{strong:!0,children:e})},{title:`权限范围`,dataIndex:`permissions`,width:260,render:(e,t)=>/* @__PURE__ */ N(ae,{permissions:e,onDetails:()=>o(t)})},{title:`Token 前缀`,dataIndex:`tokenPrefix`,width:180,render:(e,t)=>/* @__PURE__ */ P(`div`,{children:[/* @__PURE__ */ N(`code`,{style:{fontSize:12},children:e}),!t.canReveal&&/* @__PURE__ */ N(`div`,{children:/* @__PURE__ */ N(Q,{type:`tertiary`,size:`small`,children:`仅存摘要,无法查看原文`})})]})},w(`最后使用`,`lastUsedAt`,{empty:`未使用`}),w(`过期时间`,`expiresAt`,{empty:`永久有效`}),C,z]}),r&&/* @__PURE__ */ P(D,{modal:T,title:T.isEdit?`编辑 API Token`:`新建 API Token`,okText:T.isEdit?`保存`:`创建`,cancelText:`取消`,width:740,centered:!0,formProps:{labelPosition:`top`},okButtonProps:{...T.modalProps.okButtonProps,disabled:T.detailLoading||y.isPending||!!y.error},children:[/* @__PURE__ */ N(a.Input,{field:`name`,maxLength:64,label:`名称`,placeholder:`如:本地开发、CI/CD 环境`,rules:[{required:!0,message:`请填写 Token 名称`}],style:{width:`100%`}}),y.error&&/* @__PURE__ */ N(l,{type:`danger`,description:/* @__PURE__ */ P(`span`,{children:[`权限范围加载失败。`,/* @__PURE__ */ N(u,{theme:`borderless`,onClick:()=>void y.refetch(),children:`重试`})]})}),/* @__PURE__ */ N(X,{field:`permissions`,label:`权限范围`,permissions:y.data??[],disabled:y.isPending||!!y.error,rules:[{validator:(e,t)=>Array.isArray(t)&&t.length>0,message:`请选择至少一项权限`}],extraText:`Token 权限不会超过账号当前权限;权限撤销、停用和改密后立即失效。`}),/* @__PURE__ */ N(a.DatePicker,{field:`expiresAt`,label:`过期时间`,type:`dateTime`,placeholder:`不填则永久有效`,style:{width:`100%`},disabledDate:e=>!!e&&e<new Date((/* @__PURE__ */ new Date()).setHours(0,0,0,0))})]}),/* @__PURE__ */ N(_,{title:i?`Token 权限范围 · ${i.name}`:`Token 权限范围`,visible:r&&!!i,onCancel:()=>o(null),footer:/* @__PURE__ */ N(u,{onClick:()=>o(null),children:`关闭`}),width:740,centered:!0,children:i&&/* @__PURE__ */ N(ie,{permissions:i.permissions})}),/* @__PURE__ */ P(_,{title:s.created?`Token 创建成功`:`查看 API Token`,visible:r&&(!!c||s.pending),closeOnEsc:!0,onCancel:s.close,footer:/* @__PURE__ */ N(u,{type:`primary`,onClick:s.close,children:`关闭`}),width:520,centered:!0,children:[/* @__PURE__ */ N(Q,{type:`warning`,style:{display:`block`,marginBottom:12,padding:`8px 12px`,background:`var(--arc-antd-color-warning-light-default)`,borderRadius:`var(--arc-antd-border-radius-medium)`},children:c?.canReveal?`请妥善保管此 Token,可在列表中再次查看或复制。`:`请立即复制并安全保存此 Token,关闭后将无法再次查看完整内容。`}),s.pending&&/* @__PURE__ */ N(t,{}),c&&/* @__PURE__ */ P(`div`,{className:`token-display`,children:[/* @__PURE__ */ N(`code`,{style:{flex:1,wordBreak:`break-all`,fontSize:12,lineHeight:1.6},children:c.token}),/* @__PURE__ */ N(u,{icon:N(d?ee:p,{size:14}),type:d?`tertiary`:`primary`,onClick:()=>M(c.token),style:{flexShrink:0},children:d?`已复制`:`复制`})]})]})]})}var Q;function $(){return($=e((()=>{y(),m(),v(),r(),O(),E(),x(),T(),d(),S(),Z(),{Text:Q}=n})))()}$();export{se as default};
|
|
2
|
-
//# sourceMappingURL=ApiTokensPage-DiRMgViD.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ApiTokensPage-DiRMgViD.js","mappings":"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","names":["TokenPermissionPreview","preview","tokenPermissionPreview","permissions","Tag","tool","operation","TokenPermissionDetails","_Fragment","tokenPermissionGroups","group","item","TOKEN_PERMISSION_KIND_LABELS","TokenPermissionSummary","groups","Button","onDetails","TokenPermissionPicker","keyword","setKeyword","useState","selected","value","selectPreset","onChange","tokenPermissionPreset","preset","toggle","checked","code","Space","disabled","Input","Checkbox","event","Banner","withField","ApiTokensPage","useAuth","ownerId","user","active","useLocation","scopeToken","setScopeToken","tokenSecret","useApiTokenSecret","createdToken","tokenCopied","setTokenCopied","apiTokensQuery","useProfileApiTokens","tokenPagination","usePagination","keyPermissionsQuery","useApiKeyPermissions","saveTokenMutation","useSaveApiToken","deleteTokenMutation","useDeleteApiToken","tokenModal","useEditModal","useApiTokenDetail","record","name","values","Toast","abortSubmit","isEdit","saved","closeEditor","useEffect","handleDeleteToken","copyToken","copyText","token","ok","tokenOperationColumn","useCrudOperationColumn","Text","ConfigurableTable","listTableProps","Plus","v","dateTimeColumn","createdAtColumn","EditFormModal","Form","FormTokenPermissionPicker","date","Modal","Spin","jsx","CheckCircle","Copy","Typography"],"ignoreList":[],"sources":["../../src/pages/system/api-tokens/TokenPermissionPicker.tsx","../../src/pages/system/api-tokens/ApiTokensPage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { Banner, Button, Checkbox, Input, Space, Tag, withField } from '@/ui';\nimport {\n tokenPermissionGroups, tokenPermissionPreset,\n tokenPermissionPreview, TOKEN_PERMISSION_KIND_LABELS,\n} from '@fudanda/react-core/hooks/queries/profile';\n\ninterface PickerProps {\n value?: string[];\n onChange?: (value: string[]) => void;\n permissions: readonly string[];\n disabled?: boolean;\n}\n\nexport function TokenPermissionPreview({ permissions }: { readonly permissions: readonly string[] }) {\n const preview = tokenPermissionPreview(permissions);\n return <div className=\"token-permission-preview\">\n <p role=\"status\">已选 {new Set(permissions).size} 项权限 · 内置 MCP 工具 {preview.tools.length} 项 · 已知 API 接口 {preview.operations.length} 项</p>\n <p>实际访问仍受账号当前权限、数据范围和宿主已开放接口限制。这些权限也可用于普通 API,MCP 查询预设不限制 Token 的接入方式。</p>\n {preview.tools.length > 0 && <div className=\"token-permission-tools\">{preview.tools.map(tool => <Tag key={tool.name}>{tool.label} <code>{tool.name}</code></Tag>)}</div>}\n {preview.operations.length > 0 && <details><summary>查看已知 API 接口</summary><ul>{preview.operations.map(operation => <li key={operation.id}><code>{operation.method} {operation.path}</code></li>)}</ul></details>}\n {preview.extensions.length > 0 && <p>扩展权限的具体能力请核对宿主说明:{preview.extensions.join('、')}。</p>}\n </div>;\n}\n\nexport function TokenPermissionDetails({ permissions }: { readonly permissions: readonly string[] }) {\n return <>\n {tokenPermissionGroups(permissions).map(group => <section className=\"token-permission-group\" key={group.label}>\n <h4>{group.label}</h4>\n {group.items.map(item => <div className=\"token-permission-row\" key={item.code}>\n <span className=\"token-permission-label\">{item.label}<code>{item.code}</code></span>\n <Tag className=\"token-permission-kind\">{TOKEN_PERMISSION_KIND_LABELS[item.kind]}</Tag>\n </div>)}\n </section>)}\n <TokenPermissionPreview permissions={permissions}/>\n </>;\n}\n\nexport function TokenPermissionSummary({ permissions, onDetails }: {\n readonly permissions: readonly string[];\n readonly onDetails: () => void;\n}) {\n const groups = tokenPermissionGroups(permissions);\n return <div className=\"token-permission-summary\">\n <span>{permissions.length ? `${new Set(permissions).size} 项 · ${groups.slice(0, 3).map(group => group.label).join('、')}${groups.length > 3 ? '等' : ''}` : '未授予权限'}</span>\n <Button theme=\"borderless\" size=\"small\" onClick={onDetails}>查看范围</Button>\n </div>;\n}\n\nexport function TokenPermissionPicker({ value = [], onChange, permissions, disabled }: Readonly<PickerProps>) {\n const [keyword, setKeyword] = useState('');\n const groups = tokenPermissionGroups(permissions, keyword);\n const selected = new Set(value);\n const selectPreset = (preset: 'mcp' | 'read') => onChange?.(tokenPermissionPreset(permissions, preset));\n const toggle = (code: string, checked: boolean) => onChange?.(checked ? [...new Set([...value, code])] : value.filter(item => item !== code));\n return <div className=\"token-permission-picker\">\n <Space wrap>\n <Button size=\"small\" disabled={disabled || !tokenPermissionPreset(permissions, 'mcp').length} onClick={() => selectPreset('mcp')}>MCP 查询</Button>\n <Button size=\"small\" disabled={disabled || !tokenPermissionPreset(permissions, 'read').length} onClick={() => selectPreset('read')}>API 只读</Button>\n <Button size=\"small\" disabled={disabled || !value.length} onClick={() => onChange?.([])}>清空选择</Button>\n </Space>\n <p className=\"token-permission-hint\">快捷选择会替换当前勾选;也可逐项自定义。只读按已知接口判断,未知扩展权限需手动选择。</p>\n <Input aria-label=\"搜索权限\" placeholder=\"搜索模块、中文名称或权限代码\" value={keyword} onChange={setKeyword} showClear disabled={disabled}/>\n <div className=\"token-permission-options\" aria-label=\"可授予权限\">\n {groups.map(group => <fieldset className=\"token-permission-group\" key={group.label}>\n <legend>{group.label}</legend>\n {group.items.map(item => <div className=\"token-permission-row\" key={item.code}>\n <Checkbox disabled={disabled} checked={selected.has(item.code)} onChange={event => toggle(item.code, Boolean(event.target.checked))}>\n <span className=\"token-permission-label\">{item.label}<code>{item.code}</code></span>\n </Checkbox>\n <Tag className=\"token-permission-kind\">{TOKEN_PERMISSION_KIND_LABELS[item.kind]}</Tag>\n </div>)}\n </fieldset>)}\n {!groups.length && <p>{permissions.length ? '没有匹配的权限,已选项仍然保留。' : '当前没有可授予的权限。'}</p>}\n </div>\n {value.some(code => !permissions.includes(code)) && <Banner type=\"warning\" description=\"部分已选权限当前不可授予,请清空并重新选择。\"/>}\n <TokenPermissionPreview permissions={value}/>\n </div>;\n}\n\nexport const FormTokenPermissionPicker = withField(TokenPermissionPicker);\n","import { useEffect, useState } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport { Plus, Copy, CheckCircle } from 'lucide-react';\nimport type { UserApiToken, UserApiTokenCreated } from '@fudanda/shared/identity';\nimport { useAuth } from '@fudanda/react-core/hooks/useAuth';\nimport { usePagination } from '@fudanda/react-core/hooks/usePagination';\nimport { abortSubmit } from '@fudanda/react-core/lib/abort-submit';\nimport { useSaveApiToken, useApiTokenDetail, useApiTokenSecret, useDeleteApiToken, useProfileApiTokens, useApiKeyPermissions } from '@fudanda/react-core/hooks/queries/profile';\nimport { Form, Button, Typography, Toast, Spin, Modal, Banner } from '@/ui';\nimport ConfigurableTable from '@/components/ConfigurableTable';\nimport { EditFormModal } from '@/components/EditFormModal';\nimport { listTableProps, useCrudOperationColumn } from '@/components/list-page';\nimport { useEditModal } from '@/hooks/useEditModal';\nimport { copyText } from '@/utils/clipboard';\nimport { createdAtColumn, dateTimeColumn } from '@/utils/table-columns';\nimport { FormTokenPermissionPicker, TokenPermissionDetails, TokenPermissionSummary } from './TokenPermissionPicker';\nimport './ApiTokensPage.css';\n\nconst { Text } = Typography;\n\nexport default function ApiTokensPage() {\n const { user } = useAuth();\n const ownerId = user!.id;\n const active = useLocation().pathname === '/system/api-tokens';\n const [scopeToken, setScopeToken] = useState<UserApiToken | null>(null);\n const tokenSecret = useApiTokenSecret(ownerId, active);\n const createdToken = tokenSecret.value;\n const [tokenCopied, setTokenCopied] = useState(false);\n const apiTokensQuery = useProfileApiTokens(active);\n const tokenPagination = usePagination({ resetKey: ownerId });\n const keyPermissionsQuery = useApiKeyPermissions(active);\n const saveTokenMutation = useSaveApiToken(ownerId, active);\n const deleteTokenMutation = useDeleteApiToken();\n // Secret responses stay in the open dialog, outside shared query caches.\n const tokenModal = useEditModal<UserApiToken | UserApiTokenCreated, {\n name: string;\n expiresAt?: Date | string | null;\n permissions?: string[];\n }, {\n name: string;\n expiresAt?: string;\n permissions: string[];\n }>({\n save: {\n mutateAsync: ({ id, values }) => saveTokenMutation.mutateAsync({ id, values }),\n isPending: saveTokenMutation.isPending,\n },\n useDetail: useApiTokenDetail,\n toValues: (record) => ({ name: record.name, expiresAt: 'expiresAt' in record ? record.expiresAt : undefined, permissions: 'permissions' in record ? record.permissions : [] }),\n beforeSave: (values) => {\n const name = values.name.trim();\n if (!name) {\n Toast.error('请填写 Token 名称');\n abortSubmit('validation');\n }\n if (!values.permissions?.length) {\n Toast.error('请选择 API Key 权限');\n abortSubmit('validation');\n }\n return { name, ...(values.expiresAt ? { expiresAt: new Date(values.expiresAt).toISOString() } : {}), ...({ permissions: values.permissions }) };\n },\n defaults: { name: '', permissions: [] },\n successMessage: ({ isEdit }) => isEdit ? 'Token 已更新' : null,\n onSaved: (saved) => { if (saved && 'token' in saved) { setTokenCopied(false); tokenSecret.showCreated(saved); } },\n });\n const closeEditor = tokenModal.close;\n useEffect(() => {\n closeEditor();\n setScopeToken(null);\n setTokenCopied(false);\n }, [active, ownerId, closeEditor]);\n async function handleDeleteToken(id: number) {\n await deleteTokenMutation.mutateAsync({ params: { id } });\n Toast.success('Token 已撤销');\n }\n function copyToken(token: string) {\n void copyText(token).then((ok) => {\n if (!ok) {\n Toast.error('复制失败,请手动复制');\n return;\n }\n setTokenCopied(true);\n setTimeout(() => setTokenCopied(false), 2000);\n });\n }\n const tokenOperationColumn = useCrudOperationColumn<UserApiToken>({\n edit: (record) => tokenModal.openEdit(record),\n remove: (record) => handleDeleteToken(record.id),\n title: '确定要撤销该 Token 吗?',\n content: '撤销后将无法恢复,使用该 Token 的调用将立即失效。',\n successMessage: null,\n removeLabel: '撤销',\n width: 200,\n extra: (record) => [{ key: 'view', label: '查看 Key', disabled: !record.canReveal,\n onClick: () => { setTokenCopied(false); void tokenSecret.reveal(record.id); } }],\n });\n return <div className=\"page-container page-container--stretch\">\n <Text type=\"tertiary\" size=\"small\" style={{ display: 'block' }}>\n Token 可通过 <code>Authorization: Bearer YOUR_TOKEN</code> 头访问 API,每人最多 20 个。\n </Text>\n <ConfigurableTable<UserApiToken> {...listTableProps(apiTokensQuery, { pagination: tokenPagination.buildPagination })}\n headerTitle=\"API Token\"\n toolBarRender={() => [<Button key=\"create\" type=\"primary\" icon={<Plus size={14}/>} onClick={tokenModal.openCreate}>新建 Token</Button>]}\n columns={[\n { title: '名称', dataIndex: 'name', minWidth: 150, render: (v: string) => <Text strong>{v}</Text> },\n { title: '权限范围', dataIndex: 'permissions', width: 260, render: (permissions: string[], token: UserApiToken) => <TokenPermissionSummary permissions={permissions} onDetails={() => setScopeToken(token)}/> },\n { title: 'Token 前缀', dataIndex: 'tokenPrefix', width: 180, render: (v: string, record: UserApiToken) => <div><code style={{ fontSize: 12 }}>{v}</code>{!record.canReveal && <div><Text type=\"tertiary\" size=\"small\">仅存摘要,无法查看原文</Text></div>}</div> },\n dateTimeColumn<NonNullable<typeof apiTokensQuery.data>[number]>('最后使用', 'lastUsedAt', { empty: '未使用' }),\n dateTimeColumn<NonNullable<typeof apiTokensQuery.data>[number]>('过期时间', 'expiresAt', { empty: '永久有效' }),\n createdAtColumn,\n tokenOperationColumn,\n ]}/>\n {/* ── 新建 Token Modal ──────────────────────────────────────────────────────────────── */}\n {active && <EditFormModal modal={tokenModal} title={tokenModal.isEdit ? '编辑 API Token' : '新建 API Token'} okText={tokenModal.isEdit ? '保存' : '创建'} cancelText=\"取消\" width={740} centered formProps={{ labelPosition: 'top' }} okButtonProps={{ ...tokenModal.modalProps.okButtonProps, disabled: tokenModal.detailLoading || keyPermissionsQuery.isPending || Boolean(keyPermissionsQuery.error) }}>\n <Form.Input field=\"name\" maxLength={64} label=\"名称\" placeholder=\"如:本地开发、CI/CD 环境\" rules={[{ required: true, message: '请填写 Token 名称' }]} style={{ width: '100%' }}/>\n {keyPermissionsQuery.error && <Banner type=\"danger\" description={<span>权限范围加载失败。<Button theme=\"borderless\" onClick={() => void keyPermissionsQuery.refetch()}>重试</Button></span>}/>}\n <FormTokenPermissionPicker field=\"permissions\" label=\"权限范围\" permissions={keyPermissionsQuery.data ?? []} disabled={keyPermissionsQuery.isPending || Boolean(keyPermissionsQuery.error)} rules={[{ validator: (_rule, value) => Array.isArray(value) && value.length > 0, message: '请选择至少一项权限' }]} extraText=\"Token 权限不会超过账号当前权限;权限撤销、停用和改密后立即失效。\"/>\n <Form.DatePicker field=\"expiresAt\" label=\"过期时间\" type=\"dateTime\" placeholder=\"不填则永久有效\" style={{ width: '100%' }} disabledDate={(date) => !!date && date < new Date(new Date().setHours(0, 0, 0, 0))}/>\n </EditFormModal>}\n\n <Modal title={scopeToken ? `Token 权限范围 · ${scopeToken.name}` : 'Token 权限范围'} visible={active && !!scopeToken} onCancel={() => setScopeToken(null)} footer={<Button onClick={() => setScopeToken(null)}>关闭</Button>} width={740} centered>\n {scopeToken && <TokenPermissionDetails permissions={scopeToken.permissions}/>}\n </Modal>\n\n {/* ── 创建成功展示完整 Token ──────────────────────────────────────────── */}\n <Modal title={tokenSecret.created ? 'Token 创建成功' : '查看 API Token'} visible={active && (!!createdToken || tokenSecret.pending)} closeOnEsc onCancel={tokenSecret.close} footer={<Button type=\"primary\" onClick={tokenSecret.close}>关闭</Button>} width={520} centered>\n <Text type=\"warning\" style={{ display: 'block', marginBottom: 12, padding: '8px 12px', background: 'var(--arc-antd-color-warning-light-default)', borderRadius: 'var(--arc-antd-border-radius-medium)' }}>\n {createdToken?.canReveal ? '请妥善保管此 Token,可在列表中再次查看或复制。' : '请立即复制并安全保存此 Token,关闭后将无法再次查看完整内容。'}\n </Text>\n {tokenSecret.pending && <Spin />}\n {createdToken && (<div className=\"token-display\">\n <code style={{ flex: 1, wordBreak: 'break-all', fontSize: 12, lineHeight: 1.6 }}>{createdToken.token}</code>\n <Button icon={tokenCopied ? <CheckCircle size={14}/> : <Copy size={14}/>} type={tokenCopied ? 'tertiary' : 'primary'} onClick={() => copyToken(createdToken.token)} style={{ flexShrink: 0 }}>\n {tokenCopied ? '已复制' : '复制'}\n </Button>\n </div>)}\n </Modal>\n </div>;\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e,r as t,t as n}from"./EntityContextRuntime-CbzeMNXR.js";t();export{n as EntityContextSheet,e as default};
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-Bruge11p.js";import{A as t,Bt as n,E as r,It as i,M as a,N as o,O as s,Rt as c,T as l,Ut as u,Wt as d,b as f,bt as p,dt as m,f as h,g,it as _,j as v,m as y,n as b,r as x,rt as ee,st as te,ut as ne,xt as S,zt as C}from"./clipboard-dpqHdCyy.js";import{i as w}from"./feedback-B1UL2ETz.js";import{n as T,t as re}from"./MasterDetailLayout-B5uqvh98.js";import{a as ie,i as ae,s as E}from"./toolbar-controls-CrM8hKZg.js";import{n as oe,t as se}from"./save-CSrPWJxC.js";import{a as ce,i as le,n as ue,o as de,r as fe,s as pe,t as me}from"./schemas-CVYuqWs9.js";import{n as he,t as ge}from"./rendered-slot-G6nvF0nR.js";import{n as _e,t as ve}from"./SearchToolbar-KtXD_Wgr.js";import{n as ye,t as be}from"./webmcp-control-BR0YABIY.js";import{a as xe,o as Se}from"./App-CfQx7jWq.js";import{i as Ce,r as we}from"./ArcBaseAdmin-DQyddbFC.js";import{a as D,i as O,o as k,r as A}from"./SettingRow-Bh2bBjdL.js";import{Fragment as Te,useEffect as Ee,useMemo as j,useRef as De,useState as Oe}from"react";import{Fragment as M,jsx as N,jsxs as P}from"react/jsx-runtime";import{Alert as ke,Button as Ae,Space as je,Switch as Me,Typography as F}from"antd";import{GoaError as Ne}from"@fudanda/client";import{goTransport as I}from"@fudanda/admin-antd/core/lib/go-transport";import{Link as Pe}from"react-router-dom";import{settingsContract as Fe,settingsWriteOperations as Ie}from"@fudanda/admin-antd/core/lib/native-operations";import{usePermission as Le}from"@fudanda/admin-antd/core/hooks/usePermission";import{useRenderedSlot as Re}from"@fudanda/admin-antd/core/hooks/useRenderedSlot";import{useListSearch as ze}from"@fudanda/admin-antd/core/hooks/useListSearch";import{useCurrentUserMenuTree as Be,useMenuTree as Ve}from"@fudanda/admin-antd/core/hooks/queries/menus";import{settingsKeys as He,useSaveSettings as Ue,useSettings as We}from"@fudanda/admin-antd/core/hooks/queries/settings";import{THEME_COLOR_PRESETS as Ge}from"@fudanda/admin-antd/core/lib/theme-color";import{textMatches as Ke}from"@fudanda/admin-antd/core/utils/pinyin";import{usePinyinReady as qe}from"@fudanda/admin-antd/core/hooks/usePinyinReady";import{canOverridePreference as L,defaultPreferences as Je,describePreferenceCondition as R,getPreferenceValue as z,isPreferenceApplicable as Ye,preferenceDefinitions as B,preferenceGroups as V,resolvePreferences as Xe,setPreferenceValue as H}from"@fudanda/client/preferences";import{CAPTCHA_COMPLEXITY_LABELS as Ze,SETTINGS_MODULES as Qe}from"@fudanda/client/settings";import{foundationSettingSchemas as $e}from"@fudanda/client/settings/foundation";import{mcpTools as et}from"@fudanda/client/api/mcp-tools";var U,W;function G(){return(G=e((()=>{
|
|
2
|
-
/**
|
|
3
|
-
* @license lucide-react v1.67.0 - ISC
|
|
4
|
-
*
|
|
5
|
-
* This source code is licensed under the ISC license.
|
|
6
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
7
|
-
*/
|
|
8
|
-
S(),U={name:`external-link`,size:24,node:[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`M10 14 21 3`,key:`gplh6r`}],[`path`,{d:`M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6`,key:`a6xqqp`}]]},U.node,W=p(U)})))()}var K,tt;function nt(){return(nt=e((()=>{
|
|
9
|
-
/**
|
|
10
|
-
* @license lucide-react v1.67.0 - ISC
|
|
11
|
-
*
|
|
12
|
-
* This source code is licensed under the ISC license.
|
|
13
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
14
|
-
*/
|
|
15
|
-
S(),K={name:`image-plus`,size:24,node:[[`path`,{d:`M16 5h6`,key:`1vod17`}],[`path`,{d:`M19 2v6`,key:`4bpg5p`}],[`path`,{d:`M21 11.5V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h7.5`,key:`1ue2ih`}],[`path`,{d:`m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21`,key:`1xmnt7`}],[`circle`,{cx:`9`,cy:`9`,r:`2`,key:`af1f0g`}]]},K.node,tt=p(K)})))()}function rt({primary:e,filters:t,onRefresh:n,refreshing:r,onReset:i,actions:a,mobileActions:o,extra:s,filterTitle:c,actionTitle:l,className:u}){let d=n?/* @__PURE__ */ N(ae,{onClick:n,loading:r}):null,f=Re(),p=q(a)||q(s)?/* @__PURE__ */ P(M,{children:[/* @__PURE__ */ N(ge,{ref:f.probeRef,children:a}),s]}):void 0;return/* @__PURE__ */ N(ve,{className:u,primary:/* @__PURE__ */ P(M,{children:[e,t,d,i?/* @__PURE__ */ N(ie,{onClick:i}):null]}),actions:p,mobilePrimary:/* @__PURE__ */ P(M,{children:[e,d]}),mobileFilters:q(t)?t:void 0,mobileActions:o??(f.rendered?a:!1),filterTitle:c,actionTitle:l,onFilterReset:i})}var q;function it(){return(it=e((()=>{_e(),E(),he(),q=e=>!!e})))()}var at;function ot(){return(ot=e((()=>{at={captchaEnabled:{title:`登录验证码`,description:`开启后登录必须输入图形验证码`},captchaComplexity:{title:`验证码复杂度`,description:`仅在开启登录验证码后生效`},uploadValidateType:{title:`校验真实文件类型`,description:`基于 magic bytes 识别,防止伪造 MIME type 绕过校验`},uploadAllowedTypes:{title:`允许的 MIME 类型`,description:`支持通配符(如 image/*);填 * 或 */* 放行全部类型`},uploadMaxSizeMb:{title:`单文件大小上限(MB)`,description:`0 表示不限制;超过的上传(含分片)将被拒绝`},chunkThresholdMb:{title:`分片上传阈值(MB)`,description:`超过该大小的文件走分片上传 + 断点续传,不超过则单请求上传;受反向代理请求体上限约束`},chunkSizeMb:{title:`分片大小(MB)`,description:`服务端裁定的分片基线,不低于对象存储要求的最小分片;文件过大时自动上调以不超过片数上限`},watermark:{title:`水印`},"watermark.enabled":{title:`页面水印`,description:`开启后全站叠加水印(防截图泄漏)`},"watermark.content":{title:`水印文本`,description:`留空则显示当前用户名`},"watermark.fontSize":{title:`字体大小(px)`},"watermark.opacity":{title:`透明度(1-100)`},preferencesEntryEnabled:{title:`偏好设置入口`,description:`显示在用户头像下拉菜单,关闭后隐藏“偏好设置”(含锁屏密码设置)`}}})))()}function J(e){return(e.def.checks??[]).map(e=>e._zod.def)}function Y(e){if(e instanceof fe)return Y(e.unwrap());if(e instanceof me)return Object.values(e.enum).filter(e=>typeof e==`string`);if(e instanceof le){let t=[...e.values];return t.every(e=>typeof e==`string`)?t:void 0}if(e instanceof de){let t=e.options.map(e=>Y(e));return t.every(e=>e!==void 0)?t.flat():void 0}if(e instanceof ue){let t=Y(e.def.left),n=Y(e.def.right);return t&&n?t.filter(e=>n.includes(e)):t??n}}function X(e){let t=e,n={},r=!1;for(;;){let e=t.meta();if(e&&(e.title||e.description)&&!n.title&&(n={title:e.title,description:e.description}),t instanceof fe){let e=t.unwrap();if(!(e instanceof ce))return{meta:n,leaf:{kind:`unknown`}};t=e;continue}let i=t.def;if(i.type===`nullable`&&(r=!0),(i.type==="default"||i.type===`prefault`||i.type===`optional`||i.type===`nullable`)&&i.innerType)t=i.innerType;else break}let i=t.def,a=Y(t);if(a?.length)return{meta:n,leaf:{kind:`enum`,options:a}};switch(i.type){case`boolean`:return{meta:n,leaf:{kind:`boolean`}};case`number`:{let e=J(t),i=e.find(e=>e.check===`greater_than`),a=e.find(e=>e.check===`less_than`),o=e.some(e=>e.check===`number_format`)||t.def.format===`safeint`,s=(e,t)=>e?.value===void 0?void 0:e.inclusive===!1&&o?e.value+t:e.value;return{meta:n,leaf:{kind:`number`,int:o,min:s(i,1),max:s(a,-1),nullable:r}}}case`enum`:return{meta:n,leaf:{kind:`enum`,options:Object.values(i.entries??{})}};case`string`:return{meta:n,leaf:{kind:`string`,maxLength:J(t).find(e=>e.check===`max_length`)?.maximum}};case`array`:{let e=i.element?X(i.element):null;return e?.leaf.kind===`string`||e?.leaf.kind===`enum`?{meta:n,leaf:{kind:`string-array`,maxItems:J(t).find(e=>e.check===`max_length`)?.maximum}}:{meta:n,leaf:{kind:`unknown`}}}case`object`:return{meta:n,leaf:{kind:`object`,shape:t.shape}};default:return{meta:n,leaf:{kind:`unknown`}}}}function st(e,t){return JSON.stringify(e)===JSON.stringify(t)}function ct(e,t,n){if(t.length===1)return{...e,[t[0]]:n};let[r,...i]=t,a=e[r]??{};return{...e,[r]:ct(a,i,n)}}function lt(e,t){return t.reduce((e,t)=>e&&typeof e==`object`?e[t]:void 0,e)}function ut({schema:e,value:r,inheritedValue:i,onChange:a,disabled:o,allowRevert:s=!0,enumLabels:c,excludeFields:l,fieldLabels:f}){let p=(e,t)=>a(ct(r,e,t)),m=(e,a)=>{let l=e.join(`.`),m=lt(r,e),h=i?lt(i,e):void 0,g=i!==void 0&&!st(m,h),_=s&&g&&!o?/* @__PURE__ */ N(y,{size:`small`,theme:`borderless`,onClick:()=>p(e,h),children:`恢复继承`}):null,v=a.meta.title??f?.[l]?.title??e[e.length-1],b;switch(a.leaf.kind){case`boolean`:b=/* @__PURE__ */ N(d,{checked:!!m,disabled:o,onChange:t=>p(e,t)});break;case`number`:{let{min:t,max:r,int:i,nullable:s}=a.leaf;b=/* @__PURE__ */ N(n,{style:{width:160},min:t,max:r,precision:i?0:void 0,disabled:o,value:typeof m==`number`?m:void 0,placeholder:s?`留空 = 未设置`:void 0,onChange:t=>{typeof t==`number`&&Number.isFinite(t)?p(e,i?Math.trunc(t):t):s&&p(e,null)}});break}case`enum`:b=/* @__PURE__ */ N(u,{style:{width:200},disabled:o,value:typeof m==`string`?m:void 0,optionList:a.leaf.options.map(e=>({value:e,label:c?.[l]?.[e]??e})),onChange:t=>p(e,t)});break;case`string`:b=/* @__PURE__ */ N(C,{style:{width:280},disabled:o,maxLength:a.leaf.maxLength,value:typeof m==`string`?m:``,onChange:t=>p(e,t)});break;case`string-array`:b=/* @__PURE__ */ N(t,{style:{width:360,maxWidth:`100%`},disabled:o,max:a.leaf.maxItems,value:Array.isArray(m)?m:[],allowDuplicates:!1,separator:[`,`,` `,`
|
|
16
|
-
`],addOnBlur:!0,placeholder:`输入后按回车添加`,onChange:t=>p(e,t)});break;default:b=/* @__PURE__ */ N(`span`,{style:{color:`var(--arc-antd-color-text-2)`},children:`该字段类型暂不支持在通用设置页编辑`})}return/* @__PURE__ */ N(O,{title:v,description:a.meta.description??f?.[l]?.description,control:b,overridden:g,extra:_},l)},h=(e,t)=>{let n=Object.entries(e).filter(([e])=>!l?.includes([...t,e].join(`.`))),r=n.filter(([,e])=>X(e).leaf.kind!==`object`),i=n.filter(([,e])=>X(e).leaf.kind===`object`);return/* @__PURE__ */ P(M,{children:[r.map(([e,n],r)=>/* @__PURE__ */ P(Te,{children:[r>0?/* @__PURE__ */ N(A,{}):null,m([...t,e],X(n))]},e)),i.map(([e,n])=>{let r=X(n);return r.leaf.kind===`object`?/* @__PURE__ */ N(D,{title:r.meta.title??f?.[[...t,e].join(`.`)]?.title??e,description:r.meta.description??f?.[[...t,e].join(`.`)]?.description,children:h(r.leaf.shape,[...t,e])},e):null})]})},g=X(e);return/* @__PURE__ */ N(`div`,{children:g.leaf.kind===`object`?h(g.leaf.shape,[]):null})}function dt(){return(dt=e((()=>{a(),pe(),k()})))()}function ft(e){return j(()=>{let t=[],n=(e,r)=>{for(let i of e){if(i.type===`menu`&&i.path&&i.status===`enabled`&&i.visible){let e=i.isExternal&&i.embed?`/embed/${i.id}`:i.path;t.push({id:i.id,title:i.title,path:e,icon:i.icon,breadcrumb:r})}i.children?.length&&n(i.children,i.type===`directory`?[...r,i.title]:r)}};return n(e,[]),t},[e])}function pt(){return(pt=e((()=>{})))()}function Z(e,t){return!L(t,e)||z(e.defaults,t)!==z(Je,t)}function mt({value:e,disabled:t,onChange:n,label:r}){let i=Ge.find(t=>t.key===e),a=i?.light.primary??e,o=Ge.map(e=>({value:e.key,label:e.name}));return i||o.push({value:e,label:e}),/* @__PURE__ */ P(`div`,{className:`preference-policy-editor__color`,children:[/* @__PURE__ */ N(u,{"aria-label":r,value:e,optionList:o,disabled:t,onChange:e=>{typeof e==`string`&&n(e)}}),/* @__PURE__ */ N(g,{alpha:!1,usePopover:!0,value:g.colorStringToValue(a),onChange:e=>{t||n(e.hex)},children:/* @__PURE__ */ N(`button`,{type:`button`,className:`preference-policy-editor__swatch`,disabled:t,"aria-label":`自定义主题色`,title:`自定义主题色`,style:{backgroundColor:a}})})]})}function ht({value:e,onChange:t,disabled:r}){let{hasPermission:a}=Le(),o=a(`system:menu:list`),s=Ve({enabled:o}),p=Be(),m=ft(s.data??p.data??[]),{draftParams:g,bind:b,setField:x,handleReset:te}=ze({defaults:gt,listKey:He.module(`ui`),refetchOnSearch:!1}),S=j(()=>{let t=[{value:`/`,label:`首页(默认)`}],n=/* @__PURE__ */ new Set([`/`]);for(let e of m)!e.path.startsWith(`/`)||e.path.startsWith(`//`)||n.has(e.path)||(n.add(e.path),t.push({value:e.path,label:[...e.breadcrumb,e.title].join(` / `)}));let r=e.defaults.homePath;return n.has(r)||t.push({value:r,label:`${r}(当前已配置)`}),t},[m,e.defaults.homePath]),w=qe(),T=j(()=>{let t=g.keyword.trim();return B.filter(n=>g.group&&n.group!==g.group||g.changedOnly&&!Z(e,n.path)||g.lockedOnly&&L(n.path,e)?!1:!t||[n.label,n.path,n.description,V.find(e=>e.id===n.group)?.label,n.applicableWhen&&R(n.applicableWhen)].filter(Boolean).some(e=>Ke(String(e),t)))},[g,e,w]),re=B.filter(t=>Z(e,t.path)).length,ie=B.filter(t=>!L(t.path,e)).length,ae=Xe(e,{});function E(n,r){t({...e,defaults:H(e.defaults,n,r)})}function oe(n){t({defaults:H(e.defaults,n,z(Je,n)),allowUserOverride:H(e.allowUserOverride,n,!0)})}function se(t){let{path:i,kind:a}=t,c=z(e.defaults,i),l=`${t.label}默认值`;return a===`boolean`?/* @__PURE__ */ N(u,{"aria-label":l,value:String(c),optionList:vt,disabled:r,onChange:e=>E(i,e===`true`)}):a===`number`?/* @__PURE__ */ N(n,{"aria-label":l,value:typeof c==`number`?c:void 0,min:t.min,max:t.max,step:t.step??1,precision:t.step&&t.step<1?void 0:0,suffix:t.unit,disabled:r,onChange:e=>{typeof e==`number`&&Number.isFinite(e)&&E(i,e)}}):a===`color`?/* @__PURE__ */ N(mt,{value:String(c),disabled:r,label:l,onChange:e=>E(i,e)}):a===`home-path`?/* @__PURE__ */ N(u,{"aria-label":l,value:String(c),optionList:S,filter:!0,disabled:r,loading:o?s.isFetching:p.isFetching,onChange:e=>{typeof e==`string`&&E(i,e)}}):a===`select`?/* @__PURE__ */ N(u,{"aria-label":l,value:typeof c==`number`?c:String(c),optionList:[...t.options??[]],disabled:r,onChange:e=>{(typeof e==`string`||typeof e==`number`)&&E(i,e)}}):/* @__PURE__ */ N(C,{"aria-label":l,value:String(c),disabled:r,onChange:e=>E(i,e)})}function ce(e){let t=Ye(e.path,ae);return/* @__PURE__ */ P(`span`,{className:`preference-policy-editor__description`,children:[e.description?/* @__PURE__ */ N(`span`,{children:e.description}):null,e.applicableWhen?/* @__PURE__ */ P(`span`,{children:[`适用条件:`,R(e.applicableWhen)]}):null,t?null:/* @__PURE__ */ N(`span`,{className:`preference-policy-editor__hint`,children:`当前系统默认组合不满足条件,满足条件后生效。`}),e.path===`homePath`?/* @__PURE__ */ P(`span`,{children:[`用户无权访问指定页面时回到可访问的首页。`,o?``:`当前仅列出你可访问的页面。`]}):null]})}return/* @__PURE__ */ N(`div`,{className:`preference-policy-editor`,children:/* @__PURE__ */ P(D,{title:`偏好策略`,description:`设置每项偏好的系统默认值,并决定用户是否可以修改。`,children:[/* @__PURE__ */ N(h,{type:`info`,closeIcon:null,className:`preference-policy-editor__intro`,description:`禁止用户修改的项目会在个人偏好中隐藏并使用系统值;子项是否显示取决于父项的生效值。更改将在保存后统一生效。`}),/* @__PURE__ */ N(rt,{primary:/* @__PURE__ */ N(_,{placeholder:`搜索偏好名称 / 说明`,...b(`keyword`)}),filters:/* @__PURE__ */ P(M,{children:[/* @__PURE__ */ N(ee,{placeholder:`全部分组`,items:_t,...b(`group`)}),/* @__PURE__ */ N(c,{checked:g.changedOnly,onChange:e=>x(`changedOnly`)(!!e.target.checked),children:`仅看已调整`}),/* @__PURE__ */ N(c,{checked:g.lockedOnly,onChange:e=>x(`lockedOnly`)(!!e.target.checked),children:`仅看禁止修改`})]}),onReset:te}),/* @__PURE__ */ P(i.Text,{type:`tertiary`,size:`small`,children:[`共 `,B.length,` 项 · 已调整 `,re,` 项 · 禁止修改 `,ie,` 项 · 当前显示 `,T.length,` 项`]}),T.length===0?/* @__PURE__ */ N(f,{description:`没有符合筛选条件的偏好`}):null,V.map(n=>{let i=T.filter(e=>e.group===n.id);return i.length===0?null:/* @__PURE__ */ P(D,{title:n.label,children:[/* @__PURE__ */ P(`div`,{className:`preference-policy-editor__head`,"aria-hidden":`true`,children:[/* @__PURE__ */ N(`span`,{children:`偏好设置`}),/* @__PURE__ */ P(`div`,{className:`preference-policy-editor__controls`,children:[/* @__PURE__ */ N(`span`,{children:`系统默认值`}),/* @__PURE__ */ N(`span`,{children:`用户可修改`}),/* @__PURE__ */ N(`span`,{})]})]}),i.map((n,i)=>/* @__PURE__ */ P(Te,{children:[i>0?/* @__PURE__ */ N(A,{}):null,/* @__PURE__ */ N(`div`,{className:`preference-policy-editor__row`,"data-preference-path":n.path,children:/* @__PURE__ */ N(O,{title:n.label,description:ce(n),style:{flexWrap:`wrap`},control:/* @__PURE__ */ P(`div`,{className:`preference-policy-editor__controls`,children:[/* @__PURE__ */ P(`div`,{className:`preference-policy-editor__value`,children:[/* @__PURE__ */ N(`span`,{className:`preference-policy-editor__mobile-label`,children:`系统默认值`}),se(n)]}),/* @__PURE__ */ P(`div`,{className:`preference-policy-editor__override`,children:[/* @__PURE__ */ N(`span`,{className:`preference-policy-editor__mobile-label`,children:`用户可修改`}),/* @__PURE__ */ N(d,{"aria-label":`${n.label}用户可修改`,disabled:r,checked:L(n.path,e),onChange:r=>t({...e,allowUserOverride:H(e.allowUserOverride,n.path,r)})})]}),/* @__PURE__ */ N(v,{content:`恢复内置默认值并允许用户修改`,children:/* @__PURE__ */ N(l,{children:/* @__PURE__ */ N(y,{theme:`borderless`,size:`small`,"aria-label":`恢复${n.label}内置策略`,icon:/* @__PURE__ */ N(ne,{size:14}),disabled:r||!Z(e,n.path),onClick:()=>oe(n.path)})})})]})})})]},n.path))]},n.id)})]})})}var gt,_t,vt;function Q(){return(Q=e((()=>{a(),m(),it(),te(),k(),pt(),gt={keyword:``,group:void 0,changedOnly:!1,lockedOnly:!1},_t=V.map(e=>({value:e.id,label:e.label})),vt=[{value:`true`,label:`开启`},{value:`false`,label:`关闭`}]})))()}function yt({value:e,disabled:t,uploading:n,onChange:r,onUploadingChange:i}){let a=Ce(),s=De(null);return Ee(()=>()=>{s.current?.abort()},[]),/* @__PURE__ */ P(M,{children:[/* @__PURE__ */ N(O,{title:/* @__PURE__ */ N(`label`,{htmlFor:`website-name`,children:`网站名称`}),description:`应用于登录页、管理台和浏览器标题。留空时沿用宿主默认名称。`,control:/* @__PURE__ */ N(C,{id:`website-name`,style:{width:280},maxLength:80,showClear:!0,disabled:t,value:e.name,placeholder:a?.name||`沿用宿主默认名称`,onChange:e=>r({name:e})})}),/* @__PURE__ */ N(A,{}),/* @__PURE__ */ N(O,{title:`网站 Logo`,description:`支持 PNG、JPEG,最大 2 MB,尺寸不超过 4096 × 4096。保存后生效。`,control:/* @__PURE__ */ P(`div`,{style:{display:`flex`,flexDirection:`column`,alignItems:`center`,gap:12},children:[/* @__PURE__ */ N(`div`,{style:{width:96,height:96,padding:12,border:`1px solid var(--arc-antd-color-border)`,borderRadius:`var(--semi-border-radius-medium)`,display:`grid`,placeItems:`center`},children:e.logoUrl?/* @__PURE__ */ N(`img`,{src:I.resolveURL(e.logoUrl),alt:`网站 Logo 预览`,style:{width:`100%`,height:`100%`,objectFit:`contain`}}):/* @__PURE__ */ N(xe,{size:64,hostDefault:!0})}),/* @__PURE__ */ N(o,{accept:`image/png,image/jpeg`,showUploadList:!1,disabled:t||n,customRequest:e=>{let t=new AbortController;return s.current?.abort(),s.current=t,i(!0),I.upload(Fe.uploadLogo,{body:{file:e.file}},{signal:t.signal}).then(n=>{t.signal.aborted||(r({logoUrl:n.logoUrl}),e.onSuccess?.(n))}).catch(n=>{if(t.signal.aborted)return;let r=n instanceof Error?n:/* @__PURE__ */ Error(`Logo 上传失败`);w.error(r.message),e.onError?.(r)}).finally(()=>{s.current===t&&!t.signal.aborted&&(s.current=null,i(!1))}),{abort:()=>t.abort()}},beforeUpload:({file:e})=>Number(e.size)>2097152||![`image/png`,`image/jpeg`].includes(e.fileInstance?.type??``)?(w.error(`请选择不超过 2 MB 的 PNG 或 JPEG 图片`),!1):!0,children:/* @__PURE__ */ N(y,{icon:/* @__PURE__ */ N(tt,{size:14}),disabled:t||n,loading:n,children:e.logoUrl?`更换 Logo`:`上传 Logo`})}),e.logoUrl?/* @__PURE__ */ N(y,{size:`small`,theme:`borderless`,disabled:t||n,onClick:()=>r({logoUrl:``}),children:`恢复默认 Logo`}):/* @__PURE__ */ N(`span`,{style:{color:`var(--arc-antd-color-text-2)`,fontSize:12},children:`使用宿主默认 Logo`})]})})]})}function bt(){return(bt=e((()=>{a(),nt(),k(),Se(),we()})))()}function xt({value:e,disabled:t,onChange:n}){let r=ye(),i=new URL(I.resolveURL(`/api/v1/mcp`),window.location.origin).href,a=JSON.stringify({url:i,headers:{Authorization:`Bearer <API_TOKEN>`}},null,2);return/* @__PURE__ */ P(M,{children:[/* @__PURE__ */ N(O,{title:`启用 MCP`,description:`向外部客户端提供只读工具。保存后立即生效,关闭后拒绝新的 MCP 请求。`,control:/* @__PURE__ */ N(Me,{"aria-label":`启用 MCP`,checked:e.enabled,disabled:t,onChange:e=>n({enabled:e})})}),/* @__PURE__ */ N(A,{}),/* @__PURE__ */ N(O,{title:`启用 WebMCP`,description:`已登录且未锁屏的管理台自动加载浏览器工具,沿用当前账号权限,删除操作仍需确认。保存后同步到已打开的页面。`,control:/* @__PURE__ */ N(Me,{"aria-label":`启用 WebMCP`,checked:e.webMcpEnabled,disabled:t,onChange:e=>n({webMcpEnabled:e})})}),e.webMcpEnabled&&r&&!r.configured?/* @__PURE__ */ N(ke,{type:`warning`,title:`当前宿主尚未接入 WebMCP`,description:`请先在宿主装配可选的 WebMCP 入口,接入后跟随此系统开关。`}):null,r?.status===`error`?/* @__PURE__ */ N(ke,{type:`error`,title:`WebMCP 加载失败`,description:`请检查管理台资源并刷新页面重试。`}):null,/* @__PURE__ */ N(F.Title,{level:5,children:`MCP 连接`}),/* @__PURE__ */ P(je,{wrap:!0,style:{marginBottom:12},children:[/* @__PURE__ */ N(F.Text,{code:!0,style:{overflowWrap:`anywhere`},children:i}),/* @__PURE__ */ N(Ae,{onClick:()=>void b(i),children:`复制地址`})]}),/* @__PURE__ */ P(F.Paragraph,{children:[`客户端选择 Streamable HTTP,通过 Authorization 请求头携带 API Token。前往`,/* @__PURE__ */ N(Pe,{to:`/system/api-tokens`,children:`AI 与集成 → API Token`}),`创建和管理凭据;可用工具由账号权限与 Token 范围共同决定。`]}),/* @__PURE__ */ N(`pre`,{style:{padding:16,whiteSpace:`pre-wrap`,overflowWrap:`anywhere`,background:`var(--arc-antd-color-fill-0)`,borderRadius:`var(--semi-border-radius-medium)`},children:a}),/* @__PURE__ */ N(Ae,{onClick:()=>void b(a),children:`复制连接示例`}),/* @__PURE__ */ N(F.Title,{level:5,children:`只读工具`}),/* @__PURE__ */ N(`ul`,{children:et.map(e=>/* @__PURE__ */ P(`li`,{children:[/* @__PURE__ */ N(F.Text,{children:e.title}),` `,/* @__PURE__ */ N(F.Text,{type:`secondary`,children:e.name})]},e.name))}),/* @__PURE__ */ N(F.Paragraph,{type:`secondary`,children:`MCP 与 WebMCP 独立控制。宿主已配置桌面 Relay 时,桥接跟随 WebMCP 开关启停;连接状态以客户端实际列出工具为准。`})]})}function St(){return(St=e((()=>{k(),x(),be()})))()}function Ct({module:e,meta:t}){let n=Qe[e],i=We(e),a=Ue(e),o=i.data,[c,l]=Oe(null),[u,d]=Oe(!1);Ee(()=>{l(null),d(!1)},[o?.version]);let f=j(()=>c??o?.effective??null,[c,o]),p=c!==null&&JSON.stringify(c)!==JSON.stringify(o?.effective),m=e===`ui`&&f?f:null,g=e===`ui`&&o?o.effective:null,_=m&&g?B.filter(({path:e})=>z(m.preferences.defaults,e)!==z(g.preferences.defaults,e)||z(m.preferences.allowUserOverride,e)!==z(g.preferences.allowUserOverride,e)):[],v=_.filter(({path:e})=>m&&!z(m.preferences.allowUserOverride,e)).length;async function b(){if(!o||!f||!t.canWrite)return;let n=e===`website`?{...f,name:f.name.trim()}:f,r=Ie[e].input.safeParse({body:{version:o.version,data:n}});if(r.success)try{await a.mutateAsync(r.data),l(null),w.success(`设置已保存`)}catch(e){e instanceof Ne&&e.status===409&&(l(null),i.refetch())}else{let e=r.error.issues[0];w.error(`${e.path.join(`.`)||`表单`}:${e.message}`)}}return/* @__PURE__ */ N(re.Body,{padding:24,children:/* @__PURE__ */ P(`div`,{style:{maxWidth:e===`ui`?1040:760},children:[/* @__PURE__ */ P(`div`,{style:{display:`flex`,alignItems:`flex-start`,justifyContent:`space-between`,gap:16,marginBottom:8},children:[/* @__PURE__ */ P(`div`,{children:[/* @__PURE__ */ N(wt,{heading:5,style:{margin:0},children:n.title}),/* @__PURE__ */ N($,{type:`tertiary`,children:n.description})]}),!t.page&&t.canWrite?/* @__PURE__ */ N(y,{theme:`solid`,icon:/* @__PURE__ */ N(se,{size:14}),loading:a.isPending,disabled:!p||u,onClick:()=>void b(),children:`保存`}):null]}),/* @__PURE__ */ P(`div`,{style:{display:`flex`,gap:8,flexWrap:`wrap`,marginBottom:12},children:[/* @__PURE__ */ N(s,{color:`grey`,children:`系统级`}),o?/* @__PURE__ */ P(s,{children:[`版本 `,o.version]}):null,t.overriddenCount>0?/* @__PURE__ */ P(s,{color:`orange`,children:[t.overriddenCount,` 项覆盖`]}):null,o?.updatedAt?/* @__PURE__ */ P($,{type:`tertiary`,size:`small`,children:[`最后修改 `,o.updatedAt]}):null]}),t.page?/* @__PURE__ */ N(h,{type:`info`,closeIcon:null,description:/* @__PURE__ */ P(`span`,{children:[`该模块有专用设置页面,请前往`,/* @__PURE__ */ P(Pe,{to:t.page,style:{margin:`0 4px`,display:`inline-flex`,alignItems:`center`,gap:4},children:[n.title,/* @__PURE__ */ N(W,{size:12})]}),`修改。`]})}):null,!t.page&&!t.canWrite?/* @__PURE__ */ N(h,{type:`warning`,closeIcon:null,description:t.scope===`platform`?`平台级设置仅平台管理员可修改,当前为只读。`:`当前账号没有修改权限,当前为只读。`}):null,_.length>0?/* @__PURE__ */ N(h,{type:`info`,closeIcon:null,description:`待保存 ${_.length} 项偏好策略,其中 ${v} 项将统一使用系统值;允许修改的项目保留用户已有选择。`}):null,i.error?/* @__PURE__ */ N(h,{type:`danger`,closeIcon:null,description:/* @__PURE__ */ P(`span`,{children:[`设置加载失败。`,/* @__PURE__ */ N(y,{theme:`borderless`,onClick:()=>void i.refetch(),children:`重试`})]})}):null,/* @__PURE__ */ N(r,{spinning:i.isLoading,children:o&&f?/* @__PURE__ */ P(M,{children:[e===`website`?/* @__PURE__ */ N(yt,{value:f,disabled:!!t.page||!t.canWrite||a.isPending,uploading:u,onUploadingChange:d,onChange:e=>l(t=>({...o.effective,...t,...e}))},o.version):e===`mcp`?/* @__PURE__ */ N(xt,{value:f,disabled:!t.canWrite||a.isPending,onChange:e=>l({...f,...e})}):/* @__PURE__ */ N(ut,{schema:$e[e],excludeFields:e===`ui`?[`preferences`]:void 0,fieldLabels:at,value:f,inheritedValue:o.inherited,onChange:e=>l({...f,...e}),disabled:!!t.page||!t.canWrite,enumLabels:Tt}),m?/* @__PURE__ */ N(ht,{value:m.preferences,onChange:e=>l({...f,preferences:e}),disabled:!t.canWrite}):null]}):null})]})})}var $,wt,Tt;function Et(){return(Et=e((()=>{a(),G(),oe(),T(),ot(),dt(),Q(),bt(),St(),{Text:$,Title:wt}=i,Tt={captchaComplexity:Ze}})))()}export{G as i,Et as n,W as r,Ct as t};
|
|
17
|
-
//# sourceMappingURL=SettingModuleDetail-I9CSJ-fh.js.map
|