@exulu/frontend 1.7.0 → 1.9.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.
Files changed (167) hide show
  1. package/dist/.next/BUILD_ID +1 -1
  2. package/dist/.next/app-build-manifest.json +124 -127
  3. package/dist/.next/app-path-routes-manifest.json +1 -1
  4. package/dist/.next/build-manifest.json +2 -2
  5. package/dist/.next/prerender-manifest.json +1 -1
  6. package/dist/.next/server/app/(application)/agents/edit/[id]/page.js +1 -1
  7. package/dist/.next/server/app/(application)/agents/edit/[id]/page.js.nft.json +1 -1
  8. package/dist/.next/server/app/(application)/agents/edit/[id]/page_client-reference-manifest.js +1 -1
  9. package/dist/.next/server/app/(application)/agents/page_client-reference-manifest.js +1 -1
  10. package/dist/.next/server/app/(application)/chat/[agent]/[session]/page.js +7 -7
  11. package/dist/.next/server/app/(application)/chat/[agent]/[session]/page.js.nft.json +1 -1
  12. package/dist/.next/server/app/(application)/chat/[agent]/[session]/page_client-reference-manifest.js +1 -1
  13. package/dist/.next/server/app/(application)/chat/[agent]/page_client-reference-manifest.js +1 -1
  14. package/dist/.next/server/app/(application)/chat/page_client-reference-manifest.js +1 -1
  15. package/dist/.next/server/app/(application)/configuration/page_client-reference-manifest.js +1 -1
  16. package/dist/.next/server/app/(application)/dashboard/page_client-reference-manifest.js +1 -1
  17. package/dist/.next/server/app/(application)/data/[[...query]]/page.js +4 -4
  18. package/dist/.next/server/app/(application)/data/[[...query]]/page.js.nft.json +1 -1
  19. package/dist/.next/server/app/(application)/data/[[...query]]/page_client-reference-manifest.js +1 -1
  20. package/dist/.next/server/app/(application)/evals/[id]/page.js +1 -1
  21. package/dist/.next/server/app/(application)/evals/[id]/page.js.nft.json +1 -1
  22. package/dist/.next/server/app/(application)/evals/[id]/page_client-reference-manifest.js +1 -1
  23. package/dist/.next/server/app/(application)/evals/cases/page.js +1 -1
  24. package/dist/.next/server/app/(application)/evals/cases/page.js.nft.json +1 -1
  25. package/dist/.next/server/app/(application)/evals/cases/page_client-reference-manifest.js +1 -1
  26. package/dist/.next/server/app/(application)/evals/page_client-reference-manifest.js +1 -1
  27. package/dist/.next/server/app/(application)/explorer/page_client-reference-manifest.js +1 -1
  28. package/dist/.next/server/app/(application)/keys/page_client-reference-manifest.js +1 -1
  29. package/dist/.next/server/app/(application)/page_client-reference-manifest.js +1 -1
  30. package/dist/.next/server/app/(application)/projects/[project]/page.js +1 -1
  31. package/dist/.next/server/app/(application)/projects/[project]/page.js.nft.json +1 -1
  32. package/dist/.next/server/app/(application)/projects/[project]/page_client-reference-manifest.js +1 -1
  33. package/dist/.next/server/app/(application)/projects/page.js +1 -1
  34. package/dist/.next/server/app/(application)/projects/page_client-reference-manifest.js +1 -1
  35. package/dist/.next/server/app/(application)/prompts/page.js +1 -1
  36. package/dist/.next/server/app/(application)/prompts/page_client-reference-manifest.js +1 -1
  37. package/dist/.next/server/app/(application)/roles/page_client-reference-manifest.js +1 -1
  38. package/dist/.next/server/app/(application)/token/page_client-reference-manifest.js +1 -1
  39. package/dist/.next/server/app/(application)/users/page_client-reference-manifest.js +1 -1
  40. package/dist/.next/server/app/(application)/variables/create/page_client-reference-manifest.js +1 -1
  41. package/dist/.next/server/app/(application)/variables/edit/[variable_id]/page_client-reference-manifest.js +1 -1
  42. package/dist/.next/server/app/(application)/variables/page_client-reference-manifest.js +1 -1
  43. package/dist/.next/server/app/(application)/variables/usage/[variable_id]/page_client-reference-manifest.js +1 -1
  44. package/dist/.next/server/app/(application)/workflows/page.js +1 -1
  45. package/dist/.next/server/app/(application)/workflows/page_client-reference-manifest.js +1 -1
  46. package/dist/.next/server/app/(authentication)/login/page_client-reference-manifest.js +1 -1
  47. package/dist/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  48. package/dist/.next/server/app/_not-found.html +1 -1
  49. package/dist/.next/server/app/_not-found.rsc +1 -1
  50. package/dist/.next/server/app/api/auth/[...nextauth]/route.js +2 -2
  51. package/dist/.next/server/app-paths-manifest.json +4 -4
  52. package/dist/.next/server/chunks/1025.js +1 -0
  53. package/dist/.next/server/chunks/1051.js +2 -2
  54. package/dist/.next/server/chunks/2270.js +12 -48
  55. package/dist/.next/server/chunks/3434.js +1 -1
  56. package/dist/.next/server/chunks/3503.js +1 -0
  57. package/dist/.next/server/chunks/3575.js +1 -1
  58. package/dist/.next/server/chunks/5084.js +1 -0
  59. package/dist/.next/server/chunks/5192.js +1 -1
  60. package/dist/.next/server/chunks/5485.js +1 -0
  61. package/dist/.next/server/chunks/5600.js +1 -1
  62. package/dist/.next/server/chunks/5974.js +1 -0
  63. package/dist/.next/server/chunks/6590.js +1 -1
  64. package/dist/.next/server/chunks/7471.js +1 -1
  65. package/dist/.next/server/chunks/8286.js +1 -1
  66. package/dist/.next/server/chunks/{3679.js → 9874.js} +5 -5
  67. package/dist/.next/server/middleware-manifest.json +5 -5
  68. package/dist/.next/server/pages/404.html +1 -1
  69. package/dist/.next/server/pages/500.html +1 -1
  70. package/dist/.next/server/server-reference-manifest.json +1 -1
  71. package/dist/.next/static/chunks/1685-939396dad2f8f1e0.js +2 -0
  72. package/dist/.next/static/chunks/1685-939396dad2f8f1e0.js.map +1 -0
  73. package/dist/.next/static/chunks/{4811-316807e25b634f9f.js → 192-72d6868cd891ccc6.js} +8 -8
  74. package/dist/.next/static/chunks/192-72d6868cd891ccc6.js.map +1 -0
  75. package/dist/.next/static/chunks/1957-cf44b1d31a9c7d5c.js +2 -0
  76. package/dist/.next/static/chunks/1957-cf44b1d31a9c7d5c.js.map +1 -0
  77. package/dist/.next/static/chunks/342-d9c2d6ae9f9435cb.js +2 -0
  78. package/dist/.next/static/chunks/342-d9c2d6ae9f9435cb.js.map +1 -0
  79. package/dist/.next/static/chunks/{3750-90a213a3c7cceb29.js → 3750-f45c59ef1cc79417.js} +2 -2
  80. package/dist/.next/static/chunks/3750-f45c59ef1cc79417.js.map +1 -0
  81. package/dist/.next/static/chunks/552-39155a93c527ec6d.js +2 -0
  82. package/dist/.next/static/chunks/552-39155a93c527ec6d.js.map +1 -0
  83. package/dist/.next/static/chunks/{7856-9fa733bdd6429ba8.js → 6066-65606593516b2a3a.js} +18 -18
  84. package/dist/.next/static/chunks/6066-65606593516b2a3a.js.map +1 -0
  85. package/dist/.next/static/chunks/6367-59655a85d75e19be.js +2 -0
  86. package/dist/.next/static/chunks/6367-59655a85d75e19be.js.map +1 -0
  87. package/dist/.next/static/chunks/6373-601400fab8a3bb55.js +2 -0
  88. package/dist/.next/static/chunks/6373-601400fab8a3bb55.js.map +1 -0
  89. package/dist/.next/static/chunks/8030-9c926ea4dfd3a54e.js +2 -0
  90. package/dist/.next/static/chunks/8030-9c926ea4dfd3a54e.js.map +1 -0
  91. package/dist/.next/static/chunks/{6805-792cc8008b165c07.js → 8293-0e69d89d2dac7111.js} +10 -10
  92. package/dist/.next/static/chunks/8293-0e69d89d2dac7111.js.map +1 -0
  93. package/dist/.next/static/chunks/9105-dfbce1bad8e3e8dd.js +2 -0
  94. package/dist/.next/static/chunks/9105-dfbce1bad8e3e8dd.js.map +1 -0
  95. package/dist/.next/static/chunks/9953-95900a236271a222.js +2 -0
  96. package/dist/.next/static/chunks/9953-95900a236271a222.js.map +1 -0
  97. package/dist/.next/static/chunks/app/(application)/agents/edit/[id]/page-e4a4693953329671.js +2 -0
  98. package/dist/.next/static/chunks/app/(application)/agents/edit/[id]/page-e4a4693953329671.js.map +1 -0
  99. package/dist/.next/static/chunks/app/(application)/chat/[agent]/[session]/page-7edb1c7c850f982c.js +2 -0
  100. package/dist/.next/static/chunks/app/(application)/chat/[agent]/[session]/page-7edb1c7c850f982c.js.map +1 -0
  101. package/dist/.next/static/chunks/app/(application)/chat/layout-093baa26f89338bc.js +2 -0
  102. package/dist/.next/static/chunks/app/(application)/chat/layout-093baa26f89338bc.js.map +1 -0
  103. package/dist/.next/static/chunks/app/(application)/data/[[...query]]/page-8d2b3995cacfd832.js +2 -0
  104. package/dist/.next/static/chunks/app/(application)/data/[[...query]]/page-8d2b3995cacfd832.js.map +1 -0
  105. package/dist/.next/static/chunks/app/(application)/evals/[id]/page-a7728cf9b0524489.js +2 -0
  106. package/dist/.next/static/chunks/app/(application)/evals/[id]/page-a7728cf9b0524489.js.map +1 -0
  107. package/dist/.next/static/chunks/app/(application)/evals/cases/{page-a39fef7444581565.js → page-827f50c6d1f150d0.js} +2 -2
  108. package/dist/.next/static/chunks/app/(application)/evals/cases/{page-a39fef7444581565.js.map → page-827f50c6d1f150d0.js.map} +1 -1
  109. package/dist/.next/static/chunks/app/(application)/projects/[project]/page-f04fd5291a1ef7b1.js +2 -0
  110. package/dist/.next/static/chunks/app/(application)/projects/[project]/page-f04fd5291a1ef7b1.js.map +1 -0
  111. package/dist/.next/static/chunks/app/(application)/prompts/page-2c500e9898447506.js +2 -0
  112. package/dist/.next/static/chunks/app/(application)/prompts/page-2c500e9898447506.js.map +1 -0
  113. package/dist/.next/static/chunks/app/(application)/workflows/{page-47dedb88cec600d5.js → page-e38f9456120dab69.js} +2 -2
  114. package/dist/.next/static/chunks/app/(application)/workflows/page-e38f9456120dab69.js.map +1 -0
  115. package/dist/.next/static/css/6f8c5212af8ef284.css +4 -0
  116. package/dist/.next/static/css/6f8c5212af8ef284.css.map +1 -0
  117. package/dist/.next/static/css/e3f2a16ab7676b05.css.map +1 -1
  118. package/dist/package.json +1 -0
  119. package/package.json +1 -1
  120. package/dist/.next/server/chunks/2948.js +0 -1
  121. package/dist/.next/server/chunks/38.js +0 -1
  122. package/dist/.next/server/chunks/6623.js +0 -1
  123. package/dist/.next/server/chunks/7958.js +0 -1
  124. package/dist/.next/server/chunks/8050.js +0 -1
  125. package/dist/.next/static/chunks/1685-39351b8a15bbecab.js +0 -2
  126. package/dist/.next/static/chunks/1685-39351b8a15bbecab.js.map +0 -1
  127. package/dist/.next/static/chunks/1957-899d0d6d0d9c11fd.js +0 -2
  128. package/dist/.next/static/chunks/1957-899d0d6d0d9c11fd.js.map +0 -1
  129. package/dist/.next/static/chunks/3750-90a213a3c7cceb29.js.map +0 -1
  130. package/dist/.next/static/chunks/4811-316807e25b634f9f.js.map +0 -1
  131. package/dist/.next/static/chunks/5282-68f9880f1f951f44.js +0 -2
  132. package/dist/.next/static/chunks/5282-68f9880f1f951f44.js.map +0 -1
  133. package/dist/.next/static/chunks/6367-59cef3c74213925b.js +0 -2
  134. package/dist/.next/static/chunks/6367-59cef3c74213925b.js.map +0 -1
  135. package/dist/.next/static/chunks/6373-7908bd5269f95aa3.js +0 -2
  136. package/dist/.next/static/chunks/6373-7908bd5269f95aa3.js.map +0 -1
  137. package/dist/.next/static/chunks/6805-792cc8008b165c07.js.map +0 -1
  138. package/dist/.next/static/chunks/7856-9fa733bdd6429ba8.js.map +0 -1
  139. package/dist/.next/static/chunks/8030-c1b6be46253076cb.js +0 -2
  140. package/dist/.next/static/chunks/8030-c1b6be46253076cb.js.map +0 -1
  141. package/dist/.next/static/chunks/8269-0e17dac508340ccf.js +0 -2
  142. package/dist/.next/static/chunks/8269-0e17dac508340ccf.js.map +0 -1
  143. package/dist/.next/static/chunks/9105-78d236e8399181e0.js +0 -2
  144. package/dist/.next/static/chunks/9105-78d236e8399181e0.js.map +0 -1
  145. package/dist/.next/static/chunks/9621-f81c4d7c0ecf5a67.js +0 -2
  146. package/dist/.next/static/chunks/9621-f81c4d7c0ecf5a67.js.map +0 -1
  147. package/dist/.next/static/chunks/9953-dfb5fc0e5b74ec09.js +0 -2
  148. package/dist/.next/static/chunks/9953-dfb5fc0e5b74ec09.js.map +0 -1
  149. package/dist/.next/static/chunks/app/(application)/agents/edit/[id]/page-29794b9c33d2bf7e.js +0 -2
  150. package/dist/.next/static/chunks/app/(application)/agents/edit/[id]/page-29794b9c33d2bf7e.js.map +0 -1
  151. package/dist/.next/static/chunks/app/(application)/chat/[agent]/[session]/page-57021bb06089261a.js +0 -2
  152. package/dist/.next/static/chunks/app/(application)/chat/[agent]/[session]/page-57021bb06089261a.js.map +0 -1
  153. package/dist/.next/static/chunks/app/(application)/chat/layout-42021d301fc609b6.js +0 -2
  154. package/dist/.next/static/chunks/app/(application)/chat/layout-42021d301fc609b6.js.map +0 -1
  155. package/dist/.next/static/chunks/app/(application)/data/[[...query]]/page-841b2ed48010048e.js +0 -2
  156. package/dist/.next/static/chunks/app/(application)/data/[[...query]]/page-841b2ed48010048e.js.map +0 -1
  157. package/dist/.next/static/chunks/app/(application)/evals/[id]/page-c1e7e0c81ca508c3.js +0 -2
  158. package/dist/.next/static/chunks/app/(application)/evals/[id]/page-c1e7e0c81ca508c3.js.map +0 -1
  159. package/dist/.next/static/chunks/app/(application)/projects/[project]/page-0b2d9832e5a023e7.js +0 -2
  160. package/dist/.next/static/chunks/app/(application)/projects/[project]/page-0b2d9832e5a023e7.js.map +0 -1
  161. package/dist/.next/static/chunks/app/(application)/prompts/page-d2f36ff149385efd.js +0 -2
  162. package/dist/.next/static/chunks/app/(application)/prompts/page-d2f36ff149385efd.js.map +0 -1
  163. package/dist/.next/static/chunks/app/(application)/workflows/page-47dedb88cec600d5.js.map +0 -1
  164. package/dist/.next/static/css/a181dac3df0dc7a7.css +0 -4
  165. package/dist/.next/static/css/a181dac3df0dc7a7.css.map +0 -1
  166. /package/dist/.next/static/{J23NmkaMjAJYnE0jX_kO0 → ls-syPkq9-MWp-VWWDEZJ}/_buildManifest.js +0 -0
  167. /package/dist/.next/static/{J23NmkaMjAJYnE0jX_kO0 → ls-syPkq9-MWp-VWWDEZJ}/_ssgManifest.js +0 -0
@@ -1 +0,0 @@
1
- "use strict";exports.id=6623,exports.ids=[6623],exports.modules={19753:(e,s,a)=>{a.d(s,{R:()=>Z});var i=a(10326),l=a(17577),t=a(39167),r=a(18753),n=a(42270),d=a(90772),c=a(33071),o=a(15940),x=a(79210),u=a(99440),h=a(567),m=a(75290),j=a(94893),p=a(71059),g=a(56762),b=a(98091),v=a(91468),f=a(11890),N=a(39183),y=a(34789),w=a(98181),C=a(18615),P=a(76812);function Z({queueName:e,nameGenerator:s,retryJob:a}){let{toast:Z}=(0,y.pm)(),[q,k]=(0,l.useState)(!1),[S,T]=(0,l.useState)(!1),[z,R]=(0,l.useState)(!1),[I,O]=(0,l.useState)(null),[A,D]=(0,l.useState)(null),[Q,L]=(0,l.useState)("completed"),[$,J]=(0,l.useState)(1),[M,F]=(0,l.useState)(5),{data:Y,loading:E,refetch:_}=(0,t.aM)(n.k9,{variables:{queue:e},pollInterval:5e3}),{data:G,loading:W,refetch:B,networkStatus:H}=(0,t.aM)(n.Jq,{variables:{queue:e,statusses:Q,page:$,limit:M},pollInterval:5e3}),[V,{loading:K}]=(0,r.D)(n.Wr,{onCompleted:()=>{Z({title:"Job deleted",description:"The job has been successfully deleted."}),B(),_(),O(null)},onError:e=>{Z({title:"Failed to delete job",description:e.message,variant:"destructive"})}}),[U,{loading:X}]=(0,r.D)(n.fc,{onCompleted:()=>{Z({title:"Queue paused",description:`The ${e} queue has been paused.`}),_(),k(!1)},onError:e=>{Z({title:"Failed to pause queue",description:e.message,variant:"destructive"})}}),[ee,{loading:es}]=(0,r.D)(n.iC,{onCompleted:()=>{Z({title:"Queue resumed",description:`The ${e} queue has been resumed.`}),_(),R(!1)},onError:e=>{Z({title:"Failed to resume queue",description:e.message,variant:"destructive"})}}),[ea,{loading:ei}]=(0,r.D)(n.QW,{onCompleted:()=>{Z({title:"Queue drained",description:"All waiting and delayed jobs have been removed from the queue."}),_(),B(),T(!1)},onError:e=>{Z({title:"Failed to drain queue",description:e.message,variant:"destructive"})}}),el=e=>{O(e)},et=e=>{D(e)},er=Y?.queue,en=G?.jobs||{items:[],pageInfo:{pageCount:0,itemCount:0,currentPage:1,hasPreviousPage:!1,hasNextPage:!1}},ed=e=>i.jsx(h.C,{variant:"outline",className:{active:"bg-blue-100 text-blue-800 border-blue-200",waiting:"bg-yellow-100 text-yellow-800 border-yellow-200",completed:"bg-green-100 text-green-800 border-green-200",failed:"bg-red-100 text-red-800 border-red-200",delayed:"bg-orange-100 text-orange-800 border-orange-200",paused:"bg-gray-100 text-gray-800 border-gray-200"}[e]||"bg-gray-100 text-gray-800",children:e});return E&&W?i.jsx("div",{className:"space-y-4",children:i.jsx(c.Zb,{children:i.jsx(c.aY,{className:"pt-6",children:i.jsx("div",{className:"flex items-center justify-center py-8",children:i.jsx(m.Z,{className:"h-6 w-6 animate-spin"})})})})}):(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(c.Zb,{children:[i.jsx(c.Ol,{children:(0,i.jsxs)("div",{className:"flex items-center justify-between",children:[i.jsx("div",{className:"flex items-center gap-3",children:(0,i.jsxs)("div",{children:[(0,i.jsxs)(c.ll,{children:["Queue: ",e]}),(0,i.jsxs)(c.SZ,{children:["Manage the ",e," job queue and view all jobs."]})]})}),er&&(0,i.jsxs)("div",{className:"flex gap-2",children:[(0,i.jsxs)(d.z,{variant:"outline",size:"sm",onClick:()=>er?.isPaused?R(!0):k(!0),disabled:X||es,children:[er?.isPaused?i.jsx(j.Z,{className:"mr-2 h-4 w-4"}):i.jsx(p.Z,{className:"mr-2 h-4 w-4"}),er?.isPaused?"Resume queue":"Pause queue"]}),(0,i.jsxs)(d.z,{variant:"outline",size:"sm",onClick:()=>T(!0),disabled:ei,children:[i.jsx(g.Z,{className:"mr-2 h-4 w-4"}),"Drain queue"]})]})]})}),(0,i.jsxs)(c.aY,{className:"space-y-6",children:[er&&(0,i.jsxs)("div",{className:"flex items-center gap-8 p-4 bg-muted/50 rounded-lg",children:[(0,i.jsxs)("div",{className:"flex items-center gap-2",children:[i.jsx("div",{className:"text-sm text-muted-foreground",children:"Status:"}),i.jsx("div",{children:er.isPaused?i.jsx(h.C,{variant:"outline",className:"bg-gray-100 text-gray-800",children:"Paused"}):er.isMaxed?i.jsx(h.C,{variant:"outline",className:"bg-red-100 text-red-800",children:"Maxed"}):i.jsx(h.C,{variant:"outline",className:"bg-green-100 text-green-800",children:"Active"})})]}),(0,i.jsxs)("div",{className:"flex items-center gap-2",children:[i.jsx("div",{className:"text-sm text-muted-foreground",children:"Concurrency:"}),i.jsx("div",{className:"font-semibold",children:er.concurrency})]}),(0,i.jsxs)("div",{className:"flex items-center gap-2",children:[i.jsx("div",{className:"text-sm text-muted-foreground",children:"Rate Limit:"}),i.jsx("div",{className:"font-semibold",children:er.ratelimit||"None"})]}),i.jsx(x.mQ,{value:Q,onValueChange:e=>L(e),className:"w-auto",children:(0,i.jsxs)(x.dr,{children:[(0,i.jsxs)(x.SP,{value:"active",className:"gap-1.5",children:[i.jsx("span",{children:"Active"}),i.jsx(h.C,{variant:"secondary",className:"ml-1 bg-blue-100 text-blue-600 border-blue-200",children:er.jobs?.active||0})]}),(0,i.jsxs)(x.SP,{value:"waiting",className:"gap-1.5",children:[i.jsx("span",{children:"Waiting"}),i.jsx(h.C,{variant:"secondary",className:"ml-1 bg-yellow-100 text-yellow-600 border-yellow-200",children:er.jobs?.waiting||0})]}),(0,i.jsxs)(x.SP,{value:"failed",className:"gap-1.5",children:[i.jsx("span",{children:"Failed"}),i.jsx(h.C,{variant:"secondary",className:"ml-1 bg-red-100 text-red-600 border-red-200",children:er.jobs?.failed||0})]}),(0,i.jsxs)(x.SP,{value:"completed",className:"gap-1.5",children:[i.jsx("span",{children:"Completed"}),i.jsx(h.C,{variant:"secondary",className:"ml-1 bg-green-100 text-green-600 border-green-200",children:er.jobs?.completed||0})]})]})})]}),(0,i.jsxs)("div",{children:[(0,i.jsxs)("div",{className:"mb-3 flex items-center justify-between gap-2",children:[(0,i.jsxs)("div",{children:[i.jsx("h3",{className:"text-sm font-semibold",children:"Queue Jobs"}),(0,i.jsxs)("p",{className:"text-xs text-muted-foreground",children:["All jobs currently in the ",e," queue"]})]}),(0,i.jsxs)(h.C,{variant:"outline",children:["Auto Refresh: ",i.jsx(m.Z,{className:"h-4 w-4 animate-spin text-muted-foreground ml-1"})]})]}),(0,i.jsxs)("div",{className:"border rounded-lg",children:[W?i.jsx("div",{className:"flex items-center justify-center py-8",children:i.jsx(m.Z,{className:"h-6 w-6 animate-spin"})}):en.items?.length===0?i.jsx("div",{className:"text-center pt-8 text-muted-foreground",children:"No jobs in queue"}):(0,i.jsxs)(o.iA,{children:[i.jsx(o.xD,{children:(0,i.jsxs)(o.SC,{children:[i.jsx(o.ss,{children:"Name"}),i.jsx(o.ss,{children:"State"}),i.jsx(o.ss,{children:"Timestamp"}),i.jsx(o.ss,{children:"Inputs"}),i.jsx(o.ss,{children:"Outputs"}),i.jsx(o.ss,{className:"text-right",children:"Actions"})]})}),i.jsx(o.RM,{children:en.items?.map((e,a)=>i.jsxs(o.SC,{children:[i.jsx(o.pj,{className:"font-medium max-w-[200px] truncate",children:s(e)}),i.jsx(o.pj,{children:ed(e.state)}),i.jsx(o.pj,{children:e.timestamp?w.WU(new Date(e.timestamp),"MMM d, yyyy HH:mm:ss"):"N/A"}),i.jsx(o.pj,{children:e.data?i.jsx("div",{className:"text-xs max-w-[200px] truncate",children:i.jsx(C.J,{text:JSON.stringify(e.data)})}):null}),i.jsx(o.pj,{children:e.failedReason?i.jsx("div",{className:"text-xs text-red-600 max-w-[200px] truncate",children:i.jsx(C.J,{text:"Error: "+e.failedReason})}):i.jsx("div",{className:"text-xs text-muted-foreground max-w-[200px] truncate",children:i.jsx(C.J,{text:JSON.stringify(e.returnvalue)})})}),i.jsxs(o.pj,{className:"text-right",children:["active"!==e.state&&i.jsx(d.z,{variant:"ghost",size:"sm",onClick:()=>el(e),disabled:K,children:i.jsx(b.Z,{className:"h-4 w-4 text-red-600"})}),"failed"===e.state&&i.jsxs(d.z,{variant:"ghost",size:"sm",onClick:()=>et(e),children:[i.jsx(v.Z,{className:"h-4 w-4 text-blue-600"}),"Retry"]})]})]},a))})]}),(0,i.jsxs)("div",{className:"flex items-center justify-between px-2 pb-2",children:[(0,i.jsxs)("div",{className:"flex-1 text-sm text-muted-foreground",children:["(",en?.pageInfo?.itemCount||0," total"," ","items)."]}),i.jsx("div",{className:"flex items-center space-x-6 lg:space-x-8",children:(0,i.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,i.jsxs)(d.z,{variant:"outline",className:"hidden size-8 p-0 lg:flex",onClick:()=>{J(1),B()},disabled:!en?.pageInfo?.hasPreviousPage,children:[i.jsx("span",{className:"sr-only",children:"Go to first page"}),i.jsx(P.kRt,{className:"size-4"})]}),(0,i.jsxs)(d.z,{variant:"outline",className:"size-8 p-0",onClick:()=>{console.log("itemsData.data?.pageInfo.hasPreviousPage",en?.pageInfo?.hasPreviousPage),J(en?.pageInfo?.hasPreviousPage?en?.pageInfo?.currentPage-1:1),B()},disabled:!en?.pageInfo?.hasPreviousPage,children:[i.jsx("span",{className:"sr-only",children:"Go to previous page"}),i.jsx(f.Z,{className:"size-4"})]}),(0,i.jsxs)(d.z,{variant:"outline",className:"size-8 p-0",onClick:()=>{J(en?.pageInfo?.hasNextPage?en?.pageInfo?.currentPage+1:1),B()},disabled:!en?.pageInfo.hasNextPage,children:[i.jsx("span",{className:"sr-only",children:"Go to next page"}),i.jsx(N.Z,{className:"size-4"})]})]})})]})]})]})]})]}),i.jsx(u.aR,{open:!!I,onOpenChange:e=>!e&&O(null),children:(0,i.jsxs)(u._T,{children:[(0,i.jsxs)(u.fY,{children:[i.jsx(u.f$,{children:"Delete Job?"}),(0,i.jsxs)(u.yT,{children:['Are you sure you want to delete the job "',I?.name,'"? This action cannot be undone.']})]}),(0,i.jsxs)(u.xo,{children:[i.jsx(u.le,{children:"Cancel"}),(0,i.jsxs)(u.OL,{onClick:()=>{if(!I?.id){Z({title:"Failed to delete job",description:"The job has no ID.",variant:"destructive"});return}I&&V({variables:{queue:e,id:I.id}})},disabled:K,children:[K&&i.jsx(m.Z,{className:"mr-2 h-4 w-4 animate-spin"}),"Delete"]})]})]})}),i.jsx(u.aR,{open:!!A,onOpenChange:e=>!e&&D(null),children:(0,i.jsxs)(u._T,{children:[(0,i.jsxs)(u.fY,{children:[i.jsx(u.f$,{children:"Retry Job?"}),(0,i.jsxs)(u.yT,{children:['Are you sure you want to retry the job "',A?.name,'"? This will schedule a new job with the same data.']})]}),(0,i.jsxs)(u.xo,{children:[i.jsx(u.le,{children:"Cancel"}),i.jsx(u.OL,{onClick:()=>{A&&a(A)},disabled:K,children:"Retry"})]})]})}),i.jsx(u.aR,{open:q,onOpenChange:k,children:(0,i.jsxs)(u._T,{children:[(0,i.jsxs)(u.fY,{children:[i.jsx(u.f$,{children:"Pause Queue?"}),(0,i.jsxs)(u.yT,{children:["Are you sure you want to pause the ",e," queue? No jobs will be processed until the queue is resumed."]})]}),(0,i.jsxs)(u.xo,{children:[i.jsx(u.le,{children:"Cancel"}),(0,i.jsxs)(u.OL,{onClick:()=>{U({variables:{queue:e}})},disabled:X,children:[X&&i.jsx(m.Z,{className:"mr-2 h-4 w-4 animate-spin"}),"Pause Queue"]})]})]})}),i.jsx(u.aR,{open:z,onOpenChange:R,children:(0,i.jsxs)(u._T,{children:[(0,i.jsxs)(u.fY,{children:[i.jsx(u.f$,{children:"Resume Queue?"}),(0,i.jsxs)(u.yT,{children:["Are you sure you want to resume the ",e," queue?."]})]}),(0,i.jsxs)(u.xo,{children:[i.jsx(u.le,{children:"Cancel"}),(0,i.jsxs)(u.OL,{onClick:()=>{ee({variables:{queue:e}})},disabled:es,children:[es&&i.jsx(m.Z,{className:"mr-2 h-4 w-4 animate-spin"}),"Resume Queue"]})]})]})}),i.jsx(u.aR,{open:S,onOpenChange:T,children:(0,i.jsxs)(u._T,{children:[(0,i.jsxs)(u.fY,{children:[i.jsx(u.f$,{children:"Drain Queue?"}),(0,i.jsxs)(u.yT,{children:["Are you sure you want to drain the ",e," queue? This will remove all jobs that are waiting or delayed, but not active, waiting-children, completed or failed. This action cannot be undone."]})]}),(0,i.jsxs)(u.xo,{children:[i.jsx(u.le,{children:"Cancel"}),(0,i.jsxs)(u.OL,{onClick:()=>{ea({variables:{queue:e}})},disabled:ei,className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:[ei&&i.jsx(m.Z,{className:"mr-2 h-4 w-4 animate-spin"}),"Drain Queue"]})]})]})})]})}},57004:(e,s,a)=>{a.a(e,async(e,i)=>{try{a.d(s,{G:()=>g});var l=a(10326),t=a(48644),r=a(93801),n=a(45747),d=a(17577),c=a(94966),o=a(12533),x=a(12428),u=a(47355),h=a(62288),m=a(34789),j=a(77863),p=e([t,r,n]);function g({className:e=null,code:s,language:a,slice:i=200}){let{toast:t}=(0,m.pm)(),[r,n]=(0,d.useState)(null);return(0,l.jsxs)(h.Vq,{children:[l.jsx(h.hg,{asChild:!0,children:r?.length&&l.jsx(c.Z,{className:(0,j.cn)("cursor-pointer",e),showLineNumbers:!0,wrapLines:!0,lineProps:{style:{wordBreak:"break-all",whiteSpace:"pre-wrap"}},language:a||"plaintext",style:u.Z,children:`${r?.slice(0,i||200)} ${r?.length>(i||200)?"...":""}`})}),l.jsx(h.cZ,{className:"sm:max-w-[800px] overflow-hidden max-h-[500px] overflow-y-scroll",children:(0,l.jsxs)(h.fK,{children:[l.jsx(h.$N,{children:"Code"}),l.jsx("div",{className:"cursor-copy",onClick:async()=>{await navigator.clipboard.writeText(r??""),t({title:"Copied to clipboard"})},children:l.jsx(c.Z,{className:(0,j.cn)(e),showLineNumbers:!0,wrapLines:!0,lineProps:{style:{wordBreak:"break-all",whiteSpace:"pre-wrap"}},language:a||"plaintext",style:u.Z,children:r??""})})]})})]})}[t,r,n]=p.then?(await p)():p,c.Z.registerLanguage("json",x.Z),c.Z.registerLanguage("javascript",o.Z),i()}catch(e){i(e)}})},53313:(e,s,a)=>{a.d(s,{X:()=>d});var i=a(10326),l=a(13635),t=a(32933),r=a(17577),n=a(77863);let d=r.forwardRef(({className:e,...s},a)=>i.jsx(l.fC,{ref:a,className:(0,n.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",e),...s,children:i.jsx(l.z$,{className:(0,n.cn)("flex items-center justify-center text-current"),children:i.jsx(t.Z,{className:"size-4"})})}));d.displayName=l.fC.displayName}};
@@ -1 +0,0 @@
1
- "use strict";exports.id=7958,exports.ids=[7958],exports.modules={85060:(e,t,a)=>{a.d(t,{F:()=>k});var s=a(10326),r=a(17577),n=a(39167),l=a(18753),d=a(18019),o=a(40617),i=a(1572),c=a(83855),m=a(87888),u=a(75290),f=a(62288),p=a(90772),x=a(54432),g=a(31048),h=a(87673),N=a(42270),b=a(34789),y=a(79210),v=a(33071),j=a(567),w=a(65685),C=a(77961),R=a(87599),T=a(15728);function k({open:e,onClose:t,evalSetId:a,onSuccess:k,testCase:D}){let{toast:S}=(0,b.pm)(),M=!!D,{data:O}=(0,n.aM)(N.Ul,{variables:{page:1,limit:100}}),{regularTools:_,agentTools:A,knowledgeSourceTools:F}=(0,r.useMemo)(()=>{let e=O?.tools?.items||[];return console.log("tools",e),{regularTools:e.filter(e=>"function"===e.type),agentTools:e.filter(e=>"agent"===e.type),knowledgeSourceTools:e.filter(e=>"context"===e.type)}},[O]),[E,Z]=(0,r.useState)(""),[U,z]=(0,r.useState)(""),[V,I]=(0,r.useState)(""),[P,$]=(0,r.useState)([]),[L,W]=(0,r.useState)(""),[q,Y]=(0,r.useState)(null),[B,H]=(0,r.useState)([]),[K,G]=(0,r.useState)([]),[J,Q]=(0,r.useState)([]),[X,ee]=(0,r.useState)([]),[et,ea]=(0,r.useState)(""),[es,er]=(0,r.useState)(""),[en,el]=(0,r.useState)(""),[ed,{loading:eo}]=(0,l.D)(N.hx,{onCompleted:()=>{S({title:"Test case created",description:"The test case has been successfully created."}),k()},onError:e=>{S({title:"Failed to create test case",description:e.message,variant:"destructive"})}}),[ei,{loading:ec}]=(0,l.D)(N.Mh,{onCompleted:()=>{S({title:"Test case updated",description:"The test case has been successfully updated."}),k()},onError:e=>{S({title:"Failed to update test case",description:e.message,variant:"destructive"})}}),em=()=>{if(!L.trim()&&0===B.length)return;let e=[];L.trim()&&e.push({type:"text",text:L.trim()}),B.length>0&&e.push(...B),$([...P,{id:`msg-${Date.now()}`,role:"user",parts:e},{id:`msg-${Date.now()}`,role:"assistant",metadata:{type:"placeholder"},parts:[{type:"text",text:"\uD83D\uDCAC Placeholder, generated agent response will be added here when the test case is run..."}]}]),W(""),Y(null),H([])},eu=eo||ec;return s.jsx(f.Vq,{open:e,onOpenChange:t,children:(0,s.jsxs)(f.cZ,{className:"max-w-4xl max-h-[90vh] overflow-hidden flex flex-col",children:[(0,s.jsxs)(f.fK,{children:[(0,s.jsxs)(f.$N,{children:[M?"Edit Test Case":"Create Test Case"," ",a?`for Eval Set: ${a}`:""]}),s.jsx(f.Be,{children:M?"Update the test case details.":"Create a new test case with conversation inputs and expected outputs."})]}),(0,s.jsxs)("form",{onSubmit:e=>{if(e.preventDefault(),!E.trim()||!V.trim()||0===P.length){S({title:"Validation error",description:"Name, at least one input message, and expected output are required.",variant:"destructive"});return}let t={name:E.trim(),description:U.trim()||null,inputs:P,expected_output:V.trim(),expected_tools:K.length>0?K:null,expected_knowledge_sources:J.length>0?J:null,expected_agent_tools:X.length>0?X:null,...a?{eval_set_id:a}:{}};M?ei({variables:{id:D.id,data:t}}):ed({variables:{data:t}})},className:"flex-1 overflow-hidden flex flex-col",children:[(0,s.jsxs)(y.mQ,{defaultValue:"basic",className:"flex-1 overflow-hidden flex flex-col",children:[(0,s.jsxs)(y.dr,{className:"grid w-full grid-cols-2",children:[(0,s.jsxs)(y.SP,{value:"basic",className:"gap-2",children:[s.jsx(d.Z,{className:"h-4 w-4"}),"Basic Info"]}),(0,s.jsxs)(y.SP,{value:"conversation",className:"gap-2",children:[s.jsx(o.Z,{className:"h-4 w-4"}),"Conversation"]})]}),(0,s.jsxs)(w.x,{className:"flex-1",children:[s.jsx(y.nU,{value:"basic",className:"space-y-4 p-1 mt-4",children:(0,s.jsxs)("div",{className:"grid gap-5",children:[(0,s.jsxs)("div",{className:"grid gap-2",children:[s.jsx(g._,{htmlFor:"name",children:"Name *"}),s.jsx(x.I,{id:"name",placeholder:"e.g., Customer Support - Refund Request",value:E,onChange:e=>Z(e.target.value),disabled:eu,required:!0})]}),(0,s.jsxs)("div",{className:"grid gap-2",children:[s.jsx(g._,{htmlFor:"description",children:"Description"}),s.jsx(h.g,{id:"description",placeholder:"Describe what this test case evaluates...",value:U,onChange:e=>z(e.target.value),disabled:eu,rows:3})]}),(0,s.jsxs)("div",{className:"grid gap-2",children:[s.jsx(g._,{htmlFor:"expectedOutput",children:"Expected Output *"}),s.jsx(h.g,{id:"expectedOutput",placeholder:"Describe the expected final output (e.g., 'A JSON object containing refund details', 'An empathetic response offering alternatives')",value:V,onChange:e=>I(e.target.value),disabled:eu,rows:4,required:!0}),s.jsx("p",{className:"text-xs text-muted-foreground",children:"This can be an exact expected response or a description of what the output should contain."})]})]})}),s.jsx(y.nU,{value:"conversation",className:"space-y-4 p-1 mt-4",children:(0,s.jsxs)(v.Zb,{children:[s.jsx(v.Ol,{className:"pb-3",children:s.jsx("div",{className:"flex items-start justify-between",children:(0,s.jsxs)("div",{children:[(0,s.jsxs)(v.ll,{className:"text-sm flex items-center gap-2",children:[s.jsx(o.Z,{className:"h-4 w-4"}),"Conversation Flow",P.length>0&&(0,s.jsxs)(j.C,{variant:"secondary",className:"ml-2",children:[P.length," ",1===P.length?"message":"messages"]})]}),s.jsx(v.SZ,{className:"mt-1.5",children:"Add user messages in order. The agent will run through this conversation flow and respond between each message automatically."})]})})}),(0,s.jsxs)(v.aY,{className:"space-y-6",children:[P?.length===0?(0,s.jsxs)("div",{className:"flex flex-col items-center justify-center py-12 px-4 text-center border-2 border-dashed border-muted rounded-lg",children:[s.jsx(i.Z,{className:"h-12 w-12 text-muted-foreground/50 mb-4"}),s.jsx("h3",{className:"font-semibold text-lg mb-2",children:"No messages yet"}),s.jsx("p",{className:"text-sm text-muted-foreground max-w-sm",children:"Start building your test conversation by adding user messages below."})]}):s.jsx(T.ri,{className:"max-h-[350px] overflow-y-auto border rounded-lg bg-muted/30 transition-all duration-300 ease-in-out",children:s.jsx(T.iG,{className:"px-6 py-4",children:s.jsx("div",{className:"animate-in fade-in duration-500",children:s.jsx(R.K,{messages:P,config:{marginTopFirstMessage:"mt-0",customAssistantClassnames:"bg-secondary/50 rounded-lg px-3 py-1 border-l-2 border-primary/30"},status:"ready",showActions:!1,writeAccess:!1})})})}),(0,s.jsxs)("div",{className:"space-y-3 pt-2 border-t",children:[s.jsx(g._,{htmlFor:"currentInput",className:"text-sm font-semibold",children:"Add User Message"}),(0,s.jsxs)("div",{className:"space-y-3",children:[s.jsx(h.g,{id:"currentInput",placeholder:"Type the user's message...",value:L,onChange:e=>W(e.target.value),disabled:eu,rows:2,onKeyDown:e=>{"Enter"!==e.key||e.shiftKey||(e.preventDefault(),em())}}),(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[s.jsx(C.ZP,{id:"test-case-files",selectionLimit:10,allowedFileTypes:[".png",".jpg",".jpeg",".gif",".webp",".pdf",".docx",".xlsx",".xls",".csv",".pptx",".ppt",".mp3",".wav",".m4a",".mp4",".mpeg"],dependencies:[],onConfirm:e=>{Y(e)}}),(0,s.jsxs)(p.z,{type:"button",variant:"outline",onClick:em,disabled:eu||!L.trim()&&0===B.length,className:"ml-auto",size:"default",children:[s.jsx(c.Z,{className:"h-4 w-4 mr-2"}),"Add Message"]})]}),q&&q.length>0&&(0,s.jsxs)(s.Fragment,{children:[s.jsx("div",{className:"grid grid-cols-3 gap-2",children:q.map(e=>s.jsx(C.jU,{s3Key:e,disabled:!0,active:!1,onRemove:()=>{Y(q?.filter(t=>t!==e))}}))}),(0,s.jsxs)("div",{className:"flex items-start gap-2 p-3 bg-amber-500/10 border border-amber-500/20 rounded-lg",children:[s.jsx(m.Z,{className:"h-4 w-4 text-amber-600 dark:text-amber-500 mt-0.5 flex-shrink-0"}),(0,s.jsxs)("p",{className:"text-xs text-amber-900 dark:text-amber-200",children:[s.jsx("strong",{children:"Note:"})," When running this test case, ensure the selected agent supports the file types you've attached here (images, documents, audio, etc.)."]})]})]})]}),s.jsx("p",{className:"text-xs text-muted-foreground",children:"Press Enter to add, Shift+Enter for new line. You can attach files to messages."})]})]})]})})]})]}),(0,s.jsxs)(f.cN,{className:"mt-4 gap-2",children:[s.jsx(p.z,{type:"button",variant:"outline",onClick:t,disabled:eu,children:"Cancel"}),(0,s.jsxs)(p.z,{type:"submit",disabled:eu||!E.trim()||!V.trim()||0===P.length,className:"shadow-sm hover:shadow-md transition-all",children:[eu&&s.jsx(u.Z,{className:"mr-2 h-4 w-4 animate-spin"}),M?"Update Test Case":"Create Test Case"]})]})]})]})})}},99440:(e,t,a)=>{a.d(t,{OL:()=>g,_T:()=>m,aR:()=>o,f$:()=>p,fY:()=>u,le:()=>h,xo:()=>f,yT:()=>x});var s=a(10326),r=a(12194),n=a(17577),l=a(90772),d=a(77863);let o=r.fC;r.xz;let i=r.h_,c=n.forwardRef(({className:e,...t},a)=>s.jsx(r.aV,{className:(0,d.cn)("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",e),...t,ref:a}));c.displayName=r.aV.displayName;let m=n.forwardRef(({className:e,...t},a)=>(0,s.jsxs)(i,{children:[s.jsx(c,{}),s.jsx(r.VY,{ref:a,className:(0,d.cn)("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",e),...t})]}));m.displayName=r.VY.displayName;let u=({className:e,...t})=>s.jsx("div",{className:(0,d.cn)("flex flex-col space-y-2 text-center sm:text-left",e),...t});u.displayName="AlertDialogHeader";let f=({className:e,...t})=>s.jsx("div",{className:(0,d.cn)("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",e),...t});f.displayName="AlertDialogFooter";let p=n.forwardRef(({className:e,...t},a)=>s.jsx(r.Dx,{ref:a,className:(0,d.cn)("text-lg font-semibold",e),...t}));p.displayName=r.Dx.displayName;let x=n.forwardRef(({className:e,...t},a)=>s.jsx(r.dk,{ref:a,className:(0,d.cn)("text-sm text-muted-foreground",e),...t}));x.displayName=r.dk.displayName;let g=n.forwardRef(({className:e,...t},a)=>s.jsx(r.aU,{ref:a,className:(0,d.cn)((0,l.d)(),e),...t}));g.displayName=r.aU.displayName;let h=n.forwardRef(({className:e,...t},a)=>s.jsx(r.$j,{ref:a,className:(0,d.cn)((0,l.d)({variant:"outline"}),"mt-2 sm:mt-0",e),...t}));h.displayName=r.$j.displayName},567:(e,t,a)=>{a.d(t,{C:()=>d});var s=a(10326),r=a(79360);a(17577);var n=a(77863);let l=(0,r.j)("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",outline:"text-foreground"}},defaultVariants:{variant:"default"}});function d({className:e,variant:t,...a}){return s.jsx("div",{className:(0,n.cn)(l({variant:t}),e),...a})}},33071:(e,t,a)=>{a.d(t,{Ol:()=>d,SZ:()=>i,Zb:()=>l,aY:()=>c,eW:()=>m,ll:()=>o});var s=a(10326),r=a(17577),n=a(77863);let l=r.forwardRef(({className:e,...t},a)=>s.jsx("div",{ref:a,className:(0,n.cn)("rounded-lg border bg-card text-card-foreground shadow-sm",e),...t}));l.displayName="Card";let d=r.forwardRef(({className:e,...t},a)=>s.jsx("div",{ref:a,className:(0,n.cn)("flex flex-col space-y-1.5 p-6",e),...t}));d.displayName="CardHeader";let o=r.forwardRef(({className:e,...t},a)=>s.jsx("h3",{ref:a,className:(0,n.cn)("text-2xl font-semibold leading-none tracking-tight",e),...t}));o.displayName="CardTitle";let i=r.forwardRef(({className:e,...t},a)=>s.jsx("p",{ref:a,className:(0,n.cn)("text-sm text-muted-foreground",e),...t}));i.displayName="CardDescription";let c=r.forwardRef(({className:e,...t},a)=>s.jsx("div",{ref:a,className:(0,n.cn)("p-6 pt-0",e),...t}));c.displayName="CardContent";let m=r.forwardRef(({className:e,...t},a)=>s.jsx("div",{ref:a,className:(0,n.cn)("flex items-center p-6 pt-0",e),...t}));m.displayName="CardFooter"},62288:(e,t,a)=>{a.d(t,{$N:()=>x,Be:()=>g,Vq:()=>o,cN:()=>p,cZ:()=>u,fK:()=>f,hg:()=>i});var s=a(10326),r=a(98986),n=a(94019),l=a(17577),d=a(77863);let o=r.fC,i=r.xz,c=r.h_;r.x8;let m=l.forwardRef(({className:e,...t},a)=>s.jsx(r.aV,{ref:a,className:(0,d.cn)("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",e),...t}));m.displayName=r.aV.displayName;let u=l.forwardRef(({className:e,children:t,...a},l)=>(0,s.jsxs)(c,{children:[s.jsx(m,{}),(0,s.jsxs)(r.VY,{ref:l,className:(0,d.cn)("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",e),...a,children:[t,(0,s.jsxs)(r.x8,{className:"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground",children:[s.jsx(n.Z,{className:"size-4"}),s.jsx("span",{className:"sr-only",children:"Close"})]})]})]}));u.displayName=r.VY.displayName;let f=({className:e,...t})=>s.jsx("div",{className:(0,d.cn)("flex flex-col space-y-1.5 text-center sm:text-left",e),...t});f.displayName="DialogHeader";let p=({className:e,...t})=>s.jsx("div",{className:(0,d.cn)("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",e),...t});p.displayName="DialogFooter";let x=l.forwardRef(({className:e,...t},a)=>s.jsx(r.Dx,{ref:a,className:(0,d.cn)("text-lg font-semibold leading-none tracking-tight",e),...t}));x.displayName=r.Dx.displayName;let g=l.forwardRef(({className:e,...t},a)=>s.jsx(r.dk,{ref:a,className:(0,d.cn)("text-sm text-muted-foreground",e),...t}));g.displayName=r.dk.displayName},31048:(e,t,a)=>{a.d(t,{_:()=>i});var s=a(10326),r=a(34478),n=a(79360),l=a(17577),d=a(77863);let o=(0,n.j)("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"),i=l.forwardRef(({className:e,...t},a)=>s.jsx(r.f,{ref:a,className:(0,d.cn)(o(),e),...t}));i.displayName=r.f.displayName},65685:(e,t,a)=>{a.d(t,{B:()=>o,x:()=>d});var s=a(10326),r=a(9261),n=a(17577),l=a(77863);let d=n.forwardRef(({className:e,children:t,...a},n)=>(0,s.jsxs)(r.fC,{ref:n,className:(0,l.cn)("relative overflow-hidden",e),...a,children:[s.jsx(r.l_,{className:"size-full rounded-[inherit]",children:t}),s.jsx(o,{}),s.jsx(r.Ns,{})]}));d.displayName=r.fC.displayName;let o=n.forwardRef(({className:e,orientation:t="vertical",...a},n)=>s.jsx(r.gb,{ref:n,orientation:t,className:(0,l.cn)("flex touch-none select-none transition-colors","vertical"===t&&"h-full w-2.5 border-l border-l-transparent p-[1px]","horizontal"===t&&"h-2.5 flex-col border-t border-t-transparent p-[1px]",e),...a,children:s.jsx(r.q4,{className:"relative flex-1 rounded-full bg-border"})}));o.displayName=r.gb.displayName},15940:(e,t,a)=>{a.d(t,{RM:()=>o,Rn:()=>u,SC:()=>i,iA:()=>l,pj:()=>m,ss:()=>c,xD:()=>d});var s=a(10326),r=a(17577),n=a(77863);let l=r.forwardRef(({className:e,...t},a)=>s.jsx("div",{className:"relative w-full overflow-auto",children:s.jsx("table",{ref:a,className:(0,n.cn)("w-full caption-bottom text-sm",e),...t})}));l.displayName="Table";let d=r.forwardRef(({className:e,...t},a)=>s.jsx("thead",{ref:a,className:(0,n.cn)("[&_tr]:border-b",e),...t}));d.displayName="TableHeader";let o=r.forwardRef(({className:e,...t},a)=>s.jsx("tbody",{ref:a,className:(0,n.cn)("[&_tr:last-child]:border-0",e),...t}));o.displayName="TableBody",r.forwardRef(({className:e,...t},a)=>s.jsx("tfoot",{ref:a,className:(0,n.cn)("border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",e),...t})).displayName="TableFooter";let i=r.forwardRef(({className:e,...t},a)=>s.jsx("tr",{ref:a,className:(0,n.cn)("border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted",e),...t}));i.displayName="TableRow";let c=r.forwardRef(({className:e,...t},a)=>s.jsx("th",{ref:a,className:(0,n.cn)("h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0 [&:has([role=checkbox])]:w-[40px]",e),...t}));c.displayName="TableHead";let m=r.forwardRef(({className:e,...t},a)=>s.jsx("td",{ref:a,className:(0,n.cn)("p-4 align-middle [&:has([role=checkbox])]:pr-0 [&:has([role=checkbox])]:w-[40px]",e),...t}));m.displayName="TableCell";let u=r.forwardRef(({className:e,...t},a)=>s.jsx("caption",{ref:a,className:(0,n.cn)("mt-4 text-sm text-muted-foreground",e),...t}));u.displayName="TableCaption"},87673:(e,t,a)=>{a.d(t,{g:()=>l});var s=a(10326),r=a(17577),n=a(77863);let l=r.forwardRef(({className:e,...t},a)=>s.jsx("textarea",{className:(0,n.cn)("flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",e),ref:a,...t}));l.displayName="Textarea"},18019:(e,t,a)=>{a.d(t,{Z:()=>s});let s=(0,a(76557).Z)("Info",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]])},75290:(e,t,a)=>{a.d(t,{Z:()=>s});let s=(0,a(76557).Z)("Loader2",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]])},98091:(e,t,a)=>{a.d(t,{Z:()=>s});let s=(0,a(76557).Z)("Trash2",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}],["line",{x1:"10",x2:"10",y1:"11",y2:"17",key:"1uufr5"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17",key:"xtxkd"}]])},35663:(e,t,a)=>{a.d(t,{zF:()=>N,Fw:()=>j,wy:()=>y,fC:()=>R});var s=a(17577),r=("undefined"!=typeof window&&window.document&&window.document.createElement,a(93095)),n=a(52067),l=a(65819),d=a(48051),o=a(45226),i=e=>{let{present:t,children:a}=e,r=function(e){var t,a;let[r,n]=s.useState(),d=s.useRef(null),o=s.useRef(e),i=s.useRef("none"),[m,u]=(t=e?"mounted":"unmounted",a={mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}},s.useReducer((e,t)=>a[e][t]??e,t));return s.useEffect(()=>{let e=c(d.current);i.current="mounted"===m?e:"none"},[m]),(0,l.b)(()=>{let t=d.current,a=o.current;if(a!==e){let s=i.current,r=c(t);e?u("MOUNT"):"none"===r||t?.display==="none"?u("UNMOUNT"):a&&s!==r?u("ANIMATION_OUT"):u("UNMOUNT"),o.current=e}},[e,u]),(0,l.b)(()=>{if(r){let e;let t=r.ownerDocument.defaultView??window,a=a=>{let s=c(d.current).includes(CSS.escape(a.animationName));if(a.target===r&&s&&(u("ANIMATION_END"),!o.current)){let a=r.style.animationFillMode;r.style.animationFillMode="forwards",e=t.setTimeout(()=>{"forwards"===r.style.animationFillMode&&(r.style.animationFillMode=a)})}},s=e=>{e.target===r&&(i.current=c(d.current))};return r.addEventListener("animationstart",s),r.addEventListener("animationcancel",a),r.addEventListener("animationend",a),()=>{t.clearTimeout(e),r.removeEventListener("animationstart",s),r.removeEventListener("animationcancel",a),r.removeEventListener("animationend",a)}}u("ANIMATION_END")},[r,u]),{isPresent:["mounted","unmountSuspended"].includes(m),ref:s.useCallback(e=>{d.current=e?getComputedStyle(e):null,n(e)},[])}}(t),n="function"==typeof a?a({present:r.isPresent}):s.Children.only(a),o=(0,d.e)(r.ref,function(e){let t=Object.getOwnPropertyDescriptor(e.props,"ref")?.get,a=t&&"isReactWarning"in t&&t.isReactWarning;return a?e.ref:(a=(t=Object.getOwnPropertyDescriptor(e,"ref")?.get)&&"isReactWarning"in t&&t.isReactWarning)?e.props.ref:e.props.ref||e.ref}(n));return"function"==typeof a||r.isPresent?s.cloneElement(n,{ref:o}):null};function c(e){return e?.animationName||"none"}i.displayName="Presence";var m=a(88957),u=a(10326),f="Collapsible",[p,x]=(0,r.b)(f),[g,h]=p(f),N=s.forwardRef((e,t)=>{let{__scopeCollapsible:a,open:r,defaultOpen:l,disabled:d,onOpenChange:i,...c}=e,[p,x]=(0,n.T)({prop:r,defaultProp:l??!1,onChange:i,caller:f});return(0,u.jsx)(g,{scope:a,disabled:d,contentId:(0,m.M)(),open:p,onOpenToggle:s.useCallback(()=>x(e=>!e),[x]),children:(0,u.jsx)(o.WV.div,{"data-state":C(p),"data-disabled":d?"":void 0,...c,ref:t})})});N.displayName=f;var b="CollapsibleTrigger",y=s.forwardRef((e,t)=>{let{__scopeCollapsible:a,...s}=e,r=h(b,a);return(0,u.jsx)(o.WV.button,{type:"button","aria-controls":r.contentId,"aria-expanded":r.open||!1,"data-state":C(r.open),"data-disabled":r.disabled?"":void 0,disabled:r.disabled,...s,ref:t,onClick:function(e,t,{checkForDefaultPrevented:a=!0}={}){return function(s){if(e?.(s),!1===a||!s.defaultPrevented)return t?.(s)}}(e.onClick,r.onOpenToggle)})});y.displayName=b;var v="CollapsibleContent",j=s.forwardRef((e,t)=>{let{forceMount:a,...s}=e,r=h(v,e.__scopeCollapsible);return(0,u.jsx)(i,{present:a||r.open,children:({present:e})=>(0,u.jsx)(w,{...s,ref:t,present:e})})});j.displayName=v;var w=s.forwardRef((e,t)=>{let{__scopeCollapsible:a,present:r,children:n,...i}=e,c=h(v,a),[m,f]=s.useState(r),p=s.useRef(null),x=(0,d.e)(t,p),g=s.useRef(0),N=g.current,b=s.useRef(0),y=b.current,j=c.open||m,w=s.useRef(j),R=s.useRef(void 0);return s.useEffect(()=>{let e=requestAnimationFrame(()=>w.current=!1);return()=>cancelAnimationFrame(e)},[]),(0,l.b)(()=>{let e=p.current;if(e){R.current=R.current||{transitionDuration:e.style.transitionDuration,animationName:e.style.animationName},e.style.transitionDuration="0s",e.style.animationName="none";let t=e.getBoundingClientRect();g.current=t.height,b.current=t.width,w.current||(e.style.transitionDuration=R.current.transitionDuration,e.style.animationName=R.current.animationName),f(r)}},[c.open,r]),(0,u.jsx)(o.WV.div,{"data-state":C(c.open),"data-disabled":c.disabled?"":void 0,id:c.contentId,hidden:!j,...i,ref:x,style:{"--radix-collapsible-content-height":N?`${N}px`:void 0,"--radix-collapsible-content-width":y?`${y}px`:void 0,...e.style},children:j&&n})});function C(e){return e?"open":"closed"}var R=N}};
@@ -1 +0,0 @@
1
- "use strict";exports.id=8050,exports.ids=[8050],exports.modules={43273:(e,s,t)=>{t.d(s,{Cd:()=>d,X:()=>c,bZ:()=>o});var a=t(10326),l=t(79360),n=t(17577),i=t(77863);let r=(0,l.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"}}),o=n.forwardRef(({className:e,variant:s,...t},l)=>a.jsx("div",{ref:l,role:"alert",className:(0,i.cn)(r({variant:s}),e),...t}));o.displayName="Alert";let d=n.forwardRef(({className:e,...s},t)=>a.jsx("h5",{ref:t,className:(0,i.cn)("mb-1 font-medium leading-none tracking-tight",e),...s}));d.displayName="AlertTitle";let c=n.forwardRef(({className:e,...s},t)=>a.jsx("div",{ref:t,className:(0,i.cn)("text-sm [&_p]:leading-relaxed",e),...s}));c.displayName="AlertDescription"},77961:(e,s,t)=>{t.d(s,{jF:()=>W,jU:()=>U,ZP:()=>F,NF:()=>_});var a=t(10326),l=t(17577);t(32964),t(59946),t(27221);var n=t(59161),i=t(30463);let r=function(e,s=[]){(0,l.useContext)(i.E);let[t,a]=(0,l.useState)(void 0);return t};var o=t(84714),d=t(31540),c=t(15557),x=t(61086),m=t(11890),u=t(39183),p=t(36283),h=t(71709),j=t(39572),g=t(83855),f=t(94019),N=t(3240),v=t(90772),y=t(62288),w=t(65685),b=t(3574),k=t(20108),C=t(10119),Z=t(54432),z=t(76812),L=t(33071),O=t(65304);function W({s3key:e,children:s}){let{data:t,isLoading:l,error:i,refetch:r}=(0,k.a)({queryKey:["fileObject",e],queryFn:async()=>e?await n.QZ.object(e):null,enabled:null!=e});return e?(0,a.jsxs)(L.Zb,{children:[a.jsx(L.Ol,{className:"pb-3",children:a.jsx(L.ll,{className:"text-sm truncate",children:e.split("_EXULU_").pop()})}),(0,a.jsxs)(L.aY,{className:"pt-0",children:[l&&(0,a.jsxs)("div",{className:"space-y-2",children:[a.jsx(O.O,{className:"h-4 w-full"}),a.jsx(O.O,{className:"h-4 w-2/3"})]}),!l&&t&&(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between text-xs text-muted-foreground",children:[a.jsx("span",{className:"capitalize",children:t?.ContentType.split("/").pop()}),(0,a.jsxs)("span",{children:[(t?.ContentLength/1024/1024).toFixed(2)," MB"]})]}),(0,a.jsxs)("div",{className:"flex items-center justify-between text-xs text-muted-foreground",children:[(0,a.jsxs)("span",{children:["Last modified: ",new Date(t?.LastModified).toLocaleDateString("en-US",{year:"numeric",month:"long",day:"numeric",hour:"2-digit",minute:"2-digit"})]}),(0,a.jsxs)(v.z,{variant:"secondary",size:"sm",type:"button",className:"h-7 px-2",onClick:()=>{n.QZ.download(e).then(async e=>{console.log("res",e);let s=await e.json();console.log("res",s);let t=s.url;window.open(t,"_blank")})},children:[a.jsx("span",{className:"mr-1 text-xs",children:"View"}),a.jsx(d.Z,{className:"h-3 w-3"})]})]})]}),!l&&i&&a.jsx("p",{className:"text-xs text-muted-foreground",children:i.message}),s]})]}):a.jsx(L.Zb,{children:(0,a.jsxs)(L.aY,{className:"p-3 flex",children:[a.jsx("p",{className:"text-sm text-muted-foreground m-auto",children:"No file selected"}),s]})})}function F({id:e,allowedFileTypes:s,dependencies:t,onConfirm:n,selectionLimit:i,buttonText:r}){let[o,d]=(0,l.useState)(!1);return(0,a.jsxs)(y.Vq,{open:o,onOpenChange:d,children:[a.jsx(y.hg,{asChild:!0,children:(0,a.jsxs)(v.z,{variant:"outline",children:[r&&a.jsx("span",{className:"mr-2",children:r}),a.jsx(c.Z,{className:"h-4 w-4"})]})}),(0,a.jsxs)(y.cZ,{className:"sm:max-w-[900px]",children:[(0,a.jsxs)(y.fK,{children:[a.jsx(y.$N,{children:"File Gallery"}),a.jsx(y.Be,{children:"Browse your previously uploaded files or upload new ones."})]}),a.jsx(S,{id:e,allowedFileTypes:s,dependencies:t,selectionLimit:i,onConfirm:e=>{n(e),d(!1)}})]})]})}let S=({id:e,allowedFileTypes:s,dependencies:t,onConfirm:d,selectionLimit:c})=>{s||(s=[".png",".jpg",".jpeg",".gif",".webp",".pdf",".docx",".xlsx",".xls",".csv",".pptx",".ppt",".mp3",".wav",".m4a",".mp4",".mpeg",".mp4",".m4a",".mp3",".mpeg",".wav"]);let[p,h]=(0,l.useState)(void 0),[j,g]=(0,l.useState)(void 0),[f,N]=(0,l.useState)(void 0),y=(0,l.useContext)(i.E),[L,W]=(0,l.useState)([]),F=e=>{if(L.includes(e)){W(L.filter(s=>s!==e));return}if(1===c){W([e]);return}L.length>=c||W([...L,e])},S=(0,C.D)({mutationFn:async({key:e})=>{await n.QZ.delete(e),A()}}),{data:K,isLoading:_,error:q,refetch:A}=(0,k.a)({queryKey:["filesQuery",p,f],staleTime:3e4,queryFn:async()=>n.QZ.list({search:p,continuationToken:f})});console.log("!! data !!",K);let{theme:Q}=(0,b.F)(),T=r({backend:y?.backend||"",uppyOptions:{id:e,allowedFileTypes:s},callbacks:{uploadSuccess:async e=>{console.log("data",e)}},maxNumberOfFiles:10},t);return((0,l.useEffect)(()=>{A()},[p,f]),T)?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mt-4",children:[(0,a.jsxs)("div",{className:"border rounded-lg p-4",children:[a.jsx("h3",{className:"text-sm font-medium mb-3",children:"Previously Uploaded Files"}),a.jsx(Z.I,{placeholder:"Search files...",value:p,onChange:e=>h(e.target.value),className:"mb-3"}),(0,a.jsxs)("div",{className:"flex items-center justify-between text-xs text-muted-foreground pb-2",children:[(0,a.jsxs)("span",{children:[L.length," / ",c," files selected"]}),(0,a.jsxs)("span",{children:["Allowed file types: ",s?.map(e=>e).join(", ")]})]}),(0,a.jsxs)(w.x,{children:[_&&(0,a.jsxs)("div",{className:"flex items-center justify-center h-full w-full grid grid-cols-2 sm:grid-cols-3 gap-3",children:[a.jsx(O.O,{className:"h-[120px] w-full"}),a.jsx(O.O,{className:"h-[120px] w-full"}),a.jsx(O.O,{className:"h-[120px] w-full"}),a.jsx(O.O,{className:"h-[120px] w-full"}),a.jsx(O.O,{className:"h-[120px] w-full"}),a.jsx(O.O,{className:"h-[120px] w-full"}),a.jsx(O.O,{className:"h-[120px] w-full"}),a.jsx(O.O,{className:"h-[120px] w-full"}),a.jsx(O.O,{className:"h-[120px] w-full"})]}),(0,a.jsxs)("div",{className:"grid grid-cols-2 sm:grid-cols-3 gap-3",children:[!_&&!K?.Contents?.length&&(0,a.jsxs)("div",{className:"col-span-full flex flex-col items-center justify-center py-12 text-center",children:[a.jsx(x.Z,{className:"h-12 w-12 text-muted-foreground/50 mb-3"}),a.jsx("p",{className:"text-sm font-medium text-muted-foreground",children:"Nothing to see here... yet!"}),a.jsx("p",{className:"text-xs text-muted-foreground/75 mt-1",children:"Upload some files to get started"})]}),K?.Contents?.map(e=>a.jsx(U,{s3Key:e.Key,onSelect:F,active:L.some(s=>s===e.Key),onRemove:()=>{S.mutate({key:e.Key})},disabled:!!s&&!s?.some(s=>e.Key.endsWith(s))}))]}),a.jsx("div",{className:"flex items-center space-x-6 lg:space-x-8 pt-3",children:(0,a.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,a.jsxs)(v.z,{variant:"outline",className:"hidden size-8 p-0 lg:flex",onClick:()=>{N(void 0)},disabled:!f||_,children:[a.jsx("span",{className:"sr-only",children:"Go to first page"}),a.jsx(z.kRt,{className:"size-4"})]}),(0,a.jsxs)(v.z,{variant:"outline",className:"size-8 p-0",onClick:()=>{N(j)},disabled:!f||_,children:[a.jsx("span",{className:"sr-only",children:"Go to previous page"}),a.jsx(m.Z,{className:"size-4"})]}),(0,a.jsxs)(v.z,{variant:"outline",className:"size-8 p-0",onClick:()=>{g(f),N(K?.NextContinuationToken)},disabled:!K?.NextContinuationToken||_,children:[a.jsx("span",{className:"sr-only",children:"Go to next page"}),a.jsx(u.Z,{className:"size-4"})]})]})})]})]}),(0,a.jsxs)("div",{className:"border rounded-lg p-4",children:[a.jsx("h3",{className:"text-sm font-medium mb-3",children:"Upload New Files"}),a.jsx(o.A,{uppy:T,theme:"dark"===Q?"dark":"light"})]})]}),a.jsx("div",{className:"flex justify-end",children:a.jsx(v.z,{variant:"outline",onClick:()=>{d(L),W([])},children:"Confirm"})})]}):null},U=({s3Key:e,onSelect:s,onRemove:t,active:l,disabled:i,addToContext:r})=>{let o;return(0,a.jsxs)("div",{className:`${i?"opacity-50":""} group relative rounded-lg p-2 hover:bg-muted transition-colors cursor-pointer ${l?"border border-purple-500":"border"}`,onClick:()=>{!i&&s&&s(e)},children:[a.jsx("div",{className:"aspect-square relative mb-2 bg-muted/50 rounded-md overflow-hidden flex items-center justify-center",children:e&&(e.toLowerCase().endsWith("jpg")||e.toLowerCase().endsWith("jpeg")||e.toLowerCase().endsWith("png")||e.toLowerCase().endsWith("svg"))?a.jsx(q,{fileKey:e}):(0,a.jsxs)("div",{className:"flex flex-col items-center justify-center h-full",children:[(o=e)?o.toLowerCase().endsWith("jpg")||o.toLowerCase().endsWith("jpeg")||o.toLowerCase().endsWith("png")||o.toLowerCase().endsWith("svg")?a.jsx(h.Z,{className:"h-6 w-6 text-blue-500"}):o.endsWith("pdf")?a.jsx(j.Z,{className:"h-6 w-6 text-red-500"}):o.endsWith("xls")||o.endsWith("xlsx")||o.endsWith("csv")?a.jsx(p.Z,{className:"h-6 w-6 text-green-500"}):o.endsWith("ppt")||o.endsWith("pptx")?a.jsx(p.Z,{className:"h-6 w-6 text-orange-500"}):a.jsx(p.Z,{className:"h-6 w-6 text-gray-500"}):a.jsx(p.Z,{className:"h-6 w-6 text-gray-500"}),a.jsx("span",{className:"text-xs text-muted-foreground mt-1 text-center",children:e?e.split("_EXULU_").pop():e})]})}),a.jsx("p",{className:"text-xs truncate",children:e?e.split("_EXULU_").pop():e}),(0,a.jsxs)("div",{className:"opacity-0 group-hover:opacity-100 flex absolute top-1 right-1",children:[r&&(0,a.jsxs)(v.z,{variant:"ghost",size:"icon",type:"button",className:"h-6 w-6 bg-background/80 hover:bg-background",onClick:()=>{r(e)},children:[a.jsx(g.Z,{className:"h-3 w-3"}),a.jsx("span",{className:"sr-only",children:"Add"})]}),(0,a.jsxs)(v.z,{variant:"ghost",size:"icon",type:"button",className:"h-6 w-6 bg-background/80 hover:bg-background",onClick:()=>{n.QZ.download(e).then(async e=>{console.log("res",e);let s=await e.json();console.log("res",s);let t=s.url;window.open(t,"_blank")})},children:[a.jsx(d.Z,{className:"h-3 w-3"}),a.jsx("span",{className:"sr-only",children:"View"})]}),t&&(0,a.jsxs)(v.z,{onClick:s=>{s.stopPropagation(),t(e)},variant:"ghost",type:"button",size:"icon",className:"h-6 w-6 opacity-0 group-hover:opacity-100 bg-background/80 hover:bg-background ml-1",children:[a.jsx(f.Z,{className:"h-3 w-3"}),a.jsx("span",{className:"sr-only",children:"Remove"})]})]})]},e)},K={},_=async e=>{if(K[e]){if(!(K[e].expiresAt<Date.now()))return K[e].url;delete K[e]}let s=await n.QZ.download(e),t=await s.json();return console.log("json",t),K[e]={url:t.url,expiresAt:Date.now()+6e4},t.url},q=({fileKey:e})=>{console.log("key",e);let s=(0,k.a)({queryKey:["imageQuery",e],staleTime:3e4,queryFn:async()=>_(e)});return s.isLoading?a.jsx("div",{children:a.jsx(N.Z,{})}):s.isLoading||s.data?a.jsx("img",{src:s.data,alt:e,className:"object-cover w-full h-full"}):a.jsx("div",{children:a.jsx(x.Z,{})})}}};
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1685],{82534:function(e,t,s){s.d(t,{F:function(){return R}});var a=s(57437),r=s(2265),n=s(7211),l=s(12199),o=s(33245),i=s(53417),d=s(82023),c=s(99397),u=s(22252),m=s(15863),f=s(26110),x=s(62869),p=s(95186),h=s(26815),g=s(76818),j=s(27689),N=s(77992),v=s(12339),b=s(66070),y=s(35974),w=s(19378),C=s(78361),T=s(77256),k=s(27182);function R(e){let{open:t,onClose:s,evalSetId:R,onSuccess:_,testCase:F}=e,{toast:S}=(0,N.pm)(),z=!!F,{data:Z}=(0,n.aM)(j.Ul,{variables:{page:1,limit:100}}),{regularTools:D,agentTools:E,knowledgeSourceTools:A}=(0,r.useMemo)(()=>{var e;let t=(null==Z?void 0:null===(e=Z.tools)||void 0===e?void 0:e.items)||[];return console.log("tools",t),{regularTools:t.filter(e=>"function"===e.type),agentTools:t.filter(e=>"agent"===e.type),knowledgeSourceTools:t.filter(e=>"context"===e.type)}},[Z]),[P,V]=(0,r.useState)(""),[I,M]=(0,r.useState)(""),[U,O]=(0,r.useState)(""),[Y,q]=(0,r.useState)([]),[H,K]=(0,r.useState)(""),[L,B]=(0,r.useState)(null),[$,W]=(0,r.useState)([]),[G,J]=(0,r.useState)([]),[Q,X]=(0,r.useState)([]),[ee,et]=(0,r.useState)([]),[es,ea]=(0,r.useState)(""),[er,en]=(0,r.useState)(""),[el,eo]=(0,r.useState)("");(0,r.useEffect)(()=>{F&&t?(V(F.name),M(F.description||""),O(F.expected_output),q(F.inputs||[]),J(F.expected_tools||[]),X(F.expected_knowledge_sources||[]),et(F.expected_agent_tools||[])):t||(V(""),M(""),O(""),q([]),K(""),B(null),W([]),J([]),X([]),et([]),ea(""),en(""),eo(""))},[F,t]);let ei=async e=>{W(await Promise.all(e.map(async e=>({type:"file",mediaType:e.split(".").pop()||"",filename:e,url:await (0,C.NF)(e)}))))};(0,r.useEffect)(()=>{if(!L||0===L.length){W([]);return}ei(L)},[L]);let[ed,{loading:ec}]=(0,l.D)(j.hx,{onCompleted:()=>{S({title:"Test case created",description:"The test case has been successfully created."}),_()},onError:e=>{S({title:"Failed to create test case",description:e.message,variant:"destructive"})}}),[eu,{loading:em}]=(0,l.D)(j.Mh,{onCompleted:()=>{S({title:"Test case updated",description:"The test case has been successfully updated."}),_()},onError:e=>{S({title:"Failed to update test case",description:e.message,variant:"destructive"})}}),ef=()=>{if(!H.trim()&&0===$.length)return;let e=[];H.trim()&&e.push({type:"text",text:H.trim()}),$.length>0&&e.push(...$),q([...Y,{id:"msg-".concat(Date.now()),role:"user",parts:e},{id:"msg-".concat(Date.now()),role:"assistant",metadata:{type:"placeholder"},parts:[{type:"text",text:"\uD83D\uDCAC Placeholder, generated agent response will be added here when the test case is run..."}]}]),K(""),B(null),W([])},ex=ec||em;return(0,a.jsx)(f.Vq,{open:t,onOpenChange:s,children:(0,a.jsxs)(f.cZ,{className:"max-w-4xl max-h-[90vh] overflow-hidden flex flex-col",children:[(0,a.jsxs)(f.fK,{children:[(0,a.jsxs)(f.$N,{children:[z?"Edit Test Case":"Create Test Case"," ",R?"for Eval Set: ".concat(R):""]}),(0,a.jsx)(f.Be,{children:z?"Update the test case details.":"Create a new test case with conversation inputs and expected outputs."})]}),(0,a.jsxs)("form",{onSubmit:e=>{if(e.preventDefault(),!P.trim()||!U.trim()||0===Y.length){S({title:"Validation error",description:"Name, at least one input message, and expected output are required.",variant:"destructive"});return}let t={name:P.trim(),description:I.trim()||null,inputs:Y,expected_output:U.trim(),expected_tools:G.length>0?G:null,expected_knowledge_sources:Q.length>0?Q:null,expected_agent_tools:ee.length>0?ee:null,...R?{eval_set_id:R}:{}};z?eu({variables:{id:F.id,data:t}}):ed({variables:{data:t}})},className:"flex-1 overflow-hidden flex flex-col",children:[(0,a.jsxs)(v.mQ,{defaultValue:"basic",className:"flex-1 overflow-hidden flex flex-col",children:[(0,a.jsxs)(v.dr,{className:"grid w-full grid-cols-2",children:[(0,a.jsxs)(v.SP,{value:"basic",className:"gap-2",children:[(0,a.jsx)(o.Z,{className:"h-4 w-4"}),"Basic Info"]}),(0,a.jsxs)(v.SP,{value:"conversation",className:"gap-2",children:[(0,a.jsx)(i.Z,{className:"h-4 w-4"}),"Conversation"]})]}),(0,a.jsxs)(w.x,{className:"flex-1",children:[(0,a.jsx)(v.nU,{value:"basic",className:"space-y-4 p-1 mt-4",children:(0,a.jsxs)("div",{className:"grid gap-5",children:[(0,a.jsxs)("div",{className:"grid gap-2",children:[(0,a.jsx)(h._,{htmlFor:"name",children:"Name *"}),(0,a.jsx)(p.I,{id:"name",placeholder:"e.g., Customer Support - Refund Request",value:P,onChange:e=>V(e.target.value),disabled:ex,required:!0})]}),(0,a.jsxs)("div",{className:"grid gap-2",children:[(0,a.jsx)(h._,{htmlFor:"description",children:"Description"}),(0,a.jsx)(g.g,{id:"description",placeholder:"Describe what this test case evaluates...",value:I,onChange:e=>M(e.target.value),disabled:ex,rows:3})]}),(0,a.jsxs)("div",{className:"grid gap-2",children:[(0,a.jsx)(h._,{htmlFor:"expectedOutput",children:"Expected Output *"}),(0,a.jsx)(g.g,{id:"expectedOutput",placeholder:"Describe the expected final output (e.g., 'A JSON object containing refund details', 'An empathetic response offering alternatives')",value:U,onChange:e=>O(e.target.value),disabled:ex,rows:4,required:!0}),(0,a.jsx)("p",{className:"text-xs text-muted-foreground",children:"This can be an exact expected response or a description of what the output should contain."})]})]})}),(0,a.jsx)(v.nU,{value:"conversation",className:"space-y-4 p-1 mt-4",children:(0,a.jsxs)(b.Zb,{children:[(0,a.jsx)(b.Ol,{className:"pb-3",children:(0,a.jsx)("div",{className:"flex items-start justify-between",children:(0,a.jsxs)("div",{children:[(0,a.jsxs)(b.ll,{className:"text-sm flex items-center gap-2",children:[(0,a.jsx)(i.Z,{className:"h-4 w-4"}),"Conversation Flow",Y.length>0&&(0,a.jsxs)(y.C,{variant:"secondary",className:"ml-2",children:[Y.length," ",1===Y.length?"message":"messages"]})]}),(0,a.jsx)(b.SZ,{className:"mt-1.5",children:"Add user messages in order. The agent will run through this conversation flow and respond between each message automatically."})]})})}),(0,a.jsxs)(b.aY,{className:"space-y-6",children:[(null==Y?void 0:Y.length)===0?(0,a.jsxs)("div",{className:"flex flex-col items-center justify-center py-12 px-4 text-center border-2 border-dashed border-muted rounded-lg",children:[(0,a.jsx)(d.Z,{className:"h-12 w-12 text-muted-foreground/50 mb-4"}),(0,a.jsx)("h3",{className:"font-semibold text-lg mb-2",children:"No messages yet"}),(0,a.jsx)("p",{className:"text-sm text-muted-foreground max-w-sm",children:"Start building your test conversation by adding user messages below."})]}):(0,a.jsx)(k.ri,{className:"max-h-[350px] overflow-y-auto border rounded-lg bg-muted/30 transition-all duration-300 ease-in-out",children:(0,a.jsx)(k.iG,{className:"px-6 py-4",children:(0,a.jsx)("div",{className:"animate-in fade-in duration-500",children:(0,a.jsx)(T.K,{messages:Y,config:{marginTopFirstMessage:"mt-0",customAssistantClassnames:"bg-secondary/50 rounded-lg px-3 py-1 border-l-2 border-primary/30"},status:"ready",showActions:!1,writeAccess:!1})})})}),(0,a.jsxs)("div",{className:"space-y-3 pt-2 border-t",children:[(0,a.jsx)(h._,{htmlFor:"currentInput",className:"text-sm font-semibold",children:"Add User Message"}),(0,a.jsxs)("div",{className:"space-y-3",children:[(0,a.jsx)(g.g,{id:"currentInput",placeholder:"Type the user's message...",value:H,onChange:e=>K(e.target.value),disabled:ex,rows:2,onKeyDown:e=>{"Enter"!==e.key||e.shiftKey||(e.preventDefault(),ef())}}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(C.ZP,{id:"test-case-files",selectionLimit:10,allowedFileTypes:[".png",".jpg",".jpeg",".gif",".webp",".pdf",".docx",".xlsx",".xls",".csv",".pptx",".ppt",".mp3",".wav",".m4a",".mp4",".mpeg"],dependencies:[],onConfirm:e=>{B(e)}}),(0,a.jsxs)(x.z,{type:"button",variant:"outline",onClick:ef,disabled:ex||!H.trim()&&0===$.length,className:"ml-auto",size:"default",children:[(0,a.jsx)(c.Z,{className:"h-4 w-4 mr-2"}),"Add Message"]})]}),L&&L.length>0&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("div",{className:"grid grid-cols-3 gap-2",children:L.map(e=>(0,a.jsx)(C.jU,{s3Key:e,disabled:!0,active:!1,onRemove:()=>{B(null==L?void 0:L.filter(t=>t!==e))}}))}),(0,a.jsxs)("div",{className:"flex items-start gap-2 p-3 bg-amber-500/10 border border-amber-500/20 rounded-lg",children:[(0,a.jsx)(u.Z,{className:"h-4 w-4 text-amber-600 dark:text-amber-500 mt-0.5 flex-shrink-0"}),(0,a.jsxs)("p",{className:"text-xs text-amber-900 dark:text-amber-200",children:[(0,a.jsx)("strong",{children:"Note:"})," When running this test case, ensure the selected agent supports the file types you've attached here (images, documents, audio, etc.)."]})]})]})]}),(0,a.jsx)("p",{className:"text-xs text-muted-foreground",children:"Press Enter to add, Shift+Enter for new line. You can attach files to messages."})]})]})]})})]})]}),(0,a.jsxs)(f.cN,{className:"mt-4 gap-2",children:[(0,a.jsx)(x.z,{type:"button",variant:"outline",onClick:s,disabled:ex,children:"Cancel"}),(0,a.jsxs)(x.z,{type:"submit",disabled:ex||!P.trim()||!U.trim()||0===Y.length,className:"shadow-sm hover:shadow-md transition-all",children:[ex&&(0,a.jsx)(m.Z,{className:"mr-2 h-4 w-4 animate-spin"}),z?"Update Test Case":"Create Test Case"]})]})]})]})})}},27182:function(e,t,s){s.d(t,{iG:function(){return o},ri:function(){return l}});var a=s(57437);s(62869);var r=s(94508);s(2265);var n=s(20460);let l=e=>{let{className:t,...s}=e;return(0,a.jsx)(n.h,{className:(0,r.cn)("relative flex-1 overflow-y-auto",t),initial:"smooth",resize:"smooth",role:"log",...s})},o=e=>{let{className:t,...s}=e;return(0,a.jsx)(n.h.Content,{className:(0,r.cn)("p-4",t),...s})}},77256:function(e,t,s){s.d(t,{K:function(){return I}});var a=s(57437);s(16831);var r=s(94508);let n=e=>{let{className:t,from:s,...n}=e;return(0,a.jsx)("div",{className:(0,r.cn)("group flex w-full items-end justify-end gap-2 py-4","user"===s?"is-user flex-row-reverse justify-end":"is-assistant flex-row-reverse justify-end","[&>div]:max-w-[80%]",t),...n})},l=e=>{let{children:t,className:s,...n}=e;return(0,a.jsx)("div",{className:(0,r.cn)("flex flex-col gap-2 overflow-hidden rounded-lg py-3 text-foreground text-sm","group-[.is-user]:bg-secondary group-[.is-user]:text-primary-foreground group-[.is-user]:px-4","group-[.is-assistant]:bg-transparent group-[.is-assistant]:text-foreground",s),...n,children:(0,a.jsx)("div",{className:"is-user:dark",children:t})})};var o=s(62869),i=s(81103);let d=e=>{let{className:t,children:s,...n}=e;return(0,a.jsx)("div",{className:(0,r.cn)("flex items-center gap-1",t),...n,children:s})},c=e=>{let{tooltip:t,children:s,label:n,className:l,variant:d="ghost",size:c="sm",...u}=e,m=(0,a.jsxs)(o.z,{className:(0,r.cn)("size-9 p-1.5 text-muted-foreground hover:text-foreground",l),size:c,type:"button",variant:d,...u,children:[s,(0,a.jsx)("span",{className:"sr-only",children:n||t})]});return t?(0,a.jsx)(i.pn,{children:(0,a.jsxs)(i.u,{children:[(0,a.jsx)(i.aJ,{asChild:!0,children:m}),(0,a.jsx)(i._v,{children:(0,a.jsx)("p",{children:t})})]})}):m};var u=s(35629),m=s(80886),f=s(74928),x=s(64972),p=s(40875),h=s(2265);let g=(0,h.createContext)(null),j=()=>{let e=(0,h.useContext)(g);if(!e)throw Error("Reasoning components must be used within Reasoning");return e},N=(0,h.memo)(e=>{let{className:t,isStreaming:s=!1,open:n,defaultOpen:l=!1,onOpenChange:o,duration:i,children:d,...c}=e,[u,x]=(0,m.T)({prop:n,defaultProp:l,onChange:o}),[p,j]=(0,m.T)({prop:i,defaultProp:0}),[N,v]=(0,h.useState)(!1),[b,y]=(0,h.useState)(null);return(0,h.useEffect)(()=>{s?null===b&&y(Date.now()):null!==b&&(j(Math.round((Date.now()-b)/1e3)),y(null))},[s,b,j]),(0,h.useEffect)(()=>{if(s&&!u)x(!0);else if(!s&&u&&!l&&!N){let e=setTimeout(()=>{x(!1),v(!0)},1e3);return()=>clearTimeout(e)}},[s,u,l,x,N]),(0,a.jsx)(g.Provider,{value:{isStreaming:s,isOpen:u,setIsOpen:x,duration:p},children:(0,a.jsx)(f.zF,{className:(0,r.cn)("not-prose mb-4",t),onOpenChange:e=>{x(e)},open:u,...c,children:d})})}),v=(0,h.memo)(e=>{let{className:t,title:s="Reasoning",children:n,...l}=e,{isStreaming:o,isOpen:i,duration:d}=j();return(0,a.jsx)(f.wy,{className:(0,r.cn)("flex items-center gap-2 text-muted-foreground text-sm",t),...l,children:null!=n?n:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(x.Z,{className:"size-4"}),o||0===d?(0,a.jsx)("p",{children:"Thinking..."}):(0,a.jsxs)("p",{children:["Thought for ",d," seconds"]}),(0,a.jsx)(p.Z,{className:(0,r.cn)("size-4 text-muted-foreground transition-transform",i?"rotate-180":"rotate-0")})]})})}),b=(0,h.memo)(e=>{let{className:t,children:s,...n}=e;return(0,a.jsx)(f.Fw,{className:(0,r.cn)("mt-4 text-sm","data-[state=closed]:fade-out-0 data-[state=closed]:slide-out-to-top-2 data-[state=open]:slide-in-from-top-2 text-popover-foreground outline-none data-[state=closed]:animate-out data-[state=open]:animate-in",t),...n,children:(0,a.jsx)(u.H,{className:"grid gap-2",children:s})})});N.displayName="Reasoning",v.displayName="ReasoningTrigger",b.displayName="ReasoningContent";var y=s(55455);let w=e=>{let{className:t,...s}=e;return(0,a.jsx)(f.zF,{className:(0,r.cn)("not-prose mb-4 text-primary text-xs",t),...s})},C=e=>{let{className:t,count:s,children:r,...n}=e;return(0,a.jsx)(f.wy,{className:"flex items-center gap-2",...n,children:null!=r?r:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("p",{className:"font-medium",children:["Used ",s," sources"]}),(0,a.jsx)(p.Z,{className:"h-4 w-4"})]})})},T=e=>{let{className:t,...s}=e;return(0,a.jsx)(f.Fw,{className:(0,r.cn)("mt-3 flex w-fit flex-col gap-2","data-[state=closed]:fade-out-0 data-[state=closed]:slide-out-to-top-2 data-[state=open]:slide-in-from-top-2 outline-none data-[state=closed]:animate-out data-[state=open]:animate-in",t),...s})},k=e=>{let{href:t,title:s,children:r,...n}=e;return(0,a.jsx)("a",{className:"flex items-center gap-2",href:t,rel:"noreferrer",target:"_blank",...n,children:null!=r?r:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(y.Z,{className:"h-4 w-4"}),(0,a.jsx)("span",{className:"block font-medium",children:s})]})})};var R=s(52636),_=s(78867),F=s(33145),S=s(77992),z=s(40519),Z=s(15863),D=s(66901),E=s(45131);let A={pending:{icon:z.Z,label:"Pending",className:"text-muted-foreground"},in_progress:{icon:Z.Z,label:"In Progress",className:"text-blue-500 animate-spin"},completed:{icon:D.Z,label:"Completed",className:"text-green-500"},cancelled:{icon:E.Z,label:"Cancelled",className:"text-red-500"}},P={high:{label:"High",className:"bg-red-500/10 text-red-500 border-red-500/20"},medium:{label:"Medium",className:"bg-yellow-500/10 text-yellow-500 border-yellow-500/20"},low:{label:"Low",className:"bg-blue-500/10 text-blue-500 border-blue-500/20"}},V=e=>{let{todos:t,showPriority:s=!1,state:n,className:l,...o}=e;if("string"==typeof t&&(t=JSON.parse(t)),!t||0===t.length)return null;let i=t.filter(e=>"completed"===e.status).length,d=t.length;return(0,a.jsxs)("div",{className:(0,r.cn)("my-2 space-y-1","input-streaming"===n&&"opacity-70",l),...o,children:[t.map((e,n)=>{let l=A[e.status].icon,o=A[e.status].className;P[e.priority].className;let i="in_progress"===e.status&&n===t.findIndex(e=>"in_progress"===e.status);return(0,a.jsxs)("div",{className:(0,r.cn)("flex items-start gap-2 py-0.5","cancelled"===e.status&&"opacity-50"),children:[(0,a.jsx)("div",{className:"flex-shrink-0 pt-0.5",children:(0,a.jsx)(l,{className:(0,r.cn)("size-3.5",o)})}),(0,a.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,a.jsx)("span",{className:(0,r.cn)("text-sm","completed"===e.status&&"text-muted-foreground line-through","cancelled"===e.status&&"text-muted-foreground line-through","in_progress"===e.status&&i&&"font-medium"),children:e.content}),s&&"high"===e.priority&&(0,a.jsx)("span",{className:"ml-2 text-red-500 text-xs",children:"(!)"})]})]},e.id)}),d>1&&(0,a.jsxs)("div",{className:"flex items-center gap-2 pt-1 text-muted-foreground text-xs",children:[(0,a.jsx)("div",{className:"h-1 flex-1 overflow-hidden rounded-full bg-secondary",children:(0,a.jsx)("div",{className:"h-full bg-primary transition-all duration-300",style:{width:"".concat(i/d*100,"%")}})}),(0,a.jsxs)("span",{className:"whitespace-nowrap",children:[i,"/",d]})]}),"output-error"===n&&(0,a.jsxs)("div",{className:"flex items-center gap-1 pt-1 text-red-500 text-xs",children:[(0,a.jsx)(E.Z,{className:"size-3"}),(0,a.jsx)("span",{children:"Error updating tasks"})]})]})};function I(e){let{messages:t,status:s="idle",className:o,showActions:i=!0,onRegenerate:m,onAddToolResult:f,UntypedToolPartComponent:x,addToContext:p,writeAccess:h=!0,config:g}=e,{toast:j}=(0,S.pm)();return(0,a.jsx)(a.Fragment,{children:null==t?void 0:t.map((e,y)=>{let S=e.metadata;return t.length,(0,a.jsx)(n,{className:(0,r.cn)("assistant"===e.role&&((null==g?void 0:g.customAssistantClassnames)?null==g?void 0:g.customAssistantClassnames:""),0===y&&((null==g?void 0:g.marginTopFirstMessage)?null==g?void 0:g.marginTopFirstMessage:"mt-12"),o),from:e.role,children:(0,a.jsxs)(l,{children:[e.parts.map((t,r)=>{var n,l,o;if("step-start"===t.type)return null;if("text"===t.type)return(0,a.jsx)("div",{children:(0,a.jsx)(u.H,{className:"chat-response-container",children:t.text})},"".concat(e.id,"-").concat(r));if("tool-askForConfirmation"===t.type&&f){let e=t.toolCallId;switch(t.state){case"input-streaming":return(0,a.jsx)("div",{children:"Loading confirmation request..."},e);case"input-available":return(0,a.jsxs)("div",{children:[t.input.message,(0,a.jsxs)("div",{children:[(0,a.jsx)("button",{onClick:()=>f({tool:"askForConfirmation",toolCallId:e,output:"Yes, confirmed"}),children:"Yes"}),(0,a.jsx)("button",{onClick:()=>f({tool:"askForConfirmation",toolCallId:e,output:"No, denied"}),children:"No"})]})]},e);case"output-available":return(0,a.jsxs)("div",{children:["Tool call allowed: ",t.output]},e);case"output-error":return(0,a.jsxs)("div",{children:["Error: ",t.errorText]},e)}}if((null===(n=t.type)||void 0===n?void 0:n.toLowerCase())==="tool-todo_write"||(null===(l=t.type)||void 0===l?void 0:l.toLowerCase())==="tool-todo_read"){let e=t.output;if(!(null==e?void 0:e.result))return null;let s=t.state;return(0,a.jsx)(V,{todos:e.result,showPriority:!0,state:s})}if((t.type.startsWith("tool-")||"dynamic-tool"===t.type)&&x&&p){let e=t.toolCallId;return(0,a.jsx)(x,{untypedToolPart:t,callId:e,addToContext:p},e)}return"file"===t.type&&(null===(o=t.mediaType)||void 0===o?void 0:o.startsWith("image/"))?(0,a.jsx)(F.default,{src:t.url,width:300,height:300,alt:"Generated image"},"".concat(e.id,"-").concat(r)):"source-url"===t.type?(0,a.jsxs)(w,{children:[(0,a.jsx)(C,{count:e.parts.filter(e=>"source-url"===e.type).length}),(0,a.jsx)(T,{children:e.parts.map((t,s)=>{if("source-url"===t.type)return(0,a.jsx)(k,{href:t.url,title:t.title},"".concat(e.id,"-").concat(s))})},"".concat(e.id))]},"".concat(e.id,"-").concat(r)):"reasoning"===t.type?(0,a.jsxs)(N,{className:"w-full",isStreaming:"streaming"===s,children:[(0,a.jsx)(v,{}),(0,a.jsx)(b,{children:t.text})]},"".concat(e.id,"-").concat(r)):null}),i&&"assistant"===e.role&&(0,a.jsxs)(d,{className:"mt-2",children:[m&&(0,a.jsx)(c,{onClick:()=>m(),label:"Retry",disabled:!h,children:(0,a.jsx)(R.Z,{className:"size-3"})}),(0,a.jsx)(c,{onClick:()=>{navigator.clipboard.writeText(e.parts.map(e=>(null==e?void 0:e.text)||"").join("\n")),j({title:"Copied message",description:"The message was copied to your clipboard."})},label:"Copy",children:(0,a.jsx)(_.Z,{className:"size-3"})}),(null==S?void 0:S.totalTokens)&&(0,a.jsxs)("small",{className:"text-muted-foreground",children:[Intl.NumberFormat("en-US").format(null==S?void 0:S.totalTokens)," tokens"]})]})]})},e.id)})})}},37099:function(e,t,s){s.d(t,{OL:function(){return h},_T:function(){return u},aR:function(){return i},f$:function(){return x},fY:function(){return m},le:function(){return g},xo:function(){return f},yT:function(){return p}});var a=s(57437),r=s(23619),n=s(2265),l=s(62869),o=s(94508);let i=r.fC;r.xz;let d=r.h_,c=n.forwardRef((e,t)=>{let{className:s,...n}=e;return(0,a.jsx)(r.aV,{className:(0,o.cn)("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",s),...n,ref:t})});c.displayName=r.aV.displayName;let u=n.forwardRef((e,t)=>{let{className:s,...n}=e;return(0,a.jsxs)(d,{children:[(0,a.jsx)(c,{}),(0,a.jsx)(r.VY,{ref:t,className:(0,o.cn)("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",s),...n})]})});u.displayName=r.VY.displayName;let m=e=>{let{className:t,...s}=e;return(0,a.jsx)("div",{className:(0,o.cn)("flex flex-col space-y-2 text-center sm:text-left",t),...s})};m.displayName="AlertDialogHeader";let f=e=>{let{className:t,...s}=e;return(0,a.jsx)("div",{className:(0,o.cn)("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",t),...s})};f.displayName="AlertDialogFooter";let x=n.forwardRef((e,t)=>{let{className:s,...n}=e;return(0,a.jsx)(r.Dx,{ref:t,className:(0,o.cn)("text-lg font-semibold",s),...n})});x.displayName=r.Dx.displayName;let p=n.forwardRef((e,t)=>{let{className:s,...n}=e;return(0,a.jsx)(r.dk,{ref:t,className:(0,o.cn)("text-sm text-muted-foreground",s),...n})});p.displayName=r.dk.displayName;let h=n.forwardRef((e,t)=>{let{className:s,...n}=e;return(0,a.jsx)(r.aU,{ref:t,className:(0,o.cn)((0,l.d)(),s),...n})});h.displayName=r.aU.displayName;let g=n.forwardRef((e,t)=>{let{className:s,...n}=e;return(0,a.jsx)(r.$j,{ref:t,className:(0,o.cn)((0,l.d)({variant:"outline"}),"mt-2 sm:mt-0",s),...n})});g.displayName=r.$j.displayName},35974:function(e,t,s){s.d(t,{C:function(){return o}});var a=s(57437),r=s(90535);s(2265);var n=s(94508);let l=(0,r.j)("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",outline:"text-foreground"}},defaultVariants:{variant:"default"}});function o(e){let{className:t,variant:s,...r}=e;return(0,a.jsx)("div",{className:(0,n.cn)(l({variant:s}),t),...r})}},66070:function(e,t,s){s.d(t,{Ol:function(){return o},SZ:function(){return d},Zb:function(){return l},aY:function(){return c},eW:function(){return u},ll:function(){return i}});var a=s(57437),r=s(2265),n=s(94508);let l=r.forwardRef((e,t)=>{let{className:s,...r}=e;return(0,a.jsx)("div",{ref:t,className:(0,n.cn)("rounded-lg border bg-card text-card-foreground shadow-sm",s),...r})});l.displayName="Card";let o=r.forwardRef((e,t)=>{let{className:s,...r}=e;return(0,a.jsx)("div",{ref:t,className:(0,n.cn)("flex flex-col space-y-1.5 p-6",s),...r})});o.displayName="CardHeader";let i=r.forwardRef((e,t)=>{let{className:s,...r}=e;return(0,a.jsx)("h3",{ref:t,className:(0,n.cn)("text-2xl font-semibold leading-none tracking-tight",s),...r})});i.displayName="CardTitle";let d=r.forwardRef((e,t)=>{let{className:s,...r}=e;return(0,a.jsx)("p",{ref:t,className:(0,n.cn)("text-sm text-muted-foreground",s),...r})});d.displayName="CardDescription";let c=r.forwardRef((e,t)=>{let{className:s,...r}=e;return(0,a.jsx)("div",{ref:t,className:(0,n.cn)("p-6 pt-0",s),...r})});c.displayName="CardContent";let u=r.forwardRef((e,t)=>{let{className:s,...r}=e;return(0,a.jsx)("div",{ref:t,className:(0,n.cn)("flex items-center p-6 pt-0",s),...r})});u.displayName="CardFooter"},26110:function(e,t,s){s.d(t,{$N:function(){return p},Be:function(){return h},Vq:function(){return i},cN:function(){return x},cZ:function(){return m},fK:function(){return f},hg:function(){return d}});var a=s(57437),r=s(34567),n=s(32489),l=s(2265),o=s(94508);let i=r.fC,d=r.xz,c=r.h_;r.x8;let u=l.forwardRef((e,t)=>{let{className:s,...n}=e;return(0,a.jsx)(r.aV,{ref:t,className:(0,o.cn)("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",s),...n})});u.displayName=r.aV.displayName;let m=l.forwardRef((e,t)=>{let{className:s,children:l,...i}=e;return(0,a.jsxs)(c,{children:[(0,a.jsx)(u,{}),(0,a.jsxs)(r.VY,{ref:t,className:(0,o.cn)("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",s),...i,children:[l,(0,a.jsxs)(r.x8,{className:"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground",children:[(0,a.jsx)(n.Z,{className:"size-4"}),(0,a.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})});m.displayName=r.VY.displayName;let f=e=>{let{className:t,...s}=e;return(0,a.jsx)("div",{className:(0,o.cn)("flex flex-col space-y-1.5 text-center sm:text-left",t),...s})};f.displayName="DialogHeader";let x=e=>{let{className:t,...s}=e;return(0,a.jsx)("div",{className:(0,o.cn)("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",t),...s})};x.displayName="DialogFooter";let p=l.forwardRef((e,t)=>{let{className:s,...n}=e;return(0,a.jsx)(r.Dx,{ref:t,className:(0,o.cn)("text-lg font-semibold leading-none tracking-tight",s),...n})});p.displayName=r.Dx.displayName;let h=l.forwardRef((e,t)=>{let{className:s,...n}=e;return(0,a.jsx)(r.dk,{ref:t,className:(0,o.cn)("text-sm text-muted-foreground",s),...n})});h.displayName=r.dk.displayName},26815:function(e,t,s){s.d(t,{_:function(){return d}});var a=s(57437),r=s(6394),n=s(90535),l=s(2265),o=s(94508);let i=(0,n.j)("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"),d=l.forwardRef((e,t)=>{let{className:s,...n}=e;return(0,a.jsx)(r.f,{ref:t,className:(0,o.cn)(i(),s),...n})});d.displayName=r.f.displayName},19378:function(e,t,s){s.d(t,{B:function(){return i},x:function(){return o}});var a=s(57437),r=s(14488),n=s(2265),l=s(94508);let o=n.forwardRef((e,t)=>{let{className:s,children:n,...o}=e;return(0,a.jsxs)(r.fC,{ref:t,className:(0,l.cn)("relative overflow-hidden",s),...o,children:[(0,a.jsx)(r.l_,{className:"size-full rounded-[inherit]",children:n}),(0,a.jsx)(i,{}),(0,a.jsx)(r.Ns,{})]})});o.displayName=r.fC.displayName;let i=n.forwardRef((e,t)=>{let{className:s,orientation:n="vertical",...o}=e;return(0,a.jsx)(r.gb,{ref:t,orientation:n,className:(0,l.cn)("flex touch-none select-none transition-colors","vertical"===n&&"h-full w-2.5 border-l border-l-transparent p-[1px]","horizontal"===n&&"h-2.5 flex-col border-t border-t-transparent p-[1px]",s),...o,children:(0,a.jsx)(r.q4,{className:"relative flex-1 rounded-full bg-border"})})});i.displayName=r.gb.displayName},73578:function(e,t,s){s.d(t,{RM:function(){return i},Rn:function(){return m},SC:function(){return d},iA:function(){return l},pj:function(){return u},ss:function(){return c},xD:function(){return o}});var a=s(57437),r=s(2265),n=s(94508);let l=r.forwardRef((e,t)=>{let{className:s,...r}=e;return(0,a.jsx)("div",{className:"relative w-full overflow-auto",children:(0,a.jsx)("table",{ref:t,className:(0,n.cn)("w-full caption-bottom text-sm",s),...r})})});l.displayName="Table";let o=r.forwardRef((e,t)=>{let{className:s,...r}=e;return(0,a.jsx)("thead",{ref:t,className:(0,n.cn)("[&_tr]:border-b",s),...r})});o.displayName="TableHeader";let i=r.forwardRef((e,t)=>{let{className:s,...r}=e;return(0,a.jsx)("tbody",{ref:t,className:(0,n.cn)("[&_tr:last-child]:border-0",s),...r})});i.displayName="TableBody",r.forwardRef((e,t)=>{let{className:s,...r}=e;return(0,a.jsx)("tfoot",{ref:t,className:(0,n.cn)("border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",s),...r})}).displayName="TableFooter";let d=r.forwardRef((e,t)=>{let{className:s,...r}=e;return(0,a.jsx)("tr",{ref:t,className:(0,n.cn)("border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted",s),...r})});d.displayName="TableRow";let c=r.forwardRef((e,t)=>{let{className:s,...r}=e;return(0,a.jsx)("th",{ref:t,className:(0,n.cn)("h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0 [&:has([role=checkbox])]:w-[40px]",s),...r})});c.displayName="TableHead";let u=r.forwardRef((e,t)=>{let{className:s,...r}=e;return(0,a.jsx)("td",{ref:t,className:(0,n.cn)("p-4 align-middle [&:has([role=checkbox])]:pr-0 [&:has([role=checkbox])]:w-[40px]",s),...r})});u.displayName="TableCell";let m=r.forwardRef((e,t)=>{let{className:s,...r}=e;return(0,a.jsx)("caption",{ref:t,className:(0,n.cn)("mt-4 text-sm text-muted-foreground",s),...r})});m.displayName="TableCaption"},76818:function(e,t,s){s.d(t,{g:function(){return l}});var a=s(57437),r=s(2265),n=s(94508);let l=r.forwardRef((e,t)=>{let{className:s,...r}=e;return(0,a.jsx)("textarea",{className:(0,n.cn)("flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",s),ref:t,...r})});l.displayName="Textarea"}}]);
2
- //# sourceMappingURL=1685-39351b8a15bbecab.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"static/chunks/1685-39351b8a15bbecab.js","mappings":"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","sources":["webpack://_N_E/./app/(application)/evals/cases/components/test-case-modal.tsx","webpack://_N_E/./components/ai-elements/conversation.tsx","webpack://_N_E/./components/ai-elements/message.tsx","webpack://_N_E/./components/ai-elements/actions.tsx","webpack://_N_E/./components/ai-elements/reasoning.tsx","webpack://_N_E/./components/ai-elements/source.tsx","webpack://_N_E/./components/ai-elements/todo-list.tsx","webpack://_N_E/./components/message-renderer.tsx","webpack://_N_E/./components/ui/alert-dialog.tsx","webpack://_N_E/./components/ui/badge.tsx","webpack://_N_E/./components/ui/card.tsx","webpack://_N_E/./components/ui/dialog.tsx","webpack://_N_E/./components/ui/label.tsx","webpack://_N_E/./components/ui/scroll-area.tsx","webpack://_N_E/./components/ui/table.tsx","webpack://_N_E/./components/ui/textarea.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState, useEffect, useMemo } from \"react\";\nimport { useMutation, useQuery } from \"@apollo/client\";\nimport { Loader2, Plus, MessageSquare, Info, Sparkles, Settings2, FileText, AlertCircle } from \"lucide-react\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from \"@/components/ui/dialog\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Label } from \"@/components/ui/label\";\nimport { Textarea } from \"@/components/ui/textarea\";\nimport { CREATE_TEST_CASE, UPDATE_TEST_CASE, GET_TOOLS } from \"@/queries/queries\";\nimport { useToast } from \"@/components/ui/use-toast\";\nimport { TestCase } from \"@/types/models/test-case\";\nimport { Tool } from \"@EXULU_SHARED/models/tool\";\nimport { UIMessage, FileUIPart } from \"ai\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"@/components/ui/tabs\";\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from \"@/components/ui/card\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { ScrollArea } from \"@/components/ui/scroll-area\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/components/ui/select\";\nimport UppyDashboard, { FileItem, getPresignedUrl } from \"@/components/uppy-dashboard\";\nimport { MessageRenderer } from \"@/components/message-renderer\";\nimport { Conversation, ConversationContent } from \"@/components/ai-elements/conversation\";\n\ninterface TestCaseModalProps {\n open: boolean;\n onClose: () => void;\n onSuccess: () => void;\n testCase?: TestCase | null;\n evalSetId?: string;\n}\n\nexport function TestCaseModal({\n open,\n onClose,\n evalSetId,\n onSuccess,\n testCase,\n}: TestCaseModalProps) {\n const { toast } = useToast();\n const isEditing = !!testCase;\n\n // Fetch tools from server\n const { data: toolsData } = useQuery<{\n tools: {\n items: Tool[]\n }\n }>(GET_TOOLS, {\n variables: { page: 1, limit: 100 },\n });\n\n // Split tools by type\n const { regularTools, agentTools, knowledgeSourceTools } = useMemo(() => {\n const tools = toolsData?.tools?.items || [];\n console.log(\"tools\", tools);\n return {\n regularTools: tools.filter(t => t.type === \"function\"),\n agentTools: tools.filter(t => t.type === \"agent\"),\n knowledgeSourceTools: tools.filter(t => t.type === \"context\"),\n };\n }, [toolsData]);\n\n // Basic fields\n const [name, setName] = useState(\"\");\n const [description, setDescription] = useState(\"\");\n const [expectedOutput, setExpectedOutput] = useState(\"\");\n\n // Conversation inputs (UIMessage array)\n const [inputs, setInputs] = useState<UIMessage[]>([]);\n const [currentInput, setCurrentInput] = useState(\"\");\n const [currentFiles, setCurrentFiles] = useState<string[] | null>(null);\n const [currentFileParts, setCurrentFileParts] = useState<FileUIPart[]>([]);\n\n // Optional expected fields\n const [expectedTools, setExpectedTools] = useState<string[]>([]);\n const [expectedKnowledgeSources, setExpectedKnowledgeSources] = useState<string[]>([]);\n const [expectedAgentTools, setExpectedAgentTools] = useState<string[]>([]);\n\n // Temp selectors\n const [selectedTool, setSelectedTool] = useState<string>(\"\");\n const [selectedContext, setSelectedContext] = useState<string>(\"\");\n const [selectedAgent, setSelectedAgent] = useState<string>(\"\");\n\n useEffect(() => {\n if (testCase && open) {\n setName(testCase.name);\n setDescription(testCase.description || \"\");\n setExpectedOutput(testCase.expected_output);\n setInputs(testCase.inputs || []);\n setExpectedTools(testCase.expected_tools || []);\n setExpectedKnowledgeSources(testCase.expected_knowledge_sources || []);\n setExpectedAgentTools(testCase.expected_agent_tools || []);\n } else if (!open) {\n // Reset when closing\n setName(\"\");\n setDescription(\"\");\n setExpectedOutput(\"\");\n setInputs([]);\n setCurrentInput(\"\");\n setCurrentFiles(null);\n setCurrentFileParts([]);\n setExpectedTools([]);\n setExpectedKnowledgeSources([]);\n setExpectedAgentTools([]);\n setSelectedTool(\"\");\n setSelectedContext(\"\");\n setSelectedAgent(\"\");\n }\n }, [testCase, open]);\n\n // Convert items to FileUIPart when files are selected\n const updateMessageFiles = async (keys: string[]) => {\n const files = await Promise.all(keys.map(async (key) => {\n /* if (!item.s3key) {\n // Take all item fields and turn into a data url\n let content = \"\";\n Object.entries(item).forEach(([key, value]) => {\n content += `${key}: ${value}\\n`\n })\n return {\n type: \"file\" as const,\n mediaType: item.type,\n filename: item.name,\n url: `data:text/plain;base64,${btoa(content)}`\n }\n } */\n\n return {\n type: \"file\" as const,\n mediaType: key.split(\".\").pop() || \"\",\n filename: key,\n url: await getPresignedUrl(key)\n }\n }))\n setCurrentFileParts(files)\n }\n\n useEffect(() => {\n if (!currentFiles || currentFiles.length === 0) {\n setCurrentFileParts([])\n return;\n }\n updateMessageFiles(currentFiles)\n }, [currentFiles])\n\n const [createTestCase, { loading: creating }] = useMutation(CREATE_TEST_CASE, {\n onCompleted: () => {\n toast({\n title: \"Test case created\",\n description: \"The test case has been successfully created.\",\n });\n onSuccess();\n },\n onError: (error) => {\n toast({\n title: \"Failed to create test case\",\n description: error.message,\n variant: \"destructive\",\n });\n },\n });\n\n const [updateTestCase, { loading: updating }] = useMutation(UPDATE_TEST_CASE, {\n onCompleted: () => {\n toast({\n title: \"Test case updated\",\n description: \"The test case has been successfully updated.\",\n });\n onSuccess();\n },\n onError: (error) => {\n toast({\n title: \"Failed to update test case\",\n description: error.message,\n variant: \"destructive\",\n });\n },\n });\n\n const handleAddMessage = () => {\n if (!currentInput.trim() && currentFileParts.length === 0) return;\n\n const parts: any[] = [];\n\n if (currentInput.trim()) {\n parts.push({\n type: \"text\",\n text: currentInput.trim(),\n });\n }\n\n // Add file parts\n if (currentFileParts.length > 0) {\n parts.push(...currentFileParts);\n }\n\n const newMessage: UIMessage = {\n id: `msg-${Date.now()}`,\n role: \"user\",\n parts,\n };\n\n const placeholderMessage: UIMessage = {\n id: `msg-${Date.now()}`,\n role: \"assistant\",\n metadata: {\n type: \"placeholder\",\n },\n parts: [{\n type: \"text\",\n text: \"💬 Placeholder, generated agent response will be added here when the test case is run...\",\n }],\n };\n\n setInputs([...inputs, newMessage, placeholderMessage]);\n setCurrentInput(\"\");\n setCurrentFiles(null);\n setCurrentFileParts([]);\n };\n\n const handleRemoveMessage = (index: number) => {\n setInputs(inputs.filter((_, i) => i !== index));\n };\n\n const handleAddTool = () => {\n console.log(\"selectedTool\", selectedTool);\n console.log(\"expectedTools\", expectedTools);\n if (selectedTool && !expectedTools.includes(selectedTool)) {\n console.log(\"adding tool\", selectedTool);\n console.log(\"new expectedTools\", [...expectedTools, selectedTool]);\n setExpectedTools([...expectedTools, selectedTool]);\n setSelectedTool(\"\");\n }\n };\n\n const handleAddContext = () => {\n console.log(\"selectedContext\", selectedContext);\n console.log(\"expectedKnowledgeSources\", expectedKnowledgeSources);\n if (selectedContext && !expectedKnowledgeSources.includes(selectedContext)) {\n console.log(\"adding context\", selectedContext);\n console.log(\"new expectedKnowledgeSources\", [...expectedKnowledgeSources, selectedContext]);\n setExpectedKnowledgeSources([...expectedKnowledgeSources, selectedContext]);\n setSelectedContext(\"\");\n }\n };\n\n const handleAddAgent = () => {\n console.log(\"selectedAgent\", selectedAgent);\n console.log(\"expectedAgentTools\", expectedAgentTools);\n if (selectedAgent && !expectedAgentTools.includes(selectedAgent)) {\n console.log(\"adding agent\", selectedAgent);\n console.log(\"new expectedAgentTools\", [...expectedAgentTools, selectedAgent]);\n setExpectedAgentTools([...expectedAgentTools, selectedAgent]);\n setSelectedAgent(\"\");\n }\n };\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n if (!name.trim() || !expectedOutput.trim() || inputs.length === 0) {\n toast({\n title: \"Validation error\",\n description: \"Name, at least one input message, and expected output are required.\",\n variant: \"destructive\",\n });\n return;\n }\n\n const data = {\n name: name.trim(),\n description: description.trim() || null,\n inputs,\n expected_output: expectedOutput.trim(),\n expected_tools: expectedTools.length > 0 ? expectedTools : null,\n expected_knowledge_sources: expectedKnowledgeSources.length > 0 ? expectedKnowledgeSources : null,\n expected_agent_tools: expectedAgentTools.length > 0 ? expectedAgentTools : null,\n ...(evalSetId ? { eval_set_id: evalSetId } : {}),\n };\n\n if (isEditing) {\n updateTestCase({\n variables: {\n id: testCase.id,\n data,\n },\n });\n } else {\n createTestCase({\n variables: {\n data,\n },\n });\n }\n };\n\n const loading = creating || updating;\n\n const getToolName = (id: string) => {\n const tool = regularTools.find(t => t.id === id);\n return tool?.name || id;\n };\n\n const getContextName = (id: string) => {\n const context = knowledgeSourceTools.find(t => t.id === id);\n return context?.name || id;\n };\n\n const getAgentName = (id: string) => {\n const agent = agentTools.find(t => t.id === id);\n return agent?.name || id;\n };\n\n const getFileCount = (message: UIMessage) => {\n return message.parts.filter(part => part.type === \"file\").length;\n };\n\n return (\n <Dialog open={open} onOpenChange={onClose}>\n <DialogContent className=\"max-w-4xl max-h-[90vh] overflow-hidden flex flex-col\">\n <DialogHeader>\n <DialogTitle>{isEditing ? \"Edit Test Case\" : \"Create Test Case\"} {evalSetId ? `for Eval Set: ${evalSetId}` : \"\"}</DialogTitle>\n <DialogDescription>\n {isEditing ? \"Update the test case details.\" : \"Create a new test case with conversation inputs and expected outputs.\"}\n </DialogDescription>\n </DialogHeader>\n\n <form onSubmit={handleSubmit} className=\"flex-1 overflow-hidden flex flex-col\">\n <Tabs defaultValue=\"basic\" className=\"flex-1 overflow-hidden flex flex-col\">\n <TabsList className=\"grid w-full grid-cols-2\">\n <TabsTrigger value=\"basic\" className=\"gap-2\">\n <Info className=\"h-4 w-4\" />\n Basic Info\n </TabsTrigger>\n <TabsTrigger value=\"conversation\" className=\"gap-2\">\n <MessageSquare className=\"h-4 w-4\" />\n Conversation\n </TabsTrigger>\n {/* <TabsTrigger value=\"expected\" className=\"gap-2\">\n <Settings2 className=\"h-4 w-4\" />\n Expected Tools\n </TabsTrigger> */}\n </TabsList>\n\n <ScrollArea className=\"flex-1\">\n <TabsContent value=\"basic\" className=\"space-y-4 p-1 mt-4\">\n <div className=\"grid gap-5\">\n <div className=\"grid gap-2\">\n <Label htmlFor=\"name\">Name *</Label>\n <Input\n id=\"name\"\n placeholder=\"e.g., Customer Support - Refund Request\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n disabled={loading}\n required\n />\n </div>\n <div className=\"grid gap-2\">\n <Label htmlFor=\"description\">Description</Label>\n <Textarea\n id=\"description\"\n placeholder=\"Describe what this test case evaluates...\"\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n disabled={loading}\n rows={3}\n />\n </div>\n <div className=\"grid gap-2\">\n <Label htmlFor=\"expectedOutput\">Expected Output *</Label>\n <Textarea\n id=\"expectedOutput\"\n placeholder=\"Describe the expected final output (e.g., 'A JSON object containing refund details', 'An empathetic response offering alternatives')\"\n value={expectedOutput}\n onChange={(e) => setExpectedOutput(e.target.value)}\n disabled={loading}\n rows={4}\n required\n />\n <p className=\"text-xs text-muted-foreground\">\n This can be an exact expected response or a description of what the output should contain.\n </p>\n </div>\n </div>\n </TabsContent>\n\n <TabsContent value=\"conversation\" className=\"space-y-4 p-1 mt-4\">\n <Card>\n <CardHeader className=\"pb-3\">\n <div className=\"flex items-start justify-between\">\n <div>\n <CardTitle className=\"text-sm flex items-center gap-2\">\n <MessageSquare className=\"h-4 w-4\" />\n Conversation Flow\n {inputs.length > 0 && (\n <Badge variant=\"secondary\" className=\"ml-2\">\n {inputs.length} {inputs.length === 1 ? 'message' : 'messages'}\n </Badge>\n )}\n </CardTitle>\n <CardDescription className=\"mt-1.5\">\n Add user messages in order. The agent will run through this conversation flow and respond between each message automatically.\n </CardDescription>\n </div>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-6\">\n\n {inputs?.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center py-12 px-4 text-center border-2 border-dashed border-muted rounded-lg\">\n <Sparkles className=\"h-12 w-12 text-muted-foreground/50 mb-4\" />\n <h3 className=\"font-semibold text-lg mb-2\">No messages yet</h3>\n <p className=\"text-sm text-muted-foreground max-w-sm\">\n Start building your test conversation by adding user messages below.\n </p>\n </div>\n ) : (\n /* @ts-ignore */\n <Conversation className=\"max-h-[350px] overflow-y-auto border rounded-lg bg-muted/30 transition-all duration-300 ease-in-out\">\n {/* @ts-ignore */}\n <ConversationContent className=\"px-6 py-4\">\n <div className=\"animate-in fade-in duration-500\">\n <MessageRenderer\n messages={inputs}\n config={{\n marginTopFirstMessage: 'mt-0',\n customAssistantClassnames: 'bg-secondary/50 rounded-lg px-3 py-1 border-l-2 border-primary/30'\n }}\n status={\"ready\"}\n showActions={false}\n writeAccess={false}\n />\n </div>\n </ConversationContent>\n </Conversation>\n )}\n\n <div className=\"space-y-3 pt-2 border-t\">\n <Label htmlFor=\"currentInput\" className=\"text-sm font-semibold\">Add User Message</Label>\n <div className=\"space-y-3\">\n <Textarea\n id=\"currentInput\"\n placeholder=\"Type the user's message...\"\n value={currentInput}\n onChange={(e) => setCurrentInput(e.target.value)}\n disabled={loading}\n rows={2}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n handleAddMessage();\n }\n }}\n />\n\n <div className=\"flex items-center gap-2\">\n <UppyDashboard\n id=\"test-case-files\"\n selectionLimit={10}\n allowedFileTypes={[\n '.png', '.jpg', '.jpeg', '.gif', '.webp',\n '.pdf', '.docx', '.xlsx', '.xls', '.csv', '.pptx', '.ppt',\n '.mp3', '.wav', '.m4a', '.mp4', '.mpeg'\n ]}\n dependencies={[]}\n onConfirm={(items) => {\n setCurrentFiles(items)\n }}\n />\n\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={handleAddMessage}\n disabled={loading || (!currentInput.trim() && currentFileParts.length === 0)}\n className=\"ml-auto\"\n size=\"default\"\n >\n <Plus className=\"h-4 w-4 mr-2\" />\n Add Message\n </Button>\n </div>\n\n {currentFiles && currentFiles.length > 0 && (\n <>\n <div className=\"grid grid-cols-3 gap-2\">\n {currentFiles.map((item) => (\n <FileItem\n s3Key={item}\n disabled={true}\n active={false}\n onRemove={() => {\n setCurrentFiles(currentFiles?.filter((i) => i !== item))\n }}\n />\n ))}\n </div>\n <div className=\"flex items-start gap-2 p-3 bg-amber-500/10 border border-amber-500/20 rounded-lg\">\n <AlertCircle className=\"h-4 w-4 text-amber-600 dark:text-amber-500 mt-0.5 flex-shrink-0\" />\n <p className=\"text-xs text-amber-900 dark:text-amber-200\">\n <strong>Note:</strong> When running this test case, ensure the selected agent supports the file types you've attached here (images, documents, audio, etc.).\n </p>\n </div>\n </>\n )}\n </div>\n <p className=\"text-xs text-muted-foreground\">\n Press Enter to add, Shift+Enter for new line. You can attach files to messages.\n </p>\n </div>\n </CardContent>\n </Card>\n </TabsContent>\n\n {/* <TabsContent value=\"expected\" className=\"space-y-4 p-1 mt-4\">\n <div className=\"grid gap-5\">\n <Card className=\"border-l-2 border-l-blue-500/30\">\n <CardHeader className=\"pb-3\">\n <CardTitle className=\"text-sm flex items-center gap-2\">\n <Settings2 className=\"h-4 w-4\" />\n Expected Tools (Optional)\n {expectedTools.length > 0 && (\n <Badge variant=\"secondary\" className=\"ml-2\">\n {expectedTools.length}\n </Badge>\n )}\n </CardTitle>\n <CardDescription>Regular tools that should be used during the conversation</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n <div className=\"flex gap-2 flex-wrap\">\n {expectedTools.map((toolId, index) => (\n <Badge key={index} variant=\"secondary\">\n {getToolName(toolId)}\n <button\n type=\"button\"\n onClick={() => setExpectedTools(expectedTools.filter((_, i) => i !== index))}\n className=\"ml-2 hover:text-destructive\">\n ×\n </button>\n </Badge>\n ))}\n </div>\n <div className=\"flex gap-2\">\n <Select value={selectedTool} onValueChange={setSelectedTool} disabled={loading}>\n <SelectTrigger className=\"flex-1\">\n <SelectValue placeholder=\"Select a tool to add...\" />\n </SelectTrigger>\n <SelectContent>\n {regularTools.map((tool) => (\n <SelectItem key={tool.id} value={tool.id}>\n {tool.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Button\n type=\"button\"\n onClick={handleAddTool}\n disabled={loading || !selectedTool}\n className=\"gap-1.5\"\n variant={selectedTool ? \"default\" : \"outline\"}\n >\n <Plus className=\"h-4 w-4\" />\n <span className=\"hidden sm:inline\">Add</span>\n </Button>\n </div>\n {!selectedTool && (\n <p className=\"text-xs text-muted-foreground/75 italic\">\n Select a tool from the dropdown, then click Add\n </p>\n )}\n </CardContent>\n </Card>\n\n <Card className=\"border-l-2 border-l-purple-500/30\">\n <CardHeader className=\"pb-3\">\n <CardTitle className=\"text-sm flex items-center gap-2\">\n <FileText className=\"h-4 w-4\" />\n Expected Knowledge Sources (Optional)\n {expectedKnowledgeSources.length > 0 && (\n <Badge variant=\"secondary\" className=\"ml-2\">\n {expectedKnowledgeSources.length}\n </Badge>\n )}\n </CardTitle>\n <CardDescription>Context/knowledge sources that should be used</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n <div className=\"flex gap-2 flex-wrap\">\n {expectedKnowledgeSources.map((contextId, index) => (\n <Badge key={index} variant=\"secondary\">\n {getContextName(contextId)}\n <button\n type=\"button\"\n onClick={() => setExpectedKnowledgeSources(expectedKnowledgeSources.filter((_, i) => i !== index))}\n className=\"ml-2 hover:text-destructive\"\n >\n ×\n </button>\n </Badge>\n ))}\n </div>\n <div className=\"flex gap-2\">\n <Select value={selectedContext} onValueChange={setSelectedContext} disabled={loading}>\n <SelectTrigger className=\"flex-1\">\n <SelectValue placeholder=\"Select a knowledge source to add...\" />\n </SelectTrigger>\n <SelectContent>\n {knowledgeSourceTools.map((context) => (\n <SelectItem key={context.id} value={context.id}>\n {context.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Button\n type=\"button\"\n onClick={handleAddContext}\n disabled={loading || !selectedContext}\n className=\"gap-1.5\"\n variant={selectedContext ? \"default\" : \"outline\"}\n >\n <Plus className=\"h-4 w-4\" />\n <span className=\"hidden sm:inline\">Add</span>\n </Button>\n </div>\n {!selectedContext && (\n <p className=\"text-xs text-muted-foreground/75 italic\">\n Select a knowledge source from the dropdown, then click Add\n </p>\n )}\n </CardContent>\n </Card>\n\n <Card className=\"border-l-2 border-l-green-500/30\">\n <CardHeader className=\"pb-3\">\n <CardTitle className=\"text-sm flex items-center gap-2\">\n <Sparkles className=\"h-4 w-4\" />\n Expected Agent Tools (Optional)\n {expectedAgentTools.length > 0 && (\n <Badge variant=\"secondary\" className=\"ml-2\">\n {expectedAgentTools.length}\n </Badge>\n )}\n </CardTitle>\n <CardDescription>Agents that should be called as tools</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n <div className=\"flex gap-2 flex-wrap\">\n {expectedAgentTools.map((agentId, index) => (\n <Badge key={index} variant=\"secondary\">\n {getAgentName(agentId)}\n <button\n type=\"button\"\n onClick={() => setExpectedAgentTools(expectedAgentTools.filter((_, i) => i !== index))}\n className=\"ml-2 hover:text-destructive\"\n >\n ×\n </button>\n </Badge>\n ))}\n </div>\n <div className=\"flex gap-2\">\n <Select value={selectedAgent} onValueChange={setSelectedAgent} disabled={loading}>\n <SelectTrigger className=\"flex-1\">\n <SelectValue placeholder=\"Select an agent to add...\" />\n </SelectTrigger>\n <SelectContent>\n {agentTools.map((agent) => (\n <SelectItem key={agent.id} value={agent.id}>\n {agent.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Button\n type=\"button\"\n onClick={handleAddAgent}\n disabled={loading || !selectedAgent}\n className=\"gap-1.5\"\n variant={selectedAgent ? \"default\" : \"outline\"}\n >\n <Plus className=\"h-4 w-4\" />\n <span className=\"hidden sm:inline\">Add</span>\n </Button>\n </div>\n {!selectedAgent && (\n <p className=\"text-xs text-muted-foreground/75 italic\">\n Select an agent from the dropdown, then click Add\n </p>\n )}\n </CardContent>\n </Card>\n </div>\n </TabsContent> */}\n </ScrollArea>\n </Tabs>\n\n <DialogFooter className=\"mt-4 gap-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={onClose}\n disabled={loading}\n >\n Cancel\n </Button>\n <Button\n type=\"submit\"\n disabled={loading || !name.trim() || !expectedOutput.trim() || inputs.length === 0}\n className=\"shadow-sm hover:shadow-md transition-all\"\n >\n {loading && <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />}\n {isEditing ? \"Update Test Case\" : \"Create Test Case\"}\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog >\n );\n}\n","'use client';\n\nimport { Button } from '@/components/ui/button';\nimport { cn } from '@/lib/utils';\nimport { ArrowDownIcon } from 'lucide-react';\nimport type { ComponentProps } from 'react';\nimport { useCallback } from 'react';\nimport { StickToBottom, useStickToBottomContext } from 'use-stick-to-bottom';\n\n// @ts-ignore\nexport type ConversationProps = ComponentProps<typeof StickToBottom>;\n\n// @ts-ignore\nexport const Conversation = ({ className, ...props }: ConversationProps) => (\n// @ts-ignore\n <StickToBottom\n className={cn('relative flex-1 overflow-y-auto', className)}\n initial=\"smooth\"\n resize=\"smooth\"\n role=\"log\"\n {...props}\n />\n);\n\nexport type ConversationContentProps = ComponentProps<\n // @ts-ignore\n typeof StickToBottom.Content\n>;\n\nexport const ConversationContent = ({\n // @ts-ignore\n className,\n ...props\n}: ConversationContentProps) => (\n // @ts-ignore\n <StickToBottom.Content className={cn('p-4', className)} {...props} />\n);\n\nexport type ConversationScrollButtonProps = ComponentProps<typeof Button>;\n\nexport const ConversationScrollButton = ({\n className,\n ...props\n}: ConversationScrollButtonProps) => {\n const { isAtBottom, scrollToBottom } = useStickToBottomContext();\n\n const handleScrollToBottom = useCallback(() => {\n scrollToBottom();\n }, [scrollToBottom]);\n\n return (\n !isAtBottom && (\n <Button\n className={cn(\n 'absolute bottom-4 left-[50%] translate-x-[-50%] rounded-full',\n className\n )}\n onClick={handleScrollToBottom}\n size=\"icon\"\n type=\"button\"\n variant=\"outline\"\n {...props}\n >\n <ArrowDownIcon className=\"size-4\" />\n </Button>\n )\n );\n};\n","import {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from '@/components/ui/avatar';\nimport { cn } from '@/lib/utils';\nimport type { UIMessage } from 'ai';\nimport type { ComponentProps, HTMLAttributes } from 'react';\n\nexport type MessageProps = HTMLAttributes<HTMLDivElement> & {\n from: UIMessage['role'];\n};\n\nexport const Message = ({ className, from, ...props }: MessageProps) => (\n <div\n className={cn(\n 'group flex w-full items-end justify-end gap-2 py-4',\n from === 'user' ? 'is-user flex-row-reverse justify-end' : 'is-assistant flex-row-reverse justify-end',\n '[&>div]:max-w-[80%]',\n className\n )}\n {...props}\n />\n);\n\nexport type MessageContentProps = HTMLAttributes<HTMLDivElement>;\n\nexport const MessageContent = ({\n children,\n className,\n ...props\n}: MessageContentProps) => (\n <div\n className={cn(\n 'flex flex-col gap-2 overflow-hidden rounded-lg py-3 text-foreground text-sm',\n 'group-[.is-user]:bg-secondary group-[.is-user]:text-primary-foreground group-[.is-user]:px-4',\n 'group-[.is-assistant]:bg-transparent group-[.is-assistant]:text-foreground',\n className\n )}\n {...props}\n >\n <div className=\"is-user:dark\">{children}</div>\n </div>\n);\n\nexport type MessageAvatarProps = ComponentProps<typeof Avatar> & {\n src: string;\n name?: string;\n};\n\nexport const MessageAvatar = ({\n src,\n name,\n className,\n ...props\n}: MessageAvatarProps) => (\n <Avatar\n className={cn('size-8 ring ring-1 ring-border', className)}\n {...props}\n >\n <AvatarImage alt=\"\" className=\"mt-0 mb-0\" src={src} />\n <AvatarFallback>{name?.slice(0, 2) || 'ME'}</AvatarFallback>\n </Avatar>\n);\n","'use client';\n\nimport { Button } from '@/components/ui/button';\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from '@/components/ui/tooltip';\nimport { cn } from '@/lib/utils';\nimport type { ComponentProps } from 'react';\n\nexport type ActionsProps = ComponentProps<'div'>;\n\nexport const Actions = ({ className, children, ...props }: ActionsProps) => (\n <div className={cn('flex items-center gap-1', className)} {...props}>\n {children}\n </div>\n);\n\nexport type ActionProps = ComponentProps<typeof Button> & {\n tooltip?: string;\n label?: string;\n};\n\nexport const Action = ({\n tooltip,\n children,\n label,\n className,\n variant = 'ghost',\n size = 'sm',\n ...props\n}: ActionProps) => {\n const button = (\n <Button\n className={cn(\n 'size-9 p-1.5 text-muted-foreground hover:text-foreground',\n className\n )}\n size={size}\n type=\"button\"\n variant={variant}\n {...props}\n >\n {children}\n <span className=\"sr-only\">{label || tooltip}</span>\n </Button>\n );\n\n if (tooltip) {\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent>\n <p>{tooltip}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n }\n\n return button;\n};\n","'use client';\n\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from '@/components/ui/collapsible';\nimport { cn } from '@/lib/utils';\nimport { BrainIcon, ChevronDownIcon } from 'lucide-react';\nimport type { ComponentProps } from 'react';\nimport { createContext, memo, useContext, useEffect, useState } from 'react';\nimport { Response } from './response';\n\ntype ReasoningContextValue = {\n isStreaming: boolean;\n isOpen: boolean;\n setIsOpen: (open: boolean) => void;\n duration: number;\n};\n\nconst ReasoningContext = createContext<ReasoningContextValue | null>(null);\n\nconst useReasoning = () => {\n const context = useContext(ReasoningContext);\n if (!context) {\n throw new Error('Reasoning components must be used within Reasoning');\n }\n return context;\n};\n\nexport type ReasoningProps = ComponentProps<typeof Collapsible> & {\n isStreaming?: boolean;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n duration?: number;\n};\n\nconst AUTO_CLOSE_DELAY = 1000;\n\nexport const Reasoning = memo(\n ({\n className,\n isStreaming = false,\n open,\n defaultOpen = false,\n onOpenChange,\n duration: durationProp,\n children,\n ...props\n }: ReasoningProps) => {\n const [isOpen, setIsOpen] = useControllableState({\n prop: open,\n defaultProp: defaultOpen,\n onChange: onOpenChange,\n });\n const [duration, setDuration] = useControllableState({\n prop: durationProp,\n defaultProp: 0,\n });\n\n const [hasAutoClosedRef, setHasAutoClosedRef] = useState(false);\n const [startTime, setStartTime] = useState<number | null>(null);\n\n // Track duration when streaming starts and ends\n useEffect(() => {\n if (isStreaming) {\n if (startTime === null) {\n setStartTime(Date.now());\n }\n } else if (startTime !== null) {\n setDuration(Math.round((Date.now() - startTime) / 1000));\n setStartTime(null);\n }\n }, [isStreaming, startTime, setDuration]);\n\n // Auto-open when streaming starts, auto-close when streaming ends (once only)\n useEffect(() => {\n if (isStreaming && !isOpen) {\n setIsOpen(true);\n } else if (!isStreaming && isOpen && !defaultOpen && !hasAutoClosedRef) {\n // Add a small delay before closing to allow user to see the content\n const timer = setTimeout(() => {\n setIsOpen(false);\n setHasAutoClosedRef(true);\n }, AUTO_CLOSE_DELAY);\n return () => clearTimeout(timer);\n }\n }, [isStreaming, isOpen, defaultOpen, setIsOpen, hasAutoClosedRef]);\n\n const handleOpenChange = (newOpen: boolean) => {\n setIsOpen(newOpen);\n };\n\n return (\n <ReasoningContext.Provider\n value={{ isStreaming, isOpen, setIsOpen, duration }}\n >\n <Collapsible\n className={cn('not-prose mb-4', className)}\n onOpenChange={handleOpenChange}\n open={isOpen}\n {...props}\n >\n {children}\n </Collapsible>\n </ReasoningContext.Provider>\n );\n }\n);\n\nexport type ReasoningTriggerProps = ComponentProps<\n typeof CollapsibleTrigger\n> & {\n title?: string;\n};\n\nexport const ReasoningTrigger = memo(\n ({\n className,\n title = 'Reasoning',\n children,\n ...props\n }: ReasoningTriggerProps) => {\n const { isStreaming, isOpen, duration } = useReasoning();\n\n return (\n <CollapsibleTrigger\n className={cn(\n 'flex items-center gap-2 text-muted-foreground text-sm',\n className\n )}\n {...props}\n >\n {children ?? (\n <>\n <BrainIcon className=\"size-4\" />\n {isStreaming || duration === 0 ? (\n <p>Thinking...</p>\n ) : (\n <p>Thought for {duration} seconds</p>\n )}\n <ChevronDownIcon\n className={cn(\n 'size-4 text-muted-foreground transition-transform',\n isOpen ? 'rotate-180' : 'rotate-0'\n )}\n />\n </>\n )}\n </CollapsibleTrigger>\n );\n }\n);\n\nexport type ReasoningContentProps = ComponentProps<\n typeof CollapsibleContent\n> & {\n children: string;\n};\n\nexport const ReasoningContent = memo(\n ({ className, children, ...props }: ReasoningContentProps) => (\n <CollapsibleContent\n className={cn(\n 'mt-4 text-sm',\n 'data-[state=closed]:fade-out-0 data-[state=closed]:slide-out-to-top-2 data-[state=open]:slide-in-from-top-2 text-popover-foreground outline-none data-[state=closed]:animate-out data-[state=open]:animate-in',\n className\n )}\n {...props}\n >\n <Response className=\"grid gap-2\">{children}</Response>\n </CollapsibleContent>\n )\n);\n\nReasoning.displayName = 'Reasoning';\nReasoningTrigger.displayName = 'ReasoningTrigger';\nReasoningContent.displayName = 'ReasoningContent';\n","'use client';\n\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from '@/components/ui/collapsible';\nimport { cn } from '@/lib/utils';\nimport { BookIcon, ChevronDownIcon } from 'lucide-react';\nimport type { ComponentProps } from 'react';\n\nexport type SourcesProps = ComponentProps<'div'>;\n\nexport const Sources = ({ className, ...props }: SourcesProps) => (\n // @ts-ignore\n <Collapsible\n className={cn('not-prose mb-4 text-primary text-xs', className)}\n {...props}\n />\n);\n\nexport type SourcesTriggerProps = ComponentProps<typeof CollapsibleTrigger> & {\n count: number;\n};\n\nexport const SourcesTrigger = ({\n className,\n count,\n children,\n ...props\n}: SourcesTriggerProps) => (\n <CollapsibleTrigger className=\"flex items-center gap-2\" {...props}>\n {children ?? (\n <>\n <p className=\"font-medium\">Used {count} sources</p>\n <ChevronDownIcon className=\"h-4 w-4\" />\n </>\n )}\n </CollapsibleTrigger>\n);\n\nexport type SourcesContentProps = ComponentProps<typeof CollapsibleContent>;\n\nexport const SourcesContent = ({\n className,\n ...props\n}: SourcesContentProps) => (\n <CollapsibleContent\n className={cn(\n 'mt-3 flex w-fit flex-col gap-2',\n 'data-[state=closed]:fade-out-0 data-[state=closed]:slide-out-to-top-2 data-[state=open]:slide-in-from-top-2 outline-none data-[state=closed]:animate-out data-[state=open]:animate-in',\n className\n )}\n {...props}\n />\n);\n\nexport type SourceProps = ComponentProps<'a'>;\n\nexport const Source = ({ href, title, children, ...props }: SourceProps) => (\n <a\n className=\"flex items-center gap-2\"\n href={href}\n rel=\"noreferrer\"\n target=\"_blank\"\n {...props}\n >\n {children ?? (\n <>\n <BookIcon className=\"h-4 w-4\" />\n <span className=\"block font-medium\">{title}</span>\n </>\n )}\n </a>\n);\n","'use client';\n\nimport { cn } from '@/lib/utils';\nimport { CheckCircle2, Circle, Loader2, XCircle } from 'lucide-react';\nimport type { ComponentProps } from 'react';\n\nexport interface TodoItem {\n content: string;\n status: 'pending' | 'in_progress' | 'completed' | 'cancelled';\n priority: 'high' | 'medium' | 'low';\n id: string;\n}\n\nexport interface TodoListProps extends ComponentProps<'div'> {\n todos: TodoItem[];\n showPriority?: boolean;\n state?: 'input-streaming' | 'input-available' | 'output-available' | 'output-error';\n}\n\nconst statusConfig = {\n pending: {\n icon: Circle,\n label: 'Pending',\n className: 'text-muted-foreground',\n },\n in_progress: {\n icon: Loader2,\n label: 'In Progress',\n className: 'text-blue-500 animate-spin',\n },\n completed: {\n icon: CheckCircle2,\n label: 'Completed',\n className: 'text-green-500',\n },\n cancelled: {\n icon: XCircle,\n label: 'Cancelled',\n className: 'text-red-500',\n },\n};\n\nconst priorityConfig = {\n high: {\n label: 'High',\n className: 'bg-red-500/10 text-red-500 border-red-500/20',\n },\n medium: {\n label: 'Medium',\n className: 'bg-yellow-500/10 text-yellow-500 border-yellow-500/20',\n },\n low: {\n label: 'Low',\n className: 'bg-blue-500/10 text-blue-500 border-blue-500/20',\n },\n};\n\nexport const TodoList = ({\n todos,\n showPriority = false,\n state,\n className,\n ...props\n}: TodoListProps) => {\n\n if (typeof todos === 'string') {\n todos = JSON.parse(todos);\n }\n\n if (!todos || todos.length === 0) {\n return null;\n }\n\n const isStreaming = state === 'input-streaming';\n const hasError = state === 'output-error';\n const completedCount = todos.filter((t) => t.status === 'completed').length;\n const totalCount = todos.length;\n\n return (\n <div\n className={cn(\n 'my-2 space-y-1',\n isStreaming && 'opacity-70',\n className\n )}\n {...props}\n >\n {todos.map((todo, index) => {\n const StatusIcon = statusConfig[todo.status].icon;\n const statusClass = statusConfig[todo.status].className;\n const priorityClass = priorityConfig[todo.priority].className;\n const isLastInProgress = todo.status === 'in_progress' &&\n index === todos.findIndex(t => t.status === 'in_progress');\n\n return (\n <div\n key={todo.id}\n className={cn(\n 'flex items-start gap-2 py-0.5',\n todo.status === 'cancelled' && 'opacity-50'\n )}\n >\n <div className=\"flex-shrink-0 pt-0.5\">\n <StatusIcon className={cn('size-3.5', statusClass)} />\n </div>\n\n <div className=\"min-w-0 flex-1\">\n <span\n className={cn(\n 'text-sm',\n todo.status === 'completed' && 'text-muted-foreground line-through',\n todo.status === 'cancelled' && 'text-muted-foreground line-through',\n todo.status === 'in_progress' && isLastInProgress && 'font-medium'\n )}\n >\n {todo.content}\n </span>\n\n {showPriority && todo.priority === 'high' && (\n <span className=\"ml-2 text-red-500 text-xs\">(!)</span>\n )}\n </div>\n </div>\n );\n })}\n\n {/* Compact progress indicator */}\n {totalCount > 1 && (\n <div className=\"flex items-center gap-2 pt-1 text-muted-foreground text-xs\">\n <div className=\"h-1 flex-1 overflow-hidden rounded-full bg-secondary\">\n <div\n className=\"h-full bg-primary transition-all duration-300\"\n style={{\n width: `${(completedCount / totalCount) * 100}%`,\n }}\n />\n </div>\n <span className=\"whitespace-nowrap\">\n {completedCount}/{totalCount}\n </span>\n </div>\n )}\n\n {hasError && (\n <div className=\"flex items-center gap-1 pt-1 text-red-500 text-xs\">\n <XCircle className=\"size-3\" />\n <span>Error updating tasks</span>\n </div>\n )}\n </div>\n );\n};\n\nexport type TodoItemProps = ComponentProps<'div'> & {\n todo: TodoItem;\n showPriority?: boolean;\n state?: 'input-streaming' | 'input-available' | 'output-available' | 'output-error';\n};\n\nexport const TodoItemComponent = ({\n todo,\n showPriority = false,\n state,\n className,\n ...props\n}: TodoItemProps) => {\n const StatusIcon = statusConfig[todo.status].icon;\n const statusClass = statusConfig[todo.status].className;\n const isStreaming = state === 'input-streaming';\n\n return (\n <div\n className={cn(\n 'flex items-start gap-2 py-0.5',\n todo.status === 'cancelled' && 'opacity-50',\n isStreaming && 'opacity-70',\n className\n )}\n {...props}\n >\n <div className=\"flex-shrink-0 pt-0.5\">\n <StatusIcon className={cn('size-3.5', statusClass)} />\n </div>\n\n <div className=\"min-w-0 flex-1\">\n <span\n className={cn(\n 'text-sm',\n todo.status === 'completed' && 'text-muted-foreground line-through',\n todo.status === 'cancelled' && 'text-muted-foreground line-through',\n todo.status === 'in_progress' && 'font-medium'\n )}\n >\n {todo.content}\n </span>\n\n {showPriority && todo.priority === 'high' && (\n <span className=\"ml-2 text-red-500 text-xs\">(!)</span>\n )}\n </div>\n </div>\n );\n};\n","\"use client\"\n\nimport { DynamicToolUIPart, UIMessage } from \"ai\"\nimport { Message, MessageContent } from '@/components/ai-elements/message'\nimport { Actions, Action } from '@/components/ai-elements/actions'\nimport { Response } from '@/components/ai-elements/response'\nimport { Reasoning, ReasoningTrigger, ReasoningContent } from \"@/components/ai-elements/reasoning\"\nimport { Source, Sources, SourcesContent, SourcesTrigger } from \"@/components/ai-elements/source\"\nimport { RefreshCcwIcon, CopyIcon } from \"lucide-react\"\nimport { cn } from \"@/lib/utils\"\nimport Image from \"next/image\"\nimport { useToast } from \"@/components/ui/use-toast\"\nimport { TodoList } from \"./ai-elements/todo-list\"\n\ninterface MessageRendererProps {\n messages: UIMessage[]\n status?: \"streaming\" | \"idle\" | \"error\" | \"submitted\" | \"ready\"\n className?: string\n showActions?: boolean\n onRegenerate?: () => void\n onAddToolResult?: (args: { tool: string; toolCallId: string; output: string }) => void\n UntypedToolPartComponent?: React.ComponentType<{\n untypedToolPart: DynamicToolUIPart\n callId: string\n addToContext: (item: any) => void\n }>\n addToContext?: (item: any) => void\n writeAccess?: boolean\n config?: {\n marginTopFirstMessage?: string\n customAssistantClassnames?: string\n }\n}\n\nexport function MessageRenderer({\n messages,\n status = \"idle\",\n className,\n showActions = true,\n onRegenerate,\n onAddToolResult,\n UntypedToolPartComponent,\n addToContext,\n writeAccess = true,\n config\n}: MessageRendererProps) {\n const { toast } = useToast()\n\n return (\n <>\n {messages?.map((message, messageIndex) => {\n const isFirstMessage = messageIndex === 0\n const messageMetadata = message.metadata as any\n const isLastMessage = messageIndex === messages.length - 1\n\n return (\n <Message\n className={cn(\n message.role === 'assistant' && (\n config?.customAssistantClassnames ? config?.customAssistantClassnames : ''\n ),\n isFirstMessage && (\n config?.marginTopFirstMessage ? config?.marginTopFirstMessage : 'mt-12'\n ), className\n )}\n from={message.role}\n key={message.id}\n >\n <MessageContent>\n {message.parts.map((part, i) => {\n if (part.type === 'step-start') {\n return null\n }\n\n if (part.type === 'text') {\n return (\n <div key={`${message.id}-${i}`}>\n <Response className=\"chat-response-container\">\n {part.text}\n </Response>\n </div>\n )\n }\n\n if (part.type === 'tool-askForConfirmation' && onAddToolResult) {\n const callId = part.toolCallId\n\n switch (part.state) {\n case 'input-streaming':\n return (\n <div key={callId}>Loading confirmation request...</div>\n )\n case 'input-available':\n return (\n <div key={callId}>\n {(part.input as { message: string }).message}\n <div>\n <button\n onClick={() =>\n onAddToolResult({\n tool: 'askForConfirmation',\n toolCallId: callId,\n output: 'Yes, confirmed',\n })\n }\n >\n Yes\n </button>\n <button\n onClick={() =>\n onAddToolResult({\n tool: 'askForConfirmation',\n toolCallId: callId,\n output: 'No, denied',\n })\n }\n >\n No\n </button>\n </div>\n </div>\n )\n case 'output-available':\n return (\n <div key={callId}>\n Tool call allowed: {part.output as string}\n </div>\n )\n case 'output-error':\n return <div key={callId}>Error: {part.errorText}</div>\n }\n }\n\n if (part.type?.toLowerCase() === 'tool-todo_write' || part.type?.toLowerCase() === 'tool-todo_read') {\n const dynamicToolPart = part as any;\n const output = dynamicToolPart.output as {\n result: {\n content: string\n status: \"pending\" | \"in_progress\" | \"completed\" | \"cancelled\"\n priority: \"high\" | \"medium\" | \"low\"\n id: string\n }[]\n };\n if (!output?.result) {\n return null;\n }\n const state: \"input-streaming\" | \"input-available\" | \"output-available\" | \"output-error\" = dynamicToolPart.state;\n return (\n <TodoList todos={output.result} showPriority={true} state={state} />\n )\n }\n\n if (\n (part.type.startsWith('tool-') || part.type === 'dynamic-tool') &&\n UntypedToolPartComponent &&\n addToContext\n ) {\n const untypedToolPart = part as DynamicToolUIPart\n const callId = untypedToolPart.toolCallId\n return (\n <UntypedToolPartComponent\n key={callId}\n untypedToolPart={untypedToolPart}\n callId={callId}\n addToContext={addToContext}\n />\n )\n }\n\n if (part.type === 'file') {\n if (part.mediaType?.startsWith('image/')) {\n return (\n <Image\n key={`${message.id}-${i}`}\n src={part.url}\n width={300}\n height={300}\n alt={\"Generated image\"}\n />\n )\n }\n }\n\n if (part.type === 'source-url') {\n return (\n <Sources key={`${message.id}-${i}`}>\n <SourcesTrigger\n count={message.parts.filter(\n (part) => part.type === 'source-url'\n ).length}\n />\n <SourcesContent key={`${message.id}`}>\n {message.parts.map((part, i) => {\n switch (part.type) {\n case 'source-url':\n return (\n <Source\n key={`${message.id}-${i}`}\n href={part.url}\n title={part.title}\n />\n )\n }\n })}\n </SourcesContent>\n </Sources>\n )\n }\n\n if (part.type === 'reasoning') {\n return (\n <Reasoning\n key={`${message.id}-${i}`}\n className=\"w-full\"\n isStreaming={status === 'streaming'}\n >\n <ReasoningTrigger />\n <ReasoningContent>{part.text}</ReasoningContent>\n </Reasoning>\n )\n }\n\n return null\n })}\n\n {showActions && message.role === 'assistant' && (\n <Actions className=\"mt-2\">\n {onRegenerate && (\n <Action\n onClick={() => onRegenerate()}\n label=\"Retry\"\n disabled={!writeAccess}\n >\n <RefreshCcwIcon className=\"size-3\" />\n </Action>\n )}\n <Action\n onClick={() => {\n navigator.clipboard.writeText(\n message.parts.map((part: any) => part?.text || \"\").join('\\n')\n )\n toast({\n title: \"Copied message\",\n description: \"The message was copied to your clipboard.\",\n })\n }}\n label=\"Copy\"\n >\n <CopyIcon className=\"size-3\" />\n </Action>\n {messageMetadata?.totalTokens && (\n <small className=\"text-muted-foreground\">\n {Intl.NumberFormat('en-US').format(messageMetadata?.totalTokens)} tokens\n </small>\n )}\n </Actions>\n )}\n </MessageContent>\n </Message>\n )\n })}\n </>\n )\n}\n","\"use client\";\n\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\";\nimport * as React from \"react\";\n\nimport { buttonVariants } from \"@/components/ui/button\";\nimport { cn } from \"@/lib/utils\";\n\nconst AlertDialog = AlertDialogPrimitive.Root;\n\nconst AlertDialogTrigger = AlertDialogPrimitive.Trigger;\n\nconst AlertDialogPortal = AlertDialogPrimitive.Portal;\n\nconst AlertDialogOverlay = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Overlay\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className,\n )}\n {...props}\n ref={ref}\n />\n));\nAlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;\n\nconst AlertDialogContent = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\",\n className,\n )}\n {...props}\n />\n </AlertDialogPortal>\n));\nAlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;\n\nconst AlertDialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-2 text-center sm:text-left\",\n className,\n )}\n {...props}\n />\n);\nAlertDialogHeader.displayName = \"AlertDialogHeader\";\n\nconst AlertDialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className,\n )}\n {...props}\n />\n);\nAlertDialogFooter.displayName = \"AlertDialogFooter\";\n\nconst AlertDialogTitle = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Title\n ref={ref}\n className={cn(\"text-lg font-semibold\", className)}\n {...props}\n />\n));\nAlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;\n\nconst AlertDialogDescription = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nAlertDialogDescription.displayName =\n AlertDialogPrimitive.Description.displayName;\n\nconst AlertDialogAction = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Action>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Action\n ref={ref}\n className={cn(buttonVariants(), className)}\n {...props}\n />\n));\nAlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;\n\nconst AlertDialogCancel = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Cancel>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Cancel\n ref={ref}\n className={cn(\n buttonVariants({ variant: \"outline\" }),\n \"mt-2 sm:mt-0\",\n className,\n )}\n {...props}\n />\n));\nAlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;\n\nexport {\n AlertDialog,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogTrigger,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogFooter,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogAction,\n AlertDialogCancel,\n};\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst badgeVariants = cva(\n \"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-primary text-primary-foreground hover:bg-primary/80\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n destructive:\n \"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80\",\n outline: \"text-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {}\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return (\n <div className={cn(badgeVariants({ variant }), className)} {...props} />\n );\n}\n\nexport { Badge, badgeVariants };\n","import * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst Card = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"rounded-lg border bg-card text-card-foreground shadow-sm\",\n className,\n )}\n {...props}\n />\n));\nCard.displayName = \"Card\";\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col space-y-1.5 p-6\", className)}\n {...props}\n />\n));\nCardHeader.displayName = \"CardHeader\";\n\nconst CardTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn(\n \"text-2xl font-semibold leading-none tracking-tight\",\n className,\n )}\n {...props}\n />\n));\nCardTitle.displayName = \"CardTitle\";\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nCardDescription.displayName = \"CardDescription\";\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n));\nCardContent.displayName = \"CardContent\";\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center p-6 pt-0\", className)}\n {...props}\n />\n));\nCardFooter.displayName = \"CardFooter\";\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardDescription,\n CardContent,\n};\n","\"use client\";\n\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst Dialog = DialogPrimitive.Root;\n\nconst DialogTrigger = DialogPrimitive.Trigger;\n\nconst DialogPortal = DialogPrimitive.Portal;\n\nconst DialogClose = DialogPrimitive.Close;\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className,\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\",\n className,\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\">\n <X className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className,\n )}\n {...props}\n />\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className,\n )}\n {...props}\n />\n);\nDialogFooter.displayName = \"DialogFooter\";\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className,\n )}\n {...props}\n />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogClose,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n};\n","\"use client\";\n\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst labelVariants = cva(\n \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\",\n);\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\n VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(labelVariants(), className)}\n {...props}\n />\n));\nLabel.displayName = LabelPrimitive.Root.displayName;\n\nexport { Label };\n","\"use client\";\n\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\";\nimport * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst ScrollArea = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>\n>(({ className, children, ...props }, ref) => (\n <ScrollAreaPrimitive.Root\n ref={ref}\n className={cn(\"relative overflow-hidden\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport className=\"size-full rounded-[inherit]\">\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n));\nScrollArea.displayName = ScrollAreaPrimitive.Root.displayName;\n\nconst ScrollBar = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>\n>(({ className, orientation = \"vertical\", ...props }, ref) => (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n \"flex touch-none select-none transition-colors\",\n orientation === \"vertical\" &&\n \"h-full w-2.5 border-l border-l-transparent p-[1px]\",\n orientation === \"horizontal\" &&\n \"h-2.5 flex-col border-t border-t-transparent p-[1px]\",\n className,\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb className=\"relative flex-1 rounded-full bg-border\" />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n));\nScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;\n\nexport { ScrollArea, ScrollBar };\n","import * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst Table = React.forwardRef<\n HTMLTableElement,\n React.HTMLAttributes<HTMLTableElement>\n>(({ className, ...props }, ref) => (\n <div className=\"relative w-full overflow-auto\">\n <table\n ref={ref}\n className={cn(\"w-full caption-bottom text-sm\", className)}\n {...props}\n />\n </div>\n));\nTable.displayName = \"Table\";\n\nconst TableHeader = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <thead ref={ref} className={cn(\"[&_tr]:border-b\", className)} {...props} />\n));\nTableHeader.displayName = \"TableHeader\";\n\nconst TableBody = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tbody\n ref={ref}\n className={cn(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n));\nTableBody.displayName = \"TableBody\";\n\nconst TableFooter = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tfoot\n ref={ref}\n className={cn(\n \"border-t bg-muted/50 font-medium [&>tr]:last:border-b-0\",\n className,\n )}\n {...props}\n />\n));\nTableFooter.displayName = \"TableFooter\";\n\nconst TableRow = React.forwardRef<\n HTMLTableRowElement,\n React.HTMLAttributes<HTMLTableRowElement>\n>(({ className, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn(\n \"border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted\",\n className,\n )}\n {...props}\n />\n));\nTableRow.displayName = \"TableRow\";\n\nconst TableHead = React.forwardRef<\n HTMLTableCellElement,\n React.ThHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n \"h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0 [&:has([role=checkbox])]:w-[40px]\",\n className,\n )}\n {...props}\n />\n));\nTableHead.displayName = \"TableHead\";\n\nconst TableCell = React.forwardRef<\n HTMLTableCellElement,\n React.TdHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn(\n \"p-4 align-middle [&:has([role=checkbox])]:pr-0 [&:has([role=checkbox])]:w-[40px]\",\n className,\n )}\n {...props}\n />\n));\nTableCell.displayName = \"TableCell\";\n\nconst TableCaption = React.forwardRef<\n HTMLTableCaptionElement,\n React.HTMLAttributes<HTMLTableCaptionElement>\n>(({ className, ...props }, ref) => (\n <caption\n ref={ref}\n className={cn(\"mt-4 text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nTableCaption.displayName = \"TableCaption\";\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n};\n","import * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nexport interface TextareaProps\n extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n ref={ref}\n {...props}\n />\n );\n },\n);\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n"],"names":["TestCaseModal","param","open","onClose","evalSetId","onSuccess","testCase","toast","useToast","isEditing","data","toolsData","useQuery","GET_TOOLS","variables","page","limit","regularTools","agentTools","knowledgeSourceTools","useMemo","tools","items","console","log","filter","t","type","name","setName","useState","description","setDescription","expectedOutput","setExpectedOutput","inputs","setInputs","currentInput","setCurrentInput","currentFiles","setCurrentFiles","currentFileParts","setCurrentFileParts","expectedTools","setExpectedTools","expectedKnowledgeSources","setExpectedKnowledgeSources","expectedAgentTools","setExpectedAgentTools","selectedTool","setSelectedTool","selectedContext","setSelectedContext","selectedAgent","setSelectedAgent","useEffect","expected_output","expected_tools","expected_knowledge_sources","expected_agent_tools","updateMessageFiles","keys","Promise","all","map","key","mediaType","split","pop","filename","url","getPresignedUrl","length","createTestCase","loading","creating","useMutation","CREATE_TEST_CASE","onCompleted","title","onError","error","message","variant","updateTestCase","updating","UPDATE_TEST_CASE","handleAddMessage","trim","parts","push","text","id","concat","Date","now","role","metadata","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__","jsx","Dialog","onOpenChange","jsxs","DialogContent","className","DialogHeader","DialogTitle","DialogDescription","form","onSubmit","e","preventDefault","eval_set_id","Tabs","defaultValue","TabsList","TabsTrigger","value","Info","MessageSquare","ScrollArea","TabsContent","div","Label","htmlFor","Input","placeholder","onChange","target","disabled","required","Textarea","rows","p","Card","CardHeader","CardTitle","Badge","CardDescription","CardContent","Sparkles","h3","Conversation","ConversationContent","MessageRenderer","messages","config","marginTopFirstMessage","customAssistantClassnames","status","showActions","writeAccess","onKeyDown","shiftKey","UppyDashboard","selectionLimit","allowedFileTypes","dependencies","onConfirm","Button","onClick","size","Plus","Fragment","FileItem","s3Key","item","active","onRemove","i","AlertCircle","strong","DialogFooter","Loader2","props","StickToBottom","cn","initial","resize","Content","Message","from","jsx_runtime","MessageContent","children","Actions","Action","tooltip","label","button","span","TooltipProvider","Tooltip","TooltipTrigger","asChild","TooltipContent","ReasoningContext","createContext","useReasoning","context","useContext","Reasoning","memo","isStreaming","defaultOpen","duration","durationProp","isOpen","setIsOpen","useControllableState","prop","defaultProp","setDuration","hasAutoClosedRef","setHasAutoClosedRef","startTime","setStartTime","Math","round","timer","setTimeout","clearTimeout","Provider","Collapsible","newOpen","ReasoningTrigger","CollapsibleTrigger","BrainIcon","ChevronDownIcon","ReasoningContent","CollapsibleContent","Response","displayName","Sources","SourcesTrigger","count","SourcesContent","Source","href","a","rel","BookIcon","statusConfig","pending","icon","Circle","in_progress","completed","CheckCircle2","cancelled","XCircle","priorityConfig","high","medium","low","TodoList","todos","showPriority","state","JSON","parse","completedCount","totalCount","todo","index","StatusIcon","statusClass","priority","isLastInProgress","findIndex","content","style","width","hasError","onRegenerate","onAddToolResult","UntypedToolPartComponent","addToContext","messageIndex","messageMetadata","isFirstMessage","part","callId","toolCallId","input","tool","output","errorText","toLowerCase","dynamicToolPart","result","startsWith","untypedToolPart","Image","src","height","alt","RefreshCcwIcon","navigator","clipboard","writeText","join","CopyIcon","totalTokens","small","Intl","NumberFormat","format","AlertDialog","AlertDialogPrimitive","AlertDialogPortal","AlertDialogOverlay","React","ref","AlertDialogContent","AlertDialogHeader","AlertDialogFooter","AlertDialogTitle","AlertDialogDescription","AlertDialogAction","buttonVariants","AlertDialogCancel","badgeVariants","cva","variants","default","secondary","destructive","outline","defaultVariants","CardFooter","DialogPrimitive","DialogTrigger","DialogPortal","DialogOverlay","X","labelVariants","LabelPrimitive","ScrollAreaPrimitive","ScrollBar","orientation","Table","table","TableHeader","thead","TableBody","tbody","TableFooter","tfoot","TableRow","tr","TableHead","th","TableCell","td","TableCaption","caption","textarea"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1957],{27699:function(e,s,a){a.d(s,{x:function(){return w}});var t=a(57437),l=a(2265),r=a(12199),n=a(13832),i=a(27689),o=a(26110),d=a(62869),c=a(95186),m=a(76818),u=a(26815),x=a(40875),h=a(88893),v=a(18930),p=a(77992),f=a(94508),b=a(8014),g=a(12339),j=a(35629);function w(e){var s,a,w,N,y,C;let{isOpen:k,onClose:_,messages:E,sessionTitle:A,existingWorkflow:D,isReadOnly:S=!1}=e,{user:U}=(0,l.useContext)(n.S),{toast:z}=(0,p.pm)(),[Z,B]=(0,l.useState)({rights_mode:(null==D?void 0:D.rights_mode)||"private",users:(null==D?void 0:null===(s=D.RBAC)||void 0===s?void 0:s.users)||[],roles:(null==D?void 0:null===(a=D.RBAC)||void 0===a?void 0:a.roles)||[],projects:(null==D?void 0:null===(w=D.RBAC)||void 0===w?void 0:w.projects)||[]}),R=!!D,[W,P]=(0,l.useState)((null==D?void 0:D.name)||""),[V,M]=(0,l.useState)((null==D?void 0:D.description)||""),[F,I]=(0,l.useState)((null==D?void 0:D.variables)||[]),[q,O]=(0,l.useState)((null==D?void 0:D.steps_json)||[]),[$,H]=(0,l.useState)(!1),[K,T]=(0,l.useState)("setup"),[J,Q]=(0,l.useState)(!1),[G,L]=(0,l.useState)(null),[X,Y]=(0,l.useState)(""),[ee]=(0,r.D)(i.B_),[es]=(0,r.D)(i._J);l.useEffect(()=>{if(E.length>0){let e=[];E.forEach((s,a)=>{let t=s.content||(s.parts?s.parts.filter(e=>"text"===e.type).map(e=>e.text).join("\n"):"");"user"===s.role?e.push({id:"step_".concat(a+1),type:"user",content:t,variablesUsed:[]}):"assistant"===s.role?e.push({id:"step_".concat(a+1),type:"assistant",contentExample:t}):"system"===s.role&&s.parts&&s.parts.forEach((s,t)=>{"tool-invocation"===s.type&&s.toolInvocation&&e.push({id:"step_".concat(a+1,"_").concat(t),type:"tool",toolName:s.toolInvocation.toolName})})}),console.log("transformedSteps",e),O(e),P(A||"My Workflow")}},[E,A,q.length]);let ea=(0,l.useCallback)((e,s)=>{if(!e.match(/^[A-Za-z_][A-Za-z0-9_]{1,63}$/))return z({title:"Invalid variable name",description:"Variable name must start with a letter or underscore, contain only letters, numbers, and underscores, and be 2-64 characters long.",variant:"destructive"}),!1;if(F.some(s=>s.name===e))return!0;let a={name:e,type:"string",required:!0,description:s||"Auto-detected variable"};return I(e=>[...e,a]),!0},[F,z]),et=(0,l.useCallback)((e,s)=>{let a=(s.match(/\{([A-Za-z_][A-Za-z0-9_]{1,63})\}/g)||[]).map(e=>e.slice(1,-1));a.forEach(e=>{ea(e)}),O(t=>t.map(t=>t.id===e?{...t,content:s,variablesUsed:a}:t));let t=new Set;q.forEach(a=>{a.id===e?(s.match(/\{([A-Za-z_][A-Za-z0-9_]{1,63})\}/g)||[]).forEach(e=>t.add(e.slice(1,-1))):a.variablesUsed&&a.variablesUsed.forEach(e=>t.add(e))}),I(e=>e.filter(e=>t.has(e.name)))},[q,ea]),el=(0,l.useCallback)(e=>{I(s=>s.filter(s=>s.name!==e)),O(s=>s.map(s=>{var a,t;return{...s,content:null===(a=s.content)||void 0===a?void 0:a.replace(RegExp("\\{".concat(e,"\\}"),"g"),""),variablesUsed:(null===(t=s.variablesUsed)||void 0===t?void 0:t.filter(s=>s!==e))||[]}}))},[]),er=(0,l.useCallback)((e,s)=>s.match(/^[A-Za-z_][A-Za-z0-9_]{1,63}$/)?F.some(a=>a.name===s&&a.name!==e)?(z({title:"Variable name already exists",description:"A variable with this name already exists.",variant:"destructive"}),!1):(I(a=>a.map(a=>a.name===e?{...a,name:s}:a)),O(a=>a.map(a=>{var t,l;return{...a,content:null===(t=a.content)||void 0===t?void 0:t.replace(RegExp("\\{".concat(e,"\\}"),"g"),"{".concat(s,"}")),variablesUsed:(null===(l=a.variablesUsed)||void 0===l?void 0:l.map(a=>a===e?s:a))||[]}})),!0):(z({title:"Invalid variable name",description:"Variable name must start with a letter or underscore and contain only letters, numbers, and underscores.",variant:"destructive"}),!1),[F,z]),en=(0,l.useMemo)(()=>{var e,s,a;return!!W.trim()&&0!==q.length&&("users"!==Z.rights_mode||(null===(e=Z.users)||void 0===e?void 0:e.length)!==0)&&("roles"!==Z.rights_mode||(null===(s=Z.roles)||void 0===s?void 0:s.length)!==0)&&("projects"!==Z.rights_mode||(null===(a=Z.projects)||void 0===a?void 0:a.length)!==0)&&q.filter(e=>"user"===e.type).every(e=>(e.content||"").replace(/\{[^}]+\}/g,"").trim().length>0)},[W,q,Z]),ei=(0,l.useCallback)(async()=>{if(en&&(null==U?void 0:U.id)){H(!0);try{let e=q.map(e=>({id:e.id,type:e.type,..."user"===e.type&&{content:e.content},..."assistant"===e.type&&{contentExample:e.contentExample},..."tool"===e.type&&{toolName:e.toolName}}));R&&D?(await es({variables:{id:D.id,name:W.trim(),description:V.trim()||null,rights_mode:Z.rights_mode,RBAC:{users:Z.users,roles:Z.roles,projects:Z.projects},variables:F,steps_json:e}}),z({title:"Workflow updated!",description:'"'.concat(W,'" has been updated successfully.')})):(await ee({variables:{name:W.trim(),description:V.trim()||null,owner:U.id,rights_mode:Z.rights_mode,RBAC:{users:Z.users,roles:Z.roles,projects:Z.projects},variables:F,steps_json:e}}),z({title:"Workflow created!",description:'"'.concat(W,'" has been saved as a workflow template.')})),_()}catch(e){console.error("Error saving workflow:",e),z({title:"Error saving workflow",description:"There was an error saving your workflow. Please try again.",variant:"destructive"})}finally{H(!1)}}},[en,null==U?void 0:U.id,W,V,Z,F,q,ee,es,z,_,R,D]);return k?(0,t.jsx)(o.Vq,{open:k,onOpenChange:_,children:(0,t.jsxs)(o.cZ,{className:"max-w-4xl max-h-[92vh] flex flex-col",children:[(0,t.jsxs)(o.fK,{className:"pb-4",children:[(0,t.jsx)(o.$N,{className:"text-lg",children:R?S?"View Workflow":"Edit Workflow":"Save as Workflow"}),(0,t.jsx)(o.Be,{className:"text-sm",children:R?S?"View workflow details and configuration.":"Modify this workflow template. Edit your messages and use {variable_name} syntax to create variables.":"Convert this conversation into a reusable workflow template. Edit your messages and use {variable_name} syntax to create variables."})]}),(0,t.jsx)("div",{className:"flex-1 mt-6",children:(0,t.jsxs)(g.mQ,{value:K,onValueChange:T,className:"h-full flex flex-col",children:[(0,t.jsxs)(g.dr,{className:"grid w-full grid-cols-2 mb-6",children:[(0,t.jsx)(g.SP,{value:"setup",className:"data-[state=active]:bg-background",children:"Setup & Permissions"}),(0,t.jsx)(g.SP,{value:"workflow",className:"data-[state=active]:bg-background",children:"Workflow Steps & Variables"})]}),(0,t.jsxs)("div",{className:"flex-1 pb-6",children:[(0,t.jsx)(g.nU,{value:"setup",className:"mt-0 h-full",children:(0,t.jsxs)("div",{className:"space-y-6",children:[(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)(u._,{htmlFor:"workflow-name",className:"text-base font-semibold",children:"Workflow Name *"}),(0,t.jsx)(c.I,{id:"workflow-name",value:W,onChange:e=>P(e.target.value),placeholder:"My Workflow",className:"mt-2 h-11",readOnly:S}),!W.trim()&&(0,t.jsxs)("p",{className:"text-sm text-destructive mt-1 flex items-center",children:[(0,t.jsx)("span",{className:"mr-1",children:"⚠️"}),"Workflow name is required"]})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)(u._,{htmlFor:"workflow-description",className:"text-base font-semibold",children:"Description"}),(0,t.jsx)(m.g,{id:"workflow-description",value:V,onChange:e=>M(e.target.value),placeholder:"Describe what this workflow does and when to use it...",rows:3,className:"mt-2 resize-none",readOnly:S})]})]}),(0,t.jsxs)("div",{className:"border-t pt-6",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h3",{className:"text-base font-semibold mb-1",children:"Sharing & Permissions"}),(0,t.jsx)("p",{className:"text-sm text-muted-foreground",children:"Control who can view and edit this workflow"})]}),(0,t.jsxs)(d.z,{type:"button",variant:"outline",size:"sm",onClick:()=>Q(!J),className:"ml-4",children:[J?"Hide Advanced":"Show Advanced",(0,t.jsx)(x.Z,{className:(0,f.cn)("w-4 h-4 ml-1 transition-transform",J&&"rotate-180")})]})]}),J&&(0,t.jsx)(b.P,{initialRightsMode:null==D?void 0:D.rights_mode,initialUsers:null==D?void 0:null===(N=D.RBAC)||void 0===N?void 0:N.users,initialRoles:null==D?void 0:null===(y=D.RBAC)||void 0===y?void 0:y.roles,initialProjects:null==D?void 0:null===(C=D.RBAC)||void 0===C?void 0:C.projects,onChange:(e,s,a,t)=>{B({rights_mode:e,users:s,roles:a,projects:t})}}),!J&&(0,t.jsx)("div",{className:"text-sm text-muted-foreground bg-muted/30 p-3 rounded-md",children:"Using default permissions (private to you)"})]})]})}),(0,t.jsx)(g.nU,{value:"workflow",className:"mt-0 h-full",children:(0,t.jsxs)("div",{className:"h-full flex gap-6",children:[(0,t.jsxs)("div",{className:"flex-1",children:[(0,t.jsxs)("div",{className:"mb-4",children:[(0,t.jsx)("h3",{className:"text-base font-semibold mb-2",children:"Conversation Steps"}),(0,t.jsx)("div",{className:"border rounded-lg p-3 mb-4",children:(0,t.jsxs)("p",{className:"text-sm",children:["\uD83D\uDCA1 ",(0,t.jsx)("strong",{children:"Pro tip:"})," Use ","{variable_name}"," syntax in your messages to create reusable variables. For example you can use ","{company_name}"," to create a variable for the company name so you can reuse this flow template with different companies."]})})]}),(0,t.jsx)("div",{className:"space-y-4 max-h-[500px] overflow-y-auto pr-2",children:q.map((e,s)=>(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"border rounded-lg p-4 bg-card",children:[(0,t.jsxs)("div",{className:"flex items-center gap-3 mb-3",children:[(0,t.jsx)("span",{className:(0,f.cn)("text-sm font-medium px-3 py-1 rounded-full","user"===e.type?"bg-blue-100 text-blue-700":"assistant"===e.type?"bg-green-100 text-green-700":"bg-purple-100 text-purple-700"),children:"user"===e.type?"\uD83D\uDC64 User":"assistant"===e.type?"\uD83E\uDD16 Assistant":"\uD83D\uDD27 ".concat(e.toolName)}),e.variablesUsed&&e.variablesUsed.length>0&&(0,t.jsx)("div",{className:"flex gap-1 flex-wrap",children:e.variablesUsed.map(e=>(0,t.jsx)("span",{className:"text-xs bg-blue-50 text-blue-600 px-2 py-1 rounded font-mono border border-blue-200",children:"{".concat(e,"}")},e))})]}),"user"===e.type?(0,t.jsx)("div",{children:(0,t.jsx)(m.g,{value:e.content||"",onChange:s=>et(e.id,s.target.value),placeholder:"Enter your message...",className:"min-h-[80px] resize-none",rows:3,readOnly:S})}):(0,t.jsx)("div",{className:"bg-muted/50 p-3 rounded-md",children:"assistant"===e.type?(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"text-xs font-medium text-muted-foreground mb-2",children:"Example response (will be regenerated):"}),(0,t.jsx)(j.H,{children:e.contentExample})]}):(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"text-xs font-medium text-muted-foreground mb-1",children:["Tool: ",e.toolName]}),(0,t.jsx)("div",{className:"text-sm text-muted-foreground",children:"Parameters will be generated dynamically"})]})})]}),s<q.length-1&&(0,t.jsx)("div",{className:"flex justify-center my-3",children:(0,t.jsx)(x.Z,{className:"w-5 h-5 text-muted-foreground/50"})})]},e.id))})]}),(0,t.jsxs)("div",{className:"w-80",children:[(0,t.jsxs)("div",{className:"mb-4",children:[(0,t.jsxs)("h3",{className:"text-base font-semibold mb-2",children:["Variables (",F.length,")"]}),(0,t.jsx)("p",{className:"text-sm text-muted-foreground",children:"Auto-detected from your messages"})]}),F.length>0?(0,t.jsx)("div",{className:"space-y-3 max-h-[500px] overflow-y-auto",children:F.map(e=>(0,t.jsxs)("div",{className:"border rounded-lg p-3 bg-card",children:[(0,t.jsxs)("div",{className:"flex items-start justify-between mb-2",children:[(0,t.jsx)("div",{className:"font-mono text-blue-600 font-medium text-sm",children:"{".concat(e.name,"}")}),!S&&(0,t.jsx)("div",{className:"flex gap-1",children:G===e.name?(0,t.jsx)(c.I,{value:X,onChange:e=>Y(e.target.value),className:"h-6 text-xs font-mono w-20",placeholder:"variable_name",autoFocus:!0,onKeyDown:s=>{"Enter"===s.key?(X&&X!==e.name&&er(e.name,X),L(null),Y("")):"Escape"===s.key&&(L(null),Y(""))},onBlur:()=>{X&&X!==e.name&&er(e.name,X),L(null),Y("")}}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(d.z,{size:"sm",variant:"ghost",className:"h-6 w-6 p-0",onClick:()=>{L(e.name),Y(e.name)},children:(0,t.jsx)(h.Z,{className:"w-3 h-3"})}),(0,t.jsx)(d.z,{size:"sm",variant:"ghost",className:"h-6 w-6 p-0 text-destructive hover:bg-destructive/10",onClick:()=>el(e.name),children:(0,t.jsx)(v.Z,{className:"w-3 h-3"})})]})})]}),(0,t.jsx)("div",{className:"text-xs text-muted-foreground mb-2",children:e.description}),(0,t.jsxs)("div",{className:"flex gap-1",children:[(0,t.jsx)("span",{className:"text-xs bg-gray-100 text-gray-700 px-1.5 py-0.5 rounded",children:e.type}),e.required&&(0,t.jsx)("span",{className:"text-xs bg-orange-100 text-orange-700 px-1.5 py-0.5 rounded",children:"required"})]})]},e.name))}):(0,t.jsxs)("div",{className:"text-center py-8 text-muted-foreground border-2 border-dashed rounded-lg",children:[(0,t.jsx)("div",{className:"mb-3",children:(0,t.jsx)("span",{className:"text-3xl",children:"\uD83D\uDCDD"})}),(0,t.jsx)("div",{className:"text-sm mb-1 font-medium",children:"No variables yet"}),(0,t.jsxs)("div",{className:"text-xs",children:["Use ","{variable_name}"," syntax in your messages"]})]})]})]})})]})]})}),(0,t.jsx)("div",{className:"border-t p-4 bg-background",children:(0,t.jsxs)(o.cN,{children:[(0,t.jsx)(d.z,{variant:"outline",onClick:_,children:S?"Close":"Cancel"}),!S&&(0,t.jsx)(t.Fragment,{children:(0,t.jsx)(d.z,{onClick:ei,disabled:!en||$,className:(0,f.cn)("min-w-[140px]",!en&&"opacity-50 cursor-not-allowed"),children:$?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{className:"animate-spin rounded-full h-4 w-4 border-b-2 border-white mr-2"}),R?"Updating...":"Saving..."]}):R?"Update Workflow":"Save Workflow"})})]})})]})}):null}},10492:function(e,s,a){a.d(s,{g:function(){return r}});var t=a(57437),l=a(94508);let r=e=>{let{className:s}=e;return(0,t.jsxs)("svg",{"aria-hidden":"true",role:"status",className:(0,l.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,t.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,t.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"})]})}}}]);
2
- //# sourceMappingURL=1957-899d0d6d0d9c11fd.js.map