@exulu/frontend 1.8.0 → 1.10.0
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/.next/BUILD_ID +1 -1
- package/dist/.next/app-build-manifest.json +153 -155
- package/dist/.next/app-path-routes-manifest.json +1 -1
- package/dist/.next/build-manifest.json +2 -2
- package/dist/.next/prerender-manifest.json +1 -1
- package/dist/.next/server/app/(application)/agents/edit/[id]/page.js +1 -1
- package/dist/.next/server/app/(application)/agents/edit/[id]/page.js.nft.json +1 -1
- package/dist/.next/server/app/(application)/agents/edit/[id]/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/agents/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/chat/[agent]/[session]/page.js +8 -8
- package/dist/.next/server/app/(application)/chat/[agent]/[session]/page.js.nft.json +1 -1
- package/dist/.next/server/app/(application)/chat/[agent]/[session]/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/chat/[agent]/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/chat/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/configuration/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/dashboard/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/data/[[...query]]/page.js +4 -4
- package/dist/.next/server/app/(application)/data/[[...query]]/page.js.nft.json +1 -1
- package/dist/.next/server/app/(application)/data/[[...query]]/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/evals/[id]/page.js +1 -1
- package/dist/.next/server/app/(application)/evals/[id]/page.js.nft.json +1 -1
- package/dist/.next/server/app/(application)/evals/[id]/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/evals/cases/page.js +1 -1
- package/dist/.next/server/app/(application)/evals/cases/page.js.nft.json +1 -1
- package/dist/.next/server/app/(application)/evals/cases/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/evals/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/explorer/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/keys/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/projects/[project]/page.js +1 -1
- package/dist/.next/server/app/(application)/projects/[project]/page.js.nft.json +1 -1
- package/dist/.next/server/app/(application)/projects/[project]/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/projects/page.js +1 -1
- package/dist/.next/server/app/(application)/projects/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/prompts/page.js +1 -1
- package/dist/.next/server/app/(application)/prompts/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/roles/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/token/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/users/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/variables/create/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/variables/edit/[variable_id]/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/variables/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/variables/usage/[variable_id]/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/workflows/page.js +1 -1
- package/dist/.next/server/app/(application)/workflows/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(authentication)/login/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/_not-found.html +1 -1
- package/dist/.next/server/app/_not-found.rsc +1 -1
- package/dist/.next/server/app-paths-manifest.json +5 -5
- package/dist/.next/server/chunks/1025.js +1 -0
- package/dist/.next/server/chunks/2270.js +18 -44
- package/dist/.next/server/chunks/3434.js +1 -1
- package/dist/.next/server/chunks/3503.js +1 -0
- package/dist/.next/server/chunks/5084.js +1 -0
- package/dist/.next/server/chunks/5192.js +1 -1
- package/dist/.next/server/chunks/5485.js +1 -1
- package/dist/.next/server/chunks/5600.js +1 -1
- package/dist/.next/server/chunks/5974.js +1 -0
- package/dist/.next/server/chunks/6590.js +1 -1
- package/dist/.next/server/chunks/7471.js +1 -1
- package/dist/.next/server/chunks/8286.js +1 -1
- package/dist/.next/server/chunks/{3679.js → 9874.js} +5 -5
- package/dist/.next/server/middleware-manifest.json +5 -5
- package/dist/.next/server/pages/404.html +1 -1
- package/dist/.next/server/pages/500.html +1 -1
- package/dist/.next/server/server-reference-manifest.json +1 -1
- package/dist/.next/static/chunks/1685-939396dad2f8f1e0.js +2 -0
- package/dist/.next/static/chunks/1685-939396dad2f8f1e0.js.map +1 -0
- package/dist/.next/static/chunks/{4811-316807e25b634f9f.js → 192-72d6868cd891ccc6.js} +8 -8
- package/dist/.next/static/chunks/192-72d6868cd891ccc6.js.map +1 -0
- package/dist/.next/static/chunks/1957-cf44b1d31a9c7d5c.js +2 -0
- package/dist/.next/static/chunks/1957-cf44b1d31a9c7d5c.js.map +1 -0
- package/dist/.next/static/chunks/342-d9c2d6ae9f9435cb.js +2 -0
- package/dist/.next/static/chunks/342-d9c2d6ae9f9435cb.js.map +1 -0
- package/dist/.next/static/chunks/3750-e3d1b2cccd265190.js +2 -0
- package/dist/.next/static/chunks/3750-e3d1b2cccd265190.js.map +1 -0
- package/dist/.next/static/chunks/{3832-417a5eeee712a793.js → 3832-d7782d6a2771ae6c.js} +1 -1
- package/dist/.next/static/chunks/{3832-417a5eeee712a793.js.map → 3832-d7782d6a2771ae6c.js.map} +1 -1
- package/dist/.next/static/chunks/552-39155a93c527ec6d.js +2 -0
- package/dist/.next/static/chunks/552-39155a93c527ec6d.js.map +1 -0
- package/dist/.next/static/chunks/6280-50b751f993f2fe4f.js +2 -0
- package/dist/.next/static/chunks/6280-50b751f993f2fe4f.js.map +1 -0
- package/dist/.next/static/chunks/6367-59655a85d75e19be.js +2 -0
- package/dist/.next/static/chunks/6367-59655a85d75e19be.js.map +1 -0
- package/dist/.next/static/chunks/6373-aef582adc575d3ca.js +2 -0
- package/dist/.next/static/chunks/6373-aef582adc575d3ca.js.map +1 -0
- package/dist/.next/static/chunks/8030-9c926ea4dfd3a54e.js +2 -0
- package/dist/.next/static/chunks/8030-9c926ea4dfd3a54e.js.map +1 -0
- package/dist/.next/static/chunks/{6805-792cc8008b165c07.js → 8293-ba5cd36594e6fde1.js} +10 -10
- package/dist/.next/static/chunks/8293-ba5cd36594e6fde1.js.map +1 -0
- package/dist/.next/static/chunks/9105-d8ff41060f7ffc85.js +2 -0
- package/dist/.next/static/chunks/9105-d8ff41060f7ffc85.js.map +1 -0
- package/dist/.next/static/chunks/9953-95900a236271a222.js +2 -0
- package/dist/.next/static/chunks/9953-95900a236271a222.js.map +1 -0
- package/dist/.next/static/chunks/app/(application)/agents/edit/[id]/page-e4a4693953329671.js +2 -0
- package/dist/.next/static/chunks/app/(application)/agents/edit/[id]/page-e4a4693953329671.js.map +1 -0
- package/dist/.next/static/chunks/app/(application)/chat/[agent]/[session]/page-d59534ca19eee51f.js +2 -0
- package/dist/.next/static/chunks/app/(application)/chat/[agent]/[session]/page-d59534ca19eee51f.js.map +1 -0
- package/dist/.next/static/chunks/app/(application)/data/[[...query]]/layout-0c7c1b0e1713bf60.js +2 -0
- package/dist/.next/static/chunks/app/(application)/data/[[...query]]/layout-0c7c1b0e1713bf60.js.map +1 -0
- package/dist/.next/static/chunks/app/(application)/data/[[...query]]/page-7db6bfbf02606136.js +2 -0
- package/dist/.next/static/chunks/app/(application)/data/[[...query]]/page-7db6bfbf02606136.js.map +1 -0
- package/dist/.next/static/chunks/app/(application)/evals/[id]/page-a7728cf9b0524489.js +2 -0
- package/dist/.next/static/chunks/app/(application)/evals/[id]/page-a7728cf9b0524489.js.map +1 -0
- package/dist/.next/static/chunks/app/(application)/evals/cases/{page-a39fef7444581565.js → page-827f50c6d1f150d0.js} +2 -2
- package/dist/.next/static/chunks/app/(application)/evals/cases/{page-a39fef7444581565.js.map → page-827f50c6d1f150d0.js.map} +1 -1
- package/dist/.next/static/chunks/app/(application)/explorer/{page-1d676c9dfe3ed58b.js → page-e6b1c034c07776e2.js} +1 -1
- package/dist/.next/static/chunks/app/(application)/explorer/{page-1d676c9dfe3ed58b.js.map → page-e6b1c034c07776e2.js.map} +1 -1
- package/dist/.next/static/chunks/app/(application)/projects/[project]/page-f04fd5291a1ef7b1.js +2 -0
- package/dist/.next/static/chunks/app/(application)/projects/[project]/page-f04fd5291a1ef7b1.js.map +1 -0
- package/dist/.next/static/chunks/app/(application)/prompts/page-2c500e9898447506.js +2 -0
- package/dist/.next/static/chunks/app/(application)/prompts/page-2c500e9898447506.js.map +1 -0
- package/dist/.next/static/chunks/app/(application)/token/{page-3f74f711f3d04fce.js → page-3acc39cb8a718331.js} +1 -1
- package/dist/.next/static/chunks/app/(application)/token/{page-3f74f711f3d04fce.js.map → page-3acc39cb8a718331.js.map} +1 -1
- package/dist/.next/static/chunks/app/(application)/workflows/{page-47dedb88cec600d5.js → page-e38f9456120dab69.js} +2 -2
- package/dist/.next/static/chunks/app/(application)/workflows/page-e38f9456120dab69.js.map +1 -0
- package/dist/.next/static/chunks/ba12c10f-85ed008ce7746dbe.js +2 -0
- package/dist/.next/static/chunks/ba12c10f-85ed008ce7746dbe.js.map +1 -0
- package/dist/.next/static/css/9c08ae5d990a6b14.css +4 -0
- package/dist/.next/static/css/9c08ae5d990a6b14.css.map +1 -0
- package/dist/.next/static/css/e3f2a16ab7676b05.css.map +1 -1
- package/dist/package.json +1 -1
- package/package.json +1 -1
- package/dist/.next/server/chunks/2948.js +0 -1
- package/dist/.next/server/chunks/38.js +0 -1
- package/dist/.next/server/chunks/7958.js +0 -1
- package/dist/.next/server/chunks/8050.js +0 -1
- package/dist/.next/static/chunks/1685-9cacdee7e3f0942f.js +0 -2
- package/dist/.next/static/chunks/1685-9cacdee7e3f0942f.js.map +0 -1
- package/dist/.next/static/chunks/1957-39a01a3915f246ab.js +0 -2
- package/dist/.next/static/chunks/1957-39a01a3915f246ab.js.map +0 -1
- package/dist/.next/static/chunks/3750-f45c59ef1cc79417.js +0 -2
- package/dist/.next/static/chunks/3750-f45c59ef1cc79417.js.map +0 -1
- package/dist/.next/static/chunks/4811-316807e25b634f9f.js.map +0 -1
- package/dist/.next/static/chunks/5282-68f9880f1f951f44.js +0 -2
- package/dist/.next/static/chunks/5282-68f9880f1f951f44.js.map +0 -1
- package/dist/.next/static/chunks/572-2940a399da1e3a3b.js +0 -2
- package/dist/.next/static/chunks/572-2940a399da1e3a3b.js.map +0 -1
- package/dist/.next/static/chunks/6367-59cef3c74213925b.js +0 -2
- package/dist/.next/static/chunks/6367-59cef3c74213925b.js.map +0 -1
- package/dist/.next/static/chunks/6373-4c5dffaf4193621c.js +0 -2
- package/dist/.next/static/chunks/6373-4c5dffaf4193621c.js.map +0 -1
- package/dist/.next/static/chunks/6805-792cc8008b165c07.js.map +0 -1
- package/dist/.next/static/chunks/8030-c1b6be46253076cb.js +0 -2
- package/dist/.next/static/chunks/8030-c1b6be46253076cb.js.map +0 -1
- package/dist/.next/static/chunks/9105-dfbce1bad8e3e8dd.js +0 -2
- package/dist/.next/static/chunks/9105-dfbce1bad8e3e8dd.js.map +0 -1
- package/dist/.next/static/chunks/9621-f81c4d7c0ecf5a67.js +0 -2
- package/dist/.next/static/chunks/9621-f81c4d7c0ecf5a67.js.map +0 -1
- package/dist/.next/static/chunks/9953-dfb5fc0e5b74ec09.js +0 -2
- package/dist/.next/static/chunks/9953-dfb5fc0e5b74ec09.js.map +0 -1
- package/dist/.next/static/chunks/app/(application)/agents/edit/[id]/page-4e7e02768ed1a72a.js +0 -2
- package/dist/.next/static/chunks/app/(application)/agents/edit/[id]/page-4e7e02768ed1a72a.js.map +0 -1
- package/dist/.next/static/chunks/app/(application)/chat/[agent]/[session]/page-38f845d5ccdad76b.js +0 -2
- package/dist/.next/static/chunks/app/(application)/chat/[agent]/[session]/page-38f845d5ccdad76b.js.map +0 -1
- package/dist/.next/static/chunks/app/(application)/data/[[...query]]/layout-2d47be0ee80dd89d.js +0 -2
- package/dist/.next/static/chunks/app/(application)/data/[[...query]]/layout-2d47be0ee80dd89d.js.map +0 -1
- package/dist/.next/static/chunks/app/(application)/data/[[...query]]/page-a391b8407f74e9b4.js +0 -2
- package/dist/.next/static/chunks/app/(application)/data/[[...query]]/page-a391b8407f74e9b4.js.map +0 -1
- package/dist/.next/static/chunks/app/(application)/evals/[id]/page-cf6f8d2bd4e9c819.js +0 -2
- package/dist/.next/static/chunks/app/(application)/evals/[id]/page-cf6f8d2bd4e9c819.js.map +0 -1
- package/dist/.next/static/chunks/app/(application)/projects/[project]/page-bc859da58d8505f7.js +0 -2
- package/dist/.next/static/chunks/app/(application)/projects/[project]/page-bc859da58d8505f7.js.map +0 -1
- package/dist/.next/static/chunks/app/(application)/prompts/page-d2f36ff149385efd.js +0 -2
- package/dist/.next/static/chunks/app/(application)/prompts/page-d2f36ff149385efd.js.map +0 -1
- package/dist/.next/static/chunks/app/(application)/workflows/page-47dedb88cec600d5.js.map +0 -1
- package/dist/.next/static/chunks/ba12c10f-aaafcb074f608624.js +0 -2
- package/dist/.next/static/chunks/ba12c10f-aaafcb074f608624.js.map +0 -1
- package/dist/.next/static/css/c8c015815c72d053.css +0 -4
- package/dist/.next/static/css/c8c015815c72d053.css.map +0 -1
- /package/dist/.next/static/{GOwerAkBncYx0J8q1TqQb → 3j63p6b3zZZB_v1Hn8Mxp}/_buildManifest.js +0 -0
- /package/dist/.next/static/{GOwerAkBncYx0J8q1TqQb → 3j63p6b3zZZB_v1Hn8Mxp}/_ssgManifest.js +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6208],{95094:function(e,s,l){Promise.resolve().then(l.bind(l,52489))},52489:function(e,s,l){"use strict";l.r(s),l.d(s,{default:function(){return M},dynamic:function(){return A}});var t=l(57437),a=l(2265),n=l(20653),i=l(94508),c=l(62869),r=l(84190);function d(e){let{column:s,title:l,className:a}=e;return s.getCanSort()?(0,t.jsx)("div",{className:(0,i.cn)("flex items-center space-x-2",a),children:(0,t.jsxs)(r.h_,{modal:!1,children:[(0,t.jsx)(r.$F,{asChild:!0,children:(0,t.jsxs)(c.z,{variant:"ghost",size:"sm",className:"-ml-3 h-8 data-[state=open]:bg-accent",children:[(0,t.jsx)("span",{children:l}),"desc"===s.getIsSorted()?(0,t.jsx)(n.veu,{className:"ml-2 h-4 w-4"}):"asc"===s.getIsSorted()?(0,t.jsx)(n.Hf3,{className:"ml-2 h-4 w-4"}):(0,t.jsx)(n.jnn,{className:"ml-2 h-4 w-4"})]})}),(0,t.jsxs)(r.AW,{align:"start",children:[(0,t.jsxs)(r.Xi,{onClick:()=>s.toggleSorting(!1),children:[(0,t.jsx)(n.Hf3,{className:"mr-2 h-3.5 w-3.5 text-muted-foreground/70"}),"Asc"]}),(0,t.jsxs)(r.Xi,{onClick:()=>s.toggleSorting(!0),children:[(0,t.jsx)(n.veu,{className:"mr-2 h-3.5 w-3.5 text-muted-foreground/70"}),"Desc"]}),(0,t.jsx)(r.VD,{}),(0,t.jsxs)(r.Xi,{onClick:()=>s.toggleVisibility(!1),children:[(0,t.jsx)(n.L52,{className:"mr-2 h-3.5 w-3.5 text-muted-foreground/70"}),"Hide"]})]})]})}):(0,t.jsx)("div",{className:(0,i.cn)(a),children:l})}var o=l(12199),u=l(45675),x=l(18930),h=l(27689),m=l(77992),j=l(37099);function g(e){var s;let{row:l,user:i,edit:d}=e,{toast:g}=(0,m.pm)(),[p,v]=(0,a.useState)(!1),f=l.original,N=i.super_admin||(null===(s=i.role)||void 0===s?void 0:s.evals)==="write",[C,{loading:w}]=(0,o.D)(h.lW,{onCompleted:()=>{g({title:"Test case deleted",description:"The test case has been successfully deleted."}),v(!1),window.location.reload()},onError:e=>{g({title:"Failed to delete test case",description:e.message,variant:"destructive"})}});return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(r.h_,{modal:!1,children:[(0,t.jsx)(r.$F,{asChild:!0,children:(0,t.jsxs)(c.z,{variant:"ghost",className:"flex h-8 w-8 p-0 data-[state=open]:bg-muted",onClick:e=>e.stopPropagation(),children:[(0,t.jsx)(n.nWS,{className:"h-4 w-4"}),(0,t.jsx)("span",{className:"sr-only",children:"Open menu"})]})}),(0,t.jsxs)(r.AW,{align:"end",className:"w-[160px]",children:[(0,t.jsxs)(r.Xi,{onClick:e=>{e.stopPropagation(),d()},children:[(0,t.jsx)(u.Z,{className:"mr-2 h-4 w-4"}),"Edit"]}),N&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.VD,{}),(0,t.jsxs)(r.Xi,{onClick:e=>{e.stopPropagation(),v(!0)},className:"text-destructive",children:[(0,t.jsx)(x.Z,{className:"mr-2 h-4 w-4"}),"Delete"]})]})]})]}),(0,t.jsx)(j.aR,{open:p,onOpenChange:v,children:(0,t.jsxs)(j._T,{onClick:e=>e.stopPropagation(),children:[(0,t.jsxs)(j.fY,{children:[(0,t.jsx)(j.f$,{children:"Are you sure?"}),(0,t.jsxs)(j.yT,{children:['This will permanently delete the test case "',f.name,'". This action cannot be undone.']})]}),(0,t.jsxs)(j.xo,{children:[(0,t.jsx)(j.le,{children:"Cancel"}),(0,t.jsx)(j.OL,{onClick:e=>{e.stopPropagation(),C({variables:{id:f.id}})},disabled:w,className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:w?"Deleting...":"Delete"})]})]})})]})}var p=l(35974),v=l(7598);let f=(e,s)=>[{accessorKey:"name",header:e=>{let{column:s}=e;return(0,t.jsx)(d,{column:s,title:"Name"})},cell:e=>{let{row:s}=e;return(0,t.jsx)("div",{className:"flex space-x-2",children:(0,t.jsx)("span",{className:"max-w-[400px] truncate font-medium",children:s.getValue("name")})})}},{accessorKey:"description",header:e=>{let{column:s}=e;return(0,t.jsx)(d,{column:s,title:"Description"})},cell:e=>{let{row:s}=e,l=s.getValue("description");return(0,t.jsx)("div",{className:"flex space-x-2",children:(0,t.jsx)("span",{className:"max-w-[500px] truncate text-muted-foreground",children:l||"—"})})}},{accessorKey:"inputs",header:e=>{let{column:s}=e;return(0,t.jsx)(d,{column:s,title:"Messages"})},cell:e=>{let{row:s}=e,l=s.getValue("inputs");return(0,t.jsxs)(p.C,{variant:"secondary",children:[(null==l?void 0:l.length)||0," messages"]})}},{accessorKey:"updatedAt",header:e=>{let{column:s}=e;return(0,t.jsx)(d,{column:s,title:"Updated"})},cell:e=>{let{row:s}=e,l=s.getValue("updatedAt");return(0,t.jsx)("div",{className:"flex w-[100px] items-center",children:(0,t.jsx)("span",{className:"text-sm text-muted-foreground",children:(0,v.Q)(new Date(l),{addSuffix:!0})})})}},{id:"actions",cell:l=>{let{row:a}=l;return(0,t.jsx)(g,{row:a,user:e,edit:()=>{s(a.original)}})}}];var N=l(7211),C=l(71594),w=l(24525),y=l(99397);function b(e){let{table:s}=e;return(0,t.jsxs)(r.h_,{modal:!1,children:[(0,t.jsx)(r.$F,{asChild:!0,children:(0,t.jsxs)(c.z,{variant:"outline",size:"sm",className:"ml-auto hidden h-8 lg:flex",children:[(0,t.jsx)(n.hsZ,{className:"mr-2 h-4 w-4"}),"View"]})}),(0,t.jsxs)(r.AW,{align:"end",className:"w-[150px]",children:[(0,t.jsx)(r.Ju,{children:"Toggle columns"}),(0,t.jsx)(r.VD,{}),s.getAllColumns().filter(e=>void 0!==e.accessorFn&&e.getCanHide()).map(e=>(0,t.jsx)(r.bO,{className:"capitalize",checked:e.getIsVisible(),onCheckedChange:s=>e.toggleVisibility(!!s),children:(0,t.jsx)("span",{className:"w-[200px] truncate",children:e.id})},e.id))]})]})}var S=l(95186),k=l(93022),F=l(73578),P=l(82534);function V(e){var s,l,i,r,d,u;let{columns:x,testCase:j}=e,{toast:g}=(0,m.pm)(),[p,v]=a.useState({}),[f,V]=a.useState({}),[_,z]=a.useState([]),[D,R]=(0,a.useState)([]),[T,A]=(0,a.useState)(1),[M,E]=a.useState([]),[G,I]=(0,a.useState)(!1),[O,X]=(0,a.useState)(j||null);a.useEffect(()=>{j?(X(j),I(!0)):(I(!1),X(null))},[j]);let{loading:Z,error:W,data:H,refetch:K}=(0,N.aM)(h.RV,{fetchPolicy:"no-cache",nextFetchPolicy:"network-only",variables:{page:T,limit:10,filters:D},pollInterval:3e4}),[$]=(0,o.D)(h.lW,{onCompleted:()=>{g({title:"Test case deleted",description:"The test case has been successfully deleted."}),K()},onError:e=>{g({title:"Failed to delete test case",description:e.message,variant:"destructive"})}}),L=null==H?void 0:null===(s=H.test_casesPagination)||void 0===s?void 0:s.pageInfo,q=(null==H?void 0:null===(l=H.test_casesPagination)||void 0===l?void 0:l.items)||[],J=(0,C.b7)({data:q,columns:x,state:{sorting:M,columnVisibility:f,rowSelection:p,columnFilters:_},enableRowSelection:!0,onRowSelectionChange:v,onSortingChange:E,onColumnFiltersChange:z,onColumnVisibilityChange:V,getCoreRowModel:(0,w.sC)(),getFilteredRowModel:(0,w.vL)(),getPaginationRowModel:(0,w.G_)(),getSortedRowModel:(0,w.tj)(),getFacetedRowModel:(0,w.o6)(),getFacetedUniqueValues:(0,w.JG)()});a.useEffect(()=>{var e;let s=null===(e=J.getColumn("name"))||void 0===e?void 0:e.getFilterValue();s?R([{name:{contains:s}}]):R([])},[null===(i=J.getColumn("name"))||void 0===i?void 0:i.getFilterValue()]);let U=e=>{e?(X(e),I(!0)):(I(!1),X(null))},Y=()=>{I(!1),X(null)};return(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsx)("div",{className:"flex flex-1 items-center space-x-2",children:(0,t.jsx)(S.I,{placeholder:"Filter by name...",value:null!==(u=null===(r=J.getColumn("name"))||void 0===r?void 0:r.getFilterValue())&&void 0!==u?u:"",onChange:e=>{var s;return null===(s=J.getColumn("name"))||void 0===s?void 0:s.setFilterValue(e.target.value)},className:"h-8 w-[150px] lg:w-[250px]"})}),(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,t.jsx)(b,{table:J}),(0,t.jsxs)(c.z,{variant:"default",size:"sm",className:"ml-auto h-8",onClick:()=>I(!0),children:[(0,t.jsx)(y.Z,{className:"mr-2 h-4 w-4"}),"New Test Case"]})]})]}),(0,t.jsx)("div",{className:"rounded-md border",children:(0,t.jsxs)(F.iA,{children:[(0,t.jsx)(F.xD,{children:J.getHeaderGroups().map(e=>(0,t.jsx)(F.SC,{children:e.headers.map(e=>(0,t.jsx)(F.ss,{children:e.isPlaceholder?null:(0,C.ie)(e.column.columnDef.header,e.getContext())},e.id))},e.id))}),(0,t.jsx)(F.RM,{children:Z?Array.from({length:5}).map((e,s)=>(0,t.jsx)(F.SC,{children:x.map((e,s)=>(0,t.jsx)(F.pj,{children:(0,t.jsx)(k.O,{className:"h-6 w-full"})},s))},s)):(null===(d=J.getRowModel().rows)||void 0===d?void 0:d.length)?J.getRowModel().rows.map(e=>(0,t.jsx)(F.SC,{"data-state":e.getIsSelected()&&"selected",className:"cursor-pointer",onClick:()=>{U(e.original)},children:e.getVisibleCells().map(e=>(0,t.jsx)(F.pj,{children:(0,C.ie)(e.column.columnDef.cell,e.getContext())},e.id))},e.id)):(0,t.jsx)(F.SC,{children:(0,t.jsx)(F.pj,{colSpan:x.length,className:"h-24 text-center",children:"No test cases found."})})})]})}),(0,t.jsxs)("div",{className:"flex items-center justify-between px-2",children:[(0,t.jsx)("div",{className:"flex-1 text-sm text-muted-foreground",children:L&&(0,t.jsxs)(t.Fragment,{children:["Page ",L.currentPage," of ",L.pageCount," (",L.itemCount," total)"]})}),(0,t.jsx)("div",{className:"flex items-center space-x-6 lg:space-x-8",children:(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,t.jsxs)(c.z,{variant:"outline",className:"hidden h-8 w-8 p-0 lg:flex",onClick:()=>A(1),disabled:!(null==L?void 0:L.hasPreviousPage),children:[(0,t.jsx)("span",{className:"sr-only",children:"Go to first page"}),(0,t.jsx)(n.kRt,{className:"h-4 w-4"})]}),(0,t.jsxs)(c.z,{variant:"outline",className:"h-8 w-8 p-0",onClick:()=>A(T-1),disabled:!(null==L?void 0:L.hasPreviousPage),children:[(0,t.jsx)("span",{className:"sr-only",children:"Go to previous page"}),(0,t.jsx)(n.wyc,{className:"h-4 w-4"})]}),(0,t.jsxs)(c.z,{variant:"outline",className:"h-8 w-8 p-0",onClick:()=>A(T+1),disabled:!(null==L?void 0:L.hasNextPage),children:[(0,t.jsx)("span",{className:"sr-only",children:"Go to next page"}),(0,t.jsx)(n.XCv,{className:"h-4 w-4"})]}),(0,t.jsxs)(c.z,{variant:"outline",className:"hidden h-8 w-8 p-0 lg:flex",onClick:()=>A((null==L?void 0:L.pageCount)||1),disabled:!(null==L?void 0:L.hasNextPage),children:[(0,t.jsx)("span",{className:"sr-only",children:"Go to last page"}),(0,t.jsx)(n.yr4,{className:"h-4 w-4"})]})]})})]}),(0,t.jsx)(P.F,{open:G,onClose:Y,onSuccess:()=>{K(),Y()},testCase:O})]})}var _=l(13832),z=l(64972),D=l(32660),R=l(65613),T=l(99376);let A="force-dynamic";function M(){var e,s;let{user:l}=(0,a.useContext)(_.S),[n,i]=(0,a.useState)(null),r=f(l,e=>{i(e)}),d=(0,T.useRouter)();return l.super_admin||(null===(e=l.role)||void 0===e?void 0:e.evals)==="read"||(null===(s=l.role)||void 0===s?void 0:s.evals)==="write"?(0,t.jsx)(t.Fragment,{children:(0,t.jsxs)("div",{className:"hidden h-full flex-1 flex-col space-y-8 p-8 md:flex",children:[(0,t.jsx)("div",{className:"flex items-center justify-between space-y-2",children:(0,t.jsxs)("div",{className:"flex items-center gap-4",children:[(0,t.jsx)(c.z,{variant:"ghost",size:"icon",onClick:()=>d.push("/evals"),children:(0,t.jsx)(D.Z,{className:"h-4 w-4"})}),(0,t.jsxs)("div",{children:[(0,t.jsx)("h2",{className:"text-2xl font-bold tracking-tight",children:"Test Cases"}),(0,t.jsx)("p",{className:"text-muted-foreground",children:"Create and manage test cases for evaluating agent performance."})]})]})}),(0,t.jsx)(V,{columns:r,testCase:n||void 0})]})}):(0,t.jsx)("div",{className:"flex h-full flex-1 flex-col space-y-8 p-8",children:(0,t.jsxs)(R.bZ,{variant:"destructive",children:[(0,t.jsx)(z.Z,{className:"h-4 w-4"}),(0,t.jsx)(R.X,{children:"You don't have permission to access Test Cases. Contact your administrator to request access."})]})})}}},function(e){e.O(0,[6840,329,8310,3954,9851,7629,7093,6148,847,1942,7648,7823,8068,5799,605,4567,1206,5338,3825,5110,1713,1425,4811,1594,3145,9621,6373,3832,3750,1685,2971,2117,1744],function(){return e(e.s=95094)}),_N_E=e.O()}]);
|
|
2
|
-
//# sourceMappingURL=page-
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6208],{95094:function(e,s,l){Promise.resolve().then(l.bind(l,52489))},52489:function(e,s,l){"use strict";l.r(s),l.d(s,{default:function(){return M},dynamic:function(){return A}});var t=l(57437),a=l(2265),n=l(20653),i=l(94508),c=l(62869),r=l(84190);function d(e){let{column:s,title:l,className:a}=e;return s.getCanSort()?(0,t.jsx)("div",{className:(0,i.cn)("flex items-center space-x-2",a),children:(0,t.jsxs)(r.h_,{modal:!1,children:[(0,t.jsx)(r.$F,{asChild:!0,children:(0,t.jsxs)(c.z,{variant:"ghost",size:"sm",className:"-ml-3 h-8 data-[state=open]:bg-accent",children:[(0,t.jsx)("span",{children:l}),"desc"===s.getIsSorted()?(0,t.jsx)(n.veu,{className:"ml-2 h-4 w-4"}):"asc"===s.getIsSorted()?(0,t.jsx)(n.Hf3,{className:"ml-2 h-4 w-4"}):(0,t.jsx)(n.jnn,{className:"ml-2 h-4 w-4"})]})}),(0,t.jsxs)(r.AW,{align:"start",children:[(0,t.jsxs)(r.Xi,{onClick:()=>s.toggleSorting(!1),children:[(0,t.jsx)(n.Hf3,{className:"mr-2 h-3.5 w-3.5 text-muted-foreground/70"}),"Asc"]}),(0,t.jsxs)(r.Xi,{onClick:()=>s.toggleSorting(!0),children:[(0,t.jsx)(n.veu,{className:"mr-2 h-3.5 w-3.5 text-muted-foreground/70"}),"Desc"]}),(0,t.jsx)(r.VD,{}),(0,t.jsxs)(r.Xi,{onClick:()=>s.toggleVisibility(!1),children:[(0,t.jsx)(n.L52,{className:"mr-2 h-3.5 w-3.5 text-muted-foreground/70"}),"Hide"]})]})]})}):(0,t.jsx)("div",{className:(0,i.cn)(a),children:l})}var o=l(12199),u=l(45675),x=l(18930),h=l(27689),m=l(77992),j=l(37099);function g(e){var s;let{row:l,user:i,edit:d}=e,{toast:g}=(0,m.pm)(),[p,v]=(0,a.useState)(!1),f=l.original,N=i.super_admin||(null===(s=i.role)||void 0===s?void 0:s.evals)==="write",[C,{loading:w}]=(0,o.D)(h.lW,{onCompleted:()=>{g({title:"Test case deleted",description:"The test case has been successfully deleted."}),v(!1),window.location.reload()},onError:e=>{g({title:"Failed to delete test case",description:e.message,variant:"destructive"})}});return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(r.h_,{modal:!1,children:[(0,t.jsx)(r.$F,{asChild:!0,children:(0,t.jsxs)(c.z,{variant:"ghost",className:"flex h-8 w-8 p-0 data-[state=open]:bg-muted",onClick:e=>e.stopPropagation(),children:[(0,t.jsx)(n.nWS,{className:"h-4 w-4"}),(0,t.jsx)("span",{className:"sr-only",children:"Open menu"})]})}),(0,t.jsxs)(r.AW,{align:"end",className:"w-[160px]",children:[(0,t.jsxs)(r.Xi,{onClick:e=>{e.stopPropagation(),d()},children:[(0,t.jsx)(u.Z,{className:"mr-2 h-4 w-4"}),"Edit"]}),N&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.VD,{}),(0,t.jsxs)(r.Xi,{onClick:e=>{e.stopPropagation(),v(!0)},className:"text-destructive",children:[(0,t.jsx)(x.Z,{className:"mr-2 h-4 w-4"}),"Delete"]})]})]})]}),(0,t.jsx)(j.aR,{open:p,onOpenChange:v,children:(0,t.jsxs)(j._T,{onClick:e=>e.stopPropagation(),children:[(0,t.jsxs)(j.fY,{children:[(0,t.jsx)(j.f$,{children:"Are you sure?"}),(0,t.jsxs)(j.yT,{children:['This will permanently delete the test case "',f.name,'". This action cannot be undone.']})]}),(0,t.jsxs)(j.xo,{children:[(0,t.jsx)(j.le,{children:"Cancel"}),(0,t.jsx)(j.OL,{onClick:e=>{e.stopPropagation(),C({variables:{id:f.id}})},disabled:w,className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:w?"Deleting...":"Delete"})]})]})})]})}var p=l(35974),v=l(7598);let f=(e,s)=>[{accessorKey:"name",header:e=>{let{column:s}=e;return(0,t.jsx)(d,{column:s,title:"Name"})},cell:e=>{let{row:s}=e;return(0,t.jsx)("div",{className:"flex space-x-2",children:(0,t.jsx)("span",{className:"max-w-[400px] truncate font-medium",children:s.getValue("name")})})}},{accessorKey:"description",header:e=>{let{column:s}=e;return(0,t.jsx)(d,{column:s,title:"Description"})},cell:e=>{let{row:s}=e,l=s.getValue("description");return(0,t.jsx)("div",{className:"flex space-x-2",children:(0,t.jsx)("span",{className:"max-w-[500px] truncate text-muted-foreground",children:l||"—"})})}},{accessorKey:"inputs",header:e=>{let{column:s}=e;return(0,t.jsx)(d,{column:s,title:"Messages"})},cell:e=>{let{row:s}=e,l=s.getValue("inputs");return(0,t.jsxs)(p.C,{variant:"secondary",children:[(null==l?void 0:l.length)||0," messages"]})}},{accessorKey:"updatedAt",header:e=>{let{column:s}=e;return(0,t.jsx)(d,{column:s,title:"Updated"})},cell:e=>{let{row:s}=e,l=s.getValue("updatedAt");return(0,t.jsx)("div",{className:"flex w-[100px] items-center",children:(0,t.jsx)("span",{className:"text-sm text-muted-foreground",children:(0,v.Q)(new Date(l),{addSuffix:!0})})})}},{id:"actions",cell:l=>{let{row:a}=l;return(0,t.jsx)(g,{row:a,user:e,edit:()=>{s(a.original)}})}}];var N=l(7211),C=l(71594),w=l(24525),y=l(99397);function b(e){let{table:s}=e;return(0,t.jsxs)(r.h_,{modal:!1,children:[(0,t.jsx)(r.$F,{asChild:!0,children:(0,t.jsxs)(c.z,{variant:"outline",size:"sm",className:"ml-auto hidden h-8 lg:flex",children:[(0,t.jsx)(n.hsZ,{className:"mr-2 h-4 w-4"}),"View"]})}),(0,t.jsxs)(r.AW,{align:"end",className:"w-[150px]",children:[(0,t.jsx)(r.Ju,{children:"Toggle columns"}),(0,t.jsx)(r.VD,{}),s.getAllColumns().filter(e=>void 0!==e.accessorFn&&e.getCanHide()).map(e=>(0,t.jsx)(r.bO,{className:"capitalize",checked:e.getIsVisible(),onCheckedChange:s=>e.toggleVisibility(!!s),children:(0,t.jsx)("span",{className:"w-[200px] truncate",children:e.id})},e.id))]})]})}var S=l(95186),k=l(93022),F=l(73578),P=l(82534);function V(e){var s,l,i,r,d,u;let{columns:x,testCase:j}=e,{toast:g}=(0,m.pm)(),[p,v]=a.useState({}),[f,V]=a.useState({}),[_,z]=a.useState([]),[D,R]=(0,a.useState)([]),[T,A]=(0,a.useState)(1),[M,E]=a.useState([]),[G,I]=(0,a.useState)(!1),[O,X]=(0,a.useState)(j||null);a.useEffect(()=>{j?(X(j),I(!0)):(I(!1),X(null))},[j]);let{loading:Z,error:W,data:H,refetch:K}=(0,N.aM)(h.RV,{fetchPolicy:"no-cache",nextFetchPolicy:"network-only",variables:{page:T,limit:10,filters:D},pollInterval:3e4}),[$]=(0,o.D)(h.lW,{onCompleted:()=>{g({title:"Test case deleted",description:"The test case has been successfully deleted."}),K()},onError:e=>{g({title:"Failed to delete test case",description:e.message,variant:"destructive"})}}),L=null==H?void 0:null===(s=H.test_casesPagination)||void 0===s?void 0:s.pageInfo,q=(null==H?void 0:null===(l=H.test_casesPagination)||void 0===l?void 0:l.items)||[],J=(0,C.b7)({data:q,columns:x,state:{sorting:M,columnVisibility:f,rowSelection:p,columnFilters:_},enableRowSelection:!0,onRowSelectionChange:v,onSortingChange:E,onColumnFiltersChange:z,onColumnVisibilityChange:V,getCoreRowModel:(0,w.sC)(),getFilteredRowModel:(0,w.vL)(),getPaginationRowModel:(0,w.G_)(),getSortedRowModel:(0,w.tj)(),getFacetedRowModel:(0,w.o6)(),getFacetedUniqueValues:(0,w.JG)()});a.useEffect(()=>{var e;let s=null===(e=J.getColumn("name"))||void 0===e?void 0:e.getFilterValue();s?R([{name:{contains:s}}]):R([])},[null===(i=J.getColumn("name"))||void 0===i?void 0:i.getFilterValue()]);let U=e=>{e?(X(e),I(!0)):(I(!1),X(null))},Y=()=>{I(!1),X(null)};return(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsx)("div",{className:"flex flex-1 items-center space-x-2",children:(0,t.jsx)(S.I,{placeholder:"Filter by name...",value:null!==(u=null===(r=J.getColumn("name"))||void 0===r?void 0:r.getFilterValue())&&void 0!==u?u:"",onChange:e=>{var s;return null===(s=J.getColumn("name"))||void 0===s?void 0:s.setFilterValue(e.target.value)},className:"h-8 w-[150px] lg:w-[250px]"})}),(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,t.jsx)(b,{table:J}),(0,t.jsxs)(c.z,{variant:"default",size:"sm",className:"ml-auto h-8",onClick:()=>I(!0),children:[(0,t.jsx)(y.Z,{className:"mr-2 h-4 w-4"}),"New Test Case"]})]})]}),(0,t.jsx)("div",{className:"rounded-md border",children:(0,t.jsxs)(F.iA,{children:[(0,t.jsx)(F.xD,{children:J.getHeaderGroups().map(e=>(0,t.jsx)(F.SC,{children:e.headers.map(e=>(0,t.jsx)(F.ss,{children:e.isPlaceholder?null:(0,C.ie)(e.column.columnDef.header,e.getContext())},e.id))},e.id))}),(0,t.jsx)(F.RM,{children:Z?Array.from({length:5}).map((e,s)=>(0,t.jsx)(F.SC,{children:x.map((e,s)=>(0,t.jsx)(F.pj,{children:(0,t.jsx)(k.O,{className:"h-6 w-full"})},s))},s)):(null===(d=J.getRowModel().rows)||void 0===d?void 0:d.length)?J.getRowModel().rows.map(e=>(0,t.jsx)(F.SC,{"data-state":e.getIsSelected()&&"selected",className:"cursor-pointer",onClick:()=>{U(e.original)},children:e.getVisibleCells().map(e=>(0,t.jsx)(F.pj,{children:(0,C.ie)(e.column.columnDef.cell,e.getContext())},e.id))},e.id)):(0,t.jsx)(F.SC,{children:(0,t.jsx)(F.pj,{colSpan:x.length,className:"h-24 text-center",children:"No test cases found."})})})]})}),(0,t.jsxs)("div",{className:"flex items-center justify-between px-2",children:[(0,t.jsx)("div",{className:"flex-1 text-sm text-muted-foreground",children:L&&(0,t.jsxs)(t.Fragment,{children:["Page ",L.currentPage," of ",L.pageCount," (",L.itemCount," total)"]})}),(0,t.jsx)("div",{className:"flex items-center space-x-6 lg:space-x-8",children:(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,t.jsxs)(c.z,{variant:"outline",className:"hidden h-8 w-8 p-0 lg:flex",onClick:()=>A(1),disabled:!(null==L?void 0:L.hasPreviousPage),children:[(0,t.jsx)("span",{className:"sr-only",children:"Go to first page"}),(0,t.jsx)(n.kRt,{className:"h-4 w-4"})]}),(0,t.jsxs)(c.z,{variant:"outline",className:"h-8 w-8 p-0",onClick:()=>A(T-1),disabled:!(null==L?void 0:L.hasPreviousPage),children:[(0,t.jsx)("span",{className:"sr-only",children:"Go to previous page"}),(0,t.jsx)(n.wyc,{className:"h-4 w-4"})]}),(0,t.jsxs)(c.z,{variant:"outline",className:"h-8 w-8 p-0",onClick:()=>A(T+1),disabled:!(null==L?void 0:L.hasNextPage),children:[(0,t.jsx)("span",{className:"sr-only",children:"Go to next page"}),(0,t.jsx)(n.XCv,{className:"h-4 w-4"})]}),(0,t.jsxs)(c.z,{variant:"outline",className:"hidden h-8 w-8 p-0 lg:flex",onClick:()=>A((null==L?void 0:L.pageCount)||1),disabled:!(null==L?void 0:L.hasNextPage),children:[(0,t.jsx)("span",{className:"sr-only",children:"Go to last page"}),(0,t.jsx)(n.yr4,{className:"h-4 w-4"})]})]})})]}),(0,t.jsx)(P.F,{open:G,onClose:Y,onSuccess:()=>{K(),Y()},testCase:O})]})}var _=l(13832),z=l(64972),D=l(32660),R=l(65613),T=l(99376);let A="force-dynamic";function M(){var e,s;let{user:l}=(0,a.useContext)(_.S),[n,i]=(0,a.useState)(null),r=f(l,e=>{i(e)}),d=(0,T.useRouter)();return l.super_admin||(null===(e=l.role)||void 0===e?void 0:e.evals)==="read"||(null===(s=l.role)||void 0===s?void 0:s.evals)==="write"?(0,t.jsx)(t.Fragment,{children:(0,t.jsxs)("div",{className:"hidden h-full flex-1 flex-col space-y-8 p-8 md:flex",children:[(0,t.jsx)("div",{className:"flex items-center justify-between space-y-2",children:(0,t.jsxs)("div",{className:"flex items-center gap-4",children:[(0,t.jsx)(c.z,{variant:"ghost",size:"icon",onClick:()=>d.push("/evals"),children:(0,t.jsx)(D.Z,{className:"h-4 w-4"})}),(0,t.jsxs)("div",{children:[(0,t.jsx)("h2",{className:"text-2xl font-bold tracking-tight",children:"Test Cases"}),(0,t.jsx)("p",{className:"text-muted-foreground",children:"Create and manage test cases for evaluating agent performance."})]})]})}),(0,t.jsx)(V,{columns:r,testCase:n||void 0})]})}):(0,t.jsx)("div",{className:"flex h-full flex-1 flex-col space-y-8 p-8",children:(0,t.jsxs)(R.bZ,{variant:"destructive",children:[(0,t.jsx)(z.Z,{className:"h-4 w-4"}),(0,t.jsx)(R.X,{children:"You don't have permission to access Test Cases. Contact your administrator to request access."})]})})}}},function(e){e.O(0,[6840,329,8310,3954,9851,7629,7093,6148,847,1942,7648,7823,8068,5799,605,4567,1206,5338,3825,5110,1425,1594,1713,192,3145,552,6373,3832,3750,1685,2971,2117,1744],function(){return e(e.s=95094)}),_N_E=e.O()}]);
|
|
2
|
+
//# sourceMappingURL=page-827f50c6d1f150d0.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static/chunks/app/(application)/evals/cases/page-a39fef7444581565.js","mappings":"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","sources":["webpack://_N_E/?1e6c","webpack://_N_E/./app/(application)/evals/cases/components/data-table-column-header.tsx","webpack://_N_E/./app/(application)/evals/cases/components/data-table-row-actions.tsx","webpack://_N_E/./app/(application)/evals/cases/components/columns.tsx","webpack://_N_E/./app/(application)/evals/cases/components/data-table-view-options.tsx","webpack://_N_E/./app/(application)/evals/cases/components/data-table.tsx","webpack://_N_E/./app/(application)/evals/cases/page.tsx"],"sourcesContent":["import(/* webpackMode: \"eager\" */ \"/home/runner/work/exulu-frontend/exulu-frontend/app/(application)/evals/cases/page.tsx\");\n","\"use client\";\n\nimport {\n ArrowDownIcon,\n ArrowUpIcon,\n CaretSortIcon,\n EyeNoneIcon,\n} from \"@radix-ui/react-icons\";\nimport { Column } from \"@tanstack/react-table\";\n\nimport { cn } from \"@/lib/utils\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\";\n\ninterface DataTableColumnHeaderProps<TData, TValue>\n extends React.HTMLAttributes<HTMLDivElement> {\n column: Column<TData, TValue>;\n title: string;\n}\n\nexport function DataTableColumnHeader<TData, TValue>({\n column,\n title,\n className,\n}: DataTableColumnHeaderProps<TData, TValue>) {\n if (!column.getCanSort()) {\n return <div className={cn(className)}>{title}</div>;\n }\n\n return (\n <div className={cn(\"flex items-center space-x-2\", className)}>\n <DropdownMenu modal={false}>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"-ml-3 h-8 data-[state=open]:bg-accent\"\n >\n <span>{title}</span>\n {column.getIsSorted() === \"desc\" ? (\n <ArrowDownIcon className=\"ml-2 h-4 w-4\" />\n ) : column.getIsSorted() === \"asc\" ? (\n <ArrowUpIcon className=\"ml-2 h-4 w-4\" />\n ) : (\n <CaretSortIcon className=\"ml-2 h-4 w-4\" />\n )}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\">\n <DropdownMenuItem onClick={() => column.toggleSorting(false)}>\n <ArrowUpIcon className=\"mr-2 h-3.5 w-3.5 text-muted-foreground/70\" />\n Asc\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => column.toggleSorting(true)}>\n <ArrowDownIcon className=\"mr-2 h-3.5 w-3.5 text-muted-foreground/70\" />\n Desc\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem onClick={() => column.toggleVisibility(false)}>\n <EyeNoneIcon className=\"mr-2 h-3.5 w-3.5 text-muted-foreground/70\" />\n Hide\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n );\n}\n","\"use client\";\n\nimport { DotsHorizontalIcon } from \"@radix-ui/react-icons\";\nimport { Row } from \"@tanstack/react-table\";\nimport { useMutation } from \"@apollo/client\";\nimport { Pencil, Trash2 } from \"lucide-react\";\n\nimport { Button } from \"@/components/ui/button\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\";\nimport { DELETE_TEST_CASE } from \"@/queries/queries\";\nimport { useToast } from \"@/components/ui/use-toast\";\nimport { User, UserWithRole } from \"@EXULU_SHARED/models/user\";\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n} from \"@/components/ui/alert-dialog\";\nimport { useState } from \"react\";\n\ninterface DataTableRowActionsProps<TData> {\n row: Row<TData>;\n user: UserWithRole;\n edit: () => void;\n}\n\nexport function DataTableRowActions<TData>({\n row,\n user,\n edit\n}: DataTableRowActionsProps<TData>) {\n const { toast } = useToast();\n const [showDeleteDialog, setShowDeleteDialog] = useState(false);\n const testCase = row.original as any;\n\n const canWrite = user.super_admin || user.role?.evals === \"write\";\n\n const [deleteTestCase, { loading: deleteLoading }] = useMutation(DELETE_TEST_CASE, {\n onCompleted: () => {\n toast({\n title: \"Test case deleted\",\n description: \"The test case has been successfully deleted.\",\n });\n setShowDeleteDialog(false);\n window.location.reload();\n },\n onError: (error) => {\n toast({\n title: \"Failed to delete test case\",\n description: error.message,\n variant: \"destructive\",\n });\n },\n });\n\n const handleDelete = (e: React.MouseEvent) => {\n e.stopPropagation();\n deleteTestCase({\n variables: {\n id: testCase.id,\n },\n });\n };\n\n return (\n <>\n <DropdownMenu modal={false}>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n className=\"flex h-8 w-8 p-0 data-[state=open]:bg-muted\"\n onClick={(e) => e.stopPropagation()}\n >\n <DotsHorizontalIcon className=\"h-4 w-4\" />\n <span className=\"sr-only\">Open menu</span>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-[160px]\">\n <DropdownMenuItem\n onClick={(e) => {\n e.stopPropagation();\n edit()\n // Edit is handled by the row click in data-table.tsx\n }}\n >\n <Pencil className=\"mr-2 h-4 w-4\" />\n Edit\n </DropdownMenuItem>\n {canWrite && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n onClick={(e) => {\n e.stopPropagation();\n setShowDeleteDialog(true);\n }}\n className=\"text-destructive\"\n >\n <Trash2 className=\"mr-2 h-4 w-4\" />\n Delete\n </DropdownMenuItem>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n\n <AlertDialog open={showDeleteDialog} onOpenChange={setShowDeleteDialog}>\n <AlertDialogContent onClick={(e) => e.stopPropagation()}>\n <AlertDialogHeader>\n <AlertDialogTitle>Are you sure?</AlertDialogTitle>\n <AlertDialogDescription>\n This will permanently delete the test case \"{testCase.name}\".\n This action cannot be undone.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Cancel</AlertDialogCancel>\n <AlertDialogAction\n onClick={handleDelete}\n disabled={deleteLoading}\n className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n >\n {deleteLoading ? \"Deleting...\" : \"Delete\"}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </>\n );\n}\n","\"use client\";\n\nimport { ColumnDef } from \"@tanstack/react-table\";\nimport { DataTableColumnHeader } from \"./data-table-column-header\";\nimport { DataTableRowActions } from \"./data-table-row-actions\";\nimport { TestCase } from \"@/types/models/test-case\";\nimport { UserWithRole } from \"@EXULU_SHARED/models/user\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { formatDistanceToNow } from \"date-fns\";\n\nexport const createColumns = (user: UserWithRole, edit: (test: TestCase) => void): ColumnDef<TestCase>[] => [\n {\n accessorKey: \"name\",\n header: ({ column }) => (\n <DataTableColumnHeader column={column} title=\"Name\" />\n ),\n cell: ({ row }) => {\n return (\n <div className=\"flex space-x-2\">\n <span className=\"max-w-[400px] truncate font-medium\">\n {row.getValue(\"name\")}\n </span>\n </div>\n );\n },\n },\n {\n accessorKey: \"description\",\n header: ({ column }) => (\n <DataTableColumnHeader column={column} title=\"Description\" />\n ),\n cell: ({ row }) => {\n const description = row.getValue(\"description\") as string;\n return (\n <div className=\"flex space-x-2\">\n <span className=\"max-w-[500px] truncate text-muted-foreground\">\n {description || \"—\"}\n </span>\n </div>\n );\n },\n },\n {\n accessorKey: \"inputs\",\n header: ({ column }) => (\n <DataTableColumnHeader column={column} title=\"Messages\" />\n ),\n cell: ({ row }) => {\n const inputs = row.getValue(\"inputs\") as any[];\n return (\n <Badge variant=\"secondary\">\n {inputs?.length || 0} messages\n </Badge>\n );\n },\n },\n /* {\n accessorKey: \"expected_tools\",\n header: ({ column }) => (\n <DataTableColumnHeader column={column} title=\"Expected Tools\" />\n ),\n cell: ({ row }) => {\n const tools = row.getValue(\"expected_tools\") as string[];\n if (!tools || tools.length === 0) return <span className=\"text-muted-foreground\">—</span>;\n return (\n <Badge variant=\"outline\">\n {tools.length} tools\n </Badge>\n );\n },\n },\n {\n accessorKey: \"expected_knowledge_sources\",\n header: ({ column }) => (\n <DataTableColumnHeader column={column} title=\"Expected Contexts\" />\n ),\n cell: ({ row }) => {\n const contexts = row.getValue(\"expected_knowledge_sources\") as string[];\n if (!contexts || contexts.length === 0) return <span className=\"text-muted-foreground\">—</span>;\n return (\n <Badge variant=\"outline\">\n {contexts.length} contexts\n </Badge>\n );\n },\n },\n {\n accessorKey: \"expected_agent_tools\",\n header: ({ column }) => (\n <DataTableColumnHeader column={column} title=\"Expected Agents\" />\n ),\n cell: ({ row }) => {\n const agents = row.getValue(\"expected_agent_tools\") as string[];\n if (!agents || agents.length === 0) return <span className=\"text-muted-foreground\">—</span>;\n return (\n <Badge variant=\"outline\">\n {agents.length} agents\n </Badge>\n );\n },\n }, */\n {\n accessorKey: \"updatedAt\",\n header: ({ column }) => (\n <DataTableColumnHeader column={column} title=\"Updated\" />\n ),\n cell: ({ row }) => {\n const date = row.getValue(\"updatedAt\") as string;\n return (\n <div className=\"flex w-[100px] items-center\">\n <span className=\"text-sm text-muted-foreground\">\n {formatDistanceToNow(new Date(date), { addSuffix: true })}\n </span>\n </div>\n );\n },\n },\n {\n id: \"actions\",\n cell: ({ row }) => <DataTableRowActions row={row} user={user} edit={() => {\n const testCase = row.original as TestCase;\n edit(testCase);\n }} />,\n },\n];\n","\"use client\";\n\nimport { MixerHorizontalIcon } from \"@radix-ui/react-icons\";\nimport { Table } from \"@tanstack/react-table\";\n\nimport { Button } from \"@/components/ui/button\";\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\";\n\ninterface DataTableViewOptionsProps<TData> {\n table: Table<TData>;\n}\n\nexport function DataTableViewOptions<TData>({\n table,\n}: DataTableViewOptionsProps<TData>) {\n return (\n <DropdownMenu modal={false}>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"ml-auto hidden h-8 lg:flex\"\n >\n <MixerHorizontalIcon className=\"mr-2 h-4 w-4\" />\n View\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-[150px]\">\n <DropdownMenuLabel>Toggle columns</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {table\n .getAllColumns()\n .filter(\n (column) =>\n typeof column.accessorFn !== \"undefined\" && column.getCanHide(),\n )\n .map((column) => {\n return (\n <DropdownMenuCheckboxItem\n key={column.id}\n className=\"capitalize\"\n checked={column.getIsVisible()}\n onCheckedChange={(value) => column.toggleVisibility(!!value)}\n >\n <span className=\"w-[200px] truncate\">{column.id}</span>\n </DropdownMenuCheckboxItem>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n","\"use client\";\n\nimport { useMutation, useQuery } from \"@apollo/client\";\nimport {\n ChevronLeftIcon,\n ChevronRightIcon,\n DoubleArrowLeftIcon,\n DoubleArrowRightIcon,\n} from \"@radix-ui/react-icons\";\nimport {\n ColumnDef,\n ColumnFiltersState,\n flexRender,\n getCoreRowModel,\n getFacetedRowModel,\n getFacetedUniqueValues,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n SortingState,\n useReactTable,\n VisibilityState,\n} from \"@tanstack/react-table\";\nimport { Plus } from \"lucide-react\";\nimport { useState } from \"react\";\nimport * as React from \"react\";\nimport {\n GET_TEST_CASES,\n DELETE_TEST_CASE,\n} from \"@/queries/queries\";\nimport { DataTableViewOptions } from \"./data-table-view-options\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/components/ui/table\";\nimport { useToast } from \"@/components/ui/use-toast\";\nimport { FilterOperator } from \"@/components/custom/recent-jobs\";\nimport { TestCaseModal } from \"./test-case-modal\";\nimport { TestCase } from \"@/types/models/test-case\";\n\nexport type TestCaseFilters = {\n name?: FilterOperator;\n createdAt?: FilterOperator;\n updatedAt?: FilterOperator;\n};\n\ninterface DataTableProps<TData, TValue> {\n columns: ColumnDef<TData, TValue>[];\n testCase?: TestCase;\n}\n\nexport function DataTable<TData, TValue>({\n columns,\n testCase,\n}: DataTableProps<TData, TValue>) {\n const { toast } = useToast();\n const [rowSelection, setRowSelection] = React.useState({});\n const [columnVisibility, setColumnVisibility] =\n React.useState<VisibilityState>({});\n const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>(\n [],\n );\n\n const [filters, setFilters] = useState<TestCaseFilters[]>([]);\n const [page, setPage] = useState(1);\n const [sorting, setSorting] = React.useState<SortingState>([]);\n const [showModal, setShowModal] = useState(false);\n const [editingTestCase, setEditingTestCase] = useState<TestCase | null>(testCase || null);\n\n React.useEffect(() => {\n if (testCase) {\n setEditingTestCase(testCase);\n setShowModal(true);\n } else {\n setShowModal(false);\n setEditingTestCase(null);\n }\n }, [testCase]);\n\n const { loading, error, data, refetch } = useQuery(GET_TEST_CASES, {\n fetchPolicy: \"no-cache\",\n nextFetchPolicy: \"network-only\",\n variables: {\n page: page,\n limit: 10,\n filters: filters,\n },\n pollInterval: 30000,\n });\n\n const [deleteTestCase] = useMutation(DELETE_TEST_CASE, {\n onCompleted: () => {\n toast({\n title: \"Test case deleted\",\n description: \"The test case has been successfully deleted.\",\n });\n refetch();\n },\n onError: (error) => {\n toast({\n title: \"Failed to delete test case\",\n description: error.message,\n variant: \"destructive\",\n });\n },\n });\n\n const pageInfo = data?.test_casesPagination?.pageInfo;\n const testCases = data?.test_casesPagination?.items || [];\n\n const table = useReactTable({\n data: testCases as TData[],\n columns,\n state: {\n sorting,\n columnVisibility,\n rowSelection,\n columnFilters,\n },\n enableRowSelection: true,\n onRowSelectionChange: setRowSelection,\n onSortingChange: setSorting,\n onColumnFiltersChange: setColumnFilters,\n onColumnVisibilityChange: setColumnVisibility,\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFacetedRowModel: getFacetedRowModel(),\n getFacetedUniqueValues: getFacetedUniqueValues(),\n });\n\n React.useEffect(() => {\n const nameFilter = table.getColumn(\"name\")?.getFilterValue() as string;\n if (nameFilter) {\n setFilters([{ name: { contains: nameFilter } }]);\n } else {\n setFilters([]);\n }\n }, [table.getColumn(\"name\")?.getFilterValue()]);\n\n const handleEdit = (testCase: TestCase) => {\n if (testCase) {\n setEditingTestCase(testCase);\n setShowModal(true);\n } else {\n setShowModal(false);\n setEditingTestCase(null);\n }\n };\n\n const handleCloseModal = () => {\n setShowModal(false);\n setEditingTestCase(null);\n };\n\n return (\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex flex-1 items-center space-x-2\">\n <Input\n placeholder=\"Filter by name...\"\n value={(table.getColumn(\"name\")?.getFilterValue() as string) ?? \"\"}\n onChange={(event) =>\n table.getColumn(\"name\")?.setFilterValue(event.target.value)\n }\n className=\"h-8 w-[150px] lg:w-[250px]\"\n />\n </div>\n <div className=\"flex items-center space-x-2\">\n <DataTableViewOptions table={table} />\n <Button\n variant=\"default\"\n size=\"sm\"\n className=\"ml-auto h-8\"\n onClick={() => setShowModal(true)}\n >\n <Plus className=\"mr-2 h-4 w-4\" />\n New Test Case\n </Button>\n </div>\n </div>\n\n <div className=\"rounded-md border\">\n <Table>\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => {\n return (\n <TableHead key={header.id}>\n {header.isPlaceholder\n ? null\n : flexRender(\n header.column.columnDef.header,\n header.getContext(),\n )}\n </TableHead>\n );\n })}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {loading ? (\n Array.from({ length: 5 }).map((_, i) => (\n <TableRow key={i}>\n {columns.map((_, j) => (\n <TableCell key={j}>\n <Skeleton className=\"h-6 w-full\" />\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n <TableRow\n key={row.id}\n data-state={row.getIsSelected() && \"selected\"}\n className=\"cursor-pointer\"\n onClick={() => {\n const testCase = row.original as TestCase;\n handleEdit(testCase);\n }}\n >\n {row.getVisibleCells().map((cell) => (\n <TableCell key={cell.id}>\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext(),\n )}\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow>\n <TableCell\n colSpan={columns.length}\n className=\"h-24 text-center\"\n >\n No test cases found.\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n\n <div className=\"flex items-center justify-between px-2\">\n <div className=\"flex-1 text-sm text-muted-foreground\">\n {pageInfo && (\n <>\n Page {pageInfo.currentPage} of {pageInfo.pageCount} ({pageInfo.itemCount} total)\n </>\n )}\n </div>\n <div className=\"flex items-center space-x-6 lg:space-x-8\">\n <div className=\"flex items-center space-x-2\">\n <Button\n variant=\"outline\"\n className=\"hidden h-8 w-8 p-0 lg:flex\"\n onClick={() => setPage(1)}\n disabled={!pageInfo?.hasPreviousPage}\n >\n <span className=\"sr-only\">Go to first page</span>\n <DoubleArrowLeftIcon className=\"h-4 w-4\" />\n </Button>\n <Button\n variant=\"outline\"\n className=\"h-8 w-8 p-0\"\n onClick={() => setPage(page - 1)}\n disabled={!pageInfo?.hasPreviousPage}\n >\n <span className=\"sr-only\">Go to previous page</span>\n <ChevronLeftIcon className=\"h-4 w-4\" />\n </Button>\n <Button\n variant=\"outline\"\n className=\"h-8 w-8 p-0\"\n onClick={() => setPage(page + 1)}\n disabled={!pageInfo?.hasNextPage}\n >\n <span className=\"sr-only\">Go to next page</span>\n <ChevronRightIcon className=\"h-4 w-4\" />\n </Button>\n <Button\n variant=\"outline\"\n className=\"hidden h-8 w-8 p-0 lg:flex\"\n onClick={() => setPage(pageInfo?.pageCount || 1)}\n disabled={!pageInfo?.hasNextPage}\n >\n <span className=\"sr-only\">Go to last page</span>\n <DoubleArrowRightIcon className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n </div>\n\n <TestCaseModal\n open={showModal}\n onClose={handleCloseModal}\n onSuccess={() => {\n refetch();\n handleCloseModal();\n }}\n testCase={editingTestCase}\n />\n </div>\n );\n}\n","\"use client\";\n\nimport { useContext, useState } from \"react\";\nimport { createColumns } from \"./components/columns\";\nimport { DataTable } from \"./components/data-table\";\nimport { UserContext } from \"@/app/(application)/authenticated\";\nimport { ArrowLeft, Brain } from \"lucide-react\";\nimport { Alert, AlertDescription } from \"@/components/ui/alert\";\nimport { Button } from \"@/components/ui/button\";\nimport { useRouter } from \"next/navigation\";\nimport { TestCase } from \"@/types/models/test-case\";\n\nexport const dynamic = \"force-dynamic\";\n\nexport default function TestCasesPage() {\n\n const { user } = useContext(UserContext);\n const [editingTestCase, setEditingTestCase] = useState<TestCase | null>(null);\n const columns = createColumns(user, (testCase) => {\n setEditingTestCase(testCase);\n });\n const router = useRouter();\n\n // Check if user has evals access\n const hasEvalsAccess = user.super_admin || user.role?.evals === \"read\" || user.role?.evals === \"write\";\n\n if (!hasEvalsAccess) {\n return (\n <div className=\"flex h-full flex-1 flex-col space-y-8 p-8\">\n <Alert variant=\"destructive\">\n <Brain className=\"h-4 w-4\" />\n <AlertDescription>\n You don't have permission to access Test Cases. Contact your administrator to request access.\n </AlertDescription>\n </Alert>\n </div>\n );\n }\n\n return (\n <>\n <div className=\"hidden h-full flex-1 flex-col space-y-8 p-8 md:flex\">\n <div className=\"flex items-center justify-between space-y-2\">\n <div className=\"flex items-center gap-4\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => router.push(\"/evals\")}>\n <ArrowLeft className=\"h-4 w-4\" />\n </Button>\n <div>\n <h2 className=\"text-2xl font-bold tracking-tight\">Test Cases</h2>\n <p className=\"text-muted-foreground\">\n Create and manage test cases for evaluating agent performance.\n </p>\n </div>\n </div>\n </div>\n <DataTable columns={columns} testCase={editingTestCase || undefined} />\n </div>\n </>\n );\n}\n"],"names":["Promise","resolve","then","__webpack_require__","bind","DataTableColumnHeader","param","column","title","className","getCanSort","jsx_runtime","jsx","div","cn","jsxs","DropdownMenu","modal","DropdownMenuTrigger","asChild","Button","variant","size","span","getIsSorted","ArrowDownIcon","ArrowUpIcon","CaretSortIcon","DropdownMenuContent","align","DropdownMenuItem","onClick","toggleSorting","DropdownMenuSeparator","toggleVisibility","EyeNoneIcon","DataTableRowActions","user","row","edit","toast","useToast","showDeleteDialog","setShowDeleteDialog","useState","testCase","original","canWrite","super_admin","role","evals","deleteTestCase","loading","deleteLoading","useMutation","DELETE_TEST_CASE","onCompleted","description","window","location","reload","onError","error","message","Fragment","e","stopPropagation","DotsHorizontalIcon","Pencil","Trash2","AlertDialog","open","onOpenChange","AlertDialogContent","AlertDialogHeader","AlertDialogTitle","AlertDialogDescription","name","AlertDialogFooter","AlertDialogCancel","AlertDialogAction","variables","id","disabled","createColumns","accessorKey","header","cell","getValue","inputs","Badge","length","date","formatDistanceToNow","Date","addSuffix","DataTableViewOptions","table","MixerHorizontalIcon","DropdownMenuLabel","getAllColumns","filter","accessorFn","getCanHide","map","DropdownMenuCheckboxItem","checked","getIsVisible","onCheckedChange","value","DataTable","data","columns","rowSelection","setRowSelection","React","columnVisibility","setColumnVisibility","columnFilters","setColumnFilters","filters","setFilters","page","setPage","sorting","setSorting","showModal","setShowModal","editingTestCase","setEditingTestCase","refetch","useQuery","GET_TEST_CASES","fetchPolicy","nextFetchPolicy","limit","pollInterval","pageInfo","test_casesPagination","testCases","items","useReactTable","state","enableRowSelection","onRowSelectionChange","onSortingChange","onColumnFiltersChange","onColumnVisibilityChange","getCoreRowModel","getFilteredRowModel","getPaginationRowModel","getSortedRowModel","getFacetedRowModel","getFacetedUniqueValues","nameFilter","getColumn","getFilterValue","contains","handleEdit","handleCloseModal","Input","placeholder","onChange","setFilterValue","event","target","Plus","Table","TableHeader","getHeaderGroups","TableRow","headerGroup","headers","TableHead","isPlaceholder","flexRender","columnDef","getContext","TableBody","Array","from","_","i","j","TableCell","Skeleton","getRowModel","rows","data-state","getIsSelected","getVisibleCells","colSpan","currentPage","pageCount","itemCount","hasPreviousPage","DoubleArrowLeftIcon","ChevronLeftIcon","hasNextPage","ChevronRightIcon","DoubleArrowRightIcon","TestCaseModal","onClose","onSuccess","dynamic","TestCasesPage","useContext","UserContext","router","useRouter","push","ArrowLeft","h2","p","undefined","Alert","Brain","AlertDescription"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"static/chunks/app/(application)/evals/cases/page-827f50c6d1f150d0.js","mappings":"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","sources":["webpack://_N_E/?1e6c","webpack://_N_E/./app/(application)/evals/cases/components/data-table-column-header.tsx","webpack://_N_E/./app/(application)/evals/cases/components/data-table-row-actions.tsx","webpack://_N_E/./app/(application)/evals/cases/components/columns.tsx","webpack://_N_E/./app/(application)/evals/cases/components/data-table-view-options.tsx","webpack://_N_E/./app/(application)/evals/cases/components/data-table.tsx","webpack://_N_E/./app/(application)/evals/cases/page.tsx"],"sourcesContent":["import(/* webpackMode: \"eager\" */ \"/home/runner/work/exulu-frontend/exulu-frontend/app/(application)/evals/cases/page.tsx\");\n","\"use client\";\n\nimport {\n ArrowDownIcon,\n ArrowUpIcon,\n CaretSortIcon,\n EyeNoneIcon,\n} from \"@radix-ui/react-icons\";\nimport { Column } from \"@tanstack/react-table\";\n\nimport { cn } from \"@/lib/utils\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\";\n\ninterface DataTableColumnHeaderProps<TData, TValue>\n extends React.HTMLAttributes<HTMLDivElement> {\n column: Column<TData, TValue>;\n title: string;\n}\n\nexport function DataTableColumnHeader<TData, TValue>({\n column,\n title,\n className,\n}: DataTableColumnHeaderProps<TData, TValue>) {\n if (!column.getCanSort()) {\n return <div className={cn(className)}>{title}</div>;\n }\n\n return (\n <div className={cn(\"flex items-center space-x-2\", className)}>\n <DropdownMenu modal={false}>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"-ml-3 h-8 data-[state=open]:bg-accent\"\n >\n <span>{title}</span>\n {column.getIsSorted() === \"desc\" ? (\n <ArrowDownIcon className=\"ml-2 h-4 w-4\" />\n ) : column.getIsSorted() === \"asc\" ? (\n <ArrowUpIcon className=\"ml-2 h-4 w-4\" />\n ) : (\n <CaretSortIcon className=\"ml-2 h-4 w-4\" />\n )}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\">\n <DropdownMenuItem onClick={() => column.toggleSorting(false)}>\n <ArrowUpIcon className=\"mr-2 h-3.5 w-3.5 text-muted-foreground/70\" />\n Asc\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => column.toggleSorting(true)}>\n <ArrowDownIcon className=\"mr-2 h-3.5 w-3.5 text-muted-foreground/70\" />\n Desc\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem onClick={() => column.toggleVisibility(false)}>\n <EyeNoneIcon className=\"mr-2 h-3.5 w-3.5 text-muted-foreground/70\" />\n Hide\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n );\n}\n","\"use client\";\n\nimport { DotsHorizontalIcon } from \"@radix-ui/react-icons\";\nimport { Row } from \"@tanstack/react-table\";\nimport { useMutation } from \"@apollo/client\";\nimport { Pencil, Trash2 } from \"lucide-react\";\n\nimport { Button } from \"@/components/ui/button\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\";\nimport { DELETE_TEST_CASE } from \"@/queries/queries\";\nimport { useToast } from \"@/components/ui/use-toast\";\nimport { User, UserWithRole } from \"@EXULU_SHARED/models/user\";\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n} from \"@/components/ui/alert-dialog\";\nimport { useState } from \"react\";\n\ninterface DataTableRowActionsProps<TData> {\n row: Row<TData>;\n user: UserWithRole;\n edit: () => void;\n}\n\nexport function DataTableRowActions<TData>({\n row,\n user,\n edit\n}: DataTableRowActionsProps<TData>) {\n const { toast } = useToast();\n const [showDeleteDialog, setShowDeleteDialog] = useState(false);\n const testCase = row.original as any;\n\n const canWrite = user.super_admin || user.role?.evals === \"write\";\n\n const [deleteTestCase, { loading: deleteLoading }] = useMutation(DELETE_TEST_CASE, {\n onCompleted: () => {\n toast({\n title: \"Test case deleted\",\n description: \"The test case has been successfully deleted.\",\n });\n setShowDeleteDialog(false);\n window.location.reload();\n },\n onError: (error) => {\n toast({\n title: \"Failed to delete test case\",\n description: error.message,\n variant: \"destructive\",\n });\n },\n });\n\n const handleDelete = (e: React.MouseEvent) => {\n e.stopPropagation();\n deleteTestCase({\n variables: {\n id: testCase.id,\n },\n });\n };\n\n return (\n <>\n <DropdownMenu modal={false}>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n className=\"flex h-8 w-8 p-0 data-[state=open]:bg-muted\"\n onClick={(e) => e.stopPropagation()}\n >\n <DotsHorizontalIcon className=\"h-4 w-4\" />\n <span className=\"sr-only\">Open menu</span>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-[160px]\">\n <DropdownMenuItem\n onClick={(e) => {\n e.stopPropagation();\n edit()\n // Edit is handled by the row click in data-table.tsx\n }}\n >\n <Pencil className=\"mr-2 h-4 w-4\" />\n Edit\n </DropdownMenuItem>\n {canWrite && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n onClick={(e) => {\n e.stopPropagation();\n setShowDeleteDialog(true);\n }}\n className=\"text-destructive\"\n >\n <Trash2 className=\"mr-2 h-4 w-4\" />\n Delete\n </DropdownMenuItem>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n\n <AlertDialog open={showDeleteDialog} onOpenChange={setShowDeleteDialog}>\n <AlertDialogContent onClick={(e) => e.stopPropagation()}>\n <AlertDialogHeader>\n <AlertDialogTitle>Are you sure?</AlertDialogTitle>\n <AlertDialogDescription>\n This will permanently delete the test case \"{testCase.name}\".\n This action cannot be undone.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Cancel</AlertDialogCancel>\n <AlertDialogAction\n onClick={handleDelete}\n disabled={deleteLoading}\n className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n >\n {deleteLoading ? \"Deleting...\" : \"Delete\"}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </>\n );\n}\n","\"use client\";\n\nimport { ColumnDef } from \"@tanstack/react-table\";\nimport { DataTableColumnHeader } from \"./data-table-column-header\";\nimport { DataTableRowActions } from \"./data-table-row-actions\";\nimport { TestCase } from \"@/types/models/test-case\";\nimport { UserWithRole } from \"@EXULU_SHARED/models/user\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { formatDistanceToNow } from \"date-fns\";\n\nexport const createColumns = (user: UserWithRole, edit: (test: TestCase) => void): ColumnDef<TestCase>[] => [\n {\n accessorKey: \"name\",\n header: ({ column }) => (\n <DataTableColumnHeader column={column} title=\"Name\" />\n ),\n cell: ({ row }) => {\n return (\n <div className=\"flex space-x-2\">\n <span className=\"max-w-[400px] truncate font-medium\">\n {row.getValue(\"name\")}\n </span>\n </div>\n );\n },\n },\n {\n accessorKey: \"description\",\n header: ({ column }) => (\n <DataTableColumnHeader column={column} title=\"Description\" />\n ),\n cell: ({ row }) => {\n const description = row.getValue(\"description\") as string;\n return (\n <div className=\"flex space-x-2\">\n <span className=\"max-w-[500px] truncate text-muted-foreground\">\n {description || \"—\"}\n </span>\n </div>\n );\n },\n },\n {\n accessorKey: \"inputs\",\n header: ({ column }) => (\n <DataTableColumnHeader column={column} title=\"Messages\" />\n ),\n cell: ({ row }) => {\n const inputs = row.getValue(\"inputs\") as any[];\n return (\n <Badge variant=\"secondary\">\n {inputs?.length || 0} messages\n </Badge>\n );\n },\n },\n /* {\n accessorKey: \"expected_tools\",\n header: ({ column }) => (\n <DataTableColumnHeader column={column} title=\"Expected Tools\" />\n ),\n cell: ({ row }) => {\n const tools = row.getValue(\"expected_tools\") as string[];\n if (!tools || tools.length === 0) return <span className=\"text-muted-foreground\">—</span>;\n return (\n <Badge variant=\"outline\">\n {tools.length} tools\n </Badge>\n );\n },\n },\n {\n accessorKey: \"expected_knowledge_sources\",\n header: ({ column }) => (\n <DataTableColumnHeader column={column} title=\"Expected Contexts\" />\n ),\n cell: ({ row }) => {\n const contexts = row.getValue(\"expected_knowledge_sources\") as string[];\n if (!contexts || contexts.length === 0) return <span className=\"text-muted-foreground\">—</span>;\n return (\n <Badge variant=\"outline\">\n {contexts.length} contexts\n </Badge>\n );\n },\n },\n {\n accessorKey: \"expected_agent_tools\",\n header: ({ column }) => (\n <DataTableColumnHeader column={column} title=\"Expected Agents\" />\n ),\n cell: ({ row }) => {\n const agents = row.getValue(\"expected_agent_tools\") as string[];\n if (!agents || agents.length === 0) return <span className=\"text-muted-foreground\">—</span>;\n return (\n <Badge variant=\"outline\">\n {agents.length} agents\n </Badge>\n );\n },\n }, */\n {\n accessorKey: \"updatedAt\",\n header: ({ column }) => (\n <DataTableColumnHeader column={column} title=\"Updated\" />\n ),\n cell: ({ row }) => {\n const date = row.getValue(\"updatedAt\") as string;\n return (\n <div className=\"flex w-[100px] items-center\">\n <span className=\"text-sm text-muted-foreground\">\n {formatDistanceToNow(new Date(date), { addSuffix: true })}\n </span>\n </div>\n );\n },\n },\n {\n id: \"actions\",\n cell: ({ row }) => <DataTableRowActions row={row} user={user} edit={() => {\n const testCase = row.original as TestCase;\n edit(testCase);\n }} />,\n },\n];\n","\"use client\";\n\nimport { MixerHorizontalIcon } from \"@radix-ui/react-icons\";\nimport { Table } from \"@tanstack/react-table\";\n\nimport { Button } from \"@/components/ui/button\";\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\";\n\ninterface DataTableViewOptionsProps<TData> {\n table: Table<TData>;\n}\n\nexport function DataTableViewOptions<TData>({\n table,\n}: DataTableViewOptionsProps<TData>) {\n return (\n <DropdownMenu modal={false}>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"ml-auto hidden h-8 lg:flex\"\n >\n <MixerHorizontalIcon className=\"mr-2 h-4 w-4\" />\n View\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-[150px]\">\n <DropdownMenuLabel>Toggle columns</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {table\n .getAllColumns()\n .filter(\n (column) =>\n typeof column.accessorFn !== \"undefined\" && column.getCanHide(),\n )\n .map((column) => {\n return (\n <DropdownMenuCheckboxItem\n key={column.id}\n className=\"capitalize\"\n checked={column.getIsVisible()}\n onCheckedChange={(value) => column.toggleVisibility(!!value)}\n >\n <span className=\"w-[200px] truncate\">{column.id}</span>\n </DropdownMenuCheckboxItem>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n","\"use client\";\n\nimport { useMutation, useQuery } from \"@apollo/client\";\nimport {\n ChevronLeftIcon,\n ChevronRightIcon,\n DoubleArrowLeftIcon,\n DoubleArrowRightIcon,\n} from \"@radix-ui/react-icons\";\nimport {\n ColumnDef,\n ColumnFiltersState,\n flexRender,\n getCoreRowModel,\n getFacetedRowModel,\n getFacetedUniqueValues,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n SortingState,\n useReactTable,\n VisibilityState,\n} from \"@tanstack/react-table\";\nimport { Plus } from \"lucide-react\";\nimport { useState } from \"react\";\nimport * as React from \"react\";\nimport {\n GET_TEST_CASES,\n DELETE_TEST_CASE,\n} from \"@/queries/queries\";\nimport { DataTableViewOptions } from \"./data-table-view-options\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/components/ui/table\";\nimport { useToast } from \"@/components/ui/use-toast\";\nimport { FilterOperator } from \"@/components/custom/recent-jobs\";\nimport { TestCaseModal } from \"./test-case-modal\";\nimport { TestCase } from \"@/types/models/test-case\";\n\nexport type TestCaseFilters = {\n name?: FilterOperator;\n createdAt?: FilterOperator;\n updatedAt?: FilterOperator;\n};\n\ninterface DataTableProps<TData, TValue> {\n columns: ColumnDef<TData, TValue>[];\n testCase?: TestCase;\n}\n\nexport function DataTable<TData, TValue>({\n columns,\n testCase,\n}: DataTableProps<TData, TValue>) {\n const { toast } = useToast();\n const [rowSelection, setRowSelection] = React.useState({});\n const [columnVisibility, setColumnVisibility] =\n React.useState<VisibilityState>({});\n const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>(\n [],\n );\n\n const [filters, setFilters] = useState<TestCaseFilters[]>([]);\n const [page, setPage] = useState(1);\n const [sorting, setSorting] = React.useState<SortingState>([]);\n const [showModal, setShowModal] = useState(false);\n const [editingTestCase, setEditingTestCase] = useState<TestCase | null>(testCase || null);\n\n React.useEffect(() => {\n if (testCase) {\n setEditingTestCase(testCase);\n setShowModal(true);\n } else {\n setShowModal(false);\n setEditingTestCase(null);\n }\n }, [testCase]);\n\n const { loading, error, data, refetch } = useQuery(GET_TEST_CASES, {\n fetchPolicy: \"no-cache\",\n nextFetchPolicy: \"network-only\",\n variables: {\n page: page,\n limit: 10,\n filters: filters,\n },\n pollInterval: 30000,\n });\n\n const [deleteTestCase] = useMutation(DELETE_TEST_CASE, {\n onCompleted: () => {\n toast({\n title: \"Test case deleted\",\n description: \"The test case has been successfully deleted.\",\n });\n refetch();\n },\n onError: (error) => {\n toast({\n title: \"Failed to delete test case\",\n description: error.message,\n variant: \"destructive\",\n });\n },\n });\n\n const pageInfo = data?.test_casesPagination?.pageInfo;\n const testCases = data?.test_casesPagination?.items || [];\n\n const table = useReactTable({\n data: testCases as TData[],\n columns,\n state: {\n sorting,\n columnVisibility,\n rowSelection,\n columnFilters,\n },\n enableRowSelection: true,\n onRowSelectionChange: setRowSelection,\n onSortingChange: setSorting,\n onColumnFiltersChange: setColumnFilters,\n onColumnVisibilityChange: setColumnVisibility,\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFacetedRowModel: getFacetedRowModel(),\n getFacetedUniqueValues: getFacetedUniqueValues(),\n });\n\n React.useEffect(() => {\n const nameFilter = table.getColumn(\"name\")?.getFilterValue() as string;\n if (nameFilter) {\n setFilters([{ name: { contains: nameFilter } }]);\n } else {\n setFilters([]);\n }\n }, [table.getColumn(\"name\")?.getFilterValue()]);\n\n const handleEdit = (testCase: TestCase) => {\n if (testCase) {\n setEditingTestCase(testCase);\n setShowModal(true);\n } else {\n setShowModal(false);\n setEditingTestCase(null);\n }\n };\n\n const handleCloseModal = () => {\n setShowModal(false);\n setEditingTestCase(null);\n };\n\n return (\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex flex-1 items-center space-x-2\">\n <Input\n placeholder=\"Filter by name...\"\n value={(table.getColumn(\"name\")?.getFilterValue() as string) ?? \"\"}\n onChange={(event) =>\n table.getColumn(\"name\")?.setFilterValue(event.target.value)\n }\n className=\"h-8 w-[150px] lg:w-[250px]\"\n />\n </div>\n <div className=\"flex items-center space-x-2\">\n <DataTableViewOptions table={table} />\n <Button\n variant=\"default\"\n size=\"sm\"\n className=\"ml-auto h-8\"\n onClick={() => setShowModal(true)}\n >\n <Plus className=\"mr-2 h-4 w-4\" />\n New Test Case\n </Button>\n </div>\n </div>\n\n <div className=\"rounded-md border\">\n <Table>\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => {\n return (\n <TableHead key={header.id}>\n {header.isPlaceholder\n ? null\n : flexRender(\n header.column.columnDef.header,\n header.getContext(),\n )}\n </TableHead>\n );\n })}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {loading ? (\n Array.from({ length: 5 }).map((_, i) => (\n <TableRow key={i}>\n {columns.map((_, j) => (\n <TableCell key={j}>\n <Skeleton className=\"h-6 w-full\" />\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n <TableRow\n key={row.id}\n data-state={row.getIsSelected() && \"selected\"}\n className=\"cursor-pointer\"\n onClick={() => {\n const testCase = row.original as TestCase;\n handleEdit(testCase);\n }}\n >\n {row.getVisibleCells().map((cell) => (\n <TableCell key={cell.id}>\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext(),\n )}\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow>\n <TableCell\n colSpan={columns.length}\n className=\"h-24 text-center\"\n >\n No test cases found.\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n\n <div className=\"flex items-center justify-between px-2\">\n <div className=\"flex-1 text-sm text-muted-foreground\">\n {pageInfo && (\n <>\n Page {pageInfo.currentPage} of {pageInfo.pageCount} ({pageInfo.itemCount} total)\n </>\n )}\n </div>\n <div className=\"flex items-center space-x-6 lg:space-x-8\">\n <div className=\"flex items-center space-x-2\">\n <Button\n variant=\"outline\"\n className=\"hidden h-8 w-8 p-0 lg:flex\"\n onClick={() => setPage(1)}\n disabled={!pageInfo?.hasPreviousPage}\n >\n <span className=\"sr-only\">Go to first page</span>\n <DoubleArrowLeftIcon className=\"h-4 w-4\" />\n </Button>\n <Button\n variant=\"outline\"\n className=\"h-8 w-8 p-0\"\n onClick={() => setPage(page - 1)}\n disabled={!pageInfo?.hasPreviousPage}\n >\n <span className=\"sr-only\">Go to previous page</span>\n <ChevronLeftIcon className=\"h-4 w-4\" />\n </Button>\n <Button\n variant=\"outline\"\n className=\"h-8 w-8 p-0\"\n onClick={() => setPage(page + 1)}\n disabled={!pageInfo?.hasNextPage}\n >\n <span className=\"sr-only\">Go to next page</span>\n <ChevronRightIcon className=\"h-4 w-4\" />\n </Button>\n <Button\n variant=\"outline\"\n className=\"hidden h-8 w-8 p-0 lg:flex\"\n onClick={() => setPage(pageInfo?.pageCount || 1)}\n disabled={!pageInfo?.hasNextPage}\n >\n <span className=\"sr-only\">Go to last page</span>\n <DoubleArrowRightIcon className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n </div>\n\n <TestCaseModal\n open={showModal}\n onClose={handleCloseModal}\n onSuccess={() => {\n refetch();\n handleCloseModal();\n }}\n testCase={editingTestCase}\n />\n </div>\n );\n}\n","\"use client\";\n\nimport { useContext, useState } from \"react\";\nimport { createColumns } from \"./components/columns\";\nimport { DataTable } from \"./components/data-table\";\nimport { UserContext } from \"@/app/(application)/authenticated\";\nimport { ArrowLeft, Brain } from \"lucide-react\";\nimport { Alert, AlertDescription } from \"@/components/ui/alert\";\nimport { Button } from \"@/components/ui/button\";\nimport { useRouter } from \"next/navigation\";\nimport { TestCase } from \"@/types/models/test-case\";\n\nexport const dynamic = \"force-dynamic\";\n\nexport default function TestCasesPage() {\n\n const { user } = useContext(UserContext);\n const [editingTestCase, setEditingTestCase] = useState<TestCase | null>(null);\n const columns = createColumns(user, (testCase) => {\n setEditingTestCase(testCase);\n });\n const router = useRouter();\n\n // Check if user has evals access\n const hasEvalsAccess = user.super_admin || user.role?.evals === \"read\" || user.role?.evals === \"write\";\n\n if (!hasEvalsAccess) {\n return (\n <div className=\"flex h-full flex-1 flex-col space-y-8 p-8\">\n <Alert variant=\"destructive\">\n <Brain className=\"h-4 w-4\" />\n <AlertDescription>\n You don't have permission to access Test Cases. Contact your administrator to request access.\n </AlertDescription>\n </Alert>\n </div>\n );\n }\n\n return (\n <>\n <div className=\"hidden h-full flex-1 flex-col space-y-8 p-8 md:flex\">\n <div className=\"flex items-center justify-between space-y-2\">\n <div className=\"flex items-center gap-4\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => router.push(\"/evals\")}>\n <ArrowLeft className=\"h-4 w-4\" />\n </Button>\n <div>\n <h2 className=\"text-2xl font-bold tracking-tight\">Test Cases</h2>\n <p className=\"text-muted-foreground\">\n Create and manage test cases for evaluating agent performance.\n </p>\n </div>\n </div>\n </div>\n <DataTable columns={columns} testCase={editingTestCase || undefined} />\n </div>\n </>\n );\n}\n"],"names":["Promise","resolve","then","__webpack_require__","bind","DataTableColumnHeader","param","column","title","className","getCanSort","jsx_runtime","jsx","div","cn","jsxs","DropdownMenu","modal","DropdownMenuTrigger","asChild","Button","variant","size","span","getIsSorted","ArrowDownIcon","ArrowUpIcon","CaretSortIcon","DropdownMenuContent","align","DropdownMenuItem","onClick","toggleSorting","DropdownMenuSeparator","toggleVisibility","EyeNoneIcon","DataTableRowActions","user","row","edit","toast","useToast","showDeleteDialog","setShowDeleteDialog","useState","testCase","original","canWrite","super_admin","role","evals","deleteTestCase","loading","deleteLoading","useMutation","DELETE_TEST_CASE","onCompleted","description","window","location","reload","onError","error","message","Fragment","e","stopPropagation","DotsHorizontalIcon","Pencil","Trash2","AlertDialog","open","onOpenChange","AlertDialogContent","AlertDialogHeader","AlertDialogTitle","AlertDialogDescription","name","AlertDialogFooter","AlertDialogCancel","AlertDialogAction","variables","id","disabled","createColumns","accessorKey","header","cell","getValue","inputs","Badge","length","date","formatDistanceToNow","Date","addSuffix","DataTableViewOptions","table","MixerHorizontalIcon","DropdownMenuLabel","getAllColumns","filter","accessorFn","getCanHide","map","DropdownMenuCheckboxItem","checked","getIsVisible","onCheckedChange","value","DataTable","data","columns","rowSelection","setRowSelection","React","columnVisibility","setColumnVisibility","columnFilters","setColumnFilters","filters","setFilters","page","setPage","sorting","setSorting","showModal","setShowModal","editingTestCase","setEditingTestCase","refetch","useQuery","GET_TEST_CASES","fetchPolicy","nextFetchPolicy","limit","pollInterval","pageInfo","test_casesPagination","testCases","items","useReactTable","state","enableRowSelection","onRowSelectionChange","onSortingChange","onColumnFiltersChange","onColumnVisibilityChange","getCoreRowModel","getFilteredRowModel","getPaginationRowModel","getSortedRowModel","getFacetedRowModel","getFacetedUniqueValues","nameFilter","getColumn","getFilterValue","contains","handleEdit","handleCloseModal","Input","placeholder","onChange","setFilterValue","event","target","Plus","Table","TableHeader","getHeaderGroups","TableRow","headerGroup","headers","TableHead","isPlaceholder","flexRender","columnDef","getContext","TableBody","Array","from","_","i","j","TableCell","Skeleton","getRowModel","rows","data-state","getIsSelected","getVisibleCells","colSpan","currentPage","pageCount","itemCount","hasPreviousPage","DoubleArrowLeftIcon","ChevronLeftIcon","hasNextPage","ChevronRightIcon","DoubleArrowRightIcon","TestCaseModal","onClose","onSuccess","dynamic","TestCasesPage","useContext","UserContext","router","useRouter","push","ArrowLeft","h2","p","undefined","Alert","Brain","AlertDescription"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3778],{24018:function(t,e,n){Promise.resolve().then(n.bind(n,77569))},77569:function(t,e,n){"use strict";n.d(e,{default:function(){return h}});var r=n(57437),a=n(78006),o=n(98244),i=n(2265);n(43254),n(5788);var c=n(11713),s=n(6374),u=n(93022),l=n(65613),d=n(20653),f=n(44045);function h(){let t=i.useContext(f.E),{data:e,isLoading:n,error:h}=(0,c.a)({queryKey:["user"],queryFn:()=>(0,s.LP)()});if(n)return(0,r.jsx)(u.O,{className:"h-10 w-20"});if(h)return(0,r.jsxs)(l.bZ,{variant:"destructive",children:[(0,r.jsx)(d.LPM,{className:"size-4"}),(0,r.jsx)(l.Cd,{children:"Error"}),(0,r.jsx)(l.X,{children:h.message})]});console.log("token",e);let v=(0,a.createGraphiQLFetcher)({url:"".concat(null==t?void 0:t.backend,"/graphql"),headers:{Authorization:"Bearer ".concat(e)}});return(0,r.jsx)(o.yB,{fetcher:v})}},44045:function(t,e,n){"use strict";n.d(e,{ConfigContextProvider:function(){return o},E:function(){return a}});var r=n(57437);let a=(0,n(2265).createContext)(null);function o(t){let{children:e,config:n}=t;if(console.log("[EXULU] Config: ",n),!n)throw Error("Config not found");return(0,r.jsx)(a.Provider,{value:n,children:e})}},65613:function(t,e,n){"use strict";n.d(e,{Cd:function(){return u},X:function(){return l},bZ:function(){return s}});var r=n(57437),a=n(90535),o=n(2265),i=n(94508);let c=(0,a.j)("relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground",{variants:{variant:{default:"bg-background text-foreground",destructive:"border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive",info:"border-info/50 text-info dark:border-info [&>svg]:text-info"}},defaultVariants:{variant:"default"}}),s=o.forwardRef((t,e)=>{let{className:n,variant:a,...o}=t;return(0,r.jsx)("div",{ref:e,role:"alert",className:(0,i.cn)(c({variant:a}),n),...o})});s.displayName="Alert";let u=o.forwardRef((t,e)=>{let{className:n,...a}=t;return(0,r.jsx)("h5",{ref:e,className:(0,i.cn)("mb-1 font-medium leading-none tracking-tight",n),...a})});u.displayName="AlertTitle";let l=o.forwardRef((t,e)=>{let{className:n,...a}=t;return(0,r.jsx)("div",{ref:e,className:(0,i.cn)("text-sm [&_p]:leading-relaxed",n),...a})});l.displayName="AlertDescription"},93022:function(t,e,n){"use strict";n.d(e,{O:function(){return o}});var r=n(57437),a=n(94508);function o(t){let{className:e,...n}=t;return(0,r.jsx)("div",{className:(0,a.cn)("animate-pulse rounded-md bg-muted",e),...n})}},94508:function(t,e,n){"use strict";n.d(e,{L:function(){return i},cn:function(){return o}});var r=n(61994),a=n(53335);function o(){for(var t=arguments.length,e=Array(t),n=0;n<t;n++)e[n]=arguments[n];return(0,a.m6)((0,r.W)(e))}function i(t){if(!t)return"0s";let e=Math.floor(t/3600),n=Math.floor(t%3600/60),r=Math.round(t%60);return e>0?"".concat(e,"h ").concat(n,"m"):n>0?"".concat(n,"m ").concat(r,"s"):"".concat(r,"s")}},6374:function(t,e,n){"use strict";n.d(e,{DQ:function(){return i},LP:function(){return o},QZ:function(){return c}});var r=n(80605);let a=async()=>{let t=await fetch("/api/config").then(t=>t.json());if(!t.backend)throw Error("No backend set.");return{files:t.backend,base:t.backend}},o=async()=>{var t;let e=await (0,r.getSession)();return null==e?void 0:null===(t=e.user)||void 0===t?void 0:t.jwt},i={image:{generate:async t=>{let e=await a(),n="".concat(e.base,"/generate/agent/image"),r=await o();if(!r)throw Error("No valid session token available.");return fetch(n,{method:"POST",body:JSON.stringify(t),headers:{"Content-Type":"application/json",Authorization:"Bearer ".concat(r)}})}}},c={object:async t=>{let e=await a(),n="".concat(e.files,"/s3/object"),r=await o();return(await fetch(n,{method:"POST",body:JSON.stringify({key:t}),headers:{"Content-Type":"application/json",Authorization:"Bearer ".concat(r)}})).json()},list:async t=>{let{search:e,continuationToken:n}=t,r=await a(),i="".concat(r.files,"/s3/list"),c=await o();if(!c)throw Error("No valid session token available.");return e&&(i+="?search=".concat(e)),n&&(i+="?continuationToken=".concat(n)),(await fetch(i,{method:"GET",headers:{"Content-Type":"application/json",Authorization:"Bearer ".concat(c)}})).json()},download:async t=>{let e=await a(),n="".concat(e.files,"/s3/download?key=").concat(t),r=await o();if(!r)throw Error("No valid session token available.");return fetch(n,{method:"GET",headers:{"Content-Type":"application/json",Authorization:"Bearer ".concat(r)}})},delete:async t=>{let e=await a(),n="".concat(e.files,"/s3/delete?key=").concat(t),r=await o();if(!r)throw Error("No valid session token available.");return fetch(n,{method:"DELETE",headers:{"Content-Type":"application/json",Authorization:"Bearer ".concat(r)}})}}},5788:function(){}},function(t){t.O(0,[4142,1972,8310,5829,9851,7629,7093,7823,8068,5799,605,4567,1206,1713,8807,2971,2117,1744],function(){return t(t.s=24018)}),_N_E=t.O()}]);
|
|
2
|
-
//# sourceMappingURL=page-
|
|
2
|
+
//# sourceMappingURL=page-e6b1c034c07776e2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static/chunks/app/(application)/explorer/page-1d676c9dfe3ed58b.js","mappings":"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","sources":["webpack://_N_E/?8406","webpack://_N_E/./app/(application)/explorer/graphiql.tsx","webpack://_N_E/./components/config-context.tsx","webpack://_N_E/./components/ui/alert.tsx","webpack://_N_E/./components/ui/skeleton.tsx","webpack://_N_E/./lib/utils.ts","webpack://_N_E/./util/api.ts","webpack://_N_E/./app/graphiql.css"],"sourcesContent":["import(/* webpackMode: \"eager\", webpackExports: [\"default\"] */ \"/home/runner/work/exulu-frontend/exulu-frontend/app/(application)/explorer/graphiql.tsx\");\n","\"use client\";\n\nimport {createGraphiQLFetcher} from \"@graphiql/toolkit\";\nimport {GraphiQL} from \"graphiql\";\nimport React from \"react\";\nimport 'graphiql/graphiql.css';\nimport '../../graphiql.css';\nimport { useQuery } from \"@tanstack/react-query\";\nimport { getToken } from \"@/util/api\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport { Alert, AlertDescription, AlertTitle } from \"@/components/ui/alert\";\nimport { ExclamationTriangleIcon } from \"@radix-ui/react-icons\";\nimport { ConfigContext } from \"@/components/config-context\";\n\nexport default function GraphiQLComponent() {\n\n const configContext = React.useContext(ConfigContext);\n\n const { data, isLoading, error } = useQuery({\n queryKey: [\"user\"],\n queryFn: () => getToken()\n });\n\n if (isLoading) {\n return <Skeleton className=\"h-10 w-20\" /> \n }\n\n if (error) {\n return <Alert variant=\"destructive\">\n <ExclamationTriangleIcon className=\"size-4\" />\n <AlertTitle>Error</AlertTitle>\n <AlertDescription>\n {error.message}\n </AlertDescription>\n </Alert>\n }\n \n console.log(\"token\", data)\n\n const fetcher = createGraphiQLFetcher({\n url: `${configContext?.backend}/graphql`, headers: {\n \"Authorization\": `Bearer ${data}`\n }\n });\n\n return <GraphiQL fetcher={fetcher}/>\n}","\"use client\"\nimport { BackendConfigType } from \"@/util/api\";\nimport { createContext } from \"react\";\n\nexport type ConfigContextType = {\n backend: string;\n google_client_id: string;\n auth_mode: string;\n} & BackendConfigType;\n\nexport const ConfigContext = createContext<ConfigContextType | null>(null);\n\nexport function ConfigContextProvider({ children, config }: {\n children: React.ReactNode;\n config: ConfigContextType;\n}) {\n\n console.log(\"[EXULU] Config: \", config);\n\n if (!config) {\n throw new Error(\"Config not found\");\n }\n\n return (\n <ConfigContext.Provider value={config}>\n {children}\n </ConfigContext.Provider>\n );\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst alertVariants = cva(\n \"relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground\",\n {\n variants: {\n variant: {\n default: \"bg-background text-foreground\",\n destructive:\n \"border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive\",\n info: \"border-info/50 text-info dark:border-info [&>svg]:text-info\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nconst Alert = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof alertVariants>\n>(({ className, variant, ...props }, ref) => (\n <div\n ref={ref}\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n));\nAlert.displayName = \"Alert\";\n\nconst AlertTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h5\n ref={ref}\n className={cn(\"mb-1 font-medium leading-none tracking-tight\", className)}\n {...props}\n />\n));\nAlertTitle.displayName = \"AlertTitle\";\n\nconst AlertDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"text-sm [&_p]:leading-relaxed\", className)}\n {...props}\n />\n));\nAlertDescription.displayName = \"AlertDescription\";\n\nexport { Alert, AlertTitle, AlertDescription };\n","import { cn } from \"@/lib/utils\";\n\nfunction Skeleton({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\"animate-pulse rounded-md bg-muted\", className)}\n {...props}\n />\n );\n}\n\nexport { Skeleton };\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\nexport function formatDuration(seconds: number): string {\n if (!seconds) return '0s';\n \n const hours = Math.floor(seconds / 3600);\n const minutes = Math.floor((seconds % 3600) / 60);\n const remainingSeconds = Math.round(seconds % 60);\n\n if (hours > 0) {\n return `${hours}h ${minutes}m`;\n } else if (minutes > 0) {\n return `${minutes}m ${remainingSeconds}s`;\n } else {\n return `${remainingSeconds}s`;\n }\n}","import { getSession } from \"next-auth/react\";\n\nexport type ImageStyle = \"origami\" | \"anime\" | \"japanese_anime\" | \"vaporwave\" | \"lego\" | \"paper_cut\" | \"felt_puppet\" | \"3d\" | \"app_icon\" | \"pixel_art\" | \"isometric\";\n\nconst getUris = async () => {\n // Server-side: use environment variable directly\n if (typeof window === 'undefined') {\n const backend = process.env.BACKEND;\n if (!backend) {\n throw new Error(\"No backend set.\")\n }\n return {\n files: backend,\n base: backend\n }\n }\n\n // Client-side: fetch from API\n const context = await fetch(\"/api/config\").then(res => res.json());\n if (!context.backend) {\n throw new Error(\"No backend set.\")\n }\n return {\n files: context.backend,\n base: context.backend\n }\n}\n\nexport const getToken = async () => {\n const session = await getSession()\n // @ts-ignore\n return session?.user?.jwt;\n}\n\nexport type BackendConfigType = {\n fileUploads?: {\n s3endpoint: string;\n }\n workers?: {\n redisHost: string;\n enabled: boolean;\n }\n}\n\nexport type ThemeConfig = {\n light?: Record<string, string>;\n dark?: Record<string, string>;\n}\n\nexport const config = {\n backend: async (): Promise<Response> => {\n const uris = await getUris();\n const url = `${uris.base}/config`\n return fetch(url, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n })\n },\n theme: async (): Promise<ThemeConfig> => {\n try {\n const token = await getToken();\n const uris = await getUris();\n const res = await fetch(`${uris.base}/theme`, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Authorization\": `Bearer ${token}`,\n },\n })\n const json = await res.json();\n return json.theme;\n } catch (error) {\n console.error(\"Error fetching theme config:\", error);\n return { light: {}, dark: {} };\n }\n }\n}\n\nexport const agents = {\n image: {\n generate: async (parameters: {\n name: string,\n description: string,\n style?: ImageStyle\n }): Promise<any> => {\n\n const uris = await getUris();\n const url = `${uris.base}/generate/agent/image`;\n const token = await getToken()\n\n if (!token) {\n throw new Error(\"No valid session token available.\")\n }\n\n return fetch(url, {\n method: \"POST\",\n body: JSON.stringify(parameters),\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n });\n }\n }\n}\n\nexport type S3FileListOutput = {\n \"$metadata\": {\n \"httpStatusCode\": number,\n \"attempts\": number,\n \"totalRetryDelay\": number\n },\n \"Contents\": {\n \"Key\": string,\n \"LastModified\": string,\n \"ETag\": string,\n \"Size\": number\n }[]\n \"IsTruncated\": boolean,\n \"NextContinuationToken\": string,\n \"KeyCount\": number,\n \"MaxKeys\": number,\n \"Name\": string,\n \"Prefix\": string\n}\n\nexport type S3ObjectOutput = {\n \"$metadata\": {\n \"httpStatusCode\": number,\n \"attempts\": number,\n \"totalRetryDelay\": number\n },\n \"AcceptRanges\": \"bytes\",\n \"LastModified\": string,\n \"ContentLength\": number,\n \"ChecksumCRC32C\": string,\n \"ETag\": string,\n \"CacheControl\": string,\n \"ContentType\": string,\n \"Expires\": string,\n \"ExpiresString\": string\n}\n\nexport const files = {\n object: async (key: string): Promise<S3ObjectOutput> => {\n const uris = await getUris();\n let url = `${uris.files}/s3/object`;\n const token = await getToken()\n const response = await fetch(url, {\n method: \"POST\",\n body: JSON.stringify({ key }),\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n });\n return response.json();\n },\n list: async ({ search, continuationToken }: { search?: string, continuationToken?: string }): Promise<S3FileListOutput> => {\n const uris = await getUris();\n let url = `${uris.files}/s3/list`;\n const token = await getToken()\n\n if (!token) {\n throw new Error(\"No valid session token available.\")\n }\n\n if (search) {\n url += `?search=${search}`;\n }\n\n if (continuationToken) {\n url += `?continuationToken=${continuationToken}`;\n }\n\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n });\n return response.json();\n },\n download: async (key: string) => {\n\n const uris = await getUris();\n let url = `${uris.files}/s3/download?key=${key}`;\n\n const token = await getToken()\n\n if (!token) {\n throw new Error(\"No valid session token available.\")\n }\n\n return fetch(url, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n });\n },\n delete: async (key: string) => {\n\n const uris = await getUris();\n let url = `${uris.files}/s3/delete?key=${key}`;\n const token = await getToken()\n\n if (!token) {\n throw new Error(\"No valid session token available.\")\n }\n\n return fetch(url, {\n method: \"DELETE\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n });\n }\n}\n","// extracted by mini-css-extract-plugin"],"names":["Promise","resolve","then","__webpack_require__","bind","GraphiQLComponent","configContext","React","ConfigContext","data","isLoading","error","useQuery","queryKey","queryFn","getToken","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__","jsx","Skeleton","className","jsxs","Alert","variant","ExclamationTriangleIcon","AlertTitle","AlertDescription","message","console","log","fetcher","createGraphiQLFetcher","url","concat","backend","headers","GraphiQL","createContext","ConfigContextProvider","param","children","config","Provider","value","alertVariants","cva","variants","default","destructive","info","defaultVariants","ref","props","div","role","cn","displayName","h5","_len","arguments","length","inputs","_key","twMerge","clsx","formatDuration","seconds","hours","Math","floor","minutes","remainingSeconds","round","getUris","context","fetch","res","json","files","base","session","getSession","user","jwt","agents","image","generate","parameters","uris","token","method","body","JSON","stringify","Authorization","object","key","response","list","search","continuationToken","download","delete"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"static/chunks/app/(application)/explorer/page-e6b1c034c07776e2.js","mappings":"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","sources":["webpack://_N_E/?8406","webpack://_N_E/./app/(application)/explorer/graphiql.tsx","webpack://_N_E/./components/config-context.tsx","webpack://_N_E/./components/ui/alert.tsx","webpack://_N_E/./components/ui/skeleton.tsx","webpack://_N_E/./lib/utils.ts","webpack://_N_E/./util/api.ts","webpack://_N_E/./app/graphiql.css"],"sourcesContent":["import(/* webpackMode: \"eager\", webpackExports: [\"default\"] */ \"/home/runner/work/exulu-frontend/exulu-frontend/app/(application)/explorer/graphiql.tsx\");\n","\"use client\";\n\nimport {createGraphiQLFetcher} from \"@graphiql/toolkit\";\nimport {GraphiQL} from \"graphiql\";\nimport React from \"react\";\nimport 'graphiql/graphiql.css';\nimport '../../graphiql.css';\nimport { useQuery } from \"@tanstack/react-query\";\nimport { getToken } from \"@/util/api\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport { Alert, AlertDescription, AlertTitle } from \"@/components/ui/alert\";\nimport { ExclamationTriangleIcon } from \"@radix-ui/react-icons\";\nimport { ConfigContext } from \"@/components/config-context\";\n\nexport default function GraphiQLComponent() {\n\n const configContext = React.useContext(ConfigContext);\n\n const { data, isLoading, error } = useQuery({\n queryKey: [\"user\"],\n queryFn: () => getToken()\n });\n\n if (isLoading) {\n return <Skeleton className=\"h-10 w-20\" /> \n }\n\n if (error) {\n return <Alert variant=\"destructive\">\n <ExclamationTriangleIcon className=\"size-4\" />\n <AlertTitle>Error</AlertTitle>\n <AlertDescription>\n {error.message}\n </AlertDescription>\n </Alert>\n }\n \n console.log(\"token\", data)\n\n const fetcher = createGraphiQLFetcher({\n url: `${configContext?.backend}/graphql`, headers: {\n \"Authorization\": `Bearer ${data}`\n }\n });\n\n return <GraphiQL fetcher={fetcher}/>\n}","\"use client\"\nimport { BackendConfigType } from \"@/util/api\";\nimport { createContext } from \"react\";\n\nexport type ConfigContextType = {\n backend: string;\n google_client_id: string;\n auth_mode: string;\n} & BackendConfigType;\n\nexport const ConfigContext = createContext<ConfigContextType | null>(null);\n\nexport function ConfigContextProvider({ children, config }: {\n children: React.ReactNode;\n config: ConfigContextType;\n}) {\n\n console.log(\"[EXULU] Config: \", config);\n\n if (!config) {\n throw new Error(\"Config not found\");\n }\n\n return (\n <ConfigContext.Provider value={config}>\n {children}\n </ConfigContext.Provider>\n );\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst alertVariants = cva(\n \"relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground\",\n {\n variants: {\n variant: {\n default: \"bg-background text-foreground\",\n destructive:\n \"border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive\",\n info: \"border-info/50 text-info dark:border-info [&>svg]:text-info\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nconst Alert = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof alertVariants>\n>(({ className, variant, ...props }, ref) => (\n <div\n ref={ref}\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n));\nAlert.displayName = \"Alert\";\n\nconst AlertTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h5\n ref={ref}\n className={cn(\"mb-1 font-medium leading-none tracking-tight\", className)}\n {...props}\n />\n));\nAlertTitle.displayName = \"AlertTitle\";\n\nconst AlertDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"text-sm [&_p]:leading-relaxed\", className)}\n {...props}\n />\n));\nAlertDescription.displayName = \"AlertDescription\";\n\nexport { Alert, AlertTitle, AlertDescription };\n","import { cn } from \"@/lib/utils\";\n\nfunction Skeleton({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\"animate-pulse rounded-md bg-muted\", className)}\n {...props}\n />\n );\n}\n\nexport { Skeleton };\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\nexport function formatDuration(seconds: number): string {\n if (!seconds) return '0s';\n \n const hours = Math.floor(seconds / 3600);\n const minutes = Math.floor((seconds % 3600) / 60);\n const remainingSeconds = Math.round(seconds % 60);\n\n if (hours > 0) {\n return `${hours}h ${minutes}m`;\n } else if (minutes > 0) {\n return `${minutes}m ${remainingSeconds}s`;\n } else {\n return `${remainingSeconds}s`;\n }\n}","import { getSession } from \"next-auth/react\";\n\nexport type ImageStyle = \"origami\" | \"anime\" | \"japanese_anime\" | \"vaporwave\" | \"lego\" | \"paper_cut\" | \"felt_puppet\" | \"3d\" | \"app_icon\" | \"pixel_art\" | \"isometric\";\n\nconst getUris = async () => {\n // Server-side: use environment variable directly\n if (typeof window === 'undefined') {\n const backend = process.env.BACKEND;\n if (!backend) {\n throw new Error(\"No backend set.\")\n }\n return {\n files: backend,\n base: backend\n }\n }\n\n // Client-side: fetch from API\n const context = await fetch(\"/api/config\").then(res => res.json());\n if (!context.backend) {\n throw new Error(\"No backend set.\")\n }\n return {\n files: context.backend,\n base: context.backend\n }\n}\n\nexport const getToken = async () => {\n const session = await getSession()\n // @ts-ignore\n return session?.user?.jwt;\n}\n\nexport type BackendConfigType = {\n fileUploads?: {\n s3endpoint: string;\n }\n workers?: {\n redisHost: string;\n enabled: boolean;\n }\n}\n\nexport type ThemeConfig = {\n light?: Record<string, string>;\n dark?: Record<string, string>;\n}\n\nexport const config = {\n backend: async (): Promise<Response> => {\n const uris = await getUris();\n const url = `${uris.base}/config`\n return fetch(url, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n })\n },\n theme: async (): Promise<ThemeConfig> => {\n try {\n const token = await getToken();\n const uris = await getUris();\n const res = await fetch(`${uris.base}/theme`, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Authorization\": `Bearer ${token}`,\n },\n })\n const json = await res.json();\n return json.theme;\n } catch (error) {\n console.error(\"Error fetching theme config:\", error);\n return { light: {}, dark: {} };\n }\n }\n}\n\nexport const agents = {\n image: {\n generate: async (parameters: {\n name: string,\n description: string,\n style?: ImageStyle\n }): Promise<any> => {\n\n const uris = await getUris();\n const url = `${uris.base}/generate/agent/image`;\n const token = await getToken()\n\n if (!token) {\n throw new Error(\"No valid session token available.\")\n }\n\n return fetch(url, {\n method: \"POST\",\n body: JSON.stringify(parameters),\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n });\n }\n }\n}\n\nexport type S3FileListOutput = {\n \"$metadata\": {\n \"httpStatusCode\": number,\n \"attempts\": number,\n \"totalRetryDelay\": number\n },\n \"Contents\": {\n \"Key\": string,\n \"LastModified\": string,\n \"ETag\": string,\n \"Size\": number\n }[]\n \"IsTruncated\": boolean,\n \"NextContinuationToken\": string,\n \"KeyCount\": number,\n \"MaxKeys\": number,\n \"Name\": string,\n \"Prefix\": string\n}\n\nexport type S3ObjectOutput = {\n \"$metadata\": {\n \"httpStatusCode\": number,\n \"attempts\": number,\n \"totalRetryDelay\": number\n },\n \"AcceptRanges\": \"bytes\",\n \"LastModified\": string,\n \"ContentLength\": number,\n \"ChecksumCRC32C\": string,\n \"ETag\": string,\n \"CacheControl\": string,\n \"ContentType\": string,\n \"Expires\": string,\n \"ExpiresString\": string\n}\n\nexport const files = {\n object: async (key: string): Promise<S3ObjectOutput> => {\n const uris = await getUris();\n let url = `${uris.files}/s3/object`;\n const token = await getToken()\n const response = await fetch(url, {\n method: \"POST\",\n body: JSON.stringify({ key }),\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n });\n return response.json();\n },\n list: async ({ search, continuationToken }: { search?: string, continuationToken?: string }): Promise<S3FileListOutput> => {\n const uris = await getUris();\n let url = `${uris.files}/s3/list`;\n const token = await getToken()\n\n if (!token) {\n throw new Error(\"No valid session token available.\")\n }\n\n if (search) {\n url += `?search=${search}`;\n }\n\n if (continuationToken) {\n url += `?continuationToken=${continuationToken}`;\n }\n\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n });\n return response.json();\n },\n // Key is the base s3 key of the file\n // if only the key is provided only the\n // user that uploaded the file, a super\n // admin or api user can access and \n // download the file. If an item ID is\n // provided, the RBAC rights associated\n // with the item are checked and used.\n // The item must be provided as a GID\n // with the context id as the prefix before\n // the first slash.\n download: async (key: string) => {\n\n const uris = await getUris();\n let url = `${uris.files}/s3/download?key=${key}`;\n\n const token = await getToken()\n\n if (!token) {\n throw new Error(\"No valid session token available.\")\n }\n\n return fetch(url, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n });\n },\n delete: async (key: string) => {\n\n const uris = await getUris();\n let url = `${uris.files}/s3/delete?key=${key}`;\n const token = await getToken()\n\n if (!token) {\n throw new Error(\"No valid session token available.\")\n }\n\n return fetch(url, {\n method: \"DELETE\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n });\n }\n}\n","// extracted by mini-css-extract-plugin"],"names":["Promise","resolve","then","__webpack_require__","bind","GraphiQLComponent","configContext","React","ConfigContext","data","isLoading","error","useQuery","queryKey","queryFn","getToken","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__","jsx","Skeleton","className","jsxs","Alert","variant","ExclamationTriangleIcon","AlertTitle","AlertDescription","message","console","log","fetcher","createGraphiQLFetcher","url","concat","backend","headers","GraphiQL","createContext","ConfigContextProvider","param","children","config","Provider","value","alertVariants","cva","variants","default","destructive","info","defaultVariants","ref","props","div","role","cn","displayName","h5","_len","arguments","length","inputs","_key","twMerge","clsx","formatDuration","seconds","hours","Math","floor","minutes","remainingSeconds","round","getUris","context","fetch","res","json","files","base","session","getSession","user","jwt","agents","image","generate","parameters","uris","token","method","body","JSON","stringify","Authorization","object","key","response","list","search","continuationToken","download","delete"],"sourceRoot":""}
|
package/dist/.next/static/chunks/app/(application)/projects/[project]/page-f04fd5291a1ef7b1.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[806],{62839:function(e,s,t){Promise.resolve().then(t.bind(t,32538))},32538:function(e,s,t){"use strict";t.r(s),t.d(s,{default:function(){return $}});var i=t(57437),a=t(2265),r=t(99376),n=t(12199),l=t(7211),c=t(63251),d=t(27689),o=t(62869),u=t(95186),m=t(26815),h=t(76818),x=t(66070),p=t(35974),j=t(26110),v=t(19060),f=t(39763);let g=(0,f.Z)("Settings2",[["path",{d:"M20 7h-9",key:"3s1dr2"}],["path",{d:"M14 17H5",key:"gfn3mx"}],["circle",{cx:"17",cy:"17",r:"3",key:"18b49y"}],["circle",{cx:"7",cy:"7",r:"3",key:"dfmy0x"}]]),y=(0,f.Z)("Files",[["path",{d:"M15.5 2H8.6c-.4 0-.8.2-1.1.5-.3.3-.5.7-.5 1.1v12.8c0 .4.2.8.5 1.1.3.3.7.5 1.1.5h9.8c.4 0 .8-.2 1.1-.5.3-.3.5-.7.5-1.1V6.5L15.5 2z",key:"cennsq"}],["path",{d:"M3 7.6v12.8c0 .4.2.8.5 1.1.3.3.7.5 1.1.5h9.8",key:"ms809a"}],["path",{d:"M15 2v5h5",key:"qq6kwv"}]]);var N=t(53417),w=t(88906),b=t(45675),k=t(99397);let C=(0,f.Z)("PackageMinus",[["path",{d:"M16 16h6",key:"100bgy"}],["path",{d:"M21 10V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l2-1.14",key:"e7tb2h"}],["path",{d:"m7.5 4.27 9 5.15",key:"1c824w"}],["polyline",{points:"3.29 7 12 12 20.71 7",key:"ousv84"}],["line",{x1:"12",x2:"12",y1:"22",y2:"12",key:"a4e8g8"}]]);var S=t(18930),Z=t(63639),_=t(73247),M=t(82222),A=t(8014),P=t(93022),E=t(77992),I=t(10492),D=t(87393),O=t(13832),z=t(27648),T=t(81103),R=t(36399);let B=(0,f.Z)("PlusSquare",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M8 12h8",key:"1wcyev"}],["path",{d:"M12 8v8",key:"napkw2"}]]);var V=t(23518);let L=e=>{var s;let{onConfirm:t}=e,{data:r,loading:n,error:l}=(0,R.t)(),[c,d]=(0,a.useState)(void 0),[u,m]=(0,a.useState)(!1);return(0,i.jsxs)(j.Vq,{open:u,onOpenChange:e=>{m(e),d(void 0)},children:[(0,i.jsx)(j.hg,{asChild:!0,children:(0,i.jsxs)(o.z,{className:"w-full",variant:"outline",children:[(0,i.jsx)(B,{className:"h-4 w-4 mr-2"}),"Select items from knowledge sources to add to the project, or upload files."]})}),(0,i.jsxs)(j.cZ,{className:"sm:max-w-[900px]",children:[(0,i.jsxs)(j.fK,{children:[(0,i.jsx)(j.$N,{children:"Item selection"}),(0,i.jsx)(j.Be,{children:"Browse through contexts and select items."})]}),!c&&(0,i.jsxs)(V.mY,{className:"rounded-lg border shadow-md md:min-w-[450px]",children:[(0,i.jsx)(V.sZ,{placeholder:"Type a command or search..."}),(0,i.jsxs)(V.e8,{children:[(0,i.jsx)(V.rb,{children:"No results found."}),(0,i.jsx)(V.fu,{heading:"Contexts",children:null==r?void 0:null===(s=r.contexts)||void 0===s?void 0:s.items.map(e=>(0,i.jsx)(V.di,{onSelect:()=>{d(e)},children:e.name},e.id))})]})]}),c&&(0,i.jsx)(F,{context:c,onConfirm:e=>{console.log("item",e),t([{item:e,context:c}]),m(!1)}})]})]})},F=e=>{var s,t,r,n,c;let{context:o,onConfirm:u}=e,[m,h]=(0,a.useState)(void 0),{loading:x,data:p,refetch:j,previousData:v,error:f}=(0,l.aM)((0,d.P3)(o.id,[]),{fetchPolicy:"no-cache",nextFetchPolicy:"network-only",skip:!o.id,variables:{context:o.id,page:1,limit:10,sort:{field:"updatedAt",direction:"DESC"},filters:{archived:{ne:!0},...m?{name:{contains:"".concat(m)}}:{}}}});return(0,i.jsxs)(V.mY,{className:"rounded-lg border shadow-md md:min-w-[450px]",children:[(0,i.jsx)(V.sZ,{onValueChange:e=>h(e),placeholder:"Type a command or search..."}),(0,i.jsx)(V.e8,{children:(0,i.jsxs)(V.fu,{heading:"Items",children:[!v&&x&&(0,i.jsx)(V.di,{children:(0,i.jsx)(I.g,{})},"loading"),!x&&!(null==p?void 0:null===(t=p[o.id+d.Md])||void 0===t?void 0:null===(s=t.items)||void 0===s?void 0:s.length)&&(0,i.jsx)(V.rb,{children:"No items found."}),null===(c=p||v)||void 0===c?void 0:null===(n=c[o.id+d.Md])||void 0===n?void 0:null===(r=n.items)||void 0===r?void 0:r.map(e=>(0,i.jsx)(V.di,{onSelect:()=>{u(e)},children:e.name},e.id))]})})]})};var q=t(6374);function Y(e){var s,t,f,R,B,V;let{project:F}=e,[Y,X]=(0,a.useState)(!1),[W,$]=(0,a.useState)(!1),[H,K]=(0,a.useState)(!1),[G,J]=(0,a.useState)(""),[Q,ee]=(0,a.useState)("overview"),{user:es}=(0,a.useContext)(O.S),et=(0,r.useRouter)(),[ei,ea]=(0,a.useState)({deleteItems:!1,deleteSessions:!1}),[er,en]=(0,a.useState)({name:F.name||"",description:F.description||"",custom_instructions:F.custom_instructions||""}),{toast:el}=(0,E.pm)(),[ec,ed]=(0,a.useState)({rights_mode:F.rights_mode,users:null===(s=F.RBAC)||void 0===s?void 0:s.users,roles:null===(t=F.RBAC)||void 0===t?void 0:t.roles}),[eo,eu]=(0,a.useState)(F.project_items||[]),[em,{loading:eh}]=(0,n.D)(d.b2),[ex]=(0,n.D)(d.Yr),[ep,ej]=(0,a.useState)(!1),{data:ev,loading:ef,refetch:eg}=(0,l.aM)(d.GJ,{variables:{page:1,limit:50,filters:[{project:{eq:F.id}}]}}),{data:ey,loading:eN}=(0,l.aM)(d.ym,{variables:{page:1,limit:100,filters:[],sort:{field:"updatedAt",direction:"DESC"}}}),ew=(0,c.x)(),[eb,{loading:ek}]=(0,n.D)(d.fB),[eC,{loading:eS}]=(0,n.D)(d.MU),[eZ,{loading:e_}]=(0,n.D)(d.S9),eM=(null==ev?void 0:null===(f=ev.agent_sessionsPagination)||void 0===f?void 0:f.items)||[],eA=(null==ey?void 0:null===(R=ey.agentsPagination)||void 0===R?void 0:R.items)||[],eP=a.useMemo(()=>G?eA.filter(e=>e.name.toLowerCase().includes(G.toLowerCase())):eA,[eA,G]),eE=async()=>{if(!er.name.trim()){el({title:"Validation Error",description:"Project name is required.",variant:"destructive"});return}try{await em({variables:{id:F.id,input:{name:er.name.trim(),description:er.description.trim()||null,custom_instructions:er.custom_instructions.trim()||null}}}),el({title:"Success",description:"Project updated successfully!"}),X(!1)}catch(e){console.error("Error updating project:",e),el({title:"Error",description:e.message||"Failed to update project. Please try again.",variant:"destructive"})}},eI=async e=>{try{var s,t,i;let a=await eb({variables:{title:"New session with ".concat(e.name),agent:e.id,project:F.id,rights_mode:"private"}}),r=null===(i=a.data)||void 0===i?void 0:null===(t=i.agent_sessionsCreateOne)||void 0===t?void 0:null===(s=t.item)||void 0===s?void 0:s.id;r&&(el({title:"Success",description:"Session created successfully! Sessions started in a project are accessible for viewing by project members."}),K(!1),J(""),et.push("/chat/".concat(e.id,"/").concat(r)))}catch(e){console.error("Error creating session:",e),el({title:"Error",description:e.message||"Failed to create session. Please try again.",variant:"destructive"})}},eD=async()=>{try{ej(!0),ei.deleteItems&&await Promise.all(eo.map(async e=>{var s,t;let i=e.split("/")[0],a=e.split("/")[1];if(!i||!a)return;let{data:r}=await ew.mutate({mutation:(0,d.mN)(i,[]),variables:{id:a}});if(null===(s=r["".concat(i,"_itemsRemoveOneById")])||void 0===s?void 0:s.s3key)try{await q.QZ.delete(null===(t=r["".concat(i,"_itemsRemoveOneById")])||void 0===t?void 0:t.s3key)}catch(e){console.error("[EXULU] Error deleting file from s3 storage:",e)}})),await Promise.all(eM.map(async e=>{ei.deleteSessions?await eZ({variables:{id:e.id}}):await eC({variables:{id:e.id,project:null}})})),await ex({variables:{id:F.id}}),el({title:"Success",description:'Project "'.concat(F.name,'" has been deleted successfully.')}),$(!1),ej(!1),et.push("/projects")}catch(e){ej(!1),console.error("Error deleting project:",e),el({title:"Error",description:e.message||"Failed to delete project. Please try again.",variant:"destructive"})}};return(0,i.jsxs)("div",{className:"flex-1 p-6 mt-20",children:[(0,i.jsx)("div",{className:"max-w-5xl mx-auto space-y-6",children:(0,i.jsxs)("div",{className:"flex gap-6 h-full",children:[(0,i.jsxs)("div",{className:"w-80 space-y-4",children:[(0,i.jsx)(x.Zb,{children:(0,i.jsx)(x.aY,{className:"p-4",children:(0,i.jsxs)("div",{className:"space-y-3",children:[(0,i.jsx)("h3",{className:"font-semibold text-lg",children:F.name}),(0,i.jsx)("p",{className:"text-muted-foreground text-sm leading-relaxed",children:F.description||"No description provided."})]})})}),(0,i.jsxs)("div",{className:"space-y-2",children:[(0,i.jsxs)(o.z,{variant:"overview"===Q?"default":"ghost",className:"w-full justify-start",onClick:()=>ee("overview"),children:[(0,i.jsx)(g,{className:"h-4 w-4 mr-2"}),"Project information"]}),(0,i.jsxs)(o.z,{variant:"context"===Q?"default":"ghost",className:"w-full justify-start",onClick:()=>ee("context"),children:[(0,i.jsx)(y,{className:"h-4 w-4 mr-2"}),"Project files"]}),(0,i.jsxs)(o.z,{variant:"sessions"===Q?"default":"ghost",className:"w-full justify-start",onClick:()=>ee("sessions"),children:[(0,i.jsx)(N.Z,{className:"h-4 w-4 mr-2"}),"Project sessions"]}),(0,i.jsxs)(o.z,{variant:"access"===Q?"default":"ghost",className:"w-full justify-start",onClick:()=>ee("access"),children:[(0,i.jsx)(w.Z,{className:"h-4 w-4 mr-2"}),"Access control"]}),(0,i.jsxs)(o.z,{variant:"settings"===Q?"default":"ghost",className:"w-full justify-start",onClick:()=>ee("settings"),children:[(0,i.jsx)(g,{className:"h-4 w-4 mr-2"}),"Project settings"]})]})]}),(0,i.jsxs)("div",{className:"flex-1",children:["overview"===Q&&(0,i.jsx)("div",{className:"space-y-6",children:(0,i.jsxs)(x.Zb,{children:[(0,i.jsxs)(x.Ol,{children:[(0,i.jsx)(x.ll,{children:"Project Information"}),(0,i.jsx)(x.SZ,{children:"Basic information about this project"})]}),(0,i.jsxs)(x.aY,{className:"space-y-4",children:[(0,i.jsx)("div",{className:"grid gap-4",children:(0,i.jsxs)("div",{className:"space-y-2",children:[(0,i.jsx)(m._,{htmlFor:"name",children:"Project Name"}),Y?(0,i.jsx)(u.I,{id:"name",value:er.name,onChange:e=>en({...er,name:e.target.value})}):(0,i.jsx)("p",{className:"text-sm",children:F.name})]})}),(0,i.jsxs)("div",{className:"space-y-2",children:[(0,i.jsx)(m._,{htmlFor:"description",children:"Description"}),Y?(0,i.jsx)(h.g,{id:"description",value:er.description,onChange:e=>en({...er,description:e.target.value}),rows:3}):(0,i.jsx)("p",{className:"text-sm",children:F.description||"No description provided"})]}),(0,i.jsxs)("div",{className:"space-y-2",children:[(0,i.jsx)(m._,{htmlFor:"instructions",children:"Custom Instructions"}),Y?(0,i.jsx)(h.g,{id:"instructions",value:er.custom_instructions,onChange:e=>en({...er,custom_instructions:e.target.value}),rows:4,placeholder:"Enter custom instructions for sessions in this project..."}):(0,i.jsx)("p",{className:"text-sm",children:F.custom_instructions||"No custom instructions set"})]})]}),(0,i.jsx)(x.eW,{children:(0,i.jsx)("div",{className:"flex items-center justify-between",children:(0,i.jsx)("div",{className:"flex gap-2",children:Y?(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(o.z,{variant:"outline",onClick:()=>{F&&en({name:F.name||"",description:F.description||"",custom_instructions:F.custom_instructions||""}),X(!1)},children:"Cancel"}),(0,i.jsxs)(o.z,{onClick:eE,children:[(0,i.jsx)("span",{children:"Save changes"}),eh&&(0,i.jsx)(I.g,{className:"mr-2"})]})]}):(0,i.jsxs)(o.z,{variant:"outline",onClick:()=>X(!0),children:[(0,i.jsx)(b.Z,{className:"h-4 w-4 mr-2"}),"Edit"]})})})})]})}),"context"===Q&&(0,i.jsx)("div",{className:"space-y-6 w-full",children:(0,i.jsxs)(x.Zb,{children:[(0,i.jsxs)(x.Ol,{children:[(0,i.jsx)(x.ll,{children:"Project context items"}),(0,i.jsx)(x.SZ,{children:"Items that provide context for sessions in this project (max 15 items). Note that different agents may have different file types supported."})]}),(0,i.jsx)(x.aY,{children:(0,i.jsxs)("div",{className:"space-y-4",children:[(0,i.jsx)(L,{onConfirm:e=>{let s=[...eo,...e.map(e=>"".concat(e.context.id,"/").concat(e.item.id))];console.log("update",s),eu(s),em({variables:{id:F.id,input:{project_items:s}}})}}),(0,i.jsx)("div",{className:"space-y-2",children:(0,i.jsxs)("div",{className:"space-y-2",children:[(null==eo?void 0:eo.length)===0&&(0,i.jsxs)("div",{className:"text-center py-8 text-muted-foreground",children:[(0,i.jsx)(y,{className:"h-12 w-12 mx-auto mb-2 opacity-50"}),(0,i.jsx)("p",{children:"No items added to the project context yet."})]}),(0,i.jsx)("div",{className:"grid grid-cols-2 sm:grid-cols-2 gap-3",children:null==eo?void 0:eo.map(e=>(0,i.jsx)(U,{gid:e,onRemove:e=>{let s=eo.filter(s=>s!==e);eu(s),em({variables:{id:F.id,input:{project_items:s}}})}},e))})]})})]})})]})}),"sessions"===Q&&(0,i.jsx)("div",{className:"space-y-6",children:(0,i.jsxs)(x.Zb,{children:[(0,i.jsxs)(x.Ol,{children:[(0,i.jsx)(x.ll,{children:"Project sessions"}),(0,i.jsx)(x.SZ,{children:"Sessions associated with this project"})]}),(0,i.jsx)(x.aY,{children:(0,i.jsxs)("div",{className:"space-y-4",children:[(0,i.jsxs)(o.z,{onClick:()=>{K(!0)},className:"w-full",variant:"outline",children:[(0,i.jsx)(k.Z,{className:"h-4 w-4 mr-2"}),"Start new session"]}),(0,i.jsx)("div",{className:"space-y-2",children:eM.map(e=>{let s=(0,D.I)(e,es);return(0,i.jsxs)("div",{className:"flex items-center justify-between p-3 border rounded-lg",children:[(0,i.jsxs)("div",{className:"flex items-center gap-3",children:[(0,i.jsx)(N.Z,{className:"h-4 w-4"}),(0,i.jsx)("div",{children:(0,i.jsx)(z.default,{href:"/chat/".concat(e.agent,"/").concat(e.id),children:(0,i.jsx)("p",{className:"font-medium max-w-[80%] truncate",children:e.title})})})]}),(0,i.jsxs)("div",{className:"flex items-center gap-2",children:[(0,i.jsxs)(T.u,{children:[(0,i.jsx)(T.aJ,{asChild:!0,children:(0,i.jsx)(o.z,{disabled:!s||eS,variant:"ghost",size:"sm",onClick:()=>{eS||(eC({variables:{id:e.id,project:null}}),eg())},children:(0,i.jsx)(C,{className:"h-4 w-4"})})}),(0,i.jsx)(T._v,{children:(0,i.jsx)("p",{children:"Remove session from project."})})]}),(0,i.jsxs)(T.u,{children:[(0,i.jsx)(T.aJ,{asChild:!0,children:(0,i.jsx)(o.z,{disabled:!s||e_,variant:"ghost",size:"sm",onClick:()=>{e_||(eZ({variables:{id:e.id}}),eg())},children:(0,i.jsx)(S.Z,{className:"h-4 w-4"})})}),(0,i.jsx)(T._v,{children:(0,i.jsx)("p",{children:"Delete session completely."})})]})]})]},e.id)})}),0===eM.length&&!ef&&(0,i.jsxs)("div",{className:"text-center py-8 text-muted-foreground",children:[(0,i.jsx)(N.Z,{className:"h-12 w-12 mx-auto mb-2 opacity-50"}),(0,i.jsx)("p",{children:"No sessions found"})]}),ef&&(0,i.jsxs)("div",{className:"text-center py-8 text-muted-foreground",children:[(0,i.jsx)(N.Z,{className:"h-12 w-12 mx-auto mb-2 opacity-50"}),(0,i.jsx)("p",{children:"Loading sessions..."})]})]})})]})}),"access"===Q&&(0,i.jsx)("div",{className:"space-y-6",children:(0,i.jsxs)(x.Zb,{children:[(0,i.jsxs)(x.Ol,{children:[(0,i.jsx)(x.ll,{children:"Access Control"}),(0,i.jsx)(x.SZ,{children:"Control who can access this project"})]}),(0,i.jsx)(x.aY,{children:(0,i.jsx)(A.P,{allowedModes:["private","users","roles"],initialRightsMode:F.rights_mode||"private",initialUsers:null===(B=F.RBAC)||void 0===B?void 0:B.users,initialRoles:null===(V=F.RBAC)||void 0===V?void 0:V.roles,onChange:(e,s,t)=>{ed({rights_mode:e,users:s,roles:t})}})}),(0,i.jsx)(x.eW,{children:(0,i.jsxs)(o.z,{onClick:()=>{em({variables:{id:F.id,input:{rights_mode:ec.rights_mode,RBAC:{users:ec.users,roles:ec.roles}}}})},children:[(0,i.jsx)("span",{children:"Save access rights"}),eh&&(0,i.jsx)(I.g,{className:"ml-2"})]})})]})}),"settings"===Q&&(0,i.jsx)("div",{className:"space-y-6",children:(0,i.jsxs)(x.Zb,{children:[(0,i.jsxs)(x.Ol,{children:[(0,i.jsx)(x.ll,{children:"Danger Zone"}),(0,i.jsx)(x.SZ,{children:"Permanently delete this project and all associated data"})]}),(0,i.jsx)(x.aY,{children:(0,i.jsxs)("div",{className:"space-y-4",children:[(0,i.jsxs)("div",{className:"flex items-start gap-3 p-4 border border-destructive/20 rounded-lg bg-destructive/5",children:[(0,i.jsx)(Z.Z,{className:"h-5 w-5 text-destructive mt-0.5"}),(0,i.jsxs)("div",{className:"flex-1",children:[(0,i.jsx)("h4",{className:"font-medium text-destructive",children:"Delete Project"}),(0,i.jsx)("p",{className:"text-sm text-muted-foreground mt-1",children:"This action cannot be undone. This will permanently delete the project and optionally remove all associated context files and sessions."})]})]}),(0,i.jsxs)(j.Vq,{open:W,onOpenChange:$,children:[(0,i.jsx)(j.hg,{asChild:!0,children:(0,i.jsxs)(o.z,{variant:"destructive",children:[(0,i.jsx)(S.Z,{className:"h-4 w-4 mr-2"}),"Delete Project"]})}),(0,i.jsxs)(j.cZ,{className:"sm:max-w-md",children:[(0,i.jsxs)(j.fK,{children:[(0,i.jsx)(j.$N,{children:"Delete Project"}),(0,i.jsxs)(j.Be,{children:['Are you sure you want to delete "',F.name,'"? This action cannot be undone.']})]}),(0,i.jsxs)("div",{className:"space-y-4",children:[(0,i.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,i.jsx)(v.X,{id:"delete-items",checked:ei.deleteItems,onCheckedChange:e=>ea(s=>({...s,deleteItems:e}))}),(0,i.jsxs)("label",{htmlFor:"delete-items",className:"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",children:["Also delete all context items (",null==eo?void 0:eo.length," items)"]})]}),(0,i.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,i.jsx)(v.X,{id:"delete-sessions",checked:ei.deleteSessions,onCheckedChange:e=>ea(s=>({...s,deleteSessions:e}))}),(0,i.jsxs)("label",{htmlFor:"delete-sessions",className:"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",children:["Also delete all sessions (",eM.length," sessions)"]})]}),(ei.deleteItems||ei.deleteSessions)&&(0,i.jsxs)("div",{className:"flex items-start gap-2 p-3 border border-amber-200 rounded-lg bg-amber-50",children:[(0,i.jsx)(Z.Z,{className:"h-4 w-4 text-amber-600 mt-0.5"}),(0,i.jsx)("p",{className:"text-sm text-amber-800",children:ei.deleteItems&&ei.deleteSessions?"All context items and sessions will be permanently deleted.":ei.deleteItems?"All context items will be permanently deleted.":"All sessions will be permanently deleted."})]})]}),(0,i.jsxs)(j.cN,{className:"sm:justify-start",children:[(0,i.jsx)(o.z,{variant:"outline",onClick:()=>$(!1),children:"Cancel"}),(0,i.jsxs)(o.z,{disabled:ep,variant:"destructive",onClick:eD,children:[ep?(0,i.jsx)(I.g,{className:"mr-2 w-4 h-4"}):(0,i.jsx)(S.Z,{className:"h-4 w-4 mr-2"}),"Delete Project"]})]})]})]})]})})]})})]})]})}),(0,i.jsx)(j.Vq,{open:H,onOpenChange:K,children:(0,i.jsxs)(j.cZ,{className:"sm:max-w-4xl",children:[(0,i.jsxs)(j.fK,{children:[(0,i.jsx)(j.$N,{children:"Select an Agent"}),(0,i.jsx)(j.Be,{children:"Choose an agent to start a new chat session. Sessions started in a project are accessible for viewing by project members."})]}),(0,i.jsxs)("div",{className:"space-y-4",children:[(0,i.jsxs)("div",{className:"relative",children:[(0,i.jsx)(_.Z,{className:"absolute left-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-muted-foreground"}),(0,i.jsx)(u.I,{placeholder:"Search agents...",value:G,onChange:e=>J(e.target.value),className:"pl-10"})]}),(0,i.jsx)("div",{className:"max-h-96 overflow-y-auto",children:eN?(0,i.jsx)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[...Array(6)].map((e,s)=>(0,i.jsx)("div",{className:"p-4 border rounded-lg",children:(0,i.jsxs)("div",{className:"flex items-center gap-3",children:[(0,i.jsx)(P.O,{className:"h-12 w-12 rounded-full"}),(0,i.jsxs)("div",{className:"space-y-2 flex-1",children:[(0,i.jsx)(P.O,{className:"h-4 w-3/4"}),(0,i.jsx)(P.O,{className:"h-3 w-1/2"})]})]})},s))}):eP.length>0?(0,i.jsx)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:eP.map(e=>(0,i.jsx)("div",{className:"p-4 border rounded-lg hover:border-primary cursor-pointer transition-colors",onClick:()=>eI(e),children:(0,i.jsxs)("div",{className:"flex items-center gap-3",children:[(0,i.jsx)("div",{className:"h-12 w-12 rounded-full bg-primary/10 flex items-center justify-center",children:e.image?(0,i.jsx)("img",{src:e.image,alt:e.name,className:"h-12 w-12 rounded-full object-cover"}):(0,i.jsx)(M.Z,{className:"h-6 w-6"})}),(0,i.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,i.jsx)("p",{className:"font-medium truncate",children:e.name}),(0,i.jsx)("p",{className:"text-sm text-muted-foreground truncate",children:e.description||"".concat(e.type," agent")}),(0,i.jsxs)("div",{className:"flex items-center gap-2 mt-1",children:[(0,i.jsx)(p.C,{variant:e.active?"default":"secondary",className:"text-xs",children:e.active?"Active":"Inactive"}),(0,i.jsx)(p.C,{variant:"outline",className:"text-xs",children:e.type})]})]})]})},e.id))}):(0,i.jsxs)("div",{className:"text-center py-8 text-muted-foreground",children:[(0,i.jsx)(M.Z,{className:"h-12 w-12 mx-auto mb-2 opacity-50"}),(0,i.jsx)("p",{children:G?"No agents found matching your search":"No agents available"})]})})]}),(0,i.jsx)(j.cN,{children:(0,i.jsx)(o.z,{variant:"outline",onClick:()=>K(!1),children:"Cancel"})})]})})]})}function U(e){var s;let{gid:t,onRemove:a}=e,r=t.split("/")[0],n=t.split("/")[1];if(!r||!n)return null;let{data:c,loading:u}=(0,l.aM)((0,d.A1)(r,[]),{variables:{id:n}});if(u)return(0,i.jsx)(x.Zb,{className:"group relative overflow-hidden",children:(0,i.jsxs)(x.aY,{className:"p-4",children:[(0,i.jsx)(P.O,{className:"h-4 w-3/4 mb-2"}),(0,i.jsx)(P.O,{className:"h-3 w-full"}),(0,i.jsx)(P.O,{className:"h-3 w-2/3 mt-1"})]})});let m=null==c?void 0:c[r+"_itemsById"];return m?(0,i.jsx)(x.Zb,{className:"group relative overflow-hidden hover:shadow-md transition-all duration-200 hover:border-primary/50",children:(0,i.jsxs)(x.aY,{className:"p-4",children:[(0,i.jsx)("div",{className:"flex items-start justify-between mb-3",children:(0,i.jsx)(o.z,{variant:"ghost",size:"sm",className:"h-8 w-8 p-0 opacity-0 group-hover:opacity-100 transition-opacity",onClick:e=>{e.stopPropagation(),a(t)},children:(0,i.jsx)(S.Z,{className:"h-4 w-4 text-destructive"})})}),(0,i.jsx)("div",{className:"mb-2",children:(0,i.jsx)("h4",{className:"font-medium text-sm line-clamp-2 min-h-[2.5rem]",children:m.name||"Untitled"})}),m.description&&(0,i.jsx)("p",{className:"text-xs text-muted-foreground line-clamp-2 mb-3 min-h-[2.5rem]",children:m.description}),(0,i.jsxs)("div",{className:"space-y-2 pt-2 border-t",children:[(0,i.jsxs)("div",{className:"flex items-center justify-between text-xs text-muted-foreground",children:[(0,i.jsx)("span",{className:"truncate",children:r.replace(/_/g," ")}),m.updatedAt&&(0,i.jsx)("span",{className:"text-xs text-muted-foreground whitespace-nowrap",children:(s=m.updatedAt)?new Date(s).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"}):null})]}),m.textlength&&(0,i.jsxs)("div",{className:"flex items-center gap-1 text-xs text-muted-foreground",children:[(0,i.jsxs)("span",{children:[m.textlength.toLocaleString()," chars"]}),m.chunks&&m.chunks.length>0&&(0,i.jsxs)("span",{className:"text-xs",children:["• ",m.chunks.length," chunks"]})]})]})]})}):null}var X=t(65613),W=t(20653);function $(){let e=(0,r.useParams)(),s=null==e?void 0:e.project,{data:t,loading:a,error:n}=(0,l.aM)(d.jL,{variables:{id:s}});return a?(0,i.jsx)("div",{children:(0,i.jsx)(P.O,{className:"w-full h-full"})}):n?(0,i.jsxs)(X.bZ,{variant:"destructive",children:[(0,i.jsx)(W.LPM,{className:"size-4"}),(0,i.jsx)(X.Cd,{children:"Error"}),(0,i.jsx)(X.X,{children:"Error loading project."})]}):(null==t?void 0:t.projectById)?(0,i.jsx)(Y,{project:t.projectById}):(0,i.jsxs)(X.bZ,{variant:"destructive",children:[(0,i.jsx)(W.LPM,{className:"size-4"}),(0,i.jsx)(X.Cd,{children:"Error"}),(0,i.jsx)(X.X,{children:"Project not found."})]})}},65613:function(e,s,t){"use strict";t.d(s,{Cd:function(){return d},X:function(){return o},bZ:function(){return c}});var i=t(57437),a=t(90535),r=t(2265),n=t(94508);let l=(0,a.j)("relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground",{variants:{variant:{default:"bg-background text-foreground",destructive:"border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive",info:"border-info/50 text-info dark:border-info [&>svg]:text-info"}},defaultVariants:{variant:"default"}}),c=r.forwardRef((e,s)=>{let{className:t,variant:a,...r}=e;return(0,i.jsx)("div",{ref:s,role:"alert",className:(0,n.cn)(l({variant:a}),t),...r})});c.displayName="Alert";let d=r.forwardRef((e,s)=>{let{className:t,...a}=e;return(0,i.jsx)("h5",{ref:s,className:(0,n.cn)("mb-1 font-medium leading-none tracking-tight",t),...a})});d.displayName="AlertTitle";let o=r.forwardRef((e,s)=>{let{className:t,...a}=e;return(0,i.jsx)("div",{ref:s,className:(0,n.cn)("text-sm [&_p]:leading-relaxed",t),...a})});o.displayName="AlertDescription"},19060:function(e,s,t){"use strict";t.d(s,{X:function(){return c}});var i=t(57437),a=t(9270),r=t(30401),n=t(2265),l=t(94508);let c=n.forwardRef((e,s)=>{let{className:t,...n}=e;return(0,i.jsx)(a.fC,{ref:s,className:(0,l.cn)("peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground",t),...n,children:(0,i.jsx)(a.z$,{className:(0,l.cn)("flex items-center justify-center text-current"),children:(0,i.jsx)(r.Z,{className:"size-4"})})})});c.displayName=a.fC.displayName},10492:function(e,s,t){"use strict";t.d(s,{g:function(){return r}});var i=t(57437),a=t(94508);let r=e=>{let{className:s}=e;return(0,i.jsxs)("svg",{"aria-hidden":"true",role:"status",className:(0,a.cn)("inline w-4 h-4 text-white animate-spin fill-inherit",s),viewBox:"0 0 100 101",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[(0,i.jsx)("path",{d:"M100 50.5908C100 78.2051 77.6142 100.591 50 100.591C22.3858 100.591 0 78.2051 0 50.5908C0 22.9766 22.3858 0.59082 50 0.59082C77.6142 0.59082 100 22.9766 100 50.5908ZM9.08144 50.5908C9.08144 73.1895 27.4013 91.5094 50 91.5094C72.5987 91.5094 90.9186 73.1895 90.9186 50.5908C90.9186 27.9921 72.5987 9.67226 50 9.67226C27.4013 9.67226 9.08144 27.9921 9.08144 50.5908Z",className:"fill-inherit opacity-20"}),(0,i.jsx)("path",{d:"M93.9676 39.0409C96.393 38.4038 97.8624 35.9116 97.0079 33.5539C95.2932 28.8227 92.871 24.3692 89.8167 20.348C85.8452 15.1192 80.8826 10.7238 75.2124 7.41289C69.5422 4.10194 63.2754 1.94025 56.7698 1.05124C51.7666 0.367541 46.6976 0.446843 41.7345 1.27873C39.2613 1.69328 37.813 4.19778 38.4501 6.62326C39.0873 9.04874 41.5694 10.4717 44.0505 10.1071C47.8511 9.54855 51.7191 9.52689 55.5402 10.0491C60.8642 10.7766 65.9928 12.5457 70.6331 15.2552C75.2735 17.9648 79.3347 21.5619 82.5849 25.841C84.9175 28.9121 86.7997 32.2913 88.1811 35.8758C89.083 38.2158 91.5421 39.6781 93.9676 39.0409Z",className:"fill-inherit"})]})}},77992:function(e,s,t){"use strict";t.d(s,{Am:function(){return u},pm:function(){return m}});var i=t(2265);let a=0,r=new Map,n=e=>{if(r.has(e))return;let s=setTimeout(()=>{r.delete(e),o({type:"REMOVE_TOAST",toastId:e})},1e6);r.set(e,s)},l=(e,s)=>{switch(s.type){case"ADD_TOAST":return{...e,toasts:[s.toast,...e.toasts].slice(0,1)};case"UPDATE_TOAST":return{...e,toasts:e.toasts.map(e=>e.id===s.toast.id?{...e,...s.toast}:e)};case"DISMISS_TOAST":{let{toastId:t}=s;return t?n(t):e.toasts.forEach(e=>{n(e.id)}),{...e,toasts:e.toasts.map(e=>e.id===t||void 0===t?{...e,open:!1}:e)}}case"REMOVE_TOAST":if(void 0===s.toastId)return{...e,toasts:[]};return{...e,toasts:e.toasts.filter(e=>e.id!==s.toastId)}}},c=[],d={toasts:[]};function o(e){d=l(d,e),c.forEach(e=>{e(d)})}function u(e){let{...s}=e,t=(a=(a+1)%Number.MAX_SAFE_INTEGER).toString(),i=()=>o({type:"DISMISS_TOAST",toastId:t});return o({type:"ADD_TOAST",toast:{...s,id:t,open:!0,onOpenChange:e=>{e||i()}}}),{id:t,dismiss:i,update:e=>o({type:"UPDATE_TOAST",toast:{...e,id:t}})}}function m(){let[e,s]=i.useState(d);return i.useEffect(()=>(c.push(s),()=>{let e=c.indexOf(s);e>-1&&c.splice(e,1)}),[e]),{...e,toast:u,dismiss:e=>o({type:"DISMISS_TOAST",toastId:e})}}},36399:function(e,s,t){"use strict";t.d(s,{t:function(){return r}});var i=t(27689),a=t(7211);let r=()=>(0,a.aM)(i.uw,{variables:{limit:20}})},87393:function(e,s,t){"use strict";t.d(s,{I:function(){return i}});let i=(e,s)=>{var t,i,a,r,n,l;let c="private"===e.rights_mode,d="public"===e.rights_mode,o="users"===e.rights_mode,u="roles"===e.rights_mode,m=s.super_admin,h=e.created_by===s.id.toString(),x=!1;return c&&h&&(x=!0),d&&(x=!0),o&&(x=(null===(a=e.RBAC)||void 0===a?void 0:null===(i=a.users)||void 0===i?void 0:null===(t=i.find(e=>e.id===s.id))||void 0===t?void 0:t.rights)==="write"),u&&(x=(null===(l=e.RBAC)||void 0===l?void 0:null===(n=l.roles)||void 0===n?void 0:null===(r=n.find(e=>{var t;return e.id===(null===(t=s.role)||void 0===t?void 0:t.id)}))||void 0===r?void 0:r.rights)==="write"),m&&(x=!0),x}},63639:function(e,s,t){"use strict";t.d(s,{Z:function(){return i}});let i=(0,t(39763).Z)("AlertTriangle",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z",key:"c3ski4"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]])},24156:function(e,s,t){"use strict";t.d(s,{Z:function(){return i}});let i=(0,t(39763).Z)("ChevronsUpDown",[["path",{d:"m7 15 5 5 5-5",key:"1hf1tw"}],["path",{d:"m7 9 5-5 5 5",key:"sgt6xg"}]])},29202:function(e,s,t){"use strict";t.d(s,{Z:function(){return i}});let i=(0,t(39763).Z)("Globe",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]])},66337:function(e,s,t){"use strict";t.d(s,{Z:function(){return i}});let i=(0,t(39763).Z)("Lock",[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]])},53417:function(e,s,t){"use strict";t.d(s,{Z:function(){return i}});let i=(0,t(39763).Z)("MessageSquare",[["path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z",key:"1lielz"}]])},45675:function(e,s,t){"use strict";t.d(s,{Z:function(){return i}});let i=(0,t(39763).Z)("Pencil",[["path",{d:"M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z",key:"5qss01"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]])},99397:function(e,s,t){"use strict";t.d(s,{Z:function(){return i}});let i=(0,t(39763).Z)("Plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]])},88906:function(e,s,t){"use strict";t.d(s,{Z:function(){return i}});let i=(0,t(39763).Z)("Shield",[["path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10",key:"1irkt0"}]])},9270:function(e,s,t){"use strict";t.d(s,{fC:function(){return N},z$:function(){return b}});var i=t(2265),a=t(98575),r=t(73966),n=t(6741),l=t(80886),c=t(6718),d=t(90420),o=t(71599),u=t(66840),m=t(57437),h="Checkbox",[x,p]=(0,r.b)(h),[j,v]=x(h);function f(e){let{__scopeCheckbox:s,checked:t,children:a,defaultChecked:r,disabled:n,form:c,name:d,onCheckedChange:o,required:u,value:x="on",internal_do_not_use_render:p}=e,[v,f]=(0,l.T)({prop:t,defaultProp:null!=r&&r,onChange:o,caller:h}),[g,y]=i.useState(null),[N,w]=i.useState(null),b=i.useRef(!1),k=!g||!!c||!!g.closest("form"),C={checked:v,disabled:n,setChecked:f,control:g,setControl:y,name:d,form:c,value:x,hasConsumerStoppedPropagationRef:b,required:u,defaultChecked:!S(r)&&r,isFormControl:k,bubbleInput:N,setBubbleInput:w};return(0,m.jsx)(j,{scope:s,...C,children:"function"==typeof p?p(C):a})}var g="CheckboxTrigger",y=i.forwardRef((e,s)=>{let{__scopeCheckbox:t,onKeyDown:r,onClick:l,...c}=e,{control:d,value:o,disabled:h,checked:x,required:p,setControl:j,setChecked:f,hasConsumerStoppedPropagationRef:y,isFormControl:N,bubbleInput:w}=v(g,t),b=(0,a.e)(s,j),k=i.useRef(x);return i.useEffect(()=>{let e=null==d?void 0:d.form;if(e){let s=()=>f(k.current);return e.addEventListener("reset",s),()=>e.removeEventListener("reset",s)}},[d,f]),(0,m.jsx)(u.WV.button,{type:"button",role:"checkbox","aria-checked":S(x)?"mixed":x,"aria-required":p,"data-state":Z(x),"data-disabled":h?"":void 0,disabled:h,value:o,...c,ref:b,onKeyDown:(0,n.M)(r,e=>{"Enter"===e.key&&e.preventDefault()}),onClick:(0,n.M)(l,e=>{f(e=>!!S(e)||!e),w&&N&&(y.current=e.isPropagationStopped(),y.current||e.stopPropagation())})})});y.displayName=g;var N=i.forwardRef((e,s)=>{let{__scopeCheckbox:t,name:i,checked:a,defaultChecked:r,required:n,disabled:l,value:c,onCheckedChange:d,form:o,...u}=e;return(0,m.jsx)(f,{__scopeCheckbox:t,checked:a,defaultChecked:r,disabled:l,required:n,onCheckedChange:d,name:i,form:o,value:c,internal_do_not_use_render:e=>{let{isFormControl:i}=e;return(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(y,{...u,ref:s,__scopeCheckbox:t}),i&&(0,m.jsx)(C,{__scopeCheckbox:t})]})}})});N.displayName=h;var w="CheckboxIndicator",b=i.forwardRef((e,s)=>{let{__scopeCheckbox:t,forceMount:i,...a}=e,r=v(w,t);return(0,m.jsx)(o.z,{present:i||S(r.checked)||!0===r.checked,children:(0,m.jsx)(u.WV.span,{"data-state":Z(r.checked),"data-disabled":r.disabled?"":void 0,...a,ref:s,style:{pointerEvents:"none",...e.style}})})});b.displayName=w;var k="CheckboxBubbleInput",C=i.forwardRef((e,s)=>{let{__scopeCheckbox:t,...r}=e,{control:n,hasConsumerStoppedPropagationRef:l,checked:o,defaultChecked:h,required:x,disabled:p,name:j,value:f,form:g,bubbleInput:y,setBubbleInput:N}=v(k,t),w=(0,a.e)(s,N),b=(0,c.D)(o),C=(0,d.t)(n);i.useEffect(()=>{if(!y)return;let e=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,"checked").set,s=!l.current;if(b!==o&&e){let t=new Event("click",{bubbles:s});y.indeterminate=S(o),e.call(y,!S(o)&&o),y.dispatchEvent(t)}},[y,b,o,l]);let Z=i.useRef(!S(o)&&o);return(0,m.jsx)(u.WV.input,{type:"checkbox","aria-hidden":!0,defaultChecked:null!=h?h:Z.current,required:x,disabled:p,name:j,value:f,form:g,...r,tabIndex:-1,ref:w,style:{...r.style,...C,position:"absolute",pointerEvents:"none",opacity:0,margin:0,transform:"translateX(-100%)"}})});function S(e){return"indeterminate"===e}function Z(e){return S(e)?"indeterminate":e?"checked":"unchecked"}C.displayName=k},6394:function(e,s,t){"use strict";t.d(s,{f:function(){return l}});var i=t(2265),a=t(66840),r=t(57437),n=i.forwardRef((e,s)=>(0,r.jsx)(a.WV.label,{...e,ref:s,onMouseDown:s=>{var t;s.target.closest("button, input, select, textarea")||(null===(t=e.onMouseDown)||void 0===t||t.call(e,s),!s.defaultPrevented&&s.detail>1&&s.preventDefault())}}));n.displayName="Label";var l=n}},function(e){e.O(0,[8310,9851,7629,7093,6148,847,1942,7648,7823,8068,5799,605,4567,1206,5338,1785,5110,3171,6373,3832,8030,2971,2117,1744],function(){return e(e.s=62839)}),_N_E=e.O()}]);
|
|
2
|
+
//# sourceMappingURL=page-f04fd5291a1ef7b1.js.map
|