@tablestore/tablestore-agent-cli 0.1.5 → 0.1.6
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/dashboard-runtime/dashboard/.next/BUILD_ID +1 -1
- package/dist/dashboard-runtime/dashboard/.next/build-manifest.json +3 -3
- package/dist/dashboard-runtime/dashboard/.next/prerender-manifest.json +3 -3
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/knowledge-base/[name]/documents/page.js.nft.json +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/knowledge-base/[name]/documents/page_client-reference-manifest.js +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/knowledge-base/[name]/page.js.nft.json +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/knowledge-base/[name]/page_client-reference-manifest.js +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/knowledge-base/[name]/qa/page.js.nft.json +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/knowledge-base/[name]/qa/page_client-reference-manifest.js +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/knowledge-base/[name]/retrieval/page.js.nft.json +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/knowledge-base/[name]/retrieval/page_client-reference-manifest.js +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/knowledge-base/[name]/settings/page.js.nft.json +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/knowledge-base/[name]/settings/page_client-reference-manifest.js +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/knowledge-base/create/page.js.nft.json +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/knowledge-base/create/page_client-reference-manifest.js +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/knowledge-base/page.js.nft.json +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/knowledge-base/page_client-reference-manifest.js +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/llm-providers/[id]/page.js.nft.json +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/llm-providers/[id]/page_client-reference-manifest.js +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/llm-providers/new/page.js.nft.json +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/llm-providers/new/page_client-reference-manifest.js +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/llm-providers/page.js.nft.json +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/llm-providers/page_client-reference-manifest.js +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/memory/[store]/messages/page.js.nft.json +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/memory/[store]/messages/page_client-reference-manifest.js +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/memory/[store]/page.js.nft.json +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/memory/[store]/page_client-reference-manifest.js +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/memory/[store]/requests/page.js.nft.json +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/memory/[store]/requests/page_client-reference-manifest.js +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/memory/[store]/search/page.js.nft.json +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/memory/[store]/search/page_client-reference-manifest.js +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/memory/[store]/settings/page.js.nft.json +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/memory/[store]/settings/page_client-reference-manifest.js +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/memory/[store]/units/page.js.nft.json +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/memory/[store]/units/page_client-reference-manifest.js +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/memory/create/page.js.nft.json +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/memory/create/page_client-reference-manifest.js +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/memory/page.js.nft.json +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/memory/page_client-reference-manifest.js +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/projects/page.js.nft.json +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/(dashboard)/projects/page_client-reference-manifest.js +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/_global-error.html +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/_global-error.rsc +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/_not-found.html +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/_not-found.rsc +2 -2
- package/dist/dashboard-runtime/dashboard/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/dist/dashboard-runtime/dashboard/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/dist/dashboard-runtime/dashboard/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/dist/dashboard-runtime/dashboard/.next/server/app/api/v1/knowledge-bases/[name]/documents/upload/route.js.nft.json +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/index.html +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/index.rsc +2 -2
- package/dist/dashboard-runtime/dashboard/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/index.segments/_full.segment.rsc +2 -2
- package/dist/dashboard-runtime/dashboard/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/dist/dashboard-runtime/dashboard/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/dist/dashboard-runtime/dashboard/.next/server/app/onboarding/page.js.nft.json +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/onboarding.html +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/onboarding.rsc +3 -3
- package/dist/dashboard-runtime/dashboard/.next/server/app/onboarding.segments/_full.segment.rsc +3 -3
- package/dist/dashboard-runtime/dashboard/.next/server/app/onboarding.segments/_head.segment.rsc +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/onboarding.segments/_index.segment.rsc +2 -2
- package/dist/dashboard-runtime/dashboard/.next/server/app/onboarding.segments/_tree.segment.rsc +2 -2
- package/dist/dashboard-runtime/dashboard/.next/server/app/onboarding.segments/onboarding/__PAGE__.segment.rsc +2 -2
- package/dist/dashboard-runtime/dashboard/.next/server/app/onboarding.segments/onboarding.segment.rsc +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/chunks/ssr/0b1r_app_(dashboard)_knowledge-base_[name]_documents_documents-client_tsx_0g2uxmt._.js +2 -2
- package/dist/dashboard-runtime/dashboard/.next/server/chunks/ssr/{node_modules__pnpm_10vvzr6._.js → 12df_@tanstack_react-query_build_modern_0em_ajy._.js} +2 -2
- package/dist/dashboard-runtime/dashboard/.next/server/chunks/ssr/[root-of-the-server]__0i0y9.r._.js +3 -0
- package/dist/dashboard-runtime/dashboard/.next/server/chunks/ssr/{[root-of-the-server]__0nz4q2w._.js → [root-of-the-server]__0r_6wpx._.js} +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/chunks/ssr/_0-dlo4s._.js +3 -0
- package/dist/dashboard-runtime/dashboard/.next/server/chunks/ssr/{0p91_next_0-sx_63._.js → _09yzbcp._.js} +2 -2
- package/dist/dashboard-runtime/dashboard/.next/server/chunks/ssr/{_0y.sk37._.js → _0c7wecm._.js} +2 -2
- package/dist/dashboard-runtime/dashboard/.next/server/chunks/ssr/_0ct0n55._.js +3 -0
- package/dist/dashboard-runtime/dashboard/.next/server/chunks/ssr/_0fbjpet._.js +3 -0
- package/dist/dashboard-runtime/dashboard/.next/server/chunks/ssr/{_0i24bv5._.js → _0hm68~i._.js} +2 -2
- package/dist/dashboard-runtime/dashboard/.next/server/chunks/ssr/_0u9md36._.js +3 -0
- package/dist/dashboard-runtime/dashboard/.next/server/chunks/ssr/dashboard_src_0o4a.29._.js +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/chunks/ssr/dashboard_src_app_(dashboard)_knowledge-base_[name]_layout-client_tsx_05momc5._.js +3 -0
- package/dist/dashboard-runtime/dashboard/.next/server/chunks/ssr/dashboard_src_components_retrieval_02c2uck._.js +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/chunks/ssr/dashboard_src_components_ui_select_tsx_0ys.i47._.js +3 -0
- package/dist/dashboard-runtime/dashboard/.next/server/middleware-build-manifest.js +3 -3
- package/dist/dashboard-runtime/dashboard/.next/server/pages/404.html +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/pages/500.html +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/server-reference-manifest.js +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/server-reference-manifest.json +1 -1
- package/dist/dashboard-runtime/dashboard/.next/static/chunks/0-mr2-dyb-szq.js +1 -0
- package/dist/dashboard-runtime/dashboard/.next/static/chunks/0.yj.t1hbwkg4.js +1 -0
- package/dist/dashboard-runtime/dashboard/.next/static/chunks/{10dgsk5-c~12w.js → 055_bo6_3nt-s.js} +1 -1
- package/dist/dashboard-runtime/dashboard/.next/static/chunks/{04a40-dl8p2c6.js → 07l4dodn5t6l4.js} +2 -2
- package/dist/dashboard-runtime/dashboard/.next/static/chunks/09qsmnfvk8dm3.js +1 -0
- package/dist/dashboard-runtime/dashboard/.next/static/chunks/0a5ass8u78k90.js +1 -0
- package/dist/dashboard-runtime/dashboard/.next/static/chunks/0ltmkqogn8g3t.js +1 -0
- package/dist/dashboard-runtime/dashboard/.next/static/chunks/0o-c2g8y5pw-c.js +1 -0
- package/dist/dashboard-runtime/dashboard/.next/static/chunks/{0-.-yvgh3s-60.js → 0o0i2ke2jbdvq.js} +1 -1
- package/dist/dashboard-runtime/dashboard/.next/static/chunks/{0u-_fvx_r85sr.js → 0prl6hk4v0k3i.js} +1 -1
- package/dist/dashboard-runtime/dashboard/.next/static/chunks/0rywhgbu_16tm.js +5 -0
- package/dist/dashboard-runtime/dashboard/.next/static/chunks/0v.hno.6q74nn.css +1 -0
- package/dist/dashboard-runtime/dashboard/.next/static/chunks/{16lab3t3ovnyq.js → 17h~onnkksf44.js} +1 -1
- package/dist/dashboard-runtime/dashboard/.next/static/chunks/17m1wc_o0.5iz.js +1 -0
- package/dist/dashboard-runtime/dashboard/.next/static/chunks/17nx_vdk_qemm.js +1 -0
- package/dist/dashboard-runtime/dashboard/package.json +1 -0
- package/dist/dashboard-runtime/dashboard/src/app/(dashboard)/knowledge-base/[name]/documents/documents-client.tsx +94 -30
- package/dist/dashboard-runtime/dashboard/src/app/(dashboard)/knowledge-base/[name]/layout-client.tsx +27 -8
- package/dist/dashboard-runtime/dashboard/src/components/documents/doc-chunks-dialog.tsx +6 -3
- package/dist/dashboard-runtime/dashboard/src/components/documents/doc-columns.tsx +19 -10
- package/dist/dashboard-runtime/dashboard/src/components/documents/doc-table.tsx +4 -2
- package/dist/dashboard-runtime/dashboard/src/components/documents/doc-toolbar.tsx +0 -22
- package/dist/dashboard-runtime/dashboard/src/components/documents/doc-upload-dialog.tsx +19 -5
- package/dist/dashboard-runtime/dashboard/src/components/knowledge-base/kb-header.tsx +2 -0
- package/dist/dashboard-runtime/dashboard/src/components/knowledge-base/kb-tab-nav.tsx +14 -3
- package/dist/dashboard-runtime/dashboard/src/components/knowledge-base/subspace-gate.tsx +75 -0
- package/dist/dashboard-runtime/dashboard/src/components/knowledge-base/subspace-switcher.tsx +144 -0
- package/dist/dashboard-runtime/dashboard/src/components/layout/breadcrumb-bar.tsx +2 -0
- package/dist/dashboard-runtime/dashboard/src/components/layout/theme-toggle.tsx +63 -0
- package/dist/dashboard-runtime/dashboard/src/components/retrieval/retrieval-params-fields.tsx +17 -0
- package/dist/dashboard-runtime/dashboard/src/contexts/subspace-context.tsx +128 -0
- package/dist/dashboard-runtime/dashboard/src/hooks/use-documents.ts +20 -4
- package/dist/dashboard-runtime/dashboard/src/hooks/use-subspace-history.ts +108 -0
- package/package.json +1 -1
- package/dist/dashboard-runtime/dashboard/.next/server/chunks/ssr/[root-of-the-server]__0k7~7-.._.js +0 -3
- package/dist/dashboard-runtime/dashboard/.next/server/chunks/ssr/_0.1hjna._.js +0 -3
- package/dist/dashboard-runtime/dashboard/.next/server/chunks/ssr/_0.a5w1p._.js +0 -3
- package/dist/dashboard-runtime/dashboard/.next/server/chunks/ssr/_0a7zm1~._.js +0 -3
- package/dist/dashboard-runtime/dashboard/.next/server/chunks/ssr/_0ce~2ba._.js +0 -3
- package/dist/dashboard-runtime/dashboard/.next/server/chunks/ssr/node_modules__pnpm_13sm81o._.js +0 -3
- package/dist/dashboard-runtime/dashboard/.next/static/chunks/05-ybw~qkiu2u.js +0 -5
- package/dist/dashboard-runtime/dashboard/.next/static/chunks/0dao._4pxnon7.js +0 -1
- package/dist/dashboard-runtime/dashboard/.next/static/chunks/0eillhls.tts8.js +0 -1
- package/dist/dashboard-runtime/dashboard/.next/static/chunks/0fldq3wpg_379.css +0 -1
- package/dist/dashboard-runtime/dashboard/.next/static/chunks/0ja2he~jl53.n.js +0 -1
- package/dist/dashboard-runtime/dashboard/.next/static/chunks/0vzzx38w03s2z.js +0 -1
- package/dist/dashboard-runtime/dashboard/.next/static/chunks/0~5hi.pq6~znn.js +0 -1
- package/dist/dashboard-runtime/dashboard/.next/static/chunks/10hds0xyg3aah.js +0 -1
- package/dist/dashboard-runtime/dashboard/.next/static/chunks/11uulsjt7kqqm.js +0 -1
- package/dist/dashboard-runtime/dashboard/.next/static/chunks/12hh~9zwiszro.js +0 -1
- /package/dist/dashboard-runtime/dashboard/.next/static/{bJGjoMHOZZB7Z_j4dpYws → MjeKF5uLzEvAqWkR9O6Ts}/_buildManifest.js +0 -0
- /package/dist/dashboard-runtime/dashboard/.next/static/{bJGjoMHOZZB7Z_j4dpYws → MjeKF5uLzEvAqWkR9O6Ts}/_clientMiddlewareManifest.js +0 -0
- /package/dist/dashboard-runtime/dashboard/.next/static/{bJGjoMHOZZB7Z_j4dpYws → MjeKF5uLzEvAqWkR9O6Ts}/_ssgManifest.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,3106,96359,e=>{"use strict";var r=e.i(44501),t=e.i(17635),l=e.i(43250),a=e.i(80939),n=e.i(77275),s=e.i(91967),o=e.i(17256),i="Toggle",d=t.forwardRef((e,t)=>{let{pressed:l,defaultPressed:n,onPressedChange:d,...c}=e,[u,m]=(0,o.useControllableState)({prop:l,onChange:d,defaultProp:n??!1,caller:i});return(0,r.jsx)(a.Primitive.button,{type:"button","aria-pressed":u,"data-state":u?"on":"off","data-disabled":e.disabled?"":void 0,...c,ref:t,onClick:(0,s.composeEventHandlers)(e.onClick,()=>{e.disabled||m(!u)})})});d.displayName=i;var c=e.i(25486),u="ToggleGroup",[m,h]=(0,l.createContextScope)(u,[n.createRovingFocusGroupScope]),p=(0,n.createRovingFocusGroupScope)(),g=t.default.forwardRef((e,t)=>{let{type:l,...a}=e;if("single"===l)return(0,r.jsx)(v,{...a,ref:t});if("multiple"===l)return(0,r.jsx)(j,{...a,ref:t});throw Error(`Missing prop \`type\` expected on \`${u}\``)});g.displayName=u;var[x,f]=m(u),v=t.default.forwardRef((e,l)=>{let{value:a,defaultValue:n,onValueChange:s=()=>{},...i}=e,[d,c]=(0,o.useControllableState)({prop:a,defaultProp:n??"",onChange:s,caller:u});return(0,r.jsx)(x,{scope:e.__scopeToggleGroup,type:"single",value:t.default.useMemo(()=>d?[d]:[],[d]),onItemActivate:c,onItemDeactivate:t.default.useCallback(()=>c(""),[c]),children:(0,r.jsx)(T,{...i,ref:l})})}),j=t.default.forwardRef((e,l)=>{let{value:a,defaultValue:n,onValueChange:s=()=>{},...i}=e,[d,c]=(0,o.useControllableState)({prop:a,defaultProp:n??[],onChange:s,caller:u}),m=t.default.useCallback(e=>c((r=[])=>[...r,e]),[c]),h=t.default.useCallback(e=>c((r=[])=>r.filter(r=>r!==e)),[c]);return(0,r.jsx)(x,{scope:e.__scopeToggleGroup,type:"multiple",value:d,onItemActivate:m,onItemDeactivate:h,children:(0,r.jsx)(T,{...i,ref:l})})});g.displayName=u;var[b,y]=m(u),T=t.default.forwardRef((e,t)=>{let{__scopeToggleGroup:l,disabled:s=!1,rovingFocus:o=!0,orientation:i,dir:d,loop:u=!0,...m}=e,h=p(l),g=(0,c.useDirection)(d),x={role:"group",dir:g,...m};return(0,r.jsx)(b,{scope:l,rovingFocus:o,disabled:s,children:o?(0,r.jsx)(n.Root,{asChild:!0,...h,orientation:i,dir:g,loop:u,children:(0,r.jsx)(a.Primitive.div,{...x,ref:t})}):(0,r.jsx)(a.Primitive.div,{...x,ref:t})})}),C="ToggleGroupItem",N=t.default.forwardRef((e,l)=>{let a=f(C,e.__scopeToggleGroup),s=y(C,e.__scopeToggleGroup),o=p(e.__scopeToggleGroup),i=a.value.includes(e.value),d=s.disabled||e.disabled,c={...e,pressed:i,disabled:d},u=t.default.useRef(null);return s.rovingFocus?(0,r.jsx)(n.Item,{asChild:!0,...o,focusable:!d,active:i,ref:u,children:(0,r.jsx)(w,{...c,ref:l})}):(0,r.jsx)(w,{...c,ref:l})});N.displayName=C;var w=t.default.forwardRef((e,t)=>{let{__scopeToggleGroup:l,value:a,...n}=e,s=f(C,l),o={role:"radio","aria-checked":e.pressed,"aria-pressed":void 0},i="single"===s.type?o:void 0;return(0,r.jsx)(d,{...i,...n,ref:t,onPressedChange:e=>{e?s.onItemActivate(a):s.onItemDeactivate(a)}})}),F=e.i(76490);let R=t.createContext({size:"default",variant:"default"}),E=t.forwardRef(({className:e,variant:t="default",size:l="default",children:a,...n},s)=>(0,r.jsx)(g,{ref:s,className:(0,F.cn)("inline-flex items-center justify-center gap-1",e),...n,children:(0,r.jsx)(R.Provider,{value:{variant:t,size:l},children:a})}));E.displayName=g.displayName;let S=t.forwardRef(({className:e,children:t,...l},a)=>(0,r.jsx)(N,{ref:a,className:(0,F.cn)("relative inline-flex items-center justify-center whitespace-nowrap","text-sm font-medium transition-all","first:rounded-l-[7px] last:rounded-r-[7px]","border-l border-[hsl(var(--border)/0.6)]","first:border-l-0","data-[state=on]:border-l-transparent","[&[data-state=on]+*]:border-l-transparent","ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2","disabled:pointer-events-none disabled:opacity-50","hover:bg-[hsl(var(--muted)/0.6)] hover:text-[hsl(var(--foreground))]","data-[state=on]:bg-[hsl(var(--background))] data-[state=on]:text-[hsl(var(--foreground))] data-[state=on]:shadow-sm",e),...l,children:t}));S.displayName=N.displayName,e.s(["ToggleGroup",0,E,"ToggleGroupItem",0,S],3106);var k=e.i(46398);e.s(["TagInput",0,function({value:e,onChange:l,placeholder:a="输入后按回车添加"}){let[n,s]=(0,t.useState)(""),o=(0,t.useCallback)(r=>{let t=r.trim();t&&!e.includes(t)&&l([...e,t]),s("")},[e,l]),i=(0,t.useCallback)(r=>{l(e.filter((e,t)=>t!==r))},[e,l]);return(0,r.jsxs)("div",{className:(0,F.cn)("flex flex-wrap items-center gap-1.5 rounded-md border border-[hsl(var(--input))] bg-background px-3 py-2","focus-within:border-[hsl(var(--ring))] focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-0","min-h-10 transition-colors"),children:[e.map((e,t)=>(0,r.jsxs)("span",{className:"inline-flex items-center gap-1 rounded-full border border-primary-200 bg-primary-100 px-2 py-0.5 text-xs font-medium text-primary-700",children:[e,(0,r.jsx)("button",{type:"button",onClick:()=>i(t),className:"inline-flex items-center justify-center rounded-full p-0.5 hover:opacity-70 transition-opacity","aria-label":`删除标签 ${e}`,children:(0,r.jsx)(k.X,{size:12})})]},`${e}-${t}`)),(0,r.jsx)("input",{type:"text",value:n,onChange:e=>s(e.target.value),onKeyDown:r=>{("Enter"===r.key||","===r.key)&&(r.preventDefault(),o(n)),"Backspace"===r.key&&""===n&&e.length>0&&i(e.length-1)},placeholder:0===e.length?a:"",className:"flex-1 min-w-20 bg-transparent text-sm outline-none placeholder:text-muted-foreground"})]})}],96359)},64209,e=>{"use strict";var r=e.i(17635),t=e.i(91967),l=e.i(43250),a=e.i(17256),n=e.i(72687),s=e.i(67928),o=e.i(80939),i=e.i(90088),d=e.i(33616),c=e.i(44501),u="Collapsible",[m,h]=(0,l.createContextScope)(u),[p,g]=m(u),x=r.forwardRef((e,t)=>{let{__scopeCollapsible:l,open:n,defaultOpen:s,disabled:i,onOpenChange:m,...h}=e,[g,x]=(0,a.useControllableState)({prop:n,defaultProp:s??!1,onChange:m,caller:u});return(0,c.jsx)(p,{scope:l,disabled:i,contentId:(0,d.useId)(),open:g,onOpenToggle:r.useCallback(()=>x(e=>!e),[x]),children:(0,c.jsx)(o.Primitive.div,{"data-state":T(g),"data-disabled":i?"":void 0,...h,ref:t})})});x.displayName=u;var f="CollapsibleTrigger",v=r.forwardRef((e,r)=>{let{__scopeCollapsible:l,...a}=e,n=g(f,l);return(0,c.jsx)(o.Primitive.button,{type:"button","aria-controls":n.contentId,"aria-expanded":n.open||!1,"data-state":T(n.open),"data-disabled":n.disabled?"":void 0,disabled:n.disabled,...a,ref:r,onClick:(0,t.composeEventHandlers)(e.onClick,n.onOpenToggle)})});v.displayName=f;var j="CollapsibleContent",b=r.forwardRef((e,r)=>{let{forceMount:t,...l}=e,a=g(j,e.__scopeCollapsible);return(0,c.jsx)(i.Presence,{present:t||a.open,children:({present:e})=>(0,c.jsx)(y,{...l,ref:r,present:e})})});b.displayName=j;var y=r.forwardRef((e,t)=>{let{__scopeCollapsible:l,present:a,children:i,...d}=e,u=g(j,l),[m,h]=r.useState(a),p=r.useRef(null),x=(0,s.useComposedRefs)(t,p),f=r.useRef(0),v=f.current,b=r.useRef(0),y=b.current,C=u.open||m,N=r.useRef(C),w=r.useRef(void 0);return r.useEffect(()=>{let e=requestAnimationFrame(()=>N.current=!1);return()=>cancelAnimationFrame(e)},[]),(0,n.useLayoutEffect)(()=>{let e=p.current;if(e){w.current=w.current||{transitionDuration:e.style.transitionDuration,animationName:e.style.animationName},e.style.transitionDuration="0s",e.style.animationName="none";let r=e.getBoundingClientRect();f.current=r.height,b.current=r.width,N.current||(e.style.transitionDuration=w.current.transitionDuration,e.style.animationName=w.current.animationName),h(a)}},[u.open,a]),(0,c.jsx)(o.Primitive.div,{"data-state":T(u.open),"data-disabled":u.disabled?"":void 0,id:u.contentId,hidden:!C,...d,ref:x,style:{"--radix-collapsible-content-height":v?`${v}px`:void 0,"--radix-collapsible-content-width":y?`${y}px`:void 0,...e.style},children:C&&i})});function T(e){return e?"open":"closed"}e.s(["Collapsible",0,x,"CollapsibleContent",0,b,"CollapsibleTrigger",0,v],64209)},85684,e=>{"use strict";var r=e.i(44501),t=e.i(17635),l=e.i(6703),a=e.i(20268),n=e.i(42737),s=e.i(43754),o=e.i(23888),i=e.i(42595),d=e.i(31373),c=e.i(21562),u=e.i(64209),m=e.i(3106),h=e.i(12122),p=e.i(96359),g=e.i(58204),x=e.i(46398),f=e.i(66473);function v(e){return"logic"in e&&"conditions"in e}let j={string:["equals","notEquals","in","notIn","startsWith","stringContains"],long:["equals","notEquals","greaterThan","greaterThanOrEquals","lessThan","lessThanOrEquals"],double:["equals","notEquals","greaterThan","greaterThanOrEquals","lessThan","lessThanOrEquals"],boolean:["equals","notEquals"],string_list:["listContains","in","notIn"],date:["equals","greaterThan","greaterThanOrEquals","lessThan","lessThanOrEquals"]};function b(e){return j[e]??j.string}let y=Date.now();function T(){return`c_${y++}`}function C(e,r){return r.find(r=>r.name===e)?.type??"string"}function N(e,r,t){if(0===r.length)return t(e);let[l,...a]=r,n=e.conditions[l];if(!v(n))return e;let s=N(n,a,t),o=[...e.conditions];return o[l]=s,{...e,conditions:o}}function w(e,r){switch(r.type){case"SET_LOGIC":return N(e,r.path,e=>({...e,logic:r.logic}));case"UPDATE_ROW":return N(e,r.path,e=>{let t=[...e.conditions];return t[r.index]=r.row,{...e,conditions:t}});case"REMOVE_AT":return N(e,r.path,e=>({...e,conditions:e.conditions.filter((e,t)=>t!==r.index)}));case"ADD_ROW":return N(e,r.path,e=>({...e,conditions:[...e.conditions,r.row]}));case"ADD_GROUP":return N(e,r.path,e=>({...e,conditions:[...e.conditions,r.group]}));default:return e}}function F({condition:e,metadataFields:t,onUpdate:l,onRemove:a}){let n=C(e.fieldName,t),s=b(n),d="in"===e.operator||"notIn"===e.operator;return(0,r.jsxs)("div",{className:"flex items-center gap-1.5 min-w-0",children:[(0,r.jsxs)(f.Select,{value:e.fieldName,onValueChange:r=>{let a=b(C(r,t));l({...e,fieldName:r,operator:a.includes(e.operator)?e.operator:a[0],value:""})},children:[(0,r.jsx)(f.SelectTrigger,{className:"min-w-0 flex-1",children:(0,r.jsx)(f.SelectValue,{placeholder:"选择字段"})}),(0,r.jsx)(f.SelectContent,{children:t.map(e=>(0,r.jsxs)(f.SelectItem,{value:e.name,children:[e.name," (",e.type,")"]},e.name))})]}),(0,r.jsxs)(f.Select,{value:e.operator,onValueChange:r=>l({...e,operator:r,value:""}),children:[(0,r.jsx)(f.SelectTrigger,{className:"min-w-0 flex-1",children:(0,r.jsx)(f.SelectValue,{placeholder:"操作符"})}),(0,r.jsx)(f.SelectContent,{children:s.map(e=>(0,r.jsx)(f.SelectItem,{value:e,children:e},e))})]}),"boolean"===n?(0,r.jsxs)(f.Select,{value:e.value,onValueChange:r=>l({...e,value:r}),children:[(0,r.jsx)(f.SelectTrigger,{className:"min-w-0 flex-1",children:(0,r.jsx)(f.SelectValue,{placeholder:"选择值"})}),(0,r.jsxs)(f.SelectContent,{children:[(0,r.jsx)(f.SelectItem,{value:"true",children:"true"}),(0,r.jsx)(f.SelectItem,{value:"false",children:"false"})]})]}):(0,r.jsx)(o.Input,{className:"min-w-0 flex-1",type:"long"===n||"double"===n?"number":"text",placeholder:d?"值1, 值2, 值3":"输入值",value:e.value,onChange:r=>l({...e,value:r.target.value})}),(0,r.jsx)(i.Button,{type:"button",variant:"ghost",size:"icon",className:"h-7 w-7 shrink-0 text-[hsl(var(--muted-foreground))] hover:text-[hsl(var(--destructive))]",onClick:a,children:(0,r.jsx)(x.X,{className:"h-3.5 w-3.5"})})]})}function R({group:e,metadataFields:t,path:l,depth:a,dispatch:n,onRemoveSelf:s}){let o=t[0],d=o?b(o.type)[0]:"equals";return(0,r.jsxs)("div",{className:`rounded-md border border-[hsl(var(--border))] p-3 ${a>0?"bg-[hsl(var(--muted))]/30":""}`,children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 mb-3",children:[(0,r.jsxs)(f.Select,{value:e.logic,onValueChange:e=>n({type:"SET_LOGIC",path:l,logic:e}),children:[(0,r.jsx)(f.SelectTrigger,{className:"w-[120px] h-8 text-xs font-medium",children:(0,r.jsx)(f.SelectValue,{})}),(0,r.jsxs)(f.SelectContent,{children:[(0,r.jsx)(f.SelectItem,{value:"andAll",children:"AND (全部满足)"}),(0,r.jsx)(f.SelectItem,{value:"orAll",children:"OR (任一满足)"}),(0,r.jsx)(f.SelectItem,{value:"notAll",children:"NOT (全不满足)"})]})]}),s&&(0,r.jsx)(i.Button,{type:"button",variant:"ghost",size:"icon",className:"h-7 w-7 shrink-0 text-[hsl(var(--muted-foreground))] hover:text-[hsl(var(--destructive))]",onClick:s,children:(0,r.jsx)(x.X,{className:"h-3.5 w-3.5"})})]}),(0,r.jsx)("div",{className:"flex flex-col gap-2",children:e.conditions.map((e,s)=>v(e)?(0,r.jsx)(R,{group:e,metadataFields:t,path:[...l,s],depth:a+1,dispatch:n,onRemoveSelf:()=>n({type:"REMOVE_AT",path:l,index:s})},e.id):(0,r.jsx)(F,{condition:e,metadataFields:t,onUpdate:e=>n({type:"UPDATE_ROW",path:l,index:s,row:e}),onRemove:()=>n({type:"REMOVE_AT",path:l,index:s})},e.id))}),(0,r.jsxs)("div",{className:"flex items-center gap-2 mt-3 pt-2 border-t border-[hsl(var(--border))]/50",children:[(0,r.jsxs)(i.Button,{type:"button",variant:"ghost",size:"sm",className:"h-7 text-xs",onClick:()=>n({type:"ADD_ROW",path:l,row:{id:T(),fieldName:o?.name??"",operator:d,value:""}}),children:[(0,r.jsx)(g.Plus,{className:"h-3.5 w-3.5 mr-1"}),"添加条件"]}),a<1&&(0,r.jsxs)(i.Button,{type:"button",variant:"ghost",size:"sm",className:"h-7 text-xs",onClick:()=>n({type:"ADD_GROUP",path:l,group:{id:T(),logic:"orAll",conditions:[]}}),children:[(0,r.jsx)(g.Plus,{className:"h-3.5 w-3.5 mr-1"}),"添加条件组"]})]})]})}let E=(0,t.forwardRef)(function({metadataFields:e,initialValue:l},a){let[n,s]=(0,t.useReducer)(w,l,function e(r){let t={id:T(),logic:"andAll",conditions:[]};if(!r)return t;let l=Object.keys(r).find(e=>["andAll","orAll","notAll"].includes(e));if(!l||!Array.isArray(r[l]))return t;let a=r[l].map(r=>{if(Object.keys(r).find(e=>["andAll","orAll","notAll"].includes(e)))return e(r);let t=Object.keys(r)[0],l=r[t],a=Array.isArray(l.value)?l.value.join(", "):String(l.value??"");return{id:T(),fieldName:l.key,operator:t,value:a}});return{id:T(),logic:l,conditions:a}}),o=(0,t.useRef)(e);return(o.current=e,(0,t.useImperativeHandle)(a,()=>({getFilter:()=>(function e(r,t){let l=[];for(let a of r.conditions)if(v(a)){let r=e(a,t);r&&l.push(r)}else{if(!a.fieldName||!a.operator)continue;let e=C(a.fieldName,t);l.push({[a.operator]:{key:a.fieldName,value:function(e,r,t){if("in"===t||"notIn"===t){let t=e.split(",").map(e=>e.trim()).filter(Boolean);return"long"===r||"double"===r?t.map(Number):t}return"long"===r||"double"===r?Number(e)||0:"boolean"===r?"true"===e:e}(a.value,e,a.operator)}})}if(0!==l.length)return{[r.logic]:l}})(n,o.current)}),[n]),0===e.length)?(0,r.jsx)("div",{className:"rounded-md border border-[hsl(var(--border))] p-4 text-sm text-[hsl(var(--muted-foreground))]",children:"该知识库未定义 Metadata Schema,无法使用过滤器"}):(0,r.jsx)("div",{className:"space-y-3",children:(0,r.jsx)(R,{group:n,metadataFields:e,path:[],depth:0,dispatch:s})})});var S=e.i(87014);function k({form:e}){let l=e.watch("rerankType"),a=e.watch("searchType"),n=!!a?.includes("DENSE_VECTOR")&&!!a?.includes("FULL_TEXT");(0,t.useEffect)(()=>{let r="RRF"===l||"WEIGHT"===l;!n&&r&&(e.setValue("rerankType","MODEL",{shouldValidate:!0}),S.toast.info("已切换为 Model 策略(RRF / Weight 需同时启用向量与全文检索)"))},[n,l,e]);let s=!!l;return(0,r.jsx)("div",{className:"grid overflow-hidden transition-[grid-template-rows] duration-300 ease-out "+(s?"grid-rows-[1fr]":"grid-rows-[0fr]"),children:(0,r.jsx)("div",{className:"min-h-0",children:l?(0,r.jsxs)("div",{className:"animate-rerank-slide",children:["RRF"===l&&(0,r.jsx)(I,{form:e}),"WEIGHT"===l&&(0,r.jsx)(D,{form:e}),"MODEL"===l&&(0,r.jsx)(A,{form:e})]},l):null})})}function I({form:e}){return(0,r.jsxs)(P,{children:[(0,r.jsx)(G,{form:e,name:"rrfK",label:"K 值",step:1,min:1,placeholder:"60"}),(0,r.jsx)(G,{form:e,name:"rrfDenseWeight",label:"向量权重",step:.1,min:0,placeholder:"0.5"}),(0,r.jsx)(G,{form:e,name:"rrfFullTextWeight",label:"全文权重",step:.1,min:0,placeholder:"0.5"})]})}function D({form:e}){return(0,r.jsxs)(P,{cols:2,children:[(0,r.jsx)(G,{form:e,name:"weightDense",label:"向量权重",step:.1,min:0,max:1,placeholder:"0.5",description:"0 ~ 1"}),(0,r.jsx)(G,{form:e,name:"weightFullText",label:"全文权重",step:.1,min:0,max:1,placeholder:"0.5",description:"0 ~ 1"})]})}let O=[{value:"bailian",label:"百炼 (Bailian)"}],_=[{value:"gte-rerank-v2",label:"gte-rerank-v2"},{value:"qwen3-rerank",label:"qwen3-rerank"}];function A({form:e}){let t=e.watch("modelProvider");return(0,r.jsxs)(P,{cols:2,children:[(0,r.jsx)(z,{form:e,name:"modelProvider",label:"Provider",placeholder:"选择 Provider",options:O}),"bailian"===t?(0,r.jsx)(z,{form:e,name:"modelName",label:"Model",placeholder:"选择模型",options:_}):(0,r.jsx)(V,{form:e,name:"modelName",label:"Model",placeholder:"gte-rerank-v2"})]})}function P({cols:e=3,children:t}){return(0,r.jsx)("div",{className:"grid gap-3 px-0.5 pt-1 "+(2===e?"sm:grid-cols-2":"sm:grid-cols-3"),children:t})}function G({form:e,name:t,label:l,placeholder:a,step:n,min:s,max:i,description:d}){return(0,r.jsx)(c.FormField,{control:e.control,name:t,render:({field:e})=>(0,r.jsxs)(c.FormItem,{children:[(0,r.jsx)(c.FormLabel,{children:l}),(0,r.jsx)(c.FormControl,{children:(0,r.jsx)(o.Input,{type:"number",inputMode:"decimal",step:n,min:s,max:i,placeholder:a,value:e.value??"",onChange:r=>e.onChange(""===r.target.value?void 0:Number(r.target.value)),onBlur:e.onBlur,name:e.name,ref:e.ref})}),d?(0,r.jsx)(c.FormDescription,{children:d}):null,(0,r.jsx)(c.FormMessage,{})]})})}function V({form:e,name:t,label:l,placeholder:a}){return(0,r.jsx)(c.FormField,{control:e.control,name:t,render:({field:e})=>(0,r.jsxs)(c.FormItem,{children:[(0,r.jsx)(c.FormLabel,{children:l}),(0,r.jsx)(c.FormControl,{children:(0,r.jsx)(o.Input,{placeholder:a,value:e.value??"",onChange:e.onChange,onBlur:e.onBlur,name:e.name,ref:e.ref})}),(0,r.jsx)(c.FormMessage,{})]})})}function z({form:e,name:t,label:l,placeholder:a,options:n}){return(0,r.jsx)(c.FormField,{control:e.control,name:t,render:({field:e})=>(0,r.jsxs)(c.FormItem,{children:[(0,r.jsx)(c.FormLabel,{children:l}),(0,r.jsxs)(f.Select,{onValueChange:e.onChange,value:e.value??"",children:[(0,r.jsx)(c.FormControl,{children:(0,r.jsx)(f.SelectTrigger,{children:(0,r.jsx)(f.SelectValue,{placeholder:a})})}),(0,r.jsx)(f.SelectContent,{children:n.map(e=>(0,r.jsx)(f.SelectItem,{value:e.value,children:e.label},e.value))})]}),(0,r.jsx)(c.FormMessage,{})]})})}e.s(["RetrievalParamsFields",0,function({form:e,knowledgeBase:g,filterRef:x,topKLabel:f="返回数量",topKHint:v}){let j=e.watch("searchType"),b=!!j?.includes("DENSE_VECTOR")&&!!j?.includes("FULL_TEXT"),y=g?.metadata??[],T=(0,d.useSubspaceOptional)()?.subspace??null,C=(0,t.useRef)(null);return(0,t.useEffect)(()=>{g?.subspace&&T&&C.current!==T&&(0===(e.getValues("subspace")??[]).length&&e.setValue("subspace",[T],{shouldDirty:!1}),C.current=T)},[T,g?.subspace,e]),(0,r.jsxs)(r.Fragment,{children:[g?.subspace&&(0,r.jsx)(c.FormField,{control:e.control,name:"subspace",render:({field:e})=>(0,r.jsxs)(c.FormItem,{children:[(0,r.jsx)(c.FormLabel,{children:"子空间"}),(0,r.jsx)(c.FormControl,{children:(0,r.jsx)(p.TagInput,{value:e.value??[],onChange:e.onChange,placeholder:"输入子空间后按回车(可选多个)"})}),(0,r.jsx)("p",{className:"text-xs text-[hsl(var(--muted-foreground))]",children:"限定只在指定子空间中检索;留空则跨全部子空间"}),(0,r.jsx)(c.FormMessage,{})]})}),(0,r.jsxs)("div",{className:"grid gap-4 sm:grid-cols-2",children:[(0,r.jsx)(c.FormField,{control:e.control,name:"topK",render:({field:e})=>(0,r.jsxs)(c.FormItem,{className:"space-y-1.5",children:[(0,r.jsxs)("div",{className:"flex items-center gap-1",children:[(0,r.jsx)(c.FormLabel,{className:"leading-tight",children:f}),v?(0,r.jsx)(h.TooltipProvider,{delayDuration:150,children:(0,r.jsxs)(h.Tooltip,{children:[(0,r.jsx)(h.TooltipTrigger,{asChild:!0,children:(0,r.jsx)("button",{type:"button",tabIndex:-1,"aria-label":"字段说明",className:"inline-flex h-5 w-5 items-center justify-center rounded text-muted-foreground/60 transition-colors hover:bg-[hsl(var(--muted))] hover:text-foreground",children:(0,r.jsx)(n.HelpCircle,{className:"h-3.5 w-3.5"})})}),(0,r.jsx)(h.TooltipContent,{side:"top",sideOffset:6,className:"z-[60] max-w-[240px] border border-[hsl(var(--border))] bg-[hsl(var(--popover))] px-3 py-2 text-xs leading-relaxed text-[hsl(var(--popover-foreground))] shadow-md",children:v})]})}):null]}),(0,r.jsx)(c.FormControl,{children:(0,r.jsx)(o.Input,{type:"number",min:1,max:100,className:"h-9",...e,onChange:r=>e.onChange(r.target.value?Number(r.target.value):void 0)})}),(0,r.jsx)(c.FormMessage,{})]})}),(0,r.jsx)(c.FormField,{control:e.control,name:"searchType",render:({field:e})=>(0,r.jsxs)(c.FormItem,{className:"space-y-1.5",children:[(0,r.jsx)(c.FormLabel,{className:"leading-tight",children:"搜索类型"}),(0,r.jsx)(c.FormControl,{children:(0,r.jsxs)(m.ToggleGroup,{type:"multiple",value:e.value??[],onValueChange:r=>{r?.length&&e.onChange(r)},className:"grid w-full grid-cols-2 gap-0 overflow-hidden rounded-lg border border-border bg-[hsl(var(--muted)/0.4)] p-0",children:[(0,r.jsxs)(m.ToggleGroupItem,{value:"DENSE_VECTOR",className:"h-9 gap-1.5",children:[e.value?.includes("DENSE_VECTOR")&&(0,r.jsx)(l.Check,{className:"h-3.5 w-3.5 text-[hsl(var(--primary))]"}),"向量"]}),(0,r.jsxs)(m.ToggleGroupItem,{value:"FULL_TEXT",className:"h-9 gap-1.5",children:[e.value?.includes("FULL_TEXT")&&(0,r.jsx)(l.Check,{className:"h-3.5 w-3.5 text-[hsl(var(--primary))]"}),"全文"]})]})}),(0,r.jsx)(c.FormMessage,{})]})})]}),(0,r.jsxs)("div",{className:"space-y-2",children:[(0,r.jsx)(c.FormField,{control:e.control,name:"rerankType",render:({field:e})=>(0,r.jsxs)(c.FormItem,{children:[(0,r.jsx)(c.FormLabel,{children:"Rerank 策略"}),(0,r.jsx)(c.FormControl,{children:(0,r.jsxs)(m.ToggleGroup,{type:"single",value:e.value??"",onValueChange:r=>{r&&e.onChange(r)},className:"grid w-full grid-cols-3 gap-0 overflow-hidden rounded-lg border border-border bg-[hsl(var(--muted)/0.4)] p-0",children:[(0,r.jsx)(m.ToggleGroupItem,{value:"MODEL",className:"h-8",children:"Model"}),(0,r.jsx)(m.ToggleGroupItem,{value:"WEIGHT",disabled:!b,title:b?void 0:"需同时启用向量与全文检索",className:"h-8",children:"Weight"}),(0,r.jsx)(m.ToggleGroupItem,{value:"RRF",disabled:!b,title:b?void 0:"需同时启用向量与全文检索",className:"h-8",children:"RRF"})]})}),b?null:(0,r.jsxs)("div",{className:"mt-1.5 flex items-start gap-2 rounded-md bg-[hsl(var(--muted)/0.5)] px-2.5 py-1.5 text-xs text-[hsl(var(--muted-foreground))]",children:[(0,r.jsx)(s.Info,{className:"mt-0.5 h-3.5 w-3.5 shrink-0"}),(0,r.jsxs)("span",{children:["勾选"," ",(0,r.jsx)("span",{className:"font-medium text-[hsl(var(--foreground))]",children:"向量 + 全文"})," ","以启用 Weight / RRF 策略"]})]}),(0,r.jsx)(c.FormMessage,{})]})}),(0,r.jsx)(k,{form:e})]}),(0,r.jsxs)(u.Collapsible,{children:[(0,r.jsx)(u.CollapsibleTrigger,{asChild:!0,children:(0,r.jsxs)(i.Button,{type:"button",variant:"ghost",size:"sm",className:"flex items-center gap-1 px-0 text-sm font-medium text-[hsl(var(--muted-foreground))] hover:bg-transparent hover:text-[hsl(var(--foreground))]",children:["Metadata 过滤",(0,r.jsx)(a.ChevronDown,{className:"h-3.5 w-3.5 transition-transform duration-200 [[data-state=open]>&]:rotate-180"})]})}),(0,r.jsx)(u.CollapsibleContent,{className:"mt-2",children:(0,r.jsx)(E,{ref:x,metadataFields:y})})]})]})}],85684)},33042,e=>{"use strict";e.s(["assembleRetrievalConfiguration",0,function(e,r){let t=function(e,r){if(!e.rerankType)return;let t={type:e.rerankType,numberOfResults:r};return"RRF"===e.rerankType?t.rrfConfiguration={k:e.rrfK,denseVectorSearchWeight:e.rrfDenseWeight,fullTextSearchWeight:e.rrfFullTextWeight}:"WEIGHT"===e.rerankType?t.weightConfiguration={denseVectorSearchWeight:e.weightDense,fullTextSearchWeight:e.weightFullText}:"MODEL"===e.rerankType&&(t.modelConfiguration={provider:e.modelProvider,model:e.modelName}),t}(e,r),l={};return e.searchType?.length&&(l.searchType=e.searchType),r&&(l.denseVectorSearchConfiguration={numberOfResults:r}),t&&(l.rerankingConfiguration=t),Object.keys(l).length>0?l:void 0}])},74540,e=>{"use strict";var r=e.i(32356);let t=r.z.object({knowledgeBaseName:r.z.string().min(1),query:r.z.string().min(1,"Query must be at least 1 character").max(128,"Query must be at most 128 characters"),subspace:r.z.array(r.z.string()).optional(),topK:r.z.number().int().min(1).max(100).default(20).optional(),searchType:r.z.array(r.z.enum(["DENSE_VECTOR","FULL_TEXT"])).optional(),rerankType:r.z.enum(["RRF","WEIGHT","MODEL"]).optional(),rrfK:r.z.number().int().min(1).optional(),rrfDenseWeight:r.z.number().min(0).optional(),rrfFullTextWeight:r.z.number().min(0).optional(),weightDense:r.z.number().min(0).max(1).optional(),weightFullText:r.z.number().min(0).max(1).optional(),modelProvider:r.z.string().optional(),modelName:r.z.string().optional(),filter:r.z.record(r.z.unknown()).optional()});e.s(["retrievalSchema",0,t])}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,66476,50110,e=>{"use strict";var t=e.i(44501),r=e.i(17635);e.i(80560);var n=e.i(6102),o=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"].reduce((e,o)=>{let a=(0,n.createSlot)(`Primitive.${o}`),l=r.forwardRef((e,r)=>{let{asChild:n,...l}=e;return"u">typeof window&&(window[Symbol.for("radix-ui")]=!0),(0,t.jsx)(n?a:o,{...l,ref:r})});return l.displayName=`Primitive.${o}`,{...e,[o]:l}},{});e.s(["Primitive",0,o],50110);var a=r.forwardRef((e,r)=>(0,t.jsx)(o.label,{...e,ref:r,onMouseDown:t=>{t.target.closest("button, input, select, textarea")||(e.onMouseDown?.(t),!t.defaultPrevented&&t.detail>1&&t.preventDefault())}}));a.displayName="Label";var l=e.i(94237),i=e.i(76490);let s=(0,l.cva)("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"),d=r.forwardRef(({className:e,...r},n)=>(0,t.jsx)(a,{ref:n,className:(0,i.cn)(s(),e),...r}));d.displayName=a.displayName,e.s(["Label",0,d],66476)},7284,e=>{"use strict";e.s(["clsx",0,function(){for(var e,t,r=0,n="",o=arguments.length;r<o;r++)(e=arguments[r])&&(t=function e(t){var r,n,o="";if("string"==typeof t||"number"==typeof t)o+=t;else if("object"==typeof t)if(Array.isArray(t)){var a=t.length;for(r=0;r<a;r++)t[r]&&(n=e(t[r]))&&(o&&(o+=" "),o+=n)}else for(n in t)t[n]&&(o&&(o+=" "),o+=n);return o}(e))&&(n&&(n+=" "),n+=t);return n}])},76490,e=>{"use strict";var t=e.i(7284),r=e.i(77130);e.s(["cn",0,function(...e){return(0,r.twMerge)((0,t.clsx)(e))},"extractFileName",0,function(e){let t=e.split("/");return t[t.length-1]||e}])},67928,e=>{"use strict";var t=e.i(17635);function r(e,t){if("function"==typeof e)return e(t);null!=e&&(e.current=t)}function n(...e){return t=>{let n=!1,o=e.map(e=>{let o=r(e,t);return n||"function"!=typeof o||(n=!0),o});if(n)return()=>{for(let t=0;t<o.length;t++){let n=o[t];"function"==typeof n?n():r(e[t],null)}}}}e.s(["composeRefs",0,n,"useComposedRefs",0,function(...e){return t.useCallback(n(...e),e)}])},6102,e=>{"use strict";var t=e.i(17635),r=e.i(67928),n=e.i(44501),o=Symbol.for("react.lazy"),a=t[" use ".trim().toString()];function l(e){var t;return null!=e&&"object"==typeof e&&"$$typeof"in e&&e.$$typeof===o&&"_payload"in e&&"object"==typeof(t=e._payload)&&null!==t&&"then"in t}function i(e){var o;let i,s=(o=e,(i=t.forwardRef((e,n)=>{let{children:o,...i}=e;if(l(o)&&"function"==typeof a&&(o=a(o._payload)),t.isValidElement(o)){var s;let e,a,l=(s=o,(a=(e=Object.getOwnPropertyDescriptor(s.props,"ref")?.get)&&"isReactWarning"in e&&e.isReactWarning)?s.ref:(a=(e=Object.getOwnPropertyDescriptor(s,"ref")?.get)&&"isReactWarning"in e&&e.isReactWarning)?s.props.ref:s.props.ref||s.ref),d=function(e,t){let r={...t};for(let n in t){let o=e[n],a=t[n];/^on[A-Z]/.test(n)?o&&a?r[n]=(...e)=>{let t=a(...e);return o(...e),t}:o&&(r[n]=o):"style"===n?r[n]={...o,...a}:"className"===n&&(r[n]=[o,a].filter(Boolean).join(" "))}return{...e,...r}}(i,o.props);return o.type!==t.Fragment&&(d.ref=n?(0,r.composeRefs)(n,l):l),t.cloneElement(o,d)}return t.Children.count(o)>1?t.Children.only(null):null})).displayName=`${o}.SlotClone`,i),d=t.forwardRef((e,r)=>{let{children:o,...i}=e;l(o)&&"function"==typeof a&&(o=a(o._payload));let d=t.Children.toArray(o),u=d.find(c);if(u){let e=u.props.children,o=d.map(r=>r!==u?r:t.Children.count(e)>1?t.Children.only(null):t.isValidElement(e)?e.props.children:null);return(0,n.jsx)(s,{...i,ref:r,children:t.isValidElement(e)?t.cloneElement(e,void 0,o):null})}return(0,n.jsx)(s,{...i,ref:r,children:o})});return d.displayName=`${e}.Slot`,d}var s=i("Slot"),d=Symbol("radix.slottable");function c(e){return t.isValidElement(e)&&"function"==typeof e.type&&"__radixId"in e.type&&e.type.__radixId===d}e.s(["Slot",0,s,"createSlot",0,i])},94237,e=>{"use strict";var t=e.i(7284);let r=e=>"boolean"==typeof e?`${e}`:0===e?"0":e,n=t.clsx;e.s(["cva",0,(e,t)=>o=>{var a;if((null==t?void 0:t.variants)==null)return n(e,null==o?void 0:o.class,null==o?void 0:o.className);let{variants:l,defaultVariants:i}=t,s=Object.keys(l).map(e=>{let t=null==o?void 0:o[e],n=null==i?void 0:i[e];if(null===t)return null;let a=r(t)||r(n);return l[e][a]}),d=o&&Object.entries(o).reduce((e,t)=>{let[r,n]=t;return void 0===n||(e[r]=n),e},{});return n(e,s,null==t||null==(a=t.compoundVariants)?void 0:a.reduce((e,t)=>{let{class:r,className:n,...o}=t;return Object.entries(o).every(e=>{let[t,r]=e;return Array.isArray(r)?r.includes({...i,...d}[t]):({...i,...d})[t]===r})?[...e,r,n]:e},[]),null==o?void 0:o.class,null==o?void 0:o.className)}])},42595,e=>{"use strict";var t=e.i(44501),r=e.i(17635),n=e.i(6102),o=e.i(94237),a=e.i(76490);let l=(0,o.cva)("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:"bg-[hsl(var(--primary))] text-[hsl(var(--primary-foreground))] shadow hover:opacity-90",destructive:"bg-[hsl(var(--destructive))] text-[hsl(var(--destructive-foreground))] shadow-sm hover:opacity-90",outline:"border border-[hsl(var(--input))] bg-[hsl(var(--background))] shadow-sm hover:bg-[hsl(var(--accent))] hover:text-[hsl(var(--accent-foreground))]",secondary:"bg-[hsl(var(--secondary))] text-[hsl(var(--secondary-foreground))] shadow-sm hover:opacity-80",ghost:"hover:bg-[hsl(var(--accent))] hover:text-[hsl(var(--accent-foreground))]",link:"text-[hsl(var(--primary))] underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2",sm:"h-8 rounded-md px-3 text-xs",lg:"h-10 rounded-md px-8",icon:"h-9 w-9"}},defaultVariants:{variant:"default",size:"default"}}),i=r.forwardRef(({className:e,variant:r,size:o,asChild:i=!1,...s},d)=>{let c=i?n.Slot:"button";return(0,t.jsx)(c,{className:(0,a.cn)(l({variant:r,size:o,className:e})),ref:d,...s})});i.displayName="Button",e.s(["Button",0,i])},86620,e=>{"use strict";var t=e.i(17635);let r=(...e)=>e.filter((e,t,r)=>!!e&&""!==e.trim()&&r.indexOf(e)===t).join(" ").trim(),n=e=>{let t=e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,r)=>r?r.toUpperCase():t.toLowerCase());return t.charAt(0).toUpperCase()+t.slice(1)};var o={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let a=(0,t.createContext)({}),l=(0,t.forwardRef)(({color:e,size:n,strokeWidth:l,absoluteStrokeWidth:i,className:s="",children:d,iconNode:c,...u},p)=>{let{size:f=24,strokeWidth:m=2,absoluteStrokeWidth:v=!1,color:h="currentColor",className:y=""}=(0,t.useContext)(a)??{},g=i??v?24*Number(l??m)/Number(n??f):l??m;return(0,t.createElement)("svg",{ref:p,...o,width:n??f??o.width,height:n??f??o.height,stroke:e??h,strokeWidth:g,className:r("lucide",y,s),...!d&&!(e=>{for(let t in e)if(t.startsWith("aria-")||"role"===t||"title"===t)return!0;return!1})(u)&&{"aria-hidden":"true"},...u},[...c.map(([e,r])=>(0,t.createElement)(e,r)),...Array.isArray(d)?d:[d]])});e.s(["default",0,(e,o)=>{let a=(0,t.forwardRef)(({className:a,...i},s)=>(0,t.createElement)(l,{ref:s,iconNode:o,className:r(`lucide-${n(e).replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}`,`lucide-${e}`,a),...i}));return a.displayName=n(e),a}],86620)},65581,(e,t,r)=>{t.exports=e.r(97832)},93321,e=>{"use strict";function t(e,r,n=3e4){let o=new AbortController,a=setTimeout(()=>o.abort(),n);return fetch(e,{...r,signal:o.signal}).finally(()=>clearTimeout(a))}class r extends Error{code;status;constructor(e,t,r){super(t),this.name="ApiClientError",this.code=e,this.status=r}}let n={401:"UNAUTHORIZED",403:"FORBIDDEN",404:"NOT_FOUND",429:"RATE_LIMITED",503:"SERVICE_UNAVAILABLE"};async function o(e){if(!e.ok){let t=n[e.status]??"UNKNOWN_ERROR",o=`Request failed with status ${e.status}`;try{let r=await e.json();t=r.code??t,o=r.message??o}catch{}throw new r(t,o,e.status)}let t=await e.json();if("SUCCESS"!==t.code)throw new r(t.code,t.message??"Unknown error",e.status);return t.data}function a(e){let t={};return e&&(t["Content-Type"]=e),t}async function l(e){var r;return o(await t((r=e,`${r}`),{method:"GET",headers:a("application/json")}))}async function i(e,r){var n;return o(await t((n=e,`${n}`),{method:"POST",headers:a("application/json"),body:void 0!==r?JSON.stringify(r):void 0}))}async function s(e,r){var n;return o(await t((n=e,`${n}`),{method:"PUT",headers:a("application/json"),body:void 0!==r?JSON.stringify(r):void 0}))}async function d(e,r){var n;return o(await t((n=e,`${n}`),{method:"DELETE",headers:a("application/json"),body:void 0!==r?JSON.stringify(r):void 0}))}async function c(e,r){var n;return o(await t((n=e,`${n}`),{method:"POST",body:r}))}e.s(["apiDelete",0,d,"apiGet",0,l,"apiPost",0,i,"apiPut",0,s,"apiUpload",0,c])},23888,e=>{"use strict";var t=e.i(44501),r=e.i(17635),n=e.i(76490);let o=r.forwardRef(({className:e,type:r,...o},a)=>(0,t.jsx)("input",{type:r,className:(0,n.cn)("flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",e),ref:a,...o}));o.displayName="Input",e.s(["Input",0,o])},20268,e=>{"use strict";let t=(0,e.i(86620).default)("chevron-down",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);e.s(["ChevronDown",0,t],20268)},47791,e=>{"use strict";var t=e.i(17635),r=e.i(80939),n=e.i(44501),o=Object.freeze({position:"absolute",border:0,width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",wordWrap:"normal"}),a=t.forwardRef((e,t)=>(0,n.jsx)(r.Primitive.span,{...e,ref:t,style:{...o,...e.style}}));a.displayName="VisuallyHidden",e.s(["Root",0,a,"VISUALLY_HIDDEN_STYLES",0,o])},84017,e=>{"use strict";var t=e.i(17635);e.s(["usePrevious",0,function(e){let r=t.useRef({value:e,previous:e});return t.useMemo(()=>(r.current.value!==e&&(r.current.previous=r.current.value,r.current.value=e),r.current.previous),[e])}])},90055,e=>{"use strict";let t=(0,e.i(86620).default)("chevron-up",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]);e.s(["ChevronUp",0,t],90055)},66473,27069,e=>{"use strict";var t=e.i(44501),r=e.i(17635),n=e.i(80560);function o(e,[t,r]){return Math.min(r,Math.max(t,e))}e.s(["clamp",0,o],27069);var a=e.i(91967),l=e.i(41986),i=e.i(67928),s=e.i(43250),d=e.i(25486),c=e.i(48989),u=e.i(39340),p=e.i(45424),f=e.i(33616),m=e.i(38154),v=e.i(32374),h=e.i(80939),y=e.i(52053),g=e.i(36131),w=e.i(17256),x=e.i(72687),b=e.i(84017),S=e.i(47791),C=e.i(73772),j=e.i(6500),N=[" ","Enter","ArrowUp","ArrowDown"],R=[" ","Enter"],E="Select",[P,T,k]=(0,l.createCollection)(E),[I,D]=(0,s.createContextScope)(E,[k,m.createPopperScope]),L=(0,m.createPopperScope)(),[A,H]=I(E),[_,O]=I(E),M=e=>{let{__scopeSelect:n,children:o,open:a,defaultOpen:l,onOpenChange:i,value:s,defaultValue:c,onValueChange:u,dir:p,name:v,autoComplete:h,disabled:y,required:g,form:x}=e,b=L(n),[S,C]=r.useState(null),[j,N]=r.useState(null),[R,T]=r.useState(!1),k=(0,d.useDirection)(p),[I,D]=(0,w.useControllableState)({prop:a,defaultProp:l??!1,onChange:i,caller:E}),[H,O]=(0,w.useControllableState)({prop:s,defaultProp:c,onChange:u,caller:E}),M=r.useRef(null),V=!S||x||!!S.closest("form"),[U,B]=r.useState(new Set),W=Array.from(U).map(e=>e.props.value).join(";");return(0,t.jsx)(m.Root,{...b,children:(0,t.jsxs)(A,{required:g,scope:n,trigger:S,onTriggerChange:C,valueNode:j,onValueNodeChange:N,valueNodeHasChildren:R,onValueNodeHasChildrenChange:T,contentId:(0,f.useId)(),value:H,onValueChange:O,open:I,onOpenChange:D,dir:k,triggerPointerDownPosRef:M,disabled:y,children:[(0,t.jsx)(P.Provider,{scope:n,children:(0,t.jsx)(_,{scope:e.__scopeSelect,onNativeOptionAdd:r.useCallback(e=>{B(t=>new Set(t).add(e))},[]),onNativeOptionRemove:r.useCallback(e=>{B(t=>{let r=new Set(t);return r.delete(e),r})},[]),children:o})}),V?(0,t.jsxs)(eC,{"aria-hidden":!0,required:g,tabIndex:-1,name:v,autoComplete:h,value:H,onChange:e=>O(e.target.value),disabled:y,form:x,children:[void 0===H?(0,t.jsx)("option",{value:""}):null,Array.from(U)]},W):null]})})};M.displayName=E;var V="SelectTrigger",U=r.forwardRef((e,n)=>{let{__scopeSelect:o,disabled:l=!1,...s}=e,d=L(o),c=H(V,o),u=c.disabled||l,p=(0,i.useComposedRefs)(n,c.onTriggerChange),f=T(o),v=r.useRef("touch"),[y,g,w]=eN(e=>{let t=f().filter(e=>!e.disabled),r=t.find(e=>e.value===c.value),n=eR(t,e,r);void 0!==n&&c.onValueChange(n.value)}),x=e=>{u||(c.onOpenChange(!0),w()),e&&(c.triggerPointerDownPosRef.current={x:Math.round(e.pageX),y:Math.round(e.pageY)})};return(0,t.jsx)(m.Anchor,{asChild:!0,...d,children:(0,t.jsx)(h.Primitive.button,{type:"button",role:"combobox","aria-controls":c.contentId,"aria-expanded":c.open,"aria-required":c.required,"aria-autocomplete":"none",dir:c.dir,"data-state":c.open?"open":"closed",disabled:u,"data-disabled":u?"":void 0,"data-placeholder":ej(c.value)?"":void 0,...s,ref:p,onClick:(0,a.composeEventHandlers)(s.onClick,e=>{e.currentTarget.focus(),"mouse"!==v.current&&x(e)}),onPointerDown:(0,a.composeEventHandlers)(s.onPointerDown,e=>{v.current=e.pointerType;let t=e.target;t.hasPointerCapture(e.pointerId)&&t.releasePointerCapture(e.pointerId),0===e.button&&!1===e.ctrlKey&&"mouse"===e.pointerType&&(x(e),e.preventDefault())}),onKeyDown:(0,a.composeEventHandlers)(s.onKeyDown,e=>{let t=""!==y.current;e.ctrlKey||e.altKey||e.metaKey||1!==e.key.length||g(e.key),(!t||" "!==e.key)&&N.includes(e.key)&&(x(),e.preventDefault())})})})});U.displayName=V;var B="SelectValue",W=r.forwardRef((e,r)=>{let{__scopeSelect:n,className:o,style:a,children:l,placeholder:s="",...d}=e,c=H(B,n),{onValueNodeHasChildrenChange:u}=c,p=void 0!==l,f=(0,i.useComposedRefs)(r,c.onValueNodeChange);return(0,x.useLayoutEffect)(()=>{u(p)},[u,p]),(0,t.jsx)(h.Primitive.span,{...d,ref:f,style:{pointerEvents:"none"},children:ej(c.value)?(0,t.jsx)(t.Fragment,{children:s}):l})});W.displayName=B;var $=r.forwardRef((e,r)=>{let{__scopeSelect:n,children:o,...a}=e;return(0,t.jsx)(h.Primitive.span,{"aria-hidden":!0,...a,ref:r,children:o||"▼"})});$.displayName="SelectIcon";var F=e=>(0,t.jsx)(v.Portal,{asChild:!0,...e});F.displayName="SelectPortal";var z="SelectContent",K=r.forwardRef((e,o)=>{let a=H(z,e.__scopeSelect),[l,i]=r.useState();return((0,x.useLayoutEffect)(()=>{i(new DocumentFragment)},[]),a.open)?(0,t.jsx)(G,{...e,ref:o}):l?n.createPortal((0,t.jsx)(Y,{scope:e.__scopeSelect,children:(0,t.jsx)(P.Slot,{scope:e.__scopeSelect,children:(0,t.jsx)("div",{children:e.children})})}),l):null});K.displayName=z;var[Y,q]=I(z),Z=(0,y.createSlot)("SelectContent.RemoveScroll"),G=r.forwardRef((e,n)=>{let{__scopeSelect:o,position:l="item-aligned",onCloseAutoFocus:s,onEscapeKeyDown:d,onPointerDownOutside:f,side:m,sideOffset:v,align:h,alignOffset:y,arrowPadding:g,collisionBoundary:w,collisionPadding:x,sticky:b,hideWhenDetached:S,avoidCollisions:N,...R}=e,E=H(z,o),[P,k]=r.useState(null),[I,D]=r.useState(null),L=(0,i.useComposedRefs)(n,e=>k(e)),[A,_]=r.useState(null),[O,M]=r.useState(null),V=T(o),[U,B]=r.useState(!1),W=r.useRef(!1);r.useEffect(()=>{if(P)return(0,C.hideOthers)(P)},[P]),(0,u.useFocusGuards)();let $=r.useCallback(e=>{let[t,...r]=V().map(e=>e.ref.current),[n]=r.slice(-1),o=document.activeElement;for(let r of e)if(r===o||(r?.scrollIntoView({block:"nearest"}),r===t&&I&&(I.scrollTop=0),r===n&&I&&(I.scrollTop=I.scrollHeight),r?.focus(),document.activeElement!==o))return},[V,I]),F=r.useCallback(()=>$([A,P]),[$,A,P]);r.useEffect(()=>{U&&F()},[U,F]);let{onOpenChange:K,triggerPointerDownPosRef:q}=E;r.useEffect(()=>{if(P){let e={x:0,y:0},t=t=>{e={x:Math.abs(Math.round(t.pageX)-(q.current?.x??0)),y:Math.abs(Math.round(t.pageY)-(q.current?.y??0))}},r=r=>{e.x<=10&&e.y<=10?r.preventDefault():P.contains(r.target)||K(!1),document.removeEventListener("pointermove",t),q.current=null};return null!==q.current&&(document.addEventListener("pointermove",t),document.addEventListener("pointerup",r,{capture:!0,once:!0})),()=>{document.removeEventListener("pointermove",t),document.removeEventListener("pointerup",r,{capture:!0})}}},[P,K,q]),r.useEffect(()=>{let e=()=>K(!1);return window.addEventListener("blur",e),window.addEventListener("resize",e),()=>{window.removeEventListener("blur",e),window.removeEventListener("resize",e)}},[K]);let[G,Q]=eN(e=>{let t=V().filter(e=>!e.disabled),r=t.find(e=>e.ref.current===document.activeElement),n=eR(t,e,r);n&&setTimeout(()=>n.ref.current.focus())}),ee=r.useCallback((e,t,r)=>{let n=!W.current&&!r;(void 0!==E.value&&E.value===t||n)&&(_(e),n&&(W.current=!0))},[E.value]),et=r.useCallback(()=>P?.focus(),[P]),er=r.useCallback((e,t,r)=>{let n=!W.current&&!r;(void 0!==E.value&&E.value===t||n)&&M(e)},[E.value]),en="popper"===l?X:J,eo=en===X?{side:m,sideOffset:v,align:h,alignOffset:y,arrowPadding:g,collisionBoundary:w,collisionPadding:x,sticky:b,hideWhenDetached:S,avoidCollisions:N}:{};return(0,t.jsx)(Y,{scope:o,content:P,viewport:I,onViewportChange:D,itemRefCallback:ee,selectedItem:A,onItemLeave:et,itemTextRefCallback:er,focusSelectedItem:F,selectedItemText:O,position:l,isPositioned:U,searchRef:G,children:(0,t.jsx)(j.RemoveScroll,{as:Z,allowPinchZoom:!0,children:(0,t.jsx)(p.FocusScope,{asChild:!0,trapped:E.open,onMountAutoFocus:e=>{e.preventDefault()},onUnmountAutoFocus:(0,a.composeEventHandlers)(s,e=>{E.trigger?.focus({preventScroll:!0}),e.preventDefault()}),children:(0,t.jsx)(c.DismissableLayer,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:d,onPointerDownOutside:f,onFocusOutside:e=>e.preventDefault(),onDismiss:()=>E.onOpenChange(!1),children:(0,t.jsx)(en,{role:"listbox",id:E.contentId,"data-state":E.open?"open":"closed",dir:E.dir,onContextMenu:e=>e.preventDefault(),...R,...eo,onPlaced:()=>B(!0),ref:L,style:{display:"flex",flexDirection:"column",outline:"none",...R.style},onKeyDown:(0,a.composeEventHandlers)(R.onKeyDown,e=>{let t=e.ctrlKey||e.altKey||e.metaKey;if("Tab"===e.key&&e.preventDefault(),t||1!==e.key.length||Q(e.key),["ArrowUp","ArrowDown","Home","End"].includes(e.key)){let t=V().filter(e=>!e.disabled).map(e=>e.ref.current);if(["ArrowUp","End"].includes(e.key)&&(t=t.slice().reverse()),["ArrowUp","ArrowDown"].includes(e.key)){let r=e.target,n=t.indexOf(r);t=t.slice(n+1)}setTimeout(()=>$(t)),e.preventDefault()}})})})})})})});G.displayName="SelectContentImpl";var J=r.forwardRef((e,n)=>{let{__scopeSelect:a,onPlaced:l,...s}=e,d=H(z,a),c=q(z,a),[u,p]=r.useState(null),[f,m]=r.useState(null),v=(0,i.useComposedRefs)(n,e=>m(e)),y=T(a),g=r.useRef(!1),w=r.useRef(!0),{viewport:b,selectedItem:S,selectedItemText:C,focusSelectedItem:j}=c,N=r.useCallback(()=>{if(d.trigger&&d.valueNode&&u&&f&&b&&S&&C){let e=d.trigger.getBoundingClientRect(),t=f.getBoundingClientRect(),r=d.valueNode.getBoundingClientRect(),n=C.getBoundingClientRect();if("rtl"!==d.dir){let a=n.left-t.left,l=r.left-a,i=e.left-l,s=e.width+i,d=Math.max(s,t.width),c=o(l,[10,Math.max(10,window.innerWidth-10-d)]);u.style.minWidth=s+"px",u.style.left=c+"px"}else{let a=t.right-n.right,l=window.innerWidth-r.right-a,i=window.innerWidth-e.right-l,s=e.width+i,d=Math.max(s,t.width),c=o(l,[10,Math.max(10,window.innerWidth-10-d)]);u.style.minWidth=s+"px",u.style.right=c+"px"}let a=y(),i=window.innerHeight-20,s=b.scrollHeight,c=window.getComputedStyle(f),p=parseInt(c.borderTopWidth,10),m=parseInt(c.paddingTop,10),v=parseInt(c.borderBottomWidth,10),h=p+m+s+parseInt(c.paddingBottom,10)+v,w=Math.min(5*S.offsetHeight,h),x=window.getComputedStyle(b),j=parseInt(x.paddingTop,10),N=parseInt(x.paddingBottom,10),R=e.top+e.height/2-10,E=S.offsetHeight/2,P=p+m+(S.offsetTop+E);if(P<=R){let e=a.length>0&&S===a[a.length-1].ref.current;u.style.bottom="0px";let t=Math.max(i-R,E+(e?N:0)+(f.clientHeight-b.offsetTop-b.offsetHeight)+v);u.style.height=P+t+"px"}else{let e=a.length>0&&S===a[0].ref.current;u.style.top="0px";let t=Math.max(R,p+b.offsetTop+(e?j:0)+E);u.style.height=t+(h-P)+"px",b.scrollTop=P-R+b.offsetTop}u.style.margin="10px 0",u.style.minHeight=w+"px",u.style.maxHeight=i+"px",l?.(),requestAnimationFrame(()=>g.current=!0)}},[y,d.trigger,d.valueNode,u,f,b,S,C,d.dir,l]);(0,x.useLayoutEffect)(()=>N(),[N]);let[R,E]=r.useState();(0,x.useLayoutEffect)(()=>{f&&E(window.getComputedStyle(f).zIndex)},[f]);let P=r.useCallback(e=>{e&&!0===w.current&&(N(),j?.(),w.current=!1)},[N,j]);return(0,t.jsx)(Q,{scope:a,contentWrapper:u,shouldExpandOnScrollRef:g,onScrollButtonChange:P,children:(0,t.jsx)("div",{ref:p,style:{display:"flex",flexDirection:"column",position:"fixed",zIndex:R},children:(0,t.jsx)(h.Primitive.div,{...s,ref:v,style:{boxSizing:"border-box",maxHeight:"100%",...s.style}})})})});J.displayName="SelectItemAlignedPosition";var X=r.forwardRef((e,r)=>{let{__scopeSelect:n,align:o="start",collisionPadding:a=10,...l}=e,i=L(n);return(0,t.jsx)(m.Content,{...i,...l,ref:r,align:o,collisionPadding:a,style:{boxSizing:"border-box",...l.style,"--radix-select-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-select-content-available-width":"var(--radix-popper-available-width)","--radix-select-content-available-height":"var(--radix-popper-available-height)","--radix-select-trigger-width":"var(--radix-popper-anchor-width)","--radix-select-trigger-height":"var(--radix-popper-anchor-height)"}})});X.displayName="SelectPopperPosition";var[Q,ee]=I(z,{}),et="SelectViewport",er=r.forwardRef((e,n)=>{let{__scopeSelect:o,nonce:l,...s}=e,d=q(et,o),c=ee(et,o),u=(0,i.useComposedRefs)(n,d.onViewportChange),p=r.useRef(0);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("style",{dangerouslySetInnerHTML:{__html:"[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}"},nonce:l}),(0,t.jsx)(P.Slot,{scope:o,children:(0,t.jsx)(h.Primitive.div,{"data-radix-select-viewport":"",role:"presentation",...s,ref:u,style:{position:"relative",flex:1,overflow:"hidden auto",...s.style},onScroll:(0,a.composeEventHandlers)(s.onScroll,e=>{let t=e.currentTarget,{contentWrapper:r,shouldExpandOnScrollRef:n}=c;if(n?.current&&r){let e=Math.abs(p.current-t.scrollTop);if(e>0){let n=window.innerHeight-20,o=Math.max(parseFloat(r.style.minHeight),parseFloat(r.style.height));if(o<n){let a=o+e,l=Math.min(n,a),i=a-l;r.style.height=l+"px","0px"===r.style.bottom&&(t.scrollTop=i>0?i:0,r.style.justifyContent="flex-end")}}}p.current=t.scrollTop})})})]})});er.displayName=et;var en="SelectGroup",[eo,ea]=I(en);r.forwardRef((e,r)=>{let{__scopeSelect:n,...o}=e,a=(0,f.useId)();return(0,t.jsx)(eo,{scope:n,id:a,children:(0,t.jsx)(h.Primitive.div,{role:"group","aria-labelledby":a,...o,ref:r})})}).displayName=en;var el="SelectLabel",ei=r.forwardRef((e,r)=>{let{__scopeSelect:n,...o}=e,a=ea(el,n);return(0,t.jsx)(h.Primitive.div,{id:a.id,...o,ref:r})});ei.displayName=el;var es="SelectItem",[ed,ec]=I(es),eu=r.forwardRef((e,n)=>{let{__scopeSelect:o,value:l,disabled:s=!1,textValue:d,...c}=e,u=H(es,o),p=q(es,o),m=u.value===l,[v,y]=r.useState(d??""),[g,w]=r.useState(!1),x=(0,i.useComposedRefs)(n,e=>p.itemRefCallback?.(e,l,s)),b=(0,f.useId)(),S=r.useRef("touch"),C=()=>{s||(u.onValueChange(l),u.onOpenChange(!1))};if(""===l)throw Error("A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.");return(0,t.jsx)(ed,{scope:o,value:l,disabled:s,textId:b,isSelected:m,onItemTextChange:r.useCallback(e=>{y(t=>t||(e?.textContent??"").trim())},[]),children:(0,t.jsx)(P.ItemSlot,{scope:o,value:l,disabled:s,textValue:v,children:(0,t.jsx)(h.Primitive.div,{role:"option","aria-labelledby":b,"data-highlighted":g?"":void 0,"aria-selected":m&&g,"data-state":m?"checked":"unchecked","aria-disabled":s||void 0,"data-disabled":s?"":void 0,tabIndex:s?void 0:-1,...c,ref:x,onFocus:(0,a.composeEventHandlers)(c.onFocus,()=>w(!0)),onBlur:(0,a.composeEventHandlers)(c.onBlur,()=>w(!1)),onClick:(0,a.composeEventHandlers)(c.onClick,()=>{"mouse"!==S.current&&C()}),onPointerUp:(0,a.composeEventHandlers)(c.onPointerUp,()=>{"mouse"===S.current&&C()}),onPointerDown:(0,a.composeEventHandlers)(c.onPointerDown,e=>{S.current=e.pointerType}),onPointerMove:(0,a.composeEventHandlers)(c.onPointerMove,e=>{S.current=e.pointerType,s?p.onItemLeave?.():"mouse"===S.current&&e.currentTarget.focus({preventScroll:!0})}),onPointerLeave:(0,a.composeEventHandlers)(c.onPointerLeave,e=>{e.currentTarget===document.activeElement&&p.onItemLeave?.()}),onKeyDown:(0,a.composeEventHandlers)(c.onKeyDown,e=>{(p.searchRef?.current===""||" "!==e.key)&&(R.includes(e.key)&&C()," "===e.key&&e.preventDefault())})})})})});eu.displayName=es;var ep="SelectItemText",ef=r.forwardRef((e,o)=>{let{__scopeSelect:a,className:l,style:s,...d}=e,c=H(ep,a),u=q(ep,a),p=ec(ep,a),f=O(ep,a),[m,v]=r.useState(null),y=(0,i.useComposedRefs)(o,e=>v(e),p.onItemTextChange,e=>u.itemTextRefCallback?.(e,p.value,p.disabled)),g=m?.textContent,w=r.useMemo(()=>(0,t.jsx)("option",{value:p.value,disabled:p.disabled,children:g},p.value),[p.disabled,p.value,g]),{onNativeOptionAdd:b,onNativeOptionRemove:S}=f;return(0,x.useLayoutEffect)(()=>(b(w),()=>S(w)),[b,S,w]),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(h.Primitive.span,{id:p.textId,...d,ref:y}),p.isSelected&&c.valueNode&&!c.valueNodeHasChildren?n.createPortal(d.children,c.valueNode):null]})});ef.displayName=ep;var em="SelectItemIndicator",ev=r.forwardRef((e,r)=>{let{__scopeSelect:n,...o}=e;return ec(em,n).isSelected?(0,t.jsx)(h.Primitive.span,{"aria-hidden":!0,...o,ref:r}):null});ev.displayName=em;var eh="SelectScrollUpButton",ey=r.forwardRef((e,n)=>{let o=q(eh,e.__scopeSelect),a=ee(eh,e.__scopeSelect),[l,s]=r.useState(!1),d=(0,i.useComposedRefs)(n,a.onScrollButtonChange);return(0,x.useLayoutEffect)(()=>{if(o.viewport&&o.isPositioned){let e=function(){s(t.scrollTop>0)},t=o.viewport;return e(),t.addEventListener("scroll",e),()=>t.removeEventListener("scroll",e)}},[o.viewport,o.isPositioned]),l?(0,t.jsx)(ex,{...e,ref:d,onAutoScroll:()=>{let{viewport:e,selectedItem:t}=o;e&&t&&(e.scrollTop=e.scrollTop-t.offsetHeight)}}):null});ey.displayName=eh;var eg="SelectScrollDownButton",ew=r.forwardRef((e,n)=>{let o=q(eg,e.__scopeSelect),a=ee(eg,e.__scopeSelect),[l,s]=r.useState(!1),d=(0,i.useComposedRefs)(n,a.onScrollButtonChange);return(0,x.useLayoutEffect)(()=>{if(o.viewport&&o.isPositioned){let e=function(){let e=t.scrollHeight-t.clientHeight;s(Math.ceil(t.scrollTop)<e)},t=o.viewport;return e(),t.addEventListener("scroll",e),()=>t.removeEventListener("scroll",e)}},[o.viewport,o.isPositioned]),l?(0,t.jsx)(ex,{...e,ref:d,onAutoScroll:()=>{let{viewport:e,selectedItem:t}=o;e&&t&&(e.scrollTop=e.scrollTop+t.offsetHeight)}}):null});ew.displayName=eg;var ex=r.forwardRef((e,n)=>{let{__scopeSelect:o,onAutoScroll:l,...i}=e,s=q("SelectScrollButton",o),d=r.useRef(null),c=T(o),u=r.useCallback(()=>{null!==d.current&&(window.clearInterval(d.current),d.current=null)},[]);return r.useEffect(()=>()=>u(),[u]),(0,x.useLayoutEffect)(()=>{let e=c().find(e=>e.ref.current===document.activeElement);e?.ref.current?.scrollIntoView({block:"nearest"})},[c]),(0,t.jsx)(h.Primitive.div,{"aria-hidden":!0,...i,ref:n,style:{flexShrink:0,...i.style},onPointerDown:(0,a.composeEventHandlers)(i.onPointerDown,()=>{null===d.current&&(d.current=window.setInterval(l,50))}),onPointerMove:(0,a.composeEventHandlers)(i.onPointerMove,()=>{s.onItemLeave?.(),null===d.current&&(d.current=window.setInterval(l,50))}),onPointerLeave:(0,a.composeEventHandlers)(i.onPointerLeave,()=>{u()})})}),eb=r.forwardRef((e,r)=>{let{__scopeSelect:n,...o}=e;return(0,t.jsx)(h.Primitive.div,{"aria-hidden":!0,...o,ref:r})});eb.displayName="SelectSeparator";var eS="SelectArrow";r.forwardRef((e,r)=>{let{__scopeSelect:n,...o}=e,a=L(n),l=H(eS,n),i=q(eS,n);return l.open&&"popper"===i.position?(0,t.jsx)(m.Arrow,{...a,...o,ref:r}):null}).displayName=eS;var eC=r.forwardRef(({__scopeSelect:e,value:n,...o},a)=>{let l=r.useRef(null),s=(0,i.useComposedRefs)(a,l),d=(0,b.usePrevious)(n);return r.useEffect(()=>{let e=l.current;if(!e)return;let t=Object.getOwnPropertyDescriptor(window.HTMLSelectElement.prototype,"value").set;if(d!==n&&t){let r=new Event("change",{bubbles:!0});t.call(e,n),e.dispatchEvent(r)}},[d,n]),(0,t.jsx)(h.Primitive.select,{...o,style:{...S.VISUALLY_HIDDEN_STYLES,...o.style},ref:s,defaultValue:n})});function ej(e){return""===e||void 0===e}function eN(e){let t=(0,g.useCallbackRef)(e),n=r.useRef(""),o=r.useRef(0),a=r.useCallback(e=>{let r=n.current+e;t(r),function e(t){n.current=t,window.clearTimeout(o.current),""!==t&&(o.current=window.setTimeout(()=>e(""),1e3))}(r)},[t]),l=r.useCallback(()=>{n.current="",window.clearTimeout(o.current)},[]);return r.useEffect(()=>()=>window.clearTimeout(o.current),[]),[n,a,l]}function eR(e,t,r){var n,o;let a=t.length>1&&Array.from(t).every(e=>e===t[0])?t[0]:t,l=r?e.indexOf(r):-1,i=(n=e,o=Math.max(l,0),n.map((e,t)=>n[(o+t)%n.length]));1===a.length&&(i=i.filter(e=>e!==r));let s=i.find(e=>e.textValue.toLowerCase().startsWith(a.toLowerCase()));return s!==r?s:void 0}eC.displayName="SelectBubbleInput";var eE=e.i(6703),eP=e.i(20268),eT=e.i(90055),ek=e.i(76490);let eI=r.forwardRef(({className:e,children:r,...n},o)=>(0,t.jsxs)(U,{ref:o,className:(0,ek.cn)("flex h-9 w-full items-center justify-between whitespace-nowrap rounded-md border border-input px-3 py-2 text-sm shadow-sm ring-offset-background data-[placeholder]:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1","bg-[hsl(var(--background))]",e),...n,children:[r,(0,t.jsx)($,{asChild:!0,children:(0,t.jsx)(eP.ChevronDown,{className:"h-4 w-4 opacity-50"})})]}));eI.displayName=U.displayName;let eD=r.forwardRef(({className:e,...r},n)=>(0,t.jsx)(ey,{ref:n,className:(0,ek.cn)("flex cursor-default items-center justify-center py-1",e),...r,children:(0,t.jsx)(eT.ChevronUp,{className:"h-4 w-4"})}));eD.displayName=ey.displayName;let eL=r.forwardRef(({className:e,...r},n)=>(0,t.jsx)(ew,{ref:n,className:(0,ek.cn)("flex cursor-default items-center justify-center py-1",e),...r,children:(0,t.jsx)(eP.ChevronDown,{className:"h-4 w-4"})}));eL.displayName=ew.displayName;let eA=r.forwardRef(({className:e,children:r,position:n="popper",...o},a)=>(0,t.jsx)(F,{children:(0,t.jsxs)(K,{ref:a,className:(0,ek.cn)("relative z-50 max-h-72 min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-select-content-transform-origin]","bg-[hsl(var(--popover))] text-[hsl(var(--popover-foreground))]","popper"===n&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",e),position:n,...o,children:[(0,t.jsx)(eD,{}),(0,t.jsx)(er,{className:(0,ek.cn)("p-1","popper"===n&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"),children:r}),(0,t.jsx)(eL,{})]})}));eA.displayName=K.displayName,r.forwardRef(({className:e,...r},n)=>(0,t.jsx)(ei,{ref:n,className:(0,ek.cn)("px-2 py-1.5 text-sm font-semibold",e),...r})).displayName=ei.displayName;let eH=r.forwardRef(({className:e,children:r,...n},o)=>(0,t.jsxs)(eu,{ref:o,className:(0,ek.cn)("relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-sm outline-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50","hover:bg-[hsl(var(--accent))] hover:text-[hsl(var(--accent-foreground))] focus:bg-[hsl(var(--accent))] focus:text-[hsl(var(--accent-foreground))]",e),...n,children:[(0,t.jsx)("span",{className:"absolute right-2 flex h-3.5 w-3.5 items-center justify-center",children:(0,t.jsx)(ev,{children:(0,t.jsx)(eE.Check,{className:"h-4 w-4"})})}),(0,t.jsx)(ef,{children:r})]}));eH.displayName=eu.displayName,r.forwardRef(({className:e,...r},n)=>(0,t.jsx)(eb,{ref:n,className:(0,ek.cn)("-mx-1 my-1 h-px bg-muted",e),...r})).displayName=eb.displayName,e.s(["Select",0,M,"SelectContent",0,eA,"SelectItem",0,eH,"SelectTrigger",0,eI,"SelectValue",0,W],66473)}]);
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
"@radix-ui/react-dialog": "^1.1.15",
|
|
17
17
|
"@radix-ui/react-dropdown-menu": "^2.1.16",
|
|
18
18
|
"@radix-ui/react-label": "^2.1.8",
|
|
19
|
+
"@radix-ui/react-popover": "^1.1.15",
|
|
19
20
|
"@radix-ui/react-select": "^2.2.6",
|
|
20
21
|
"@radix-ui/react-separator": "^1.1.8",
|
|
21
22
|
"@radix-ui/react-slider": "^1.2.3",
|
|
@@ -16,24 +16,40 @@ import { DocTable } from "@/components/documents/doc-table";
|
|
|
16
16
|
import { DocUploadDialog } from "@/components/documents/doc-upload-dialog";
|
|
17
17
|
import { DocDetailPanel } from "@/components/documents/doc-detail-panel";
|
|
18
18
|
import { DocChunksDialog } from "@/components/documents/doc-chunks-dialog";
|
|
19
|
+
import { SubspaceGate } from "@/components/knowledge-base/subspace-gate";
|
|
19
20
|
import { useDebounce } from "@/hooks/use-debounce";
|
|
20
21
|
import { useKnowledgeBase } from "@/hooks/use-knowledge-base";
|
|
22
|
+
import { useSubspace } from "@/contexts/subspace-context";
|
|
21
23
|
import type { Document } from "@/types/knowledge-base";
|
|
22
24
|
|
|
23
25
|
export default function DocumentsClient() {
|
|
24
26
|
const params = useParams<{ name: string }>();
|
|
25
27
|
const knowledgeBaseName = decodeURIComponent(params.name);
|
|
26
|
-
|
|
28
|
+
|
|
29
|
+
const { data: knowledgeBase, isLoading: kbLoading } = useKnowledgeBase(knowledgeBaseName);
|
|
30
|
+
const { subspace } = useSubspace();
|
|
31
|
+
const isSubspaceEnabled = knowledgeBase?.subspace === true;
|
|
32
|
+
const needsGate = isSubspaceEnabled && !subspace;
|
|
33
|
+
|
|
34
|
+
// Pagination state
|
|
27
35
|
const [tokenStack, setTokenStack] = useState<string[]>([]);
|
|
28
36
|
const [currentToken, setCurrentToken] = useState<string | undefined>();
|
|
29
37
|
const [pageSize, setPageSize] = useState(20);
|
|
30
38
|
|
|
31
|
-
const
|
|
32
|
-
|
|
39
|
+
const effectiveSubspace = isSubspaceEnabled ? subspace ?? undefined : undefined;
|
|
40
|
+
|
|
41
|
+
const { data, isLoading: docsLoading, refetch, isRefetching } = useDocuments(
|
|
42
|
+
knowledgeBaseName,
|
|
43
|
+
{
|
|
44
|
+
nextToken: currentToken,
|
|
45
|
+
maxResults: pageSize,
|
|
46
|
+
subspace: effectiveSubspace,
|
|
47
|
+
enabled: !needsGate,
|
|
48
|
+
},
|
|
49
|
+
);
|
|
33
50
|
const deleteDocuments = useDeleteDocuments();
|
|
34
51
|
|
|
35
52
|
const [searchQuery, setSearchQuery] = useState("");
|
|
36
|
-
const [subspaceFilter, setSubspaceFilter] = useState("all");
|
|
37
53
|
const [statusFilter, setStatusFilter] = useState("all");
|
|
38
54
|
const [showUploadDialog, setShowUploadDialog] = useState(false);
|
|
39
55
|
const [selectedDocuments, setSelectedDocuments] = useState<Document[]>([]);
|
|
@@ -41,23 +57,16 @@ export default function DocumentsClient() {
|
|
|
41
57
|
const [deleteTarget, setDeleteTarget] = useState<Document | null>(null);
|
|
42
58
|
const [showBatchDeleteConfirm, setShowBatchDeleteConfirm] = useState(false);
|
|
43
59
|
|
|
44
|
-
//
|
|
60
|
+
// Chunks dialog state
|
|
45
61
|
const [chunksTarget, setChunksTarget] = useState<{ docId: string; ossKey: string } | null>(null);
|
|
46
62
|
|
|
47
63
|
const currentPage = tokenStack.length + 1;
|
|
48
64
|
|
|
49
65
|
const debouncedQuery = useDebounce(searchQuery, 300);
|
|
50
66
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
const
|
|
54
|
-
const uniqueSubspaces = new Set(
|
|
55
|
-
documents
|
|
56
|
-
.map((doc: Document) => doc.subspace)
|
|
57
|
-
.filter(Boolean) as string[]
|
|
58
|
-
);
|
|
59
|
-
return Array.from(uniqueSubspaces);
|
|
60
|
-
}, [documents]);
|
|
67
|
+
// Stabilize the array identity so dependent memos do not re-run on every
|
|
68
|
+
// render just because `data?.items ?? []` produces a fresh reference.
|
|
69
|
+
const documents = useMemo<Document[]>(() => data?.items ?? [], [data?.items]);
|
|
61
70
|
|
|
62
71
|
const filteredDocuments = useMemo(() => {
|
|
63
72
|
return documents.filter((doc: Document) => {
|
|
@@ -66,15 +75,12 @@ export default function DocumentsClient() {
|
|
|
66
75
|
doc.ossKey.toLowerCase().includes(debouncedQuery.toLowerCase()) ||
|
|
67
76
|
doc.docId.toLowerCase().includes(debouncedQuery.toLowerCase());
|
|
68
77
|
|
|
69
|
-
const matchesSubspace =
|
|
70
|
-
subspaceFilter === "all" || doc.subspace === subspaceFilter;
|
|
71
|
-
|
|
72
78
|
const matchesStatus =
|
|
73
79
|
statusFilter === "all" || doc.status === statusFilter;
|
|
74
80
|
|
|
75
|
-
return matchesSearch &&
|
|
81
|
+
return matchesSearch && matchesStatus;
|
|
76
82
|
});
|
|
77
|
-
}, [documents, debouncedQuery,
|
|
83
|
+
}, [documents, debouncedQuery, statusFilter]);
|
|
78
84
|
|
|
79
85
|
const handleNextPage = useCallback(() => {
|
|
80
86
|
if (data?.nextToken) {
|
|
@@ -101,6 +107,7 @@ export default function DocumentsClient() {
|
|
|
101
107
|
try {
|
|
102
108
|
await deleteDocuments.mutateAsync({
|
|
103
109
|
knowledgeBaseName,
|
|
110
|
+
subspace: effectiveSubspace,
|
|
104
111
|
documents: [{ docId: document.docId }],
|
|
105
112
|
});
|
|
106
113
|
toast.success("文档已删除");
|
|
@@ -112,13 +119,14 @@ export default function DocumentsClient() {
|
|
|
112
119
|
toast.error(message);
|
|
113
120
|
}
|
|
114
121
|
},
|
|
115
|
-
[knowledgeBaseName, deleteDocuments]
|
|
122
|
+
[knowledgeBaseName, deleteDocuments, effectiveSubspace]
|
|
116
123
|
);
|
|
117
124
|
|
|
118
125
|
const handleBatchDelete = useCallback(async () => {
|
|
119
126
|
try {
|
|
120
127
|
await deleteDocuments.mutateAsync({
|
|
121
128
|
knowledgeBaseName,
|
|
129
|
+
subspace: effectiveSubspace,
|
|
122
130
|
documents: selectedDocuments.map((doc) => ({ docId: doc.docId })),
|
|
123
131
|
});
|
|
124
132
|
toast.success(`成功删除 ${selectedDocuments.length} 个文档`);
|
|
@@ -129,9 +137,9 @@ export default function DocumentsClient() {
|
|
|
129
137
|
error instanceof Error ? error.message : "批量删除失败";
|
|
130
138
|
toast.error(message);
|
|
131
139
|
}
|
|
132
|
-
}, [knowledgeBaseName, selectedDocuments, deleteDocuments]);
|
|
140
|
+
}, [knowledgeBaseName, selectedDocuments, deleteDocuments, effectiveSubspace]);
|
|
133
141
|
|
|
134
|
-
if (
|
|
142
|
+
if (kbLoading) {
|
|
135
143
|
return (
|
|
136
144
|
<div className="space-y-4">
|
|
137
145
|
<Skeleton className="h-8 w-48" />
|
|
@@ -141,11 +149,67 @@ export default function DocumentsClient() {
|
|
|
141
149
|
);
|
|
142
150
|
}
|
|
143
151
|
|
|
152
|
+
if (needsGate) {
|
|
153
|
+
return <SubspaceGate />;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
if (docsLoading) {
|
|
157
|
+
return (
|
|
158
|
+
<div className="space-y-4">
|
|
159
|
+
<Skeleton className="h-8 w-48" />
|
|
160
|
+
<Skeleton className="h-10 w-full" />
|
|
161
|
+
<Skeleton className="h-64 w-full" />
|
|
162
|
+
</div>
|
|
163
|
+
);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
const titleText = isSubspaceEnabled
|
|
167
|
+
? `文档 (${filteredDocuments.length}) — ${subspace}`
|
|
168
|
+
: `文档 (${filteredDocuments.length})`;
|
|
169
|
+
|
|
170
|
+
// Empty subspace — show a friendly upload CTA but keep the subspace active.
|
|
171
|
+
const isEmptySubspace =
|
|
172
|
+
isSubspaceEnabled
|
|
173
|
+
&& !!subspace
|
|
174
|
+
&& documents.length === 0
|
|
175
|
+
&& !debouncedQuery
|
|
176
|
+
&& statusFilter === "all";
|
|
177
|
+
|
|
178
|
+
if (isEmptySubspace) {
|
|
179
|
+
return (
|
|
180
|
+
<div className="space-y-4">
|
|
181
|
+
<PageHeader title={titleText}>
|
|
182
|
+
<div className="flex items-center gap-2">
|
|
183
|
+
<RefreshButton loading={isRefetching} onClick={() => refetch()} />
|
|
184
|
+
<Button onClick={() => setShowUploadDialog(true)}>
|
|
185
|
+
<Upload className="mr-2 h-4 w-4" />
|
|
186
|
+
上传文档
|
|
187
|
+
</Button>
|
|
188
|
+
</div>
|
|
189
|
+
</PageHeader>
|
|
190
|
+
<div className="flex flex-col items-center justify-center min-h-[300px] gap-4 rounded-lg border border-dashed">
|
|
191
|
+
<p className="text-muted-foreground text-sm">
|
|
192
|
+
该子空间下暂无文档,您可以上传新文档到此子空间
|
|
193
|
+
</p>
|
|
194
|
+
<Button onClick={() => setShowUploadDialog(true)}>
|
|
195
|
+
<Upload className="mr-2 h-4 w-4" />
|
|
196
|
+
上传文档到此子空间
|
|
197
|
+
</Button>
|
|
198
|
+
</div>
|
|
199
|
+
<DocUploadDialog
|
|
200
|
+
knowledgeBaseName={knowledgeBaseName}
|
|
201
|
+
metadataFields={knowledgeBase?.metadata}
|
|
202
|
+
defaultSubspace={effectiveSubspace}
|
|
203
|
+
open={showUploadDialog}
|
|
204
|
+
onOpenChange={setShowUploadDialog}
|
|
205
|
+
/>
|
|
206
|
+
</div>
|
|
207
|
+
);
|
|
208
|
+
}
|
|
209
|
+
|
|
144
210
|
return (
|
|
145
211
|
<div className="space-y-4">
|
|
146
|
-
<PageHeader
|
|
147
|
-
title={`文档 (${filteredDocuments.length})`}
|
|
148
|
-
>
|
|
212
|
+
<PageHeader title={titleText}>
|
|
149
213
|
<div className="flex items-center gap-2">
|
|
150
214
|
<RefreshButton loading={isRefetching} onClick={() => refetch()} />
|
|
151
215
|
<Button onClick={() => setShowUploadDialog(true)}>
|
|
@@ -158,15 +222,12 @@ export default function DocumentsClient() {
|
|
|
158
222
|
<DocToolbar
|
|
159
223
|
searchQuery={searchQuery}
|
|
160
224
|
onSearchChange={setSearchQuery}
|
|
161
|
-
subspaceFilter={subspaceFilter}
|
|
162
|
-
onSubspaceFilterChange={setSubspaceFilter}
|
|
163
225
|
statusFilter={statusFilter}
|
|
164
226
|
onStatusFilterChange={setStatusFilter}
|
|
165
227
|
selectedCount={selectedDocuments.length}
|
|
166
228
|
onBatchDelete={() => setShowBatchDeleteConfirm(true)}
|
|
167
|
-
subspaces={subspaces}
|
|
168
229
|
/>
|
|
169
|
-
{(debouncedQuery ||
|
|
230
|
+
{!isSubspaceEnabled && (debouncedQuery || statusFilter !== "all") && (
|
|
170
231
|
<p className="text-xs text-muted-foreground">
|
|
171
232
|
提示:搜索和过滤仅在当前页内生效,不会检索其他页的数据。
|
|
172
233
|
</p>
|
|
@@ -174,6 +235,7 @@ export default function DocumentsClient() {
|
|
|
174
235
|
|
|
175
236
|
<DocTable
|
|
176
237
|
documents={filteredDocuments}
|
|
238
|
+
hideSubspace={isSubspaceEnabled}
|
|
177
239
|
onView={setDetailDocument}
|
|
178
240
|
onDelete={setDeleteTarget}
|
|
179
241
|
onViewChunks={handleViewChunks}
|
|
@@ -227,6 +289,7 @@ export default function DocumentsClient() {
|
|
|
227
289
|
<DocUploadDialog
|
|
228
290
|
knowledgeBaseName={knowledgeBaseName}
|
|
229
291
|
metadataFields={knowledgeBase?.metadata}
|
|
292
|
+
defaultSubspace={effectiveSubspace}
|
|
230
293
|
open={showUploadDialog}
|
|
231
294
|
onOpenChange={setShowUploadDialog}
|
|
232
295
|
/>
|
|
@@ -245,6 +308,7 @@ export default function DocumentsClient() {
|
|
|
245
308
|
knowledgeBaseName={knowledgeBaseName}
|
|
246
309
|
docId={chunksTarget?.docId ?? null}
|
|
247
310
|
ossKey={chunksTarget?.ossKey}
|
|
311
|
+
subspace={effectiveSubspace}
|
|
248
312
|
open={!!chunksTarget}
|
|
249
313
|
onOpenChange={(open) => {
|
|
250
314
|
if (!open) setChunksTarget(null);
|
package/dist/dashboard-runtime/dashboard/src/app/(dashboard)/knowledge-base/[name]/layout-client.tsx
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
+
import { Suspense, useState } from "react";
|
|
3
4
|
import { useParams } from "next/navigation";
|
|
4
5
|
import { Skeleton } from "@/components/ui/skeleton";
|
|
5
6
|
import { useKnowledgeBase } from "@/hooks/use-knowledge-base";
|
|
6
7
|
import { KBHeader } from "@/components/knowledge-base/kb-header";
|
|
7
8
|
import { KBTabNav } from "@/components/knowledge-base/kb-tab-nav";
|
|
8
9
|
import { KBDeleteDialog } from "@/components/knowledge-base/kb-delete-dialog";
|
|
9
|
-
import {
|
|
10
|
+
import { SubspaceProvider } from "@/contexts/subspace-context";
|
|
10
11
|
|
|
11
12
|
export default function KnowledgeBaseDetailLayoutClient({
|
|
12
13
|
children,
|
|
@@ -41,13 +42,31 @@ export default function KnowledgeBaseDetailLayoutClient({
|
|
|
41
42
|
}
|
|
42
43
|
|
|
43
44
|
return (
|
|
44
|
-
<div
|
|
45
|
-
<
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
45
|
+
<div>
|
|
46
|
+
<Suspense
|
|
47
|
+
fallback={
|
|
48
|
+
<div className="space-y-6">
|
|
49
|
+
<div className="space-y-3">
|
|
50
|
+
<Skeleton className="h-10 w-64" />
|
|
51
|
+
<Skeleton className="h-4 w-96" />
|
|
52
|
+
<Skeleton className="h-4 w-48" />
|
|
53
|
+
</div>
|
|
54
|
+
<Skeleton className="h-10 w-full" />
|
|
55
|
+
<Skeleton className="h-[400px] w-full" />
|
|
56
|
+
</div>
|
|
57
|
+
}
|
|
58
|
+
>
|
|
59
|
+
<SubspaceProvider knowledgeBaseName={knowledgeBaseName}>
|
|
60
|
+
<div className="space-y-6">
|
|
61
|
+
<KBHeader
|
|
62
|
+
knowledgeBase={knowledgeBase}
|
|
63
|
+
onDelete={() => setShowDeleteDialog(true)}
|
|
64
|
+
/>
|
|
65
|
+
<KBTabNav knowledgeBaseName={knowledgeBaseName} />
|
|
66
|
+
<div>{children}</div>
|
|
67
|
+
</div>
|
|
68
|
+
</SubspaceProvider>
|
|
69
|
+
</Suspense>
|
|
51
70
|
|
|
52
71
|
<KBDeleteDialog
|
|
53
72
|
knowledgeBaseName={knowledgeBaseName}
|
|
@@ -20,6 +20,7 @@ interface DocChunksDialogProps {
|
|
|
20
20
|
knowledgeBaseName: string;
|
|
21
21
|
docId: string | null;
|
|
22
22
|
ossKey?: string;
|
|
23
|
+
subspace?: string;
|
|
23
24
|
open: boolean;
|
|
24
25
|
onOpenChange: (open: boolean) => void;
|
|
25
26
|
}
|
|
@@ -253,6 +254,7 @@ export function DocChunksDialog({
|
|
|
253
254
|
knowledgeBaseName,
|
|
254
255
|
docId,
|
|
255
256
|
ossKey,
|
|
257
|
+
subspace,
|
|
256
258
|
open,
|
|
257
259
|
onOpenChange,
|
|
258
260
|
}: DocChunksDialogProps) {
|
|
@@ -265,11 +267,12 @@ export function DocChunksDialog({
|
|
|
265
267
|
isFetchingNextPage,
|
|
266
268
|
isLoading,
|
|
267
269
|
} = useInfiniteQuery({
|
|
268
|
-
queryKey: ["chunks", knowledgeBaseName, docId],
|
|
270
|
+
queryKey: ["chunks", knowledgeBaseName, docId, subspace],
|
|
269
271
|
queryFn: ({ pageParam }) =>
|
|
270
272
|
listChunks(knowledgeBaseName, docId!, {
|
|
271
273
|
maxResults: 20,
|
|
272
274
|
nextToken: pageParam,
|
|
275
|
+
subspace,
|
|
273
276
|
}),
|
|
274
277
|
initialPageParam: undefined as string | undefined,
|
|
275
278
|
getNextPageParam: (lastPage) => lastPage.nextToken,
|
|
@@ -281,7 +284,7 @@ export function DocChunksDialog({
|
|
|
281
284
|
const handleChunkUpdate = useCallback(
|
|
282
285
|
(chunkId: number, updates: Partial<Chunk>) => {
|
|
283
286
|
queryClient.setQueryData(
|
|
284
|
-
["chunks", knowledgeBaseName, docId],
|
|
287
|
+
["chunks", knowledgeBaseName, docId, subspace],
|
|
285
288
|
(old: typeof data) => {
|
|
286
289
|
if (!old) return old;
|
|
287
290
|
return {
|
|
@@ -296,7 +299,7 @@ export function DocChunksDialog({
|
|
|
296
299
|
}
|
|
297
300
|
);
|
|
298
301
|
},
|
|
299
|
-
[queryClient, knowledgeBaseName, docId,
|
|
302
|
+
[queryClient, knowledgeBaseName, docId, subspace]
|
|
300
303
|
);
|
|
301
304
|
|
|
302
305
|
const displayName = ossKey ? extractFileName(ossKey) : "文档切片";
|
|
@@ -17,14 +17,16 @@ interface DocColumnsOptions {
|
|
|
17
17
|
onView?: (document: Document) => void;
|
|
18
18
|
onDelete?: (document: Document) => void;
|
|
19
19
|
onViewChunks?: (document: Document) => void;
|
|
20
|
+
hideSubspace?: boolean;
|
|
20
21
|
}
|
|
21
22
|
|
|
22
23
|
export function createDocColumns({
|
|
23
24
|
onView,
|
|
24
25
|
onDelete,
|
|
25
26
|
onViewChunks,
|
|
27
|
+
hideSubspace,
|
|
26
28
|
}: DocColumnsOptions): ColumnDef<Document>[] {
|
|
27
|
-
|
|
29
|
+
const columns: ColumnDef<Document>[] = [
|
|
28
30
|
{
|
|
29
31
|
id: "select",
|
|
30
32
|
header: ({ table }) => (
|
|
@@ -56,15 +58,6 @@ export function createDocColumns({
|
|
|
56
58
|
</span>
|
|
57
59
|
),
|
|
58
60
|
},
|
|
59
|
-
{
|
|
60
|
-
accessorKey: "subspace",
|
|
61
|
-
header: "子空间",
|
|
62
|
-
cell: ({ row }) => (
|
|
63
|
-
<span className="text-sm text-muted-foreground">
|
|
64
|
-
{row.original.subspace || "—"}
|
|
65
|
-
</span>
|
|
66
|
-
),
|
|
67
|
-
},
|
|
68
61
|
{
|
|
69
62
|
accessorKey: "status",
|
|
70
63
|
header: "状态",
|
|
@@ -114,4 +107,20 @@ export function createDocColumns({
|
|
|
114
107
|
),
|
|
115
108
|
},
|
|
116
109
|
];
|
|
110
|
+
|
|
111
|
+
if (!hideSubspace) {
|
|
112
|
+
// Insert the subspace column right after `ossKey` (index 2) so the visual
|
|
113
|
+
// order remains: select | ossKey | subspace | status | chunkNum | ...
|
|
114
|
+
columns.splice(2, 0, {
|
|
115
|
+
accessorKey: "subspace",
|
|
116
|
+
header: "子空间",
|
|
117
|
+
cell: ({ row }) => (
|
|
118
|
+
<span className="text-sm text-muted-foreground">
|
|
119
|
+
{row.original.subspace || "—"}
|
|
120
|
+
</span>
|
|
121
|
+
),
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return columns;
|
|
117
126
|
}
|
|
@@ -7,6 +7,7 @@ import type { Document } from "@/types/knowledge-base";
|
|
|
7
7
|
|
|
8
8
|
interface DocTableProps {
|
|
9
9
|
documents: Document[];
|
|
10
|
+
hideSubspace?: boolean;
|
|
10
11
|
onView?: (document: Document) => void;
|
|
11
12
|
onDelete?: (document: Document) => void;
|
|
12
13
|
onViewChunks?: (document: Document) => void;
|
|
@@ -15,6 +16,7 @@ interface DocTableProps {
|
|
|
15
16
|
|
|
16
17
|
export function DocTable({
|
|
17
18
|
documents,
|
|
19
|
+
hideSubspace,
|
|
18
20
|
onView,
|
|
19
21
|
onDelete,
|
|
20
22
|
onViewChunks,
|
|
@@ -23,8 +25,8 @@ export function DocTable({
|
|
|
23
25
|
const [rowSelection, setRowSelection] = useState<Record<string, boolean>>({});
|
|
24
26
|
|
|
25
27
|
const columns = useMemo(
|
|
26
|
-
() => createDocColumns({ onView, onDelete, onViewChunks }),
|
|
27
|
-
[onView, onDelete, onViewChunks]
|
|
28
|
+
() => createDocColumns({ onView, onDelete, onViewChunks, hideSubspace }),
|
|
29
|
+
[onView, onDelete, onViewChunks, hideSubspace]
|
|
28
30
|
);
|
|
29
31
|
|
|
30
32
|
const handleRowSelectionChange = (
|
|
@@ -14,13 +14,10 @@ import { SearchInput } from "@/components/shared/search-input";
|
|
|
14
14
|
interface DocToolbarProps {
|
|
15
15
|
searchQuery: string;
|
|
16
16
|
onSearchChange: (query: string) => void;
|
|
17
|
-
subspaceFilter: string;
|
|
18
|
-
onSubspaceFilterChange: (subspace: string) => void;
|
|
19
17
|
statusFilter: string;
|
|
20
18
|
onStatusFilterChange: (status: string) => void;
|
|
21
19
|
selectedCount: number;
|
|
22
20
|
onBatchDelete?: () => void;
|
|
23
|
-
subspaces?: string[];
|
|
24
21
|
}
|
|
25
22
|
|
|
26
23
|
const STATUS_OPTIONS: { value: string; label: string }[] = [
|
|
@@ -34,13 +31,10 @@ const STATUS_OPTIONS: { value: string; label: string }[] = [
|
|
|
34
31
|
export function DocToolbar({
|
|
35
32
|
searchQuery,
|
|
36
33
|
onSearchChange,
|
|
37
|
-
subspaceFilter,
|
|
38
|
-
onSubspaceFilterChange,
|
|
39
34
|
statusFilter,
|
|
40
35
|
onStatusFilterChange,
|
|
41
36
|
selectedCount,
|
|
42
37
|
onBatchDelete,
|
|
43
|
-
subspaces = [],
|
|
44
38
|
}: DocToolbarProps) {
|
|
45
39
|
return (
|
|
46
40
|
<div className="flex items-center gap-3 flex-wrap">
|
|
@@ -50,22 +44,6 @@ export function DocToolbar({
|
|
|
50
44
|
onChange={onSearchChange}
|
|
51
45
|
/>
|
|
52
46
|
|
|
53
|
-
{subspaces.length > 0 && (
|
|
54
|
-
<Select value={subspaceFilter} onValueChange={onSubspaceFilterChange}>
|
|
55
|
-
<SelectTrigger className="w-[160px]">
|
|
56
|
-
<SelectValue placeholder="全部子空间" />
|
|
57
|
-
</SelectTrigger>
|
|
58
|
-
<SelectContent>
|
|
59
|
-
<SelectItem value="all">全部子空间</SelectItem>
|
|
60
|
-
{subspaces.map((subspace) => (
|
|
61
|
-
<SelectItem key={subspace} value={subspace}>
|
|
62
|
-
{subspace}
|
|
63
|
-
</SelectItem>
|
|
64
|
-
))}
|
|
65
|
-
</SelectContent>
|
|
66
|
-
</Select>
|
|
67
|
-
)}
|
|
68
|
-
|
|
69
47
|
<Select value={statusFilter} onValueChange={onStatusFilterChange}>
|
|
70
48
|
<SelectTrigger className="w-[140px]">
|
|
71
49
|
<SelectValue placeholder="全部状态" />
|