@exulu/frontend 1.10.0 → 1.11.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 (174) hide show
  1. package/dist/.next/BUILD_ID +1 -1
  2. package/dist/.next/app-build-manifest.json +163 -160
  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_client-reference-manifest.js +1 -1
  7. package/dist/.next/server/app/(application)/agents/page_client-reference-manifest.js +1 -1
  8. package/dist/.next/server/app/(application)/chat/[agent]/[session]/page.js +1 -1
  9. package/dist/.next/server/app/(application)/chat/[agent]/[session]/page_client-reference-manifest.js +1 -1
  10. package/dist/.next/server/app/(application)/chat/[agent]/page_client-reference-manifest.js +1 -1
  11. package/dist/.next/server/app/(application)/chat/page_client-reference-manifest.js +1 -1
  12. package/dist/.next/server/app/(application)/configuration/page_client-reference-manifest.js +1 -1
  13. package/dist/.next/server/app/(application)/dashboard/page_client-reference-manifest.js +1 -1
  14. package/dist/.next/server/app/(application)/data/[[...query]]/page.js +2 -2
  15. package/dist/.next/server/app/(application)/data/[[...query]]/page_client-reference-manifest.js +1 -1
  16. package/dist/.next/server/app/(application)/evals/[id]/page.js +1 -1
  17. package/dist/.next/server/app/(application)/evals/[id]/page.js.nft.json +1 -1
  18. package/dist/.next/server/app/(application)/evals/[id]/page_client-reference-manifest.js +1 -1
  19. package/dist/.next/server/app/(application)/evals/cases/page.js +1 -1
  20. package/dist/.next/server/app/(application)/evals/cases/page.js.nft.json +1 -1
  21. package/dist/.next/server/app/(application)/evals/cases/page_client-reference-manifest.js +1 -1
  22. package/dist/.next/server/app/(application)/evals/page_client-reference-manifest.js +1 -1
  23. package/dist/.next/server/app/(application)/explorer/page_client-reference-manifest.js +1 -1
  24. package/dist/.next/server/app/(application)/keys/page_client-reference-manifest.js +1 -1
  25. package/dist/.next/server/app/(application)/page_client-reference-manifest.js +1 -1
  26. package/dist/.next/server/app/(application)/projects/[project]/page.js +1 -1
  27. package/dist/.next/server/app/(application)/projects/[project]/page_client-reference-manifest.js +1 -1
  28. package/dist/.next/server/app/(application)/projects/page_client-reference-manifest.js +1 -1
  29. package/dist/.next/server/app/(application)/prompts/page_client-reference-manifest.js +1 -1
  30. package/dist/.next/server/app/(application)/roles/page_client-reference-manifest.js +1 -1
  31. package/dist/.next/server/app/(application)/token/page_client-reference-manifest.js +1 -1
  32. package/dist/.next/server/app/(application)/users/page_client-reference-manifest.js +1 -1
  33. package/dist/.next/server/app/(application)/variables/create/page_client-reference-manifest.js +1 -1
  34. package/dist/.next/server/app/(application)/variables/edit/[variable_id]/page_client-reference-manifest.js +1 -1
  35. package/dist/.next/server/app/(application)/variables/page_client-reference-manifest.js +1 -1
  36. package/dist/.next/server/app/(application)/variables/usage/[variable_id]/page_client-reference-manifest.js +1 -1
  37. package/dist/.next/server/app/(application)/workflows/page_client-reference-manifest.js +1 -1
  38. package/dist/.next/server/app/(authentication)/login/page_client-reference-manifest.js +1 -1
  39. package/dist/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  40. package/dist/.next/server/app/_not-found.html +1 -1
  41. package/dist/.next/server/app/_not-found.rsc +1 -1
  42. package/dist/.next/server/app-paths-manifest.json +5 -5
  43. package/dist/.next/server/chunks/2270.js +145 -132
  44. package/dist/.next/server/chunks/{5084.js → 2587.js} +1 -1
  45. package/dist/.next/server/chunks/3503.js +1 -1
  46. package/dist/.next/server/chunks/5485.js +1 -1
  47. package/dist/.next/server/chunks/5974.js +1 -1
  48. package/dist/.next/server/chunks/7944.js +1 -1
  49. package/dist/.next/server/chunks/8286.js +1 -1
  50. package/dist/.next/server/middleware-manifest.json +5 -5
  51. package/dist/.next/server/pages/404.html +1 -1
  52. package/dist/.next/server/pages/500.html +1 -1
  53. package/dist/.next/server/server-reference-manifest.json +1 -1
  54. package/dist/.next/static/chunks/1707-06e693c4a709c147.js +2 -0
  55. package/dist/.next/static/chunks/1707-06e693c4a709c147.js.map +1 -0
  56. package/dist/.next/static/chunks/{1957-cf44b1d31a9c7d5c.js → 1957-34f17de1e14e45de.js} +1 -1
  57. package/dist/.next/static/chunks/{1957-cf44b1d31a9c7d5c.js.map → 1957-34f17de1e14e45de.js.map} +1 -1
  58. package/dist/.next/static/chunks/{2293-48a95904b834eccc.js → 2293-592e22dde70d632b.js} +1 -1
  59. package/dist/.next/static/chunks/{2293-48a95904b834eccc.js.map → 2293-592e22dde70d632b.js.map} +1 -1
  60. package/dist/.next/static/chunks/2534-3dd7a9fabfbdb9d8.js +2 -0
  61. package/dist/.next/static/chunks/2534-3dd7a9fabfbdb9d8.js.map +1 -0
  62. package/dist/.next/static/chunks/2823-324b1cd8f15ff9c5.js +2 -0
  63. package/dist/.next/static/chunks/2823-324b1cd8f15ff9c5.js.map +1 -0
  64. package/dist/.next/static/chunks/3246-1812de142455a0ac.js +2 -0
  65. package/dist/.next/static/chunks/3246-1812de142455a0ac.js.map +1 -0
  66. package/dist/.next/static/chunks/{3750-e3d1b2cccd265190.js → 3750-d0ae5d73288be8de.js} +2 -2
  67. package/dist/.next/static/chunks/3750-d0ae5d73288be8de.js.map +1 -0
  68. package/dist/.next/static/chunks/{3832-d7782d6a2771ae6c.js → 3832-0b8edbcc671f4cc0.js} +2 -2
  69. package/dist/.next/static/chunks/3832-0b8edbcc671f4cc0.js.map +1 -0
  70. package/dist/.next/static/chunks/{4386-45b79e656a244d8a.js → 4386-21ac377a719ebdfa.js} +1 -1
  71. package/dist/.next/static/chunks/{4386-45b79e656a244d8a.js.map → 4386-21ac377a719ebdfa.js.map} +1 -1
  72. package/dist/.next/static/chunks/4612-da512770f949561a.js +2 -0
  73. package/dist/.next/static/chunks/4612-da512770f949561a.js.map +1 -0
  74. package/dist/.next/static/chunks/{5825-efd4db1da512bd7f.js → 4760-d5ceb992b68e35ca.js} +2 -2
  75. package/dist/.next/static/chunks/4760-d5ceb992b68e35ca.js.map +1 -0
  76. package/dist/.next/static/chunks/{6367-59655a85d75e19be.js → 6367-aa5020cbea5354e2.js} +1 -1
  77. package/dist/.next/static/chunks/{6367-59655a85d75e19be.js.map → 6367-aa5020cbea5354e2.js.map} +1 -1
  78. package/dist/.next/static/chunks/6373-3eee0b6c8b8fd459.js +2 -0
  79. package/dist/.next/static/chunks/6373-3eee0b6c8b8fd459.js.map +1 -0
  80. package/dist/.next/static/chunks/{8030-9c926ea4dfd3a54e.js → 8030-5d38a3f1a4ad44cb.js} +1 -1
  81. package/dist/.next/static/chunks/{8030-9c926ea4dfd3a54e.js.map → 8030-5d38a3f1a4ad44cb.js.map} +1 -1
  82. package/dist/.next/static/chunks/9105-143f12397a76a332.js +2 -0
  83. package/dist/.next/static/chunks/9105-143f12397a76a332.js.map +1 -0
  84. package/dist/.next/static/chunks/9877-378934ae38c6760c.js +2 -0
  85. package/dist/.next/static/chunks/9877-378934ae38c6760c.js.map +1 -0
  86. package/dist/.next/static/chunks/{9953-95900a236271a222.js → 9953-02d5b52553a5c573.js} +2 -2
  87. package/dist/.next/static/chunks/{9953-95900a236271a222.js.map → 9953-02d5b52553a5c573.js.map} +1 -1
  88. package/dist/.next/static/chunks/app/(application)/agents/edit/[id]/{page-e4a4693953329671.js → page-37918149a8e909b0.js} +2 -2
  89. package/dist/.next/static/chunks/app/(application)/agents/edit/[id]/{page-e4a4693953329671.js.map → page-37918149a8e909b0.js.map} +1 -1
  90. package/dist/.next/static/chunks/app/(application)/agents/{page-b77c21a993c55901.js → page-9cff3b35b042d46a.js} +1 -1
  91. package/dist/.next/static/chunks/app/(application)/agents/{page-b77c21a993c55901.js.map → page-9cff3b35b042d46a.js.map} +1 -1
  92. package/dist/.next/static/chunks/app/(application)/chat/[agent]/[session]/page-53a99d8df53380c7.js +2 -0
  93. package/dist/.next/static/chunks/app/(application)/chat/[agent]/[session]/page-53a99d8df53380c7.js.map +1 -0
  94. package/dist/.next/static/chunks/app/(application)/chat/{layout-093baa26f89338bc.js → layout-ba702af6bb56baa2.js} +1 -1
  95. package/dist/.next/static/chunks/app/(application)/chat/{layout-093baa26f89338bc.js.map → layout-ba702af6bb56baa2.js.map} +1 -1
  96. package/dist/.next/static/chunks/app/(application)/chat/{page-8a1fcfb68cf9c8c0.js → page-8b00a98d285829b1.js} +1 -1
  97. package/dist/.next/static/chunks/app/(application)/chat/{page-8a1fcfb68cf9c8c0.js.map → page-8b00a98d285829b1.js.map} +1 -1
  98. package/dist/.next/static/chunks/app/(application)/configuration/{page-f315ede6d66922e6.js → page-1e978e117d5086a1.js} +1 -1
  99. package/dist/.next/static/chunks/app/(application)/configuration/{page-f315ede6d66922e6.js.map → page-1e978e117d5086a1.js.map} +1 -1
  100. package/dist/.next/static/chunks/app/(application)/dashboard/{page-4a1956febf5235b6.js → page-c54b4bc8d0ac4ac8.js} +1 -1
  101. package/dist/.next/static/chunks/app/(application)/dashboard/{page-4a1956febf5235b6.js.map → page-c54b4bc8d0ac4ac8.js.map} +1 -1
  102. package/dist/.next/static/chunks/app/(application)/data/[[...query]]/{layout-0c7c1b0e1713bf60.js → layout-dfdb5c1cdc7ddefc.js} +2 -2
  103. package/dist/.next/static/chunks/app/(application)/data/[[...query]]/{layout-0c7c1b0e1713bf60.js.map → layout-dfdb5c1cdc7ddefc.js.map} +1 -1
  104. package/dist/.next/static/chunks/app/(application)/data/[[...query]]/page-faaee5fe82b45966.js +2 -0
  105. package/dist/.next/static/chunks/app/(application)/data/[[...query]]/page-faaee5fe82b45966.js.map +1 -0
  106. package/dist/.next/static/chunks/app/(application)/evals/[id]/{page-a7728cf9b0524489.js → page-c956d9892676aa4f.js} +2 -2
  107. package/dist/.next/static/chunks/app/(application)/evals/[id]/page-c956d9892676aa4f.js.map +1 -0
  108. package/dist/.next/static/chunks/app/(application)/evals/cases/page-6b4dde82376e9aac.js +2 -0
  109. package/dist/.next/static/chunks/app/(application)/evals/cases/page-6b4dde82376e9aac.js.map +1 -0
  110. package/dist/.next/static/chunks/app/(application)/evals/{page-8b38d8d29f275704.js → page-944bfc4f0a001e4c.js} +1 -1
  111. package/dist/.next/static/chunks/app/(application)/evals/page-944bfc4f0a001e4c.js.map +1 -0
  112. package/dist/.next/static/chunks/app/(application)/explorer/page-07d67145bb176711.js +2 -0
  113. package/dist/.next/static/chunks/app/(application)/explorer/page-07d67145bb176711.js.map +1 -0
  114. package/dist/.next/static/chunks/app/(application)/keys/{page-afe59c91cc347208.js → page-6c0cd9ef20cd1461.js} +2 -2
  115. package/dist/.next/static/chunks/app/(application)/keys/{page-afe59c91cc347208.js.map → page-6c0cd9ef20cd1461.js.map} +1 -1
  116. package/dist/.next/static/chunks/app/(application)/projects/[project]/{page-f04fd5291a1ef7b1.js → page-5e2be54e76b8509c.js} +2 -2
  117. package/dist/.next/static/chunks/app/(application)/projects/[project]/{page-f04fd5291a1ef7b1.js.map → page-5e2be54e76b8509c.js.map} +1 -1
  118. package/dist/.next/static/chunks/app/(application)/projects/{layout-a8e1830ef3faafb9.js → layout-f2e0f42a08c96bb8.js} +1 -1
  119. package/dist/.next/static/chunks/app/(application)/projects/{layout-a8e1830ef3faafb9.js.map → layout-f2e0f42a08c96bb8.js.map} +1 -1
  120. package/dist/.next/static/chunks/app/(application)/prompts/{page-2c500e9898447506.js → page-2c03bbe32800acc3.js} +2 -2
  121. package/dist/.next/static/chunks/app/(application)/prompts/{page-2c500e9898447506.js.map → page-2c03bbe32800acc3.js.map} +1 -1
  122. package/dist/.next/static/chunks/app/(application)/roles/{page-873911198c17d9a7.js → page-b977b5c658004717.js} +1 -1
  123. package/dist/.next/static/chunks/app/(application)/roles/{page-873911198c17d9a7.js.map → page-b977b5c658004717.js.map} +1 -1
  124. package/dist/.next/static/chunks/app/(application)/token/{page-3acc39cb8a718331.js → page-08596ece49a811b9.js} +2 -2
  125. package/dist/.next/static/chunks/app/(application)/token/page-08596ece49a811b9.js.map +1 -0
  126. package/dist/.next/static/chunks/app/(application)/users/{page-0d7f0d7e80cd1436.js → page-49212081be40aeca.js} +2 -2
  127. package/dist/.next/static/chunks/app/(application)/users/{page-0d7f0d7e80cd1436.js.map → page-49212081be40aeca.js.map} +1 -1
  128. package/dist/.next/static/chunks/app/(application)/variables/create/{page-8ebf4e3d4d17443b.js → page-9ce762918374f616.js} +1 -1
  129. package/dist/.next/static/chunks/app/(application)/variables/create/{page-8ebf4e3d4d17443b.js.map → page-9ce762918374f616.js.map} +1 -1
  130. package/dist/.next/static/chunks/app/(application)/variables/edit/[variable_id]/{page-006145e82e054e72.js → page-0e2b7038546d9f7a.js} +1 -1
  131. package/dist/.next/static/chunks/app/(application)/variables/edit/[variable_id]/{page-006145e82e054e72.js.map → page-0e2b7038546d9f7a.js.map} +1 -1
  132. package/dist/.next/static/chunks/app/(application)/variables/{page-51a8aeece444d388.js → page-141d5d3f735454fe.js} +1 -1
  133. package/dist/.next/static/chunks/app/(application)/variables/{page-51a8aeece444d388.js.map → page-141d5d3f735454fe.js.map} +1 -1
  134. package/dist/.next/static/chunks/app/(application)/variables/usage/[variable_id]/{page-8f5cfc9565fd919a.js → page-fb1bb3ea6f7cae47.js} +1 -1
  135. package/dist/.next/static/chunks/app/(application)/variables/usage/[variable_id]/{page-8f5cfc9565fd919a.js.map → page-fb1bb3ea6f7cae47.js.map} +1 -1
  136. package/dist/.next/static/chunks/app/(application)/workflows/{page-e38f9456120dab69.js → page-2b839fdbc55c297b.js} +2 -2
  137. package/dist/.next/static/chunks/app/(application)/workflows/page-2b839fdbc55c297b.js.map +1 -0
  138. package/dist/.next/static/css/0f539b50cca35462.css +4 -0
  139. package/dist/.next/static/css/0f539b50cca35462.css.map +1 -0
  140. package/dist/.next/static/css/e3f2a16ab7676b05.css.map +1 -1
  141. package/package.json +1 -1
  142. package/dist/.next/static/chunks/1685-939396dad2f8f1e0.js +0 -2
  143. package/dist/.next/static/chunks/1685-939396dad2f8f1e0.js.map +0 -1
  144. package/dist/.next/static/chunks/3171-6996819b8863d41f.js +0 -2
  145. package/dist/.next/static/chunks/3171-6996819b8863d41f.js.map +0 -1
  146. package/dist/.next/static/chunks/3750-e3d1b2cccd265190.js.map +0 -1
  147. package/dist/.next/static/chunks/3832-d7782d6a2771ae6c.js.map +0 -1
  148. package/dist/.next/static/chunks/4419-b9be79d8cd46a97d.js +0 -2
  149. package/dist/.next/static/chunks/4419-b9be79d8cd46a97d.js.map +0 -1
  150. package/dist/.next/static/chunks/5110-098aa924c3108fa4.js +0 -2
  151. package/dist/.next/static/chunks/5110-098aa924c3108fa4.js.map +0 -1
  152. package/dist/.next/static/chunks/5825-efd4db1da512bd7f.js.map +0 -1
  153. package/dist/.next/static/chunks/6280-50b751f993f2fe4f.js +0 -2
  154. package/dist/.next/static/chunks/6280-50b751f993f2fe4f.js.map +0 -1
  155. package/dist/.next/static/chunks/6373-aef582adc575d3ca.js +0 -2
  156. package/dist/.next/static/chunks/6373-aef582adc575d3ca.js.map +0 -1
  157. package/dist/.next/static/chunks/9105-d8ff41060f7ffc85.js +0 -2
  158. package/dist/.next/static/chunks/9105-d8ff41060f7ffc85.js.map +0 -1
  159. package/dist/.next/static/chunks/app/(application)/chat/[agent]/[session]/page-d59534ca19eee51f.js +0 -2
  160. package/dist/.next/static/chunks/app/(application)/chat/[agent]/[session]/page-d59534ca19eee51f.js.map +0 -1
  161. package/dist/.next/static/chunks/app/(application)/data/[[...query]]/page-7db6bfbf02606136.js +0 -2
  162. package/dist/.next/static/chunks/app/(application)/data/[[...query]]/page-7db6bfbf02606136.js.map +0 -1
  163. package/dist/.next/static/chunks/app/(application)/evals/[id]/page-a7728cf9b0524489.js.map +0 -1
  164. package/dist/.next/static/chunks/app/(application)/evals/cases/page-827f50c6d1f150d0.js +0 -2
  165. package/dist/.next/static/chunks/app/(application)/evals/cases/page-827f50c6d1f150d0.js.map +0 -1
  166. package/dist/.next/static/chunks/app/(application)/evals/page-8b38d8d29f275704.js.map +0 -1
  167. package/dist/.next/static/chunks/app/(application)/explorer/page-e6b1c034c07776e2.js +0 -2
  168. package/dist/.next/static/chunks/app/(application)/explorer/page-e6b1c034c07776e2.js.map +0 -1
  169. package/dist/.next/static/chunks/app/(application)/token/page-3acc39cb8a718331.js.map +0 -1
  170. package/dist/.next/static/chunks/app/(application)/workflows/page-e38f9456120dab69.js.map +0 -1
  171. package/dist/.next/static/css/9c08ae5d990a6b14.css +0 -4
  172. package/dist/.next/static/css/9c08ae5d990a6b14.css.map +0 -1
  173. /package/dist/.next/static/{3j63p6b3zZZB_v1Hn8Mxp → exslB-IPXi_veOKFA4L1Z}/_buildManifest.js +0 -0
  174. /package/dist/.next/static/{3j63p6b3zZZB_v1Hn8Mxp → exslB-IPXi_veOKFA4L1Z}/_ssgManifest.js +0 -0
@@ -1,2 +1,2 @@
1
1
  (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1007],{66871:function(e,t,n){Promise.resolve().then(n.bind(n,21654))},21654:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return S}});var s=n(57437),r=n(27648),a=n(73247),i=n(99397),o=n(86595),l=n(62869),c=n(95186),d=n(7211),u=n(12199),f=n(27689),m=n(2265),p=n(37091),x=n(99376),h=n(93022),v=n(13832),g=n(26815),j=n(76818),y=n(26110),N=n(15863),b=n(77992);function w(e){let{open:t,onOpenChange:n,refetchProjects:r}=e,[a,i]=(0,m.useState)({name:"",description:"",custom_instructions:""}),[o,d]=(0,m.useState)(!1),{toast:p}=(0,b.pm)(),h=(0,x.useRouter)(),[v]=(0,u.D)(f.kp,{refetchQueries:[{query:f.fM,variables:{page:1,limit:200}}]}),w=async e=>{if(e.preventDefault(),!a.name.trim()){p({title:"Validation Error",description:"Project name is required.",variant:"destructive"});return}d(!0);try{var t,s;let e=await v({variables:{input:{name:a.name.trim(),description:a.description.trim()||null,custom_instructions:a.custom_instructions.trim()||null,rights_mode:"private"}}});console.log(e);let o=null===(s=e.data)||void 0===s?void 0:null===(t=s.projectsCreateOne)||void 0===t?void 0:t.item;o&&(p({title:"Success",description:"Project created successfully!"}),i({name:"",description:"",custom_instructions:""}),n(!1),h.push("/projects/".concat(o.id)),r())}catch(e){console.error("Error creating project:",e),p({title:"Error",description:e.message||"Failed to create project. Please try again.",variant:"destructive"})}finally{d(!1)}};return(0,s.jsx)(y.Vq,{open:t,onOpenChange:n,children:(0,s.jsxs)(y.cZ,{className:"sm:max-w-[500px]",children:[(0,s.jsxs)(y.fK,{children:[(0,s.jsx)(y.$N,{children:"Create New Project"}),(0,s.jsx)(y.Be,{children:"Create a new project to organize your chat sessions and documents."})]}),(0,s.jsxs)("form",{onSubmit:w,className:"space-y-4",children:[(0,s.jsxs)("div",{className:"space-y-2",children:[(0,s.jsx)(g._,{htmlFor:"project-name",children:"Project Name *"}),(0,s.jsx)(c.I,{id:"project-name",value:a.name,onChange:e=>i({...a,name:e.target.value}),placeholder:"Enter project name",required:!0,disabled:o})]}),(0,s.jsxs)("div",{className:"space-y-2",children:[(0,s.jsx)(g._,{htmlFor:"project-description",children:"Description"}),(0,s.jsx)(j.g,{id:"project-description",value:a.description,onChange:e=>i({...a,description:e.target.value}),placeholder:"Describe what this project is about...",rows:3,disabled:o})]}),(0,s.jsxs)("div",{className:"space-y-2",children:[(0,s.jsx)(g._,{htmlFor:"custom-instructions",children:"Custom Instructions"}),(0,s.jsx)(j.g,{id:"custom-instructions",value:a.custom_instructions,onChange:e=>i({...a,custom_instructions:e.target.value}),placeholder:"Enter custom instructions for chat sessions in this project...",rows:3,disabled:o})]}),(0,s.jsxs)(y.cN,{children:[(0,s.jsx)(l.z,{type:"button",variant:"outline",onClick:()=>{i({name:"",description:"",custom_instructions:""}),n(!1)},disabled:o,children:"Cancel"}),(0,s.jsx)(l.z,{type:"submit",disabled:o,children:o?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(N.Z,{className:"mr-2 h-4 w-4 animate-spin"}),"Creating..."]}):"Create Project"})]})]})]})})}function _(){var e,t,n,g,j,y,N;let[b,_]=(0,m.useState)(""),[S,k]=(0,m.useState)(!1),E=(0,x.usePathname)(),{user:C}=(0,m.useContext)(v.S),[D,O]=(0,m.useState)(C),M=(0,d.aM)(f.Ak,{fetchPolicy:"no-cache",nextFetchPolicy:"network-only",variables:{ids:(null==D?void 0:D.favourite_projects)||[]},skip:!(null==D?void 0:null===(e=D.favourite_projects)||void 0===e?void 0:e.length)}),T=(0,d.aM)(f.fM,{fetchPolicy:"no-cache",nextFetchPolicy:"network-only",variables:{page:1,limit:200,filters:b?[{name:{contains:b}}]:void 0}});(0,m.useEffect)(()=>{T.refetch()},[E]);let[I]=(0,u.D)(f.d5),P=e=>{var t;return e.image?(0,s.jsx)("img",{src:e.image,alt:"".concat(e.name," thumbnail"),className:"h-4 w-4 rounded-full object-cover"}):(0,s.jsx)("div",{className:"h-4 w-4 rounded-full bg-gradient-to-br from-green-500 to-blue-600 flex items-center justify-center text-white text-xs font-medium",children:(null===(t=e.name)||void 0===t?void 0:t.charAt(0).toUpperCase())||"P"})},A=async(e,t)=>{t.preventDefault(),t.stopPropagation();try{let t;let n=(null==D?void 0:D.favourite_projects)||[];t=n.includes(e)?n.filter(t=>t!==e):[...n,e],await I({variables:{id:null==D?void 0:D.id,favourite_projects:t}}),O(e=>({...e,favourite_projects:t}))}catch(e){console.error("Error updating favourite projects:",e)}},z=(null==T?void 0:null===(n=T.data)||void 0===n?void 0:null===(t=n.projectsPagination)||void 0===t?void 0:t.items)||(null==T?void 0:null===(j=T.previousData)||void 0===j?void 0:null===(g=j.projectsPagination)||void 0===g?void 0:g.items)||[],F=(null==M?void 0:null===(y=M.data)||void 0===y?void 0:y.projectByIds)||(null==M?void 0:null===(N=M.previousData)||void 0===N?void 0:N.projectByIds)||[];return(0,s.jsxs)("div",{className:"h-full w-[250px] flex-col gap-2 p-2",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsxs)("div",{className:"relative flex-1",children:[(0,s.jsx)(a.Z,{className:"absolute left-2.5 top-2.5 h-4 w-4 text-muted-foreground"}),(0,s.jsx)(c.I,{type:"search",placeholder:"Search projects...",className:"pl-8",value:b,onChange:e=>_(e.target.value)})]}),(0,s.jsx)(l.z,{variant:"outline",size:"lg",className:"h-10 w-10 p-0",onClick:()=>{k(!0)},title:"Create new project",children:(0,s.jsx)(i.Z,{className:"h-3 w-3"})})]}),(0,s.jsx)("div",{className:"flex-1 overflow-auto space-y-1",children:(0,s.jsxs)(s.Fragment,{children:[(null==D?void 0:D.favourite_projects)&&F.length>0&&!b&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("div",{className:"text-xs font-medium text-muted-foreground px-2 py-1",children:"Favorites"}),M.loading&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(h.O,{className:"w-[100%] h-[32px] rounded-lg"}),(0,s.jsx)(h.O,{className:"w-[100%] h-[32px] rounded-lg"})]}),!M.loading&&(0,s.jsx)(s.Fragment,{children:F.map(e=>(0,s.jsxs)("div",{className:"flex items-center gap-1",children:[(0,s.jsx)(r.default,{href:"/projects/".concat(e.id),className:"flex-1",children:(0,s.jsxs)(l.z,{variant:E.includes(e.id)?"secondary":"ghost",className:"w-full justify-start gap-2 pr-1",children:[P(e),(0,s.jsx)("span",{className:"flex-1 text-left",children:(0,s.jsx)(p.L,{text:e.name,length:10})})]})}),(0,s.jsx)(l.z,{variant:"ghost",size:"sm",className:"h-8 w-8 p-0 flex-shrink-0",onClick:t=>A(e.id,t),children:(0,s.jsx)(o.Z,{className:"h-3 w-3 fill-yellow-400 text-yellow-400"})})]},e.id))})]}),(0,s.jsx)("div",{className:"text-xs font-medium text-muted-foreground px-2 py-1 mt-2",children:"All projects:"}),T.loading&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(h.O,{className:"w-[100%] h-[32px] rounded-lg"}),(0,s.jsx)(h.O,{className:"w-[100%] h-[32px] rounded-lg"}),(0,s.jsx)(h.O,{className:"w-[100%] h-[32px] rounded-lg"})]}),!T.loading&&z.map(e=>{var t;return(0,s.jsxs)("div",{className:"flex items-center gap-1",children:[(0,s.jsx)(r.default,{href:"/projects/".concat(e.id),className:"flex-1",children:(0,s.jsxs)(l.z,{variant:E.includes(e.id)?"secondary":"ghost",className:"w-full justify-start gap-2 pr-1",children:[P(e),(0,s.jsx)("span",{className:"flex-1 text-left",children:(0,s.jsx)(p.L,{text:e.name,length:14})})]})}),(0,s.jsx)(l.z,{variant:"ghost",size:"sm",className:"h-8 w-8 p-0 flex-shrink-0",onClick:t=>A(e.id,t),children:(0,s.jsx)(o.Z,{className:"h-3 w-3 ".concat((null==D?void 0:null===(t=D.favourite_projects)||void 0===t?void 0:t.includes(e.id))?"fill-yellow-400 text-yellow-400":"")})})]},e.id)})]})}),(0,s.jsx)(w,{open:S,onOpenChange:k,refetchProjects:T.refetch})]})}function S(e){let{children:t}=e;return(0,s.jsxs)("div",{className:"flex h-full",children:[(0,s.jsx)("div",{className:"border-r bg-muted/10",children:(0,s.jsx)(_,{})}),t]})}},37091:function(e,t,n){"use strict";n.d(t,{L:function(){return r}});var s=n(57437);function r(e){let{text:t,length:n}=e;return t.length>n?(0,s.jsxs)(s.Fragment,{children:[t.slice(0,n),"..."]}):(0,s.jsx)(s.Fragment,{children:t})}},26110:function(e,t,n){"use strict";n.d(t,{$N:function(){return x},Be:function(){return h},Vq:function(){return l},cN:function(){return p},cZ:function(){return f},fK:function(){return m},hg:function(){return c}});var s=n(57437),r=n(34567),a=n(32489),i=n(2265),o=n(94508);let l=r.fC,c=r.xz,d=r.h_;r.x8;let u=i.forwardRef((e,t)=>{let{className:n,...a}=e;return(0,s.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",n),...a})});u.displayName=r.aV.displayName;let f=i.forwardRef((e,t)=>{let{className:n,children:i,...l}=e;return(0,s.jsxs)(d,{children:[(0,s.jsx)(u,{}),(0,s.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",n),...l,children:[i,(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:[(0,s.jsx)(a.Z,{className:"size-4"}),(0,s.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})});f.displayName=r.VY.displayName;let m=e=>{let{className:t,...n}=e;return(0,s.jsx)("div",{className:(0,o.cn)("flex flex-col space-y-1.5 text-center sm:text-left",t),...n})};m.displayName="DialogHeader";let p=e=>{let{className:t,...n}=e;return(0,s.jsx)("div",{className:(0,o.cn)("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",t),...n})};p.displayName="DialogFooter";let x=i.forwardRef((e,t)=>{let{className:n,...a}=e;return(0,s.jsx)(r.Dx,{ref:t,className:(0,o.cn)("text-lg font-semibold leading-none tracking-tight",n),...a})});x.displayName=r.Dx.displayName;let h=i.forwardRef((e,t)=>{let{className:n,...a}=e;return(0,s.jsx)(r.dk,{ref:t,className:(0,o.cn)("text-sm text-muted-foreground",n),...a})});h.displayName=r.dk.displayName},26815:function(e,t,n){"use strict";n.d(t,{_:function(){return c}});var s=n(57437),r=n(6394),a=n(90535),i=n(2265),o=n(94508);let l=(0,a.j)("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"),c=i.forwardRef((e,t)=>{let{className:n,...a}=e;return(0,s.jsx)(r.f,{ref:t,className:(0,o.cn)(l(),n),...a})});c.displayName=r.f.displayName},76818:function(e,t,n){"use strict";n.d(t,{g:function(){return i}});var s=n(57437),r=n(2265),a=n(94508);let i=r.forwardRef((e,t)=>{let{className:n,...r}=e;return(0,s.jsx)("textarea",{className:(0,a.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",n),ref:t,...r})});i.displayName="Textarea"},77992:function(e,t,n){"use strict";n.d(t,{Am:function(){return u},pm:function(){return f}});var s=n(2265);let r=0,a=new Map,i=e=>{if(a.has(e))return;let t=setTimeout(()=>{a.delete(e),d({type:"REMOVE_TOAST",toastId:e})},1e6);a.set(e,t)},o=(e,t)=>{switch(t.type){case"ADD_TOAST":return{...e,toasts:[t.toast,...e.toasts].slice(0,1)};case"UPDATE_TOAST":return{...e,toasts:e.toasts.map(e=>e.id===t.toast.id?{...e,...t.toast}:e)};case"DISMISS_TOAST":{let{toastId:n}=t;return n?i(n):e.toasts.forEach(e=>{i(e.id)}),{...e,toasts:e.toasts.map(e=>e.id===n||void 0===n?{...e,open:!1}:e)}}case"REMOVE_TOAST":if(void 0===t.toastId)return{...e,toasts:[]};return{...e,toasts:e.toasts.filter(e=>e.id!==t.toastId)}}},l=[],c={toasts:[]};function d(e){c=o(c,e),l.forEach(e=>{e(c)})}function u(e){let{...t}=e,n=(r=(r+1)%Number.MAX_SAFE_INTEGER).toString(),s=()=>d({type:"DISMISS_TOAST",toastId:n});return d({type:"ADD_TOAST",toast:{...t,id:n,open:!0,onOpenChange:e=>{e||s()}}}),{id:n,dismiss:s,update:e=>d({type:"UPDATE_TOAST",toast:{...e,id:n}})}}function f(){let[e,t]=s.useState(c);return s.useEffect(()=>(l.push(t),()=>{let e=l.indexOf(t);e>-1&&l.splice(e,1)}),[e]),{...e,toast:u,dismiss:e=>d({type:"DISMISS_TOAST",toastId:e})}}},15863:function(e,t,n){"use strict";n.d(t,{Z:function(){return s}});let s=(0,n(39763).Z)("Loader2",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]])},99397:function(e,t,n){"use strict";n.d(t,{Z:function(){return s}});let s=(0,n(39763).Z)("Plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]])},73247:function(e,t,n){"use strict";n.d(t,{Z:function(){return s}});let s=(0,n(39763).Z)("Search",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["path",{d:"m21 21-4.3-4.3",key:"1qie3q"}]])},86595:function(e,t,n){"use strict";n.d(t,{Z:function(){return s}});let s=(0,n(39763).Z)("Star",[["polygon",{points:"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2",key:"8f66p6"}]])},12199:function(e,t,n){"use strict";n.d(t,{D:function(){return u}});var s=n(5853),r=n(79285),a=n(49466),i=n(36628),o=n(59058),l=n(77828),c=n(63251),d=n(59394).Nq?r.useLayoutEffect:r.useEffect;function u(e,t){var n=(0,c.x)(null==t?void 0:t.client);(0,o.Vp)(e,o.n_.Mutation);var u=r.useState({called:!1,loading:!1,client:n}),f=u[0],m=u[1],p=r.useRef({result:f,mutationId:0,isMounted:!0,client:n,mutation:e,options:t});d(function(){Object.assign(p.current,{client:n,options:t,mutation:e})});var x=r.useCallback(function(e){void 0===e&&(e={});var t=p.current,n=t.options,r=t.mutation,o=(0,s.pi)((0,s.pi)({},n),{mutation:r}),c=e.client||p.current.client;p.current.result.loading||o.ignoreResults||!p.current.isMounted||m(p.current.result={loading:!0,error:void 0,data:void 0,called:!0,client:c});var d=++p.current.mutationId,u=(0,a.J)(o,e);return c.mutate(u).then(function(t){var n,s,r=t.data,a=t.errors,o=a&&a.length>0?new l.cA({graphQLErrors:a}):void 0,f=e.onError||(null===(n=p.current.options)||void 0===n?void 0:n.onError);if(o&&f&&f(o,u),d===p.current.mutationId&&!u.ignoreResults){var x={called:!0,loading:!1,data:r,error:o,client:c};p.current.isMounted&&!(0,i.D)(p.current.result,x)&&m(p.current.result=x)}var h=e.onCompleted||(null===(s=p.current.options)||void 0===s?void 0:s.onCompleted);return o||null==h||h(t.data,u),t},function(t){if(d===p.current.mutationId&&p.current.isMounted){var n,s={loading:!1,error:t,data:void 0,called:!0,client:c};(0,i.D)(p.current.result,s)||m(p.current.result=s)}var r=e.onError||(null===(n=p.current.options)||void 0===n?void 0:n.onError);if(r)return r(t,u),{data:void 0,errors:t};throw t})},[]),h=r.useCallback(function(){if(p.current.isMounted){var e={called:!1,loading:!1,client:p.current.client};Object.assign(p.current,{mutationId:0,result:e}),m(e)}},[]);return r.useEffect(function(){var e=p.current;return e.isMounted=!0,function(){e.isMounted=!1}},[]),[x,(0,s.pi)({reset:h},f)]}},6394:function(e,t,n){"use strict";n.d(t,{f:function(){return o}});var s=n(2265),r=n(66840),a=n(57437),i=s.forwardRef((e,t)=>(0,a.jsx)(r.WV.label,{...e,ref:t,onMouseDown:t=>{var n;t.target.closest("button, input, select, textarea")||(null===(n=e.onMouseDown)||void 0===n||n.call(e,t),!t.defaultPrevented&&t.detail>1&&t.preventDefault())}}));i.displayName="Label";var o=i}},function(e){e.O(0,[9851,7629,7093,6148,847,1942,7648,7823,8068,5799,605,4567,1206,5338,6373,3832,2971,2117,1744],function(){return e(e.s=66871)}),_N_E=e.O()}]);
2
- //# sourceMappingURL=layout-a8e1830ef3faafb9.js.map
2
+ //# sourceMappingURL=layout-f2e0f42a08c96bb8.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"static/chunks/app/(application)/projects/layout-a8e1830ef3faafb9.js","mappings":"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","sources":["webpack://_N_E/?62fd","webpack://_N_E/./components/create-project-dialog.tsx","webpack://_N_E/./components/project-nav.tsx","webpack://_N_E/./app/(application)/projects/layout.tsx","webpack://_N_E/./components/truncated-text.tsx","webpack://_N_E/./components/ui/dialog.tsx","webpack://_N_E/./components/ui/label.tsx","webpack://_N_E/./components/ui/textarea.tsx","webpack://_N_E/./components/ui/use-toast.ts","webpack://_N_E/../../../src/icons/loader-2.ts","webpack://_N_E/../../../src/icons/plus.ts","webpack://_N_E/../../../src/icons/search.ts","webpack://_N_E/../../../src/icons/star.ts","webpack://_N_E/./node_modules/@apollo/client/react/hooks/internal/useIsomorphicLayoutEffect.js","webpack://_N_E/./node_modules/@apollo/client/react/hooks/useMutation.js","webpack://_N_E/../src/label.tsx"],"sourcesContent":["import(/* webpackMode: \"eager\" */ \"/home/runner/work/exulu-frontend/exulu-frontend/app/(application)/projects/layout.tsx\");\n","\"use client\";\n\nimport { useState } from \"react\";\nimport { useMutation } from \"@apollo/client\";\nimport { CREATE_PROJECT, GET_PROJECTS } from \"@/queries/queries\";\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 {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from \"@/components/ui/dialog\";\nimport { Loader2 } from \"lucide-react\";\nimport { useRouter } from \"next/navigation\";\nimport { useToast } from \"./ui/use-toast\";\n\ninterface CreateProjectDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n refetchProjects: () => void;\n}\n\nexport function CreateProjectDialog({ open, onOpenChange, refetchProjects }: CreateProjectDialogProps) {\n const [formData, setFormData] = useState({\n name: \"\",\n description: \"\",\n custom_instructions: \"\",\n });\n const [isSubmitting, setIsSubmitting] = useState(false);\n \n const { toast } = useToast();\n const router = useRouter();\n \n const [createProject] = useMutation(CREATE_PROJECT, {\n refetchQueries: [\n {\n query: GET_PROJECTS,\n variables: {\n page: 1,\n limit: 200,\n },\n },\n ],\n });\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n \n if (!formData.name.trim()) {\n toast({\n title: \"Validation Error\",\n description: \"Project name is required.\",\n variant: \"destructive\",\n });\n return;\n }\n\n setIsSubmitting(true);\n\n try {\n const result = await createProject({\n variables: {\n input: {\n name: formData.name.trim(),\n description: formData.description.trim() || null,\n custom_instructions: formData.custom_instructions.trim() || null,\n rights_mode: \"private\",\n },\n },\n });\n\n console.log(result);\n\n const newProject = result.data?.projectsCreateOne?.item;\n \n if (newProject) {\n toast({\n title: \"Success\",\n description: \"Project created successfully!\",\n });\n \n // Reset form\n setFormData({\n name: \"\",\n description: \"\",\n custom_instructions: \"\",\n });\n \n // Close dialog\n onOpenChange(false);\n \n // Navigate to the new project\n router.push(`/projects/${newProject.id}`);\n refetchProjects();\n }\n } catch (error: any) {\n console.error(\"Error creating project:\", error);\n toast({\n title: \"Error\",\n description: error.message || \"Failed to create project. Please try again.\",\n variant: \"destructive\",\n });\n } finally {\n setIsSubmitting(false);\n }\n };\n\n const handleCancel = () => {\n setFormData({\n name: \"\",\n description: \"\",\n custom_instructions: \"\",\n });\n onOpenChange(false);\n };\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"sm:max-w-[500px]\">\n <DialogHeader>\n <DialogTitle>Create New Project</DialogTitle>\n <DialogDescription>\n Create a new project to organize your chat sessions and documents.\n </DialogDescription>\n </DialogHeader>\n \n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"project-name\">Project Name *</Label>\n <Input\n id=\"project-name\"\n value={formData.name}\n onChange={(e) => setFormData({ ...formData, name: e.target.value })}\n placeholder=\"Enter project name\"\n required\n disabled={isSubmitting}\n />\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"project-description\">Description</Label>\n <Textarea\n id=\"project-description\"\n value={formData.description}\n onChange={(e) => setFormData({ ...formData, description: e.target.value })}\n placeholder=\"Describe what this project is about...\"\n rows={3}\n disabled={isSubmitting}\n />\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"custom-instructions\">Custom Instructions</Label>\n <Textarea\n id=\"custom-instructions\"\n value={formData.custom_instructions}\n onChange={(e) => setFormData({ ...formData, custom_instructions: e.target.value })}\n placeholder=\"Enter custom instructions for chat sessions in this project...\"\n rows={3}\n disabled={isSubmitting}\n />\n </div>\n\n <DialogFooter>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={handleCancel}\n disabled={isSubmitting}\n >\n Cancel\n </Button>\n <Button type=\"submit\" disabled={isSubmitting}>\n {isSubmitting ? (\n <>\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n Creating...\n </>\n ) : (\n \"Create Project\"\n )}\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n );\n}","import Link from \"next/link\"\nimport { Search, Star, Plus } from \"lucide-react\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { useQuery, useMutation } from \"@apollo/client\";\nimport { GET_PROJECTS, GET_PROJECTS_BY_IDS, UPDATE_USER_FAVOURITE_PROJECTS } from \"@/queries/queries\";\nimport { useEffect, useState, useContext } from \"react\";\nimport { TruncatedText } from \"./truncated-text\";\nimport { useParams, usePathname } from \"next/navigation\";\nimport { Skeleton } from \"./ui/skeleton\";\nimport { UserContext } from \"@/app/(application)/authenticated\";\nimport { User } from \"@/types/models/user\";\nimport { CreateProjectDialog } from \"./create-project-dialog\";\nimport { useRouter } from \"next/router\";\n\n// Project interface based on our schema\ninterface Project {\n id: string;\n name: string;\n description?: string;\n image?: string;\n custom_instructions?: string;\n rights_mode?: string;\n created_by?: number;\n createdAt?: string;\n updatedAt?: string;\n RBAC?: any;\n}\n\nexport function ProjectNav() {\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [createDialogOpen, setCreateDialogOpen] = useState(false);\n const pathname = usePathname();\n const { user: init } = useContext(UserContext);\n const [user, setUser] = useState<User>(init);\n\n // Fetch favourite projects using GET_PROJECTS_BY_IDS\n const favouriteProjects = useQuery(GET_PROJECTS_BY_IDS, {\n fetchPolicy: \"no-cache\",\n nextFetchPolicy: \"network-only\",\n variables: {\n ids: user?.favourite_projects || []\n },\n skip: !user?.favourite_projects?.length,\n });\n\n // Fetch regular projects (excluding favourites when not searching)\n const projects = useQuery(GET_PROJECTS, {\n fetchPolicy: \"no-cache\",\n nextFetchPolicy: \"network-only\",\n variables: {\n page: 1,\n limit: 200,\n filters: searchQuery ? [\n {\n name: {\n contains: searchQuery\n }\n }\n ] : undefined,\n },\n });\n\n useEffect(() => {\n projects.refetch();\n }, [pathname]);\n\n const [updateUserFavouriteProjects] = useMutation(UPDATE_USER_FAVOURITE_PROJECTS);\n\n const renderProjectImage = (project: Project) => {\n if (project.image) {\n return (\n <img\n src={project.image}\n alt={`${project.name} thumbnail`}\n className=\"h-4 w-4 rounded-full object-cover\"\n />\n );\n } else {\n return (\n <div className=\"h-4 w-4 rounded-full bg-gradient-to-br from-green-500 to-blue-600 flex items-center justify-center text-white text-xs font-medium\">\n {project.name?.charAt(0).toUpperCase() || 'P'}\n </div>\n );\n }\n };\n\n const handleFavouriteToggle = async (projectId: string, e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n try {\n const currentFavorites = user?.favourite_projects || [];\n const isFavorite = currentFavorites.includes(projectId);\n\n let newFavorites: string[];\n if (isFavorite) {\n newFavorites = currentFavorites.filter(id => id !== projectId);\n } else {\n newFavorites = [...currentFavorites, projectId];\n }\n\n await updateUserFavouriteProjects({\n variables: {\n id: user?.id,\n favourite_projects: newFavorites\n }\n });\n\n setUser(prev => ({ ...prev, favourite_projects: newFavorites }));\n } catch (error) {\n console.error(\"Error updating favourite projects:\", error);\n }\n };\n\n const handleCreateProject = () => {\n setCreateDialogOpen(true);\n };\n\n const allProjects = (projects?.data?.projectsPagination?.items || projects?.previousData?.projectsPagination?.items) || [];\n const favoriteProjectsList = (favouriteProjects?.data?.projectByIds || favouriteProjects?.previousData?.projectByIds) || [];\n\n return (\n <div className=\"h-full w-[250px] flex-col gap-2 p-2\">\n <div className=\"flex items-center gap-2\">\n <div className=\"relative flex-1\">\n <Search className=\"absolute left-2.5 top-2.5 h-4 w-4 text-muted-foreground\" />\n <Input\n type=\"search\"\n placeholder=\"Search projects...\"\n className=\"pl-8\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n />\n </div>\n <Button\n variant=\"outline\"\n size=\"lg\"\n className=\"h-10 w-10 p-0\"\n onClick={handleCreateProject}\n title=\"Create new project\"\n >\n <Plus className=\"h-3 w-3\" />\n </Button>\n </div>\n\n <div className=\"flex-1 overflow-auto space-y-1\">\n\n <>\n {user?.favourite_projects && favoriteProjectsList.length > 0 && !searchQuery && (\n <>\n <div className=\"text-xs font-medium text-muted-foreground px-2 py-1\">\n Favorites\n </div>\n {favouriteProjects.loading && (\n <>\n <Skeleton className=\"w-[100%] h-[32px] rounded-lg\" />\n <Skeleton className=\"w-[100%] h-[32px] rounded-lg\" />\n </>\n )}\n {!favouriteProjects.loading && (() => {\n return (\n <>\n {favoriteProjectsList.map((project: Project) => (\n <div key={project.id} className=\"flex items-center gap-1\">\n <Link href={`/projects/${project.id}`} className=\"flex-1\">\n <Button\n variant={pathname.includes(project.id) ? \"secondary\" : \"ghost\"}\n className=\"w-full justify-start gap-2 pr-1\"\n >\n {renderProjectImage(project)}\n <span className=\"flex-1 text-left\">\n <TruncatedText text={project.name} length={10} />\n </span>\n </Button>\n </Link>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 w-8 p-0 flex-shrink-0\"\n onClick={(e) => handleFavouriteToggle(project.id, e)}\n >\n <Star className=\"h-3 w-3 fill-yellow-400 text-yellow-400\" />\n </Button>\n </div>\n ))}\n </>\n );\n })()}\n </>\n )}\n\n <div className=\"text-xs font-medium text-muted-foreground px-2 py-1 mt-2\">\n All projects:\n </div>\n\n {projects.loading && (\n <>\n <Skeleton className=\"w-[100%] h-[32px] rounded-lg\" />\n <Skeleton className=\"w-[100%] h-[32px] rounded-lg\" />\n <Skeleton className=\"w-[100%] h-[32px] rounded-lg\" />\n </>\n )}\n\n {!projects.loading && allProjects.map((project: Project) => (\n <div key={project.id} className=\"flex items-center gap-1\">\n <Link href={`/projects/${project.id}`} className=\"flex-1\">\n <Button\n variant={pathname.includes(project.id) ? \"secondary\" : \"ghost\"}\n className=\"w-full justify-start gap-2 pr-1\"\n >\n {renderProjectImage(project)}\n <span className=\"flex-1 text-left\">\n <TruncatedText text={project.name} length={14} />\n </span>\n </Button>\n </Link>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 w-8 p-0 flex-shrink-0\"\n onClick={(e) => handleFavouriteToggle(project.id, e)}\n >\n <Star className={`h-3 w-3 ${user?.favourite_projects?.includes(project.id) ? 'fill-yellow-400 text-yellow-400' : ''}`} />\n </Button>\n </div>\n ))}\n </>\n </div>\n\n <CreateProjectDialog\n open={createDialogOpen}\n onOpenChange={setCreateDialogOpen}\n refetchProjects={projects.refetch}\n />\n </div>\n );\n}","\"use client\";\n\nimport { ProjectNav } from \"@/components/project-nav\";\nimport * as React from \"react\";\n\nexport default function ProjectsLayout({ children }: { children: React.ReactNode }) {\n return (\n <div className=\"flex h-full\">\n <div className=\"border-r bg-muted/10\">\n <ProjectNav />\n </div>\n {children}\n </div>\n );\n}","export function TruncatedText({ text, length }: { text: string, length: number }) {\n if (text.length > length) {\n return <>{text.slice(0, length)}...</>\n } else {\n return <>{text}</>;\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","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","\"use client\";\n\n// Inspired by react-hot-toast library\nimport * as React from \"react\";\n\nimport type { ToastActionElement, ToastProps } from \"@/components/ui/toast\";\n\nconst TOAST_LIMIT = 1;\nconst TOAST_REMOVE_DELAY = 1000000;\n\ntype ToasterToast = ToastProps & {\n id: string;\n title?: React.ReactNode;\n description?: React.ReactNode;\n action?: ToastActionElement;\n};\n\nconst actionTypes = {\n ADD_TOAST: \"ADD_TOAST\",\n UPDATE_TOAST: \"UPDATE_TOAST\",\n DISMISS_TOAST: \"DISMISS_TOAST\",\n REMOVE_TOAST: \"REMOVE_TOAST\",\n} as const;\n\nlet count = 0;\n\nfunction genId() {\n count = (count + 1) % Number.MAX_SAFE_INTEGER;\n return count.toString();\n}\n\ntype ActionType = typeof actionTypes;\n\ntype Action =\n | {\n type: ActionType[\"ADD_TOAST\"];\n toast: ToasterToast;\n }\n | {\n type: ActionType[\"UPDATE_TOAST\"];\n toast: Partial<ToasterToast>;\n }\n | {\n type: ActionType[\"DISMISS_TOAST\"];\n toastId?: ToasterToast[\"id\"];\n }\n | {\n type: ActionType[\"REMOVE_TOAST\"];\n toastId?: ToasterToast[\"id\"];\n };\n\ninterface State {\n toasts: ToasterToast[];\n}\n\nconst toastTimeouts = new Map<string, ReturnType<typeof setTimeout>>();\n\nconst addToRemoveQueue = (toastId: string) => {\n if (toastTimeouts.has(toastId)) {\n return;\n }\n\n const timeout = setTimeout(() => {\n toastTimeouts.delete(toastId);\n dispatch({\n type: \"REMOVE_TOAST\",\n toastId: toastId,\n });\n }, TOAST_REMOVE_DELAY);\n\n toastTimeouts.set(toastId, timeout);\n};\n\nexport const reducer = (state: State, action: Action): State => {\n switch (action.type) {\n case \"ADD_TOAST\":\n return {\n ...state,\n toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),\n };\n\n case \"UPDATE_TOAST\":\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === action.toast.id ? { ...t, ...action.toast } : t,\n ),\n };\n\n case \"DISMISS_TOAST\": {\n const { toastId } = action;\n\n // ! Side effects ! - This could be extracted into a dismissToast() action,\n // but I'll keep it here for simplicity\n if (toastId) {\n addToRemoveQueue(toastId);\n } else {\n state.toasts.forEach((toast) => {\n addToRemoveQueue(toast.id);\n });\n }\n\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === toastId || toastId === undefined\n ? {\n ...t,\n open: false,\n }\n : t,\n ),\n };\n }\n case \"REMOVE_TOAST\":\n if (action.toastId === undefined) {\n return {\n ...state,\n toasts: [],\n };\n }\n return {\n ...state,\n toasts: state.toasts.filter((t) => t.id !== action.toastId),\n };\n }\n};\n\nconst listeners: Array<(state: State) => void> = [];\n\nlet memoryState: State = { toasts: [] };\n\nfunction dispatch(action: Action) {\n memoryState = reducer(memoryState, action);\n listeners.forEach((listener) => {\n listener(memoryState);\n });\n}\n\ntype Toast = Omit<ToasterToast, \"id\">;\n\nfunction toast({ ...props }: Toast) {\n const id = genId();\n\n const update = (props: ToasterToast) =>\n dispatch({\n type: \"UPDATE_TOAST\",\n toast: { ...props, id },\n });\n const dismiss = () => dispatch({ type: \"DISMISS_TOAST\", toastId: id });\n\n dispatch({\n type: \"ADD_TOAST\",\n toast: {\n ...props,\n id,\n open: true,\n onOpenChange: (open) => {\n if (!open) dismiss();\n },\n },\n });\n\n return {\n id: id,\n dismiss,\n update,\n };\n}\n\nfunction useToast() {\n const [state, setState] = React.useState<State>(memoryState);\n\n React.useEffect(() => {\n listeners.push(setState);\n return () => {\n const index = listeners.indexOf(setState);\n if (index > -1) {\n listeners.splice(index, 1);\n }\n };\n }, [state]);\n\n return {\n ...state,\n toast,\n dismiss: (toastId?: string) => dispatch({ type: \"DISMISS_TOAST\", toastId }),\n };\n}\n\nexport { useToast, toast };\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Loader2\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjEgMTJhOSA5IDAgMSAxLTYuMjE5LTguNTYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/loader-2\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Loader2 = createLucideIcon('Loader2', [\n ['path', { d: 'M21 12a9 9 0 1 1-6.219-8.56', key: '13zald' }],\n]);\n\nexport default Loader2;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Plus\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNSAxMmgxNCIgLz4KICA8cGF0aCBkPSJNMTIgNXYxNCIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/plus\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Plus = createLucideIcon('Plus', [\n ['path', { d: 'M5 12h14', key: '1ays0h' }],\n ['path', { d: 'M12 5v14', key: 's699le' }],\n]);\n\nexport default Plus;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Search\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8Y2lyY2xlIGN4PSIxMSIgY3k9IjExIiByPSI4IiAvPgogIDxwYXRoIGQ9Im0yMSAyMS00LjMtNC4zIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/search\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Search = createLucideIcon('Search', [\n ['circle', { cx: '11', cy: '11', r: '8', key: '4ej97u' }],\n ['path', { d: 'm21 21-4.3-4.3', key: '1qie3q' }],\n]);\n\nexport default Search;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Star\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cG9seWdvbiBwb2ludHM9IjEyIDIgMTUuMDkgOC4yNiAyMiA5LjI3IDE3IDE0LjE0IDE4LjE4IDIxLjAyIDEyIDE3Ljc3IDUuODIgMjEuMDIgNyAxNC4xNCAyIDkuMjcgOC45MSA4LjI2IDEyIDIiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/star\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Star = createLucideIcon('Star', [\n [\n 'polygon',\n {\n points:\n '12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2',\n key: '8f66p6',\n },\n ],\n]);\n\nexport default Star;\n","import * as React from \"rehackt\";\nimport { canUseDOM } from \"../../../utilities/index.js\";\n// use canUseDOM here instead of canUseLayoutEffect because we want to be able\n// to use useLayoutEffect in our jest tests. useLayoutEffect seems to work fine\n// in useSuspenseQuery tests, but to honor the original comment about the\n// warnings for useSyncExternalStore implementation, canUseLayoutEffect is left\n// alone.\nexport var useIsomorphicLayoutEffect = canUseDOM ? React.useLayoutEffect : React.useEffect;\n//# sourceMappingURL=useIsomorphicLayoutEffect.js.map","import { __assign } from \"tslib\";\nimport * as React from \"rehackt\";\nimport { mergeOptions } from \"../../utilities/index.js\";\nimport { equal } from \"@wry/equality\";\nimport { DocumentType, verifyDocumentType } from \"../parser/index.js\";\nimport { ApolloError } from \"../../errors/index.js\";\nimport { useApolloClient } from \"./useApolloClient.js\";\nimport { useIsomorphicLayoutEffect } from \"./internal/useIsomorphicLayoutEffect.js\";\n/**\n *\n *\n * > Refer to the [Mutations](https://www.apollographql.com/docs/react/data/mutations/) section for a more in-depth overview of `useMutation`.\n *\n * @example\n * ```jsx\n * import { gql, useMutation } from '@apollo/client';\n *\n * const ADD_TODO = gql`\n * mutation AddTodo($type: String!) {\n * addTodo(type: $type) {\n * id\n * type\n * }\n * }\n * `;\n *\n * function AddTodo() {\n * let input;\n * const [addTodo, { data }] = useMutation(ADD_TODO);\n *\n * return (\n * <div>\n * <form\n * onSubmit={e => {\n * e.preventDefault();\n * addTodo({ variables: { type: input.value } });\n * input.value = '';\n * }}\n * >\n * <input\n * ref={node => {\n * input = node;\n * }}\n * />\n * <button type=\"submit\">Add Todo</button>\n * </form>\n * </div>\n * );\n * }\n * ```\n * @since 3.0.0\n * @param mutation - A GraphQL mutation document parsed into an AST by `gql`.\n * @param options - Options to control how the mutation is executed.\n * @returns A tuple in the form of `[mutate, result]`\n */\nexport function useMutation(mutation, options) {\n var client = useApolloClient(options === null || options === void 0 ? void 0 : options.client);\n verifyDocumentType(mutation, DocumentType.Mutation);\n var _a = React.useState({\n called: false,\n loading: false,\n client: client,\n }), result = _a[0], setResult = _a[1];\n var ref = React.useRef({\n result: result,\n mutationId: 0,\n isMounted: true,\n client: client,\n mutation: mutation,\n options: options,\n });\n useIsomorphicLayoutEffect(function () {\n Object.assign(ref.current, { client: client, options: options, mutation: mutation });\n });\n var execute = React.useCallback(function (executeOptions) {\n if (executeOptions === void 0) { executeOptions = {}; }\n var _a = ref.current, options = _a.options, mutation = _a.mutation;\n var baseOptions = __assign(__assign({}, options), { mutation: mutation });\n var client = executeOptions.client || ref.current.client;\n if (!ref.current.result.loading &&\n !baseOptions.ignoreResults &&\n ref.current.isMounted) {\n setResult((ref.current.result = {\n loading: true,\n error: void 0,\n data: void 0,\n called: true,\n client: client,\n }));\n }\n var mutationId = ++ref.current.mutationId;\n var clientOptions = mergeOptions(baseOptions, executeOptions);\n return client\n .mutate(clientOptions)\n .then(function (response) {\n var _a, _b;\n var data = response.data, errors = response.errors;\n var error = errors && errors.length > 0 ?\n new ApolloError({ graphQLErrors: errors })\n : void 0;\n var onError = executeOptions.onError || ((_a = ref.current.options) === null || _a === void 0 ? void 0 : _a.onError);\n if (error && onError) {\n onError(error, clientOptions);\n }\n if (mutationId === ref.current.mutationId &&\n !clientOptions.ignoreResults) {\n var result_1 = {\n called: true,\n loading: false,\n data: data,\n error: error,\n client: client,\n };\n if (ref.current.isMounted && !equal(ref.current.result, result_1)) {\n setResult((ref.current.result = result_1));\n }\n }\n var onCompleted = executeOptions.onCompleted || ((_b = ref.current.options) === null || _b === void 0 ? void 0 : _b.onCompleted);\n if (!error) {\n onCompleted === null || onCompleted === void 0 ? void 0 : onCompleted(response.data, clientOptions);\n }\n return response;\n }, function (error) {\n var _a;\n if (mutationId === ref.current.mutationId &&\n ref.current.isMounted) {\n var result_2 = {\n loading: false,\n error: error,\n data: void 0,\n called: true,\n client: client,\n };\n if (!equal(ref.current.result, result_2)) {\n setResult((ref.current.result = result_2));\n }\n }\n var onError = executeOptions.onError || ((_a = ref.current.options) === null || _a === void 0 ? void 0 : _a.onError);\n if (onError) {\n onError(error, clientOptions);\n // TODO(brian): why are we returning this here???\n return { data: void 0, errors: error };\n }\n throw error;\n });\n }, []);\n var reset = React.useCallback(function () {\n if (ref.current.isMounted) {\n var result_3 = {\n called: false,\n loading: false,\n client: ref.current.client,\n };\n Object.assign(ref.current, { mutationId: 0, result: result_3 });\n setResult(result_3);\n }\n }, []);\n React.useEffect(function () {\n var current = ref.current;\n // eslint-disable-next-line react-compiler/react-compiler\n current.isMounted = true;\n return function () {\n current.isMounted = false;\n };\n }, []);\n return [execute, __assign({ reset: reset }, result)];\n}\n//# sourceMappingURL=useMutation.js.map","import * as React from 'react';\nimport { Primitive } from '@radix-ui/react-primitive';\n\n/* -------------------------------------------------------------------------------------------------\n * Label\n * -----------------------------------------------------------------------------------------------*/\n\nconst NAME = 'Label';\n\ntype LabelElement = React.ComponentRef<typeof Primitive.label>;\ntype PrimitiveLabelProps = React.ComponentPropsWithoutRef<typeof Primitive.label>;\ninterface LabelProps extends PrimitiveLabelProps {}\n\nconst Label = React.forwardRef<LabelElement, LabelProps>((props, forwardedRef) => {\n return (\n <Primitive.label\n {...props}\n ref={forwardedRef}\n onMouseDown={(event) => {\n // only prevent text selection if clicking inside the label itself\n const target = event.target as HTMLElement;\n if (target.closest('button, input, select, textarea')) return;\n\n props.onMouseDown?.(event);\n // prevent text selection when double clicking label\n if (!event.defaultPrevented && event.detail > 1) event.preventDefault();\n }}\n />\n );\n});\n\nLabel.displayName = NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = Label;\n\nexport {\n Label,\n //\n Root,\n};\nexport type { LabelProps };\n"],"names":["Promise","resolve","then","__webpack_require__","bind","CreateProjectDialog","param","open","onOpenChange","refetchProjects","formData","setFormData","useState","name","description","custom_instructions","isSubmitting","setIsSubmitting","toast","useToast","router","useRouter","createProject","useMutation","CREATE_PROJECT","refetchQueries","query","GET_PROJECTS","variables","page","limit","handleSubmit","e","preventDefault","trim","title","variant","result","input","rights_mode","console","log","newProject","data","projectsCreateOne","item","push","concat","id","error","message","jsx_runtime","jsx","Dialog","jsxs","DialogContent","className","DialogHeader","DialogTitle","DialogDescription","form","onSubmit","div","Label","htmlFor","Input","value","onChange","target","placeholder","required","disabled","Textarea","rows","DialogFooter","Button","type","onClick","Fragment","Loader2","ProjectNav","user","projects","favouriteProjects","searchQuery","setSearchQuery","createDialogOpen","setCreateDialogOpen","pathname","usePathname","init","useContext","UserContext","setUser","useQuery","GET_PROJECTS_BY_IDS","fetchPolicy","nextFetchPolicy","ids","favourite_projects","skip","length","filters","contains","undefined","useEffect","refetch","updateUserFavouriteProjects","UPDATE_USER_FAVOURITE_PROJECTS","renderProjectImage","project","image","img","src","alt","charAt","toUpperCase","handleFavouriteToggle","projectId","stopPropagation","newFavorites","currentFavorites","includes","filter","prev","allProjects","projectsPagination","items","previousData","favoriteProjectsList","projectByIds","Search","size","Plus","loading","Skeleton","map","Link","href","span","TruncatedText","text","Star","ProjectsLayout","children","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__","slice","DialogPrimitive","DialogTrigger","DialogPortal","DialogOverlay","React","ref","props","cn","displayName","X","labelVariants","cva","LabelPrimitive","textarea","count","toastTimeouts","Map","addToRemoveQueue","has","toastId","timeout","setTimeout","delete","dispatch","set","reducer","state","action","toasts","t","forEach","listeners","memoryState","listener","Number","MAX_SAFE_INTEGER","toString","dismiss","update","setState","index","indexOf","splice","createLucideIcon","d","key","cx","cy","r","points","useIsomorphicLayoutEffect","canUse","Nq","rehackt","useLayoutEffect","mutation","options","client","useApolloClient","x","parser","Vp","n_","Mutation","_a","called","setResult","useRef","mutationId","isMounted","Object","assign","current","execute","useCallback","executeOptions","baseOptions","tslib_es6","pi","ignoreResults","clientOptions","mergeOptions","J","mutate","response","_b","errors","client_errors","cA","graphQLErrors","onError","result_1","lib","D","onCompleted","result_2","reset","result_3","forwardedRef","Primitive","label","onMouseDown","closest","event","defaultPrevented","detail","Root"],"sourceRoot":""}
1
+ {"version":3,"file":"static/chunks/app/(application)/projects/layout-f2e0f42a08c96bb8.js","mappings":"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","sources":["webpack://_N_E/?62fd","webpack://_N_E/./components/create-project-dialog.tsx","webpack://_N_E/./components/project-nav.tsx","webpack://_N_E/./app/(application)/projects/layout.tsx","webpack://_N_E/./components/truncated-text.tsx","webpack://_N_E/./components/ui/dialog.tsx","webpack://_N_E/./components/ui/label.tsx","webpack://_N_E/./components/ui/textarea.tsx","webpack://_N_E/./components/ui/use-toast.ts","webpack://_N_E/../../../src/icons/loader-2.ts","webpack://_N_E/../../../src/icons/plus.ts","webpack://_N_E/../../../src/icons/search.ts","webpack://_N_E/../../../src/icons/star.ts","webpack://_N_E/./node_modules/@apollo/client/react/hooks/internal/useIsomorphicLayoutEffect.js","webpack://_N_E/./node_modules/@apollo/client/react/hooks/useMutation.js","webpack://_N_E/../src/label.tsx"],"sourcesContent":["import(/* webpackMode: \"eager\" */ \"/home/runner/work/exulu-frontend/exulu-frontend/app/(application)/projects/layout.tsx\");\n","\"use client\";\n\nimport { useState } from \"react\";\nimport { useMutation } from \"@apollo/client\";\nimport { CREATE_PROJECT, GET_PROJECTS } from \"@/queries/queries\";\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 {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from \"@/components/ui/dialog\";\nimport { Loader2 } from \"lucide-react\";\nimport { useRouter } from \"next/navigation\";\nimport { useToast } from \"./ui/use-toast\";\n\ninterface CreateProjectDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n refetchProjects: () => void;\n}\n\nexport function CreateProjectDialog({ open, onOpenChange, refetchProjects }: CreateProjectDialogProps) {\n const [formData, setFormData] = useState({\n name: \"\",\n description: \"\",\n custom_instructions: \"\",\n });\n const [isSubmitting, setIsSubmitting] = useState(false);\n \n const { toast } = useToast();\n const router = useRouter();\n \n const [createProject] = useMutation(CREATE_PROJECT, {\n refetchQueries: [\n {\n query: GET_PROJECTS,\n variables: {\n page: 1,\n limit: 200,\n },\n },\n ],\n });\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n \n if (!formData.name.trim()) {\n toast({\n title: \"Validation Error\",\n description: \"Project name is required.\",\n variant: \"destructive\",\n });\n return;\n }\n\n setIsSubmitting(true);\n\n try {\n const result = await createProject({\n variables: {\n input: {\n name: formData.name.trim(),\n description: formData.description.trim() || null,\n custom_instructions: formData.custom_instructions.trim() || null,\n rights_mode: \"private\",\n },\n },\n });\n\n console.log(result);\n\n const newProject = result.data?.projectsCreateOne?.item;\n \n if (newProject) {\n toast({\n title: \"Success\",\n description: \"Project created successfully!\",\n });\n \n // Reset form\n setFormData({\n name: \"\",\n description: \"\",\n custom_instructions: \"\",\n });\n \n // Close dialog\n onOpenChange(false);\n \n // Navigate to the new project\n router.push(`/projects/${newProject.id}`);\n refetchProjects();\n }\n } catch (error: any) {\n console.error(\"Error creating project:\", error);\n toast({\n title: \"Error\",\n description: error.message || \"Failed to create project. Please try again.\",\n variant: \"destructive\",\n });\n } finally {\n setIsSubmitting(false);\n }\n };\n\n const handleCancel = () => {\n setFormData({\n name: \"\",\n description: \"\",\n custom_instructions: \"\",\n });\n onOpenChange(false);\n };\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"sm:max-w-[500px]\">\n <DialogHeader>\n <DialogTitle>Create New Project</DialogTitle>\n <DialogDescription>\n Create a new project to organize your chat sessions and documents.\n </DialogDescription>\n </DialogHeader>\n \n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"project-name\">Project Name *</Label>\n <Input\n id=\"project-name\"\n value={formData.name}\n onChange={(e) => setFormData({ ...formData, name: e.target.value })}\n placeholder=\"Enter project name\"\n required\n disabled={isSubmitting}\n />\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"project-description\">Description</Label>\n <Textarea\n id=\"project-description\"\n value={formData.description}\n onChange={(e) => setFormData({ ...formData, description: e.target.value })}\n placeholder=\"Describe what this project is about...\"\n rows={3}\n disabled={isSubmitting}\n />\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"custom-instructions\">Custom Instructions</Label>\n <Textarea\n id=\"custom-instructions\"\n value={formData.custom_instructions}\n onChange={(e) => setFormData({ ...formData, custom_instructions: e.target.value })}\n placeholder=\"Enter custom instructions for chat sessions in this project...\"\n rows={3}\n disabled={isSubmitting}\n />\n </div>\n\n <DialogFooter>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={handleCancel}\n disabled={isSubmitting}\n >\n Cancel\n </Button>\n <Button type=\"submit\" disabled={isSubmitting}>\n {isSubmitting ? (\n <>\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n Creating...\n </>\n ) : (\n \"Create Project\"\n )}\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n );\n}","import Link from \"next/link\"\nimport { Search, Star, Plus } from \"lucide-react\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { useQuery, useMutation } from \"@apollo/client\";\nimport { GET_PROJECTS, GET_PROJECTS_BY_IDS, UPDATE_USER_FAVOURITE_PROJECTS } from \"@/queries/queries\";\nimport { useEffect, useState, useContext } from \"react\";\nimport { TruncatedText } from \"./truncated-text\";\nimport { useParams, usePathname } from \"next/navigation\";\nimport { Skeleton } from \"./ui/skeleton\";\nimport { UserContext } from \"@/app/(application)/authenticated\";\nimport { User } from \"@/types/models/user\";\nimport { CreateProjectDialog } from \"./create-project-dialog\";\nimport { useRouter } from \"next/router\";\n\n// Project interface based on our schema\ninterface Project {\n id: string;\n name: string;\n description?: string;\n image?: string;\n custom_instructions?: string;\n rights_mode?: string;\n created_by?: number;\n createdAt?: string;\n updatedAt?: string;\n RBAC?: any;\n}\n\nexport function ProjectNav() {\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [createDialogOpen, setCreateDialogOpen] = useState(false);\n const pathname = usePathname();\n const { user: init } = useContext(UserContext);\n const [user, setUser] = useState<User>(init);\n\n // Fetch favourite projects using GET_PROJECTS_BY_IDS\n const favouriteProjects = useQuery(GET_PROJECTS_BY_IDS, {\n fetchPolicy: \"no-cache\",\n nextFetchPolicy: \"network-only\",\n variables: {\n ids: user?.favourite_projects || []\n },\n skip: !user?.favourite_projects?.length,\n });\n\n // Fetch regular projects (excluding favourites when not searching)\n const projects = useQuery(GET_PROJECTS, {\n fetchPolicy: \"no-cache\",\n nextFetchPolicy: \"network-only\",\n variables: {\n page: 1,\n limit: 200,\n filters: searchQuery ? [\n {\n name: {\n contains: searchQuery\n }\n }\n ] : undefined,\n },\n });\n\n useEffect(() => {\n projects.refetch();\n }, [pathname]);\n\n const [updateUserFavouriteProjects] = useMutation(UPDATE_USER_FAVOURITE_PROJECTS);\n\n const renderProjectImage = (project: Project) => {\n if (project.image) {\n return (\n <img\n src={project.image}\n alt={`${project.name} thumbnail`}\n className=\"h-4 w-4 rounded-full object-cover\"\n />\n );\n } else {\n return (\n <div className=\"h-4 w-4 rounded-full bg-gradient-to-br from-green-500 to-blue-600 flex items-center justify-center text-white text-xs font-medium\">\n {project.name?.charAt(0).toUpperCase() || 'P'}\n </div>\n );\n }\n };\n\n const handleFavouriteToggle = async (projectId: string, e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n try {\n const currentFavorites = user?.favourite_projects || [];\n const isFavorite = currentFavorites.includes(projectId);\n\n let newFavorites: string[];\n if (isFavorite) {\n newFavorites = currentFavorites.filter(id => id !== projectId);\n } else {\n newFavorites = [...currentFavorites, projectId];\n }\n\n await updateUserFavouriteProjects({\n variables: {\n id: user?.id,\n favourite_projects: newFavorites\n }\n });\n\n setUser(prev => ({ ...prev, favourite_projects: newFavorites }));\n } catch (error) {\n console.error(\"Error updating favourite projects:\", error);\n }\n };\n\n const handleCreateProject = () => {\n setCreateDialogOpen(true);\n };\n\n const allProjects = (projects?.data?.projectsPagination?.items || projects?.previousData?.projectsPagination?.items) || [];\n const favoriteProjectsList = (favouriteProjects?.data?.projectByIds || favouriteProjects?.previousData?.projectByIds) || [];\n\n return (\n <div className=\"h-full w-[250px] flex-col gap-2 p-2\">\n <div className=\"flex items-center gap-2\">\n <div className=\"relative flex-1\">\n <Search className=\"absolute left-2.5 top-2.5 h-4 w-4 text-muted-foreground\" />\n <Input\n type=\"search\"\n placeholder=\"Search projects...\"\n className=\"pl-8\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n />\n </div>\n <Button\n variant=\"outline\"\n size=\"lg\"\n className=\"h-10 w-10 p-0\"\n onClick={handleCreateProject}\n title=\"Create new project\"\n >\n <Plus className=\"h-3 w-3\" />\n </Button>\n </div>\n\n <div className=\"flex-1 overflow-auto space-y-1\">\n\n <>\n {user?.favourite_projects && favoriteProjectsList.length > 0 && !searchQuery && (\n <>\n <div className=\"text-xs font-medium text-muted-foreground px-2 py-1\">\n Favorites\n </div>\n {favouriteProjects.loading && (\n <>\n <Skeleton className=\"w-[100%] h-[32px] rounded-lg\" />\n <Skeleton className=\"w-[100%] h-[32px] rounded-lg\" />\n </>\n )}\n {!favouriteProjects.loading && (() => {\n return (\n <>\n {favoriteProjectsList.map((project: Project) => (\n <div key={project.id} className=\"flex items-center gap-1\">\n <Link href={`/projects/${project.id}`} className=\"flex-1\">\n <Button\n variant={pathname.includes(project.id) ? \"secondary\" : \"ghost\"}\n className=\"w-full justify-start gap-2 pr-1\"\n >\n {renderProjectImage(project)}\n <span className=\"flex-1 text-left\">\n <TruncatedText text={project.name} length={10} />\n </span>\n </Button>\n </Link>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 w-8 p-0 flex-shrink-0\"\n onClick={(e) => handleFavouriteToggle(project.id, e)}\n >\n <Star className=\"h-3 w-3 fill-yellow-400 text-yellow-400\" />\n </Button>\n </div>\n ))}\n </>\n );\n })()}\n </>\n )}\n\n <div className=\"text-xs font-medium text-muted-foreground px-2 py-1 mt-2\">\n All projects:\n </div>\n\n {projects.loading && (\n <>\n <Skeleton className=\"w-[100%] h-[32px] rounded-lg\" />\n <Skeleton className=\"w-[100%] h-[32px] rounded-lg\" />\n <Skeleton className=\"w-[100%] h-[32px] rounded-lg\" />\n </>\n )}\n\n {!projects.loading && allProjects.map((project: Project) => (\n <div key={project.id} className=\"flex items-center gap-1\">\n <Link href={`/projects/${project.id}`} className=\"flex-1\">\n <Button\n variant={pathname.includes(project.id) ? \"secondary\" : \"ghost\"}\n className=\"w-full justify-start gap-2 pr-1\"\n >\n {renderProjectImage(project)}\n <span className=\"flex-1 text-left\">\n <TruncatedText text={project.name} length={14} />\n </span>\n </Button>\n </Link>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 w-8 p-0 flex-shrink-0\"\n onClick={(e) => handleFavouriteToggle(project.id, e)}\n >\n <Star className={`h-3 w-3 ${user?.favourite_projects?.includes(project.id) ? 'fill-yellow-400 text-yellow-400' : ''}`} />\n </Button>\n </div>\n ))}\n </>\n </div>\n\n <CreateProjectDialog\n open={createDialogOpen}\n onOpenChange={setCreateDialogOpen}\n refetchProjects={projects.refetch}\n />\n </div>\n );\n}","\"use client\";\n\nimport { ProjectNav } from \"@/components/project-nav\";\nimport * as React from \"react\";\n\nexport default function ProjectsLayout({ children }: { children: React.ReactNode }) {\n return (\n <div className=\"flex h-full\">\n <div className=\"border-r bg-muted/10\">\n <ProjectNav />\n </div>\n {children}\n </div>\n );\n}","export function TruncatedText({ text, length }: { text: string, length: number }) {\n if (text.length > length) {\n return <>{text.slice(0, length)}...</>\n } else {\n return <>{text}</>;\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","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","\"use client\";\n\n// Inspired by react-hot-toast library\nimport * as React from \"react\";\n\nimport type { ToastActionElement, ToastProps } from \"@/components/ui/toast\";\n\nconst TOAST_LIMIT = 1;\nconst TOAST_REMOVE_DELAY = 1000000;\n\ntype ToasterToast = ToastProps & {\n id: string;\n title?: React.ReactNode;\n description?: React.ReactNode;\n action?: ToastActionElement;\n};\n\nconst actionTypes = {\n ADD_TOAST: \"ADD_TOAST\",\n UPDATE_TOAST: \"UPDATE_TOAST\",\n DISMISS_TOAST: \"DISMISS_TOAST\",\n REMOVE_TOAST: \"REMOVE_TOAST\",\n} as const;\n\nlet count = 0;\n\nfunction genId() {\n count = (count + 1) % Number.MAX_SAFE_INTEGER;\n return count.toString();\n}\n\ntype ActionType = typeof actionTypes;\n\ntype Action =\n | {\n type: ActionType[\"ADD_TOAST\"];\n toast: ToasterToast;\n }\n | {\n type: ActionType[\"UPDATE_TOAST\"];\n toast: Partial<ToasterToast>;\n }\n | {\n type: ActionType[\"DISMISS_TOAST\"];\n toastId?: ToasterToast[\"id\"];\n }\n | {\n type: ActionType[\"REMOVE_TOAST\"];\n toastId?: ToasterToast[\"id\"];\n };\n\ninterface State {\n toasts: ToasterToast[];\n}\n\nconst toastTimeouts = new Map<string, ReturnType<typeof setTimeout>>();\n\nconst addToRemoveQueue = (toastId: string) => {\n if (toastTimeouts.has(toastId)) {\n return;\n }\n\n const timeout = setTimeout(() => {\n toastTimeouts.delete(toastId);\n dispatch({\n type: \"REMOVE_TOAST\",\n toastId: toastId,\n });\n }, TOAST_REMOVE_DELAY);\n\n toastTimeouts.set(toastId, timeout);\n};\n\nexport const reducer = (state: State, action: Action): State => {\n switch (action.type) {\n case \"ADD_TOAST\":\n return {\n ...state,\n toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),\n };\n\n case \"UPDATE_TOAST\":\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === action.toast.id ? { ...t, ...action.toast } : t,\n ),\n };\n\n case \"DISMISS_TOAST\": {\n const { toastId } = action;\n\n // ! Side effects ! - This could be extracted into a dismissToast() action,\n // but I'll keep it here for simplicity\n if (toastId) {\n addToRemoveQueue(toastId);\n } else {\n state.toasts.forEach((toast) => {\n addToRemoveQueue(toast.id);\n });\n }\n\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === toastId || toastId === undefined\n ? {\n ...t,\n open: false,\n }\n : t,\n ),\n };\n }\n case \"REMOVE_TOAST\":\n if (action.toastId === undefined) {\n return {\n ...state,\n toasts: [],\n };\n }\n return {\n ...state,\n toasts: state.toasts.filter((t) => t.id !== action.toastId),\n };\n }\n};\n\nconst listeners: Array<(state: State) => void> = [];\n\nlet memoryState: State = { toasts: [] };\n\nfunction dispatch(action: Action) {\n memoryState = reducer(memoryState, action);\n listeners.forEach((listener) => {\n listener(memoryState);\n });\n}\n\ntype Toast = Omit<ToasterToast, \"id\">;\n\nfunction toast({ ...props }: Toast) {\n const id = genId();\n\n const update = (props: ToasterToast) =>\n dispatch({\n type: \"UPDATE_TOAST\",\n toast: { ...props, id },\n });\n const dismiss = () => dispatch({ type: \"DISMISS_TOAST\", toastId: id });\n\n dispatch({\n type: \"ADD_TOAST\",\n toast: {\n ...props,\n id,\n open: true,\n onOpenChange: (open) => {\n if (!open) dismiss();\n },\n },\n });\n\n return {\n id: id,\n dismiss,\n update,\n };\n}\n\nfunction useToast() {\n const [state, setState] = React.useState<State>(memoryState);\n\n React.useEffect(() => {\n listeners.push(setState);\n return () => {\n const index = listeners.indexOf(setState);\n if (index > -1) {\n listeners.splice(index, 1);\n }\n };\n }, [state]);\n\n return {\n ...state,\n toast,\n dismiss: (toastId?: string) => dispatch({ type: \"DISMISS_TOAST\", toastId }),\n };\n}\n\nexport { useToast, toast };\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Loader2\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjEgMTJhOSA5IDAgMSAxLTYuMjE5LTguNTYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/loader-2\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Loader2 = createLucideIcon('Loader2', [\n ['path', { d: 'M21 12a9 9 0 1 1-6.219-8.56', key: '13zald' }],\n]);\n\nexport default Loader2;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Plus\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNSAxMmgxNCIgLz4KICA8cGF0aCBkPSJNMTIgNXYxNCIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/plus\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Plus = createLucideIcon('Plus', [\n ['path', { d: 'M5 12h14', key: '1ays0h' }],\n ['path', { d: 'M12 5v14', key: 's699le' }],\n]);\n\nexport default Plus;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Search\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8Y2lyY2xlIGN4PSIxMSIgY3k9IjExIiByPSI4IiAvPgogIDxwYXRoIGQ9Im0yMSAyMS00LjMtNC4zIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/search\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Search = createLucideIcon('Search', [\n ['circle', { cx: '11', cy: '11', r: '8', key: '4ej97u' }],\n ['path', { d: 'm21 21-4.3-4.3', key: '1qie3q' }],\n]);\n\nexport default Search;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Star\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cG9seWdvbiBwb2ludHM9IjEyIDIgMTUuMDkgOC4yNiAyMiA5LjI3IDE3IDE0LjE0IDE4LjE4IDIxLjAyIDEyIDE3Ljc3IDUuODIgMjEuMDIgNyAxNC4xNCAyIDkuMjcgOC45MSA4LjI2IDEyIDIiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/star\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Star = createLucideIcon('Star', [\n [\n 'polygon',\n {\n points:\n '12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2',\n key: '8f66p6',\n },\n ],\n]);\n\nexport default Star;\n","import * as React from \"rehackt\";\nimport { canUseDOM } from \"../../../utilities/index.js\";\n// use canUseDOM here instead of canUseLayoutEffect because we want to be able\n// to use useLayoutEffect in our jest tests. useLayoutEffect seems to work fine\n// in useSuspenseQuery tests, but to honor the original comment about the\n// warnings for useSyncExternalStore implementation, canUseLayoutEffect is left\n// alone.\nexport var useIsomorphicLayoutEffect = canUseDOM ? React.useLayoutEffect : React.useEffect;\n//# sourceMappingURL=useIsomorphicLayoutEffect.js.map","import { __assign } from \"tslib\";\nimport * as React from \"rehackt\";\nimport { mergeOptions } from \"../../utilities/index.js\";\nimport { equal } from \"@wry/equality\";\nimport { DocumentType, verifyDocumentType } from \"../parser/index.js\";\nimport { ApolloError } from \"../../errors/index.js\";\nimport { useApolloClient } from \"./useApolloClient.js\";\nimport { useIsomorphicLayoutEffect } from \"./internal/useIsomorphicLayoutEffect.js\";\n/**\n *\n *\n * > Refer to the [Mutations](https://www.apollographql.com/docs/react/data/mutations/) section for a more in-depth overview of `useMutation`.\n *\n * @example\n * ```jsx\n * import { gql, useMutation } from '@apollo/client';\n *\n * const ADD_TODO = gql`\n * mutation AddTodo($type: String!) {\n * addTodo(type: $type) {\n * id\n * type\n * }\n * }\n * `;\n *\n * function AddTodo() {\n * let input;\n * const [addTodo, { data }] = useMutation(ADD_TODO);\n *\n * return (\n * <div>\n * <form\n * onSubmit={e => {\n * e.preventDefault();\n * addTodo({ variables: { type: input.value } });\n * input.value = '';\n * }}\n * >\n * <input\n * ref={node => {\n * input = node;\n * }}\n * />\n * <button type=\"submit\">Add Todo</button>\n * </form>\n * </div>\n * );\n * }\n * ```\n * @since 3.0.0\n * @param mutation - A GraphQL mutation document parsed into an AST by `gql`.\n * @param options - Options to control how the mutation is executed.\n * @returns A tuple in the form of `[mutate, result]`\n */\nexport function useMutation(mutation, options) {\n var client = useApolloClient(options === null || options === void 0 ? void 0 : options.client);\n verifyDocumentType(mutation, DocumentType.Mutation);\n var _a = React.useState({\n called: false,\n loading: false,\n client: client,\n }), result = _a[0], setResult = _a[1];\n var ref = React.useRef({\n result: result,\n mutationId: 0,\n isMounted: true,\n client: client,\n mutation: mutation,\n options: options,\n });\n useIsomorphicLayoutEffect(function () {\n Object.assign(ref.current, { client: client, options: options, mutation: mutation });\n });\n var execute = React.useCallback(function (executeOptions) {\n if (executeOptions === void 0) { executeOptions = {}; }\n var _a = ref.current, options = _a.options, mutation = _a.mutation;\n var baseOptions = __assign(__assign({}, options), { mutation: mutation });\n var client = executeOptions.client || ref.current.client;\n if (!ref.current.result.loading &&\n !baseOptions.ignoreResults &&\n ref.current.isMounted) {\n setResult((ref.current.result = {\n loading: true,\n error: void 0,\n data: void 0,\n called: true,\n client: client,\n }));\n }\n var mutationId = ++ref.current.mutationId;\n var clientOptions = mergeOptions(baseOptions, executeOptions);\n return client\n .mutate(clientOptions)\n .then(function (response) {\n var _a, _b;\n var data = response.data, errors = response.errors;\n var error = errors && errors.length > 0 ?\n new ApolloError({ graphQLErrors: errors })\n : void 0;\n var onError = executeOptions.onError || ((_a = ref.current.options) === null || _a === void 0 ? void 0 : _a.onError);\n if (error && onError) {\n onError(error, clientOptions);\n }\n if (mutationId === ref.current.mutationId &&\n !clientOptions.ignoreResults) {\n var result_1 = {\n called: true,\n loading: false,\n data: data,\n error: error,\n client: client,\n };\n if (ref.current.isMounted && !equal(ref.current.result, result_1)) {\n setResult((ref.current.result = result_1));\n }\n }\n var onCompleted = executeOptions.onCompleted || ((_b = ref.current.options) === null || _b === void 0 ? void 0 : _b.onCompleted);\n if (!error) {\n onCompleted === null || onCompleted === void 0 ? void 0 : onCompleted(response.data, clientOptions);\n }\n return response;\n }, function (error) {\n var _a;\n if (mutationId === ref.current.mutationId &&\n ref.current.isMounted) {\n var result_2 = {\n loading: false,\n error: error,\n data: void 0,\n called: true,\n client: client,\n };\n if (!equal(ref.current.result, result_2)) {\n setResult((ref.current.result = result_2));\n }\n }\n var onError = executeOptions.onError || ((_a = ref.current.options) === null || _a === void 0 ? void 0 : _a.onError);\n if (onError) {\n onError(error, clientOptions);\n // TODO(brian): why are we returning this here???\n return { data: void 0, errors: error };\n }\n throw error;\n });\n }, []);\n var reset = React.useCallback(function () {\n if (ref.current.isMounted) {\n var result_3 = {\n called: false,\n loading: false,\n client: ref.current.client,\n };\n Object.assign(ref.current, { mutationId: 0, result: result_3 });\n setResult(result_3);\n }\n }, []);\n React.useEffect(function () {\n var current = ref.current;\n // eslint-disable-next-line react-compiler/react-compiler\n current.isMounted = true;\n return function () {\n current.isMounted = false;\n };\n }, []);\n return [execute, __assign({ reset: reset }, result)];\n}\n//# sourceMappingURL=useMutation.js.map","import * as React from 'react';\nimport { Primitive } from '@radix-ui/react-primitive';\n\n/* -------------------------------------------------------------------------------------------------\n * Label\n * -----------------------------------------------------------------------------------------------*/\n\nconst NAME = 'Label';\n\ntype LabelElement = React.ComponentRef<typeof Primitive.label>;\ntype PrimitiveLabelProps = React.ComponentPropsWithoutRef<typeof Primitive.label>;\ninterface LabelProps extends PrimitiveLabelProps {}\n\nconst Label = React.forwardRef<LabelElement, LabelProps>((props, forwardedRef) => {\n return (\n <Primitive.label\n {...props}\n ref={forwardedRef}\n onMouseDown={(event) => {\n // only prevent text selection if clicking inside the label itself\n const target = event.target as HTMLElement;\n if (target.closest('button, input, select, textarea')) return;\n\n props.onMouseDown?.(event);\n // prevent text selection when double clicking label\n if (!event.defaultPrevented && event.detail > 1) event.preventDefault();\n }}\n />\n );\n});\n\nLabel.displayName = NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = Label;\n\nexport {\n Label,\n //\n Root,\n};\nexport type { LabelProps };\n"],"names":["Promise","resolve","then","__webpack_require__","bind","CreateProjectDialog","param","open","onOpenChange","refetchProjects","formData","setFormData","useState","name","description","custom_instructions","isSubmitting","setIsSubmitting","toast","useToast","router","useRouter","createProject","useMutation","CREATE_PROJECT","refetchQueries","query","GET_PROJECTS","variables","page","limit","handleSubmit","e","preventDefault","trim","title","variant","result","input","rights_mode","console","log","newProject","data","projectsCreateOne","item","push","concat","id","error","message","jsx_runtime","jsx","Dialog","jsxs","DialogContent","className","DialogHeader","DialogTitle","DialogDescription","form","onSubmit","div","Label","htmlFor","Input","value","onChange","target","placeholder","required","disabled","Textarea","rows","DialogFooter","Button","type","onClick","Fragment","Loader2","ProjectNav","user","projects","favouriteProjects","searchQuery","setSearchQuery","createDialogOpen","setCreateDialogOpen","pathname","usePathname","init","useContext","UserContext","setUser","useQuery","GET_PROJECTS_BY_IDS","fetchPolicy","nextFetchPolicy","ids","favourite_projects","skip","length","filters","contains","undefined","useEffect","refetch","updateUserFavouriteProjects","UPDATE_USER_FAVOURITE_PROJECTS","renderProjectImage","project","image","img","src","alt","charAt","toUpperCase","handleFavouriteToggle","projectId","stopPropagation","newFavorites","currentFavorites","includes","filter","prev","allProjects","projectsPagination","items","previousData","favoriteProjectsList","projectByIds","Search","size","Plus","loading","Skeleton","map","Link","href","span","TruncatedText","text","Star","ProjectsLayout","children","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__","slice","DialogPrimitive","DialogTrigger","DialogPortal","DialogOverlay","React","ref","props","cn","displayName","X","labelVariants","cva","LabelPrimitive","textarea","count","toastTimeouts","Map","addToRemoveQueue","has","toastId","timeout","setTimeout","delete","dispatch","set","reducer","state","action","toasts","t","forEach","listeners","memoryState","listener","Number","MAX_SAFE_INTEGER","toString","dismiss","update","setState","index","indexOf","splice","createLucideIcon","d","key","cx","cy","r","points","useIsomorphicLayoutEffect","canUse","Nq","rehackt","useLayoutEffect","mutation","options","client","useApolloClient","x","parser","Vp","n_","Mutation","_a","called","setResult","useRef","mutationId","isMounted","Object","assign","current","execute","useCallback","executeOptions","baseOptions","tslib_es6","pi","ignoreResults","clientOptions","mergeOptions","J","mutate","response","_b","errors","client_errors","cA","graphQLErrors","onError","result_1","lib","D","onCompleted","result_2","reset","result_3","forwardedRef","Primitive","label","onMouseDown","closest","event","defaultPrevented","detail","Root"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4901],{6563:function(e,t,n){Promise.resolve().then(n.bind(n,62081))},62081:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return y},dynamic:function(){return h}});var r=n(57437),a=n(2265),i=n(13832),s=n(62869),l=n(95186),o=n(99397),u=n(73247),d=n(92451),c=n(10407),m=n(12194),f=n(76367),p=n(35283),v=n(84190);function x(e){var t;let{sortBy:n,onSortChange:a}=e,i=[{value:"updatedAt",label:"Recently Updated"},{value:"createdAt",label:"Recently Created"},{value:"favorite_count",label:"Most Favorited"},{value:"usage_count",label:"Most Used"},{value:"name",label:"Alphabetical"}];return(0,r.jsxs)(v.h_,{children:[(0,r.jsx)(v.$F,{asChild:!0,children:(0,r.jsxs)(s.z,{variant:"secondary",children:["Sort:"," ",(null===(t=i.find(e=>e.value===n))||void 0===t?void 0:t.label)||"Recently Updated"]})}),(0,r.jsxs)(v.AW,{align:"end",className:"w-56",children:[(0,r.jsx)(v.Ju,{children:"Sort By"}),(0,r.jsx)(v.VD,{}),(0,r.jsx)(v._x,{value:n,onValueChange:a,children:i.map(e=>(0,r.jsx)(v.qB,{value:e.value,children:e.label},e.value))})]})]})}let h="force-dynamic";function y(){var e,t;let{user:n}=(0,a.useContext)(i.S),[v,h]=(0,a.useState)(""),[y,N]=(0,a.useState)(!1),[g,j]=(0,a.useState)("updatedAt"),[b,w]=(0,a.useState)(1),[C]=(0,a.useState)(12);(0,a.useEffect)(()=>{w(1)},[v,g]);let M=[];v&&M.push({name:{contains:v}});let{data:O,loading:P,error:R,refetch:S}=(0,m.Sh)({page:b,limit:C,filters:M,sort:{field:g,direction:"DESC"}}),T=(null==O?void 0:null===(e=O.prompt_libraryPagination)||void 0===e?void 0:e.items)||[],E=null==O?void 0:null===(t=O.prompt_libraryPagination)||void 0===t?void 0:t.pageInfo;return(0,r.jsxs)("div",{className:"h-full flex-1 flex-col space-y-8 p-8",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between space-y-2",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("h2",{className:"text-2xl font-bold tracking-tight",children:"Prompt Library"}),(0,r.jsx)("p",{className:"text-muted-foreground",children:"Create, organize, and share AI prompts with your team."})]}),(0,r.jsxs)(s.z,{onClick:()=>N(!0),children:[(0,r.jsx)(o.Z,{className:"mr-2 h-4 w-4"}),"Create Prompt"]})]}),(0,r.jsx)("div",{className:"flex flex-col gap-4",children:(0,r.jsxs)("div",{className:"flex items-center gap-4",children:[(0,r.jsxs)("div",{className:"relative flex-1 max-w-md",children:[(0,r.jsx)(u.Z,{className:"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),(0,r.jsx)(l.I,{placeholder:"Search prompts by name...",value:v,onChange:e=>h(e.target.value),className:"pl-10"})]}),(0,r.jsx)(x,{sortBy:g,onSortChange:j})]})}),P?(0,r.jsx)("div",{className:"flex items-center justify-center py-12",children:(0,r.jsx)("div",{className:"text-muted-foreground",children:"Loading prompts..."})}):R?(0,r.jsx)("div",{className:"flex items-center justify-center py-12",children:(0,r.jsx)("div",{className:"text-destructive",children:"Error loading prompts"})}):0===T.length?(0,r.jsx)("div",{className:"flex flex-col items-center justify-center py-12 border-2 border-dashed rounded-lg",children:(0,r.jsxs)("div",{className:"text-center space-y-2",children:[(0,r.jsx)("h3",{className:"text-lg font-medium",children:"No prompts found"}),(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:v?"Try adjusting your search":"Get started by creating your first prompt"}),!v&&(0,r.jsxs)(s.z,{onClick:()=>N(!0),variant:"outline",className:"mt-4",children:[(0,r.jsx)(o.Z,{className:"mr-2 h-4 w-4"}),"Create Prompt"]})]})}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("div",{className:"grid gap-4 md:grid-cols-2 lg:grid-cols-3",children:T.map(e=>(0,r.jsx)(f.$,{prompt:e,user:n,onUpdate:S},e.id))}),E&&E.pageCount>1&&(0,r.jsxs)("div",{className:"flex items-center justify-between border-t pt-4",children:[(0,r.jsxs)("div",{className:"text-sm text-muted-foreground",children:["Page ",E.currentPage," of ",E.pageCount," (",E.itemCount," total items)"]}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsxs)(s.z,{variant:"outline",size:"sm",onClick:()=>w(e=>Math.max(1,e-1)),disabled:!E.hasPreviousPage,children:[(0,r.jsx)(d.Z,{className:"h-4 w-4 mr-1"}),"Previous"]}),(0,r.jsxs)(s.z,{variant:"outline",size:"sm",onClick:()=>w(e=>e+1),disabled:!E.hasNextPage,children:["Next",(0,r.jsx)(c.Z,{className:"h-4 w-4 ml-1"})]})]})]})]}),(0,r.jsx)(p.D,{open:y,onOpenChange:N,onSuccess:S,user:n})]})}},74928:function(e,t,n){"use strict";n.d(t,{Fw:function(){return s},wy:function(){return i},zF:function(){return a}});var r=n(88985);let a=r.fC,i=r.wy,s=r.Fw},92451:function(e,t,n){"use strict";n.d(t,{Z:function(){return r}});let r=(0,n(39763).Z)("ChevronLeft",[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]])},78867:function(e,t,n){"use strict";n.d(t,{Z:function(){return r}});let r=(0,n(39763).Z)("Copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]])},99397:function(e,t,n){"use strict";n.d(t,{Z:function(){return r}});let r=(0,n(39763).Z)("Plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]])},88985:function(e,t,n){"use strict";n.d(t,{zF:function(){return y},Fw:function(){return b},wy:function(){return g},fC:function(){return M}});var r=n(2265);"undefined"!=typeof window&&window.document&&window.document.createElement;var a=n(73966),i=n(80886),s=n(61188),l=n(98575),o=n(66840),u=e=>{var t,n;let a,i;let{present:o,children:u}=e,c=function(e){var t,n;let[a,i]=r.useState(),l=r.useRef(null),o=r.useRef(e),u=r.useRef("none"),[c,m]=(t=e?"mounted":"unmounted",n={mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}},r.useReducer((e,t)=>{let r=n[e][t];return null!=r?r:e},t));return r.useEffect(()=>{let e=d(l.current);u.current="mounted"===c?e:"none"},[c]),(0,s.b)(()=>{let t=l.current,n=o.current;if(n!==e){let r=u.current,a=d(t);e?m("MOUNT"):"none"===a||(null==t?void 0:t.display)==="none"?m("UNMOUNT"):n&&r!==a?m("ANIMATION_OUT"):m("UNMOUNT"),o.current=e}},[e,m]),(0,s.b)(()=>{if(a){var e;let t;let n=null!==(e=a.ownerDocument.defaultView)&&void 0!==e?e:window,r=e=>{let r=d(l.current).includes(CSS.escape(e.animationName));if(e.target===a&&r&&(m("ANIMATION_END"),!o.current)){let e=a.style.animationFillMode;a.style.animationFillMode="forwards",t=n.setTimeout(()=>{"forwards"===a.style.animationFillMode&&(a.style.animationFillMode=e)})}},i=e=>{e.target===a&&(u.current=d(l.current))};return a.addEventListener("animationstart",i),a.addEventListener("animationcancel",r),a.addEventListener("animationend",r),()=>{n.clearTimeout(t),a.removeEventListener("animationstart",i),a.removeEventListener("animationcancel",r),a.removeEventListener("animationend",r)}}m("ANIMATION_END")},[a,m]),{isPresent:["mounted","unmountSuspended"].includes(c),ref:r.useCallback(e=>{l.current=e?getComputedStyle(e):null,i(e)},[])}}(o),m="function"==typeof u?u({present:c.isPresent}):r.Children.only(u),f=(0,l.e)(c.ref,(a=null===(t=Object.getOwnPropertyDescriptor(m.props,"ref"))||void 0===t?void 0:t.get)&&"isReactWarning"in a&&a.isReactWarning?m.ref:(a=null===(n=Object.getOwnPropertyDescriptor(m,"ref"))||void 0===n?void 0:n.get)&&"isReactWarning"in a&&a.isReactWarning?m.props.ref:m.props.ref||m.ref);return"function"==typeof u||c.isPresent?r.cloneElement(m,{ref:f}):null};function d(e){return(null==e?void 0:e.animationName)||"none"}u.displayName="Presence";var c=n(99255),m=n(57437),f="Collapsible",[p,v]=(0,a.b)(f),[x,h]=p(f),y=r.forwardRef((e,t)=>{let{__scopeCollapsible:n,open:a,defaultOpen:s,disabled:l,onOpenChange:u,...d}=e,[p,v]=(0,i.T)({prop:a,defaultProp:null!=s&&s,onChange:u,caller:f});return(0,m.jsx)(x,{scope:n,disabled:l,contentId:(0,c.M)(),open:p,onOpenToggle:r.useCallback(()=>v(e=>!e),[v]),children:(0,m.jsx)(o.WV.div,{"data-state":C(p),"data-disabled":l?"":void 0,...d,ref:t})})});y.displayName=f;var N="CollapsibleTrigger",g=r.forwardRef((e,t)=>{let{__scopeCollapsible:n,...r}=e,a=h(N,n);return(0,m.jsx)(o.WV.button,{type:"button","aria-controls":a.contentId,"aria-expanded":a.open||!1,"data-state":C(a.open),"data-disabled":a.disabled?"":void 0,disabled:a.disabled,...r,ref:t,onClick:function(e,t,{checkForDefaultPrevented:n=!0}={}){return function(r){if(e?.(r),!1===n||!r.defaultPrevented)return t?.(r)}}(e.onClick,a.onOpenToggle)})});g.displayName=N;var j="CollapsibleContent",b=r.forwardRef((e,t)=>{let{forceMount:n,...r}=e,a=h(j,e.__scopeCollapsible);return(0,m.jsx)(u,{present:n||a.open,children:e=>{let{present:n}=e;return(0,m.jsx)(w,{...r,ref:t,present:n})}})});b.displayName=j;var w=r.forwardRef((e,t)=>{let{__scopeCollapsible:n,present:a,children:i,...u}=e,d=h(j,n),[c,f]=r.useState(a),p=r.useRef(null),v=(0,l.e)(t,p),x=r.useRef(0),y=x.current,N=r.useRef(0),g=N.current,b=d.open||c,w=r.useRef(b),M=r.useRef(void 0);return r.useEffect(()=>{let e=requestAnimationFrame(()=>w.current=!1);return()=>cancelAnimationFrame(e)},[]),(0,s.b)(()=>{let e=p.current;if(e){M.current=M.current||{transitionDuration:e.style.transitionDuration,animationName:e.style.animationName},e.style.transitionDuration="0s",e.style.animationName="none";let t=e.getBoundingClientRect();x.current=t.height,N.current=t.width,w.current||(e.style.transitionDuration=M.current.transitionDuration,e.style.animationName=M.current.animationName),f(a)}},[d.open,a]),(0,m.jsx)(o.WV.div,{"data-state":C(d.open),"data-disabled":d.disabled?"":void 0,id:d.contentId,hidden:!b,...u,ref:v,style:{"--radix-collapsible-content-height":y?"".concat(y,"px"):void 0,"--radix-collapsible-content-width":g?"".concat(g,"px"):void 0,...e.style},children:b&&i})});function C(e){return e?"open":"closed"}var M=y},6394:function(e,t,n){"use strict";n.d(t,{f:function(){return l}});var r=n(2265),a=n(66840),i=n(57437),s=r.forwardRef((e,t)=>(0,i.jsx)(a.WV.label,{...e,ref:t,onMouseDown:t=>{var n;t.target.closest("button, input, select, textarea")||(null===(n=e.onMouseDown)||void 0===n||n.call(e,t),!t.defaultPrevented&&t.detail>1&&t.preventDefault())}}));s.displayName="Label";var l=s}},function(e){e.O(0,[9851,7629,7093,6148,847,1942,7648,7823,8068,5799,605,4567,1206,5338,3825,1785,5110,3171,7598,342,6373,3832,8030,6367,2971,2117,1744],function(){return e(e.s=6563)}),_N_E=e.O()}]);
2
- //# sourceMappingURL=page-2c500e9898447506.js.map
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4901],{6563:function(e,t,n){Promise.resolve().then(n.bind(n,62081))},62081:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return y},dynamic:function(){return h}});var r=n(57437),a=n(2265),i=n(13832),s=n(62869),l=n(95186),o=n(99397),u=n(73247),d=n(92451),c=n(10407),m=n(12194),f=n(76367),p=n(35283),v=n(84190);function x(e){var t;let{sortBy:n,onSortChange:a}=e,i=[{value:"updatedAt",label:"Recently Updated"},{value:"createdAt",label:"Recently Created"},{value:"favorite_count",label:"Most Favorited"},{value:"usage_count",label:"Most Used"},{value:"name",label:"Alphabetical"}];return(0,r.jsxs)(v.h_,{children:[(0,r.jsx)(v.$F,{asChild:!0,children:(0,r.jsxs)(s.z,{variant:"secondary",children:["Sort:"," ",(null===(t=i.find(e=>e.value===n))||void 0===t?void 0:t.label)||"Recently Updated"]})}),(0,r.jsxs)(v.AW,{align:"end",className:"w-56",children:[(0,r.jsx)(v.Ju,{children:"Sort By"}),(0,r.jsx)(v.VD,{}),(0,r.jsx)(v._x,{value:n,onValueChange:a,children:i.map(e=>(0,r.jsx)(v.qB,{value:e.value,children:e.label},e.value))})]})]})}let h="force-dynamic";function y(){var e,t;let{user:n}=(0,a.useContext)(i.S),[v,h]=(0,a.useState)(""),[y,N]=(0,a.useState)(!1),[g,j]=(0,a.useState)("updatedAt"),[b,w]=(0,a.useState)(1),[C]=(0,a.useState)(12);(0,a.useEffect)(()=>{w(1)},[v,g]);let M=[];v&&M.push({name:{contains:v}});let{data:O,loading:P,error:R,refetch:S}=(0,m.Sh)({page:b,limit:C,filters:M,sort:{field:g,direction:"DESC"}}),T=(null==O?void 0:null===(e=O.prompt_libraryPagination)||void 0===e?void 0:e.items)||[],E=null==O?void 0:null===(t=O.prompt_libraryPagination)||void 0===t?void 0:t.pageInfo;return(0,r.jsxs)("div",{className:"h-full flex-1 flex-col space-y-8 p-8",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between space-y-2",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("h2",{className:"text-2xl font-bold tracking-tight",children:"Prompt Library"}),(0,r.jsx)("p",{className:"text-muted-foreground",children:"Create, organize, and share AI prompts with your team."})]}),(0,r.jsxs)(s.z,{onClick:()=>N(!0),children:[(0,r.jsx)(o.Z,{className:"mr-2 h-4 w-4"}),"Create Prompt"]})]}),(0,r.jsx)("div",{className:"flex flex-col gap-4",children:(0,r.jsxs)("div",{className:"flex items-center gap-4",children:[(0,r.jsxs)("div",{className:"relative flex-1 max-w-md",children:[(0,r.jsx)(u.Z,{className:"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),(0,r.jsx)(l.I,{placeholder:"Search prompts by name...",value:v,onChange:e=>h(e.target.value),className:"pl-10"})]}),(0,r.jsx)(x,{sortBy:g,onSortChange:j})]})}),P?(0,r.jsx)("div",{className:"flex items-center justify-center py-12",children:(0,r.jsx)("div",{className:"text-muted-foreground",children:"Loading prompts..."})}):R?(0,r.jsx)("div",{className:"flex items-center justify-center py-12",children:(0,r.jsx)("div",{className:"text-destructive",children:"Error loading prompts"})}):0===T.length?(0,r.jsx)("div",{className:"flex flex-col items-center justify-center py-12 border-2 border-dashed rounded-lg",children:(0,r.jsxs)("div",{className:"text-center space-y-2",children:[(0,r.jsx)("h3",{className:"text-lg font-medium",children:"No prompts found"}),(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:v?"Try adjusting your search":"Get started by creating your first prompt"}),!v&&(0,r.jsxs)(s.z,{onClick:()=>N(!0),variant:"outline",className:"mt-4",children:[(0,r.jsx)(o.Z,{className:"mr-2 h-4 w-4"}),"Create Prompt"]})]})}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("div",{className:"grid gap-4 md:grid-cols-2 lg:grid-cols-3",children:T.map(e=>(0,r.jsx)(f.$,{prompt:e,user:n,onUpdate:S},e.id))}),E&&E.pageCount>1&&(0,r.jsxs)("div",{className:"flex items-center justify-between border-t pt-4",children:[(0,r.jsxs)("div",{className:"text-sm text-muted-foreground",children:["Page ",E.currentPage," of ",E.pageCount," (",E.itemCount," total items)"]}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsxs)(s.z,{variant:"outline",size:"sm",onClick:()=>w(e=>Math.max(1,e-1)),disabled:!E.hasPreviousPage,children:[(0,r.jsx)(d.Z,{className:"h-4 w-4 mr-1"}),"Previous"]}),(0,r.jsxs)(s.z,{variant:"outline",size:"sm",onClick:()=>w(e=>e+1),disabled:!E.hasNextPage,children:["Next",(0,r.jsx)(c.Z,{className:"h-4 w-4 ml-1"})]})]})]})]}),(0,r.jsx)(p.D,{open:y,onOpenChange:N,onSuccess:S,user:n})]})}},74928:function(e,t,n){"use strict";n.d(t,{Fw:function(){return s},wy:function(){return i},zF:function(){return a}});var r=n(88985);let a=r.fC,i=r.wy,s=r.Fw},92451:function(e,t,n){"use strict";n.d(t,{Z:function(){return r}});let r=(0,n(39763).Z)("ChevronLeft",[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]])},78867:function(e,t,n){"use strict";n.d(t,{Z:function(){return r}});let r=(0,n(39763).Z)("Copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]])},99397:function(e,t,n){"use strict";n.d(t,{Z:function(){return r}});let r=(0,n(39763).Z)("Plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]])},88985:function(e,t,n){"use strict";n.d(t,{zF:function(){return y},Fw:function(){return b},wy:function(){return g},fC:function(){return M}});var r=n(2265);"undefined"!=typeof window&&window.document&&window.document.createElement;var a=n(73966),i=n(80886),s=n(61188),l=n(98575),o=n(66840),u=e=>{var t,n;let a,i;let{present:o,children:u}=e,c=function(e){var t,n;let[a,i]=r.useState(),l=r.useRef(null),o=r.useRef(e),u=r.useRef("none"),[c,m]=(t=e?"mounted":"unmounted",n={mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}},r.useReducer((e,t)=>{let r=n[e][t];return null!=r?r:e},t));return r.useEffect(()=>{let e=d(l.current);u.current="mounted"===c?e:"none"},[c]),(0,s.b)(()=>{let t=l.current,n=o.current;if(n!==e){let r=u.current,a=d(t);e?m("MOUNT"):"none"===a||(null==t?void 0:t.display)==="none"?m("UNMOUNT"):n&&r!==a?m("ANIMATION_OUT"):m("UNMOUNT"),o.current=e}},[e,m]),(0,s.b)(()=>{if(a){var e;let t;let n=null!==(e=a.ownerDocument.defaultView)&&void 0!==e?e:window,r=e=>{let r=d(l.current).includes(CSS.escape(e.animationName));if(e.target===a&&r&&(m("ANIMATION_END"),!o.current)){let e=a.style.animationFillMode;a.style.animationFillMode="forwards",t=n.setTimeout(()=>{"forwards"===a.style.animationFillMode&&(a.style.animationFillMode=e)})}},i=e=>{e.target===a&&(u.current=d(l.current))};return a.addEventListener("animationstart",i),a.addEventListener("animationcancel",r),a.addEventListener("animationend",r),()=>{n.clearTimeout(t),a.removeEventListener("animationstart",i),a.removeEventListener("animationcancel",r),a.removeEventListener("animationend",r)}}m("ANIMATION_END")},[a,m]),{isPresent:["mounted","unmountSuspended"].includes(c),ref:r.useCallback(e=>{l.current=e?getComputedStyle(e):null,i(e)},[])}}(o),m="function"==typeof u?u({present:c.isPresent}):r.Children.only(u),f=(0,l.e)(c.ref,(a=null===(t=Object.getOwnPropertyDescriptor(m.props,"ref"))||void 0===t?void 0:t.get)&&"isReactWarning"in a&&a.isReactWarning?m.ref:(a=null===(n=Object.getOwnPropertyDescriptor(m,"ref"))||void 0===n?void 0:n.get)&&"isReactWarning"in a&&a.isReactWarning?m.props.ref:m.props.ref||m.ref);return"function"==typeof u||c.isPresent?r.cloneElement(m,{ref:f}):null};function d(e){return(null==e?void 0:e.animationName)||"none"}u.displayName="Presence";var c=n(99255),m=n(57437),f="Collapsible",[p,v]=(0,a.b)(f),[x,h]=p(f),y=r.forwardRef((e,t)=>{let{__scopeCollapsible:n,open:a,defaultOpen:s,disabled:l,onOpenChange:u,...d}=e,[p,v]=(0,i.T)({prop:a,defaultProp:null!=s&&s,onChange:u,caller:f});return(0,m.jsx)(x,{scope:n,disabled:l,contentId:(0,c.M)(),open:p,onOpenToggle:r.useCallback(()=>v(e=>!e),[v]),children:(0,m.jsx)(o.WV.div,{"data-state":C(p),"data-disabled":l?"":void 0,...d,ref:t})})});y.displayName=f;var N="CollapsibleTrigger",g=r.forwardRef((e,t)=>{let{__scopeCollapsible:n,...r}=e,a=h(N,n);return(0,m.jsx)(o.WV.button,{type:"button","aria-controls":a.contentId,"aria-expanded":a.open||!1,"data-state":C(a.open),"data-disabled":a.disabled?"":void 0,disabled:a.disabled,...r,ref:t,onClick:function(e,t,{checkForDefaultPrevented:n=!0}={}){return function(r){if(e?.(r),!1===n||!r.defaultPrevented)return t?.(r)}}(e.onClick,a.onOpenToggle)})});g.displayName=N;var j="CollapsibleContent",b=r.forwardRef((e,t)=>{let{forceMount:n,...r}=e,a=h(j,e.__scopeCollapsible);return(0,m.jsx)(u,{present:n||a.open,children:e=>{let{present:n}=e;return(0,m.jsx)(w,{...r,ref:t,present:n})}})});b.displayName=j;var w=r.forwardRef((e,t)=>{let{__scopeCollapsible:n,present:a,children:i,...u}=e,d=h(j,n),[c,f]=r.useState(a),p=r.useRef(null),v=(0,l.e)(t,p),x=r.useRef(0),y=x.current,N=r.useRef(0),g=N.current,b=d.open||c,w=r.useRef(b),M=r.useRef(void 0);return r.useEffect(()=>{let e=requestAnimationFrame(()=>w.current=!1);return()=>cancelAnimationFrame(e)},[]),(0,s.b)(()=>{let e=p.current;if(e){M.current=M.current||{transitionDuration:e.style.transitionDuration,animationName:e.style.animationName},e.style.transitionDuration="0s",e.style.animationName="none";let t=e.getBoundingClientRect();x.current=t.height,N.current=t.width,w.current||(e.style.transitionDuration=M.current.transitionDuration,e.style.animationName=M.current.animationName),f(a)}},[d.open,a]),(0,m.jsx)(o.WV.div,{"data-state":C(d.open),"data-disabled":d.disabled?"":void 0,id:d.contentId,hidden:!b,...u,ref:v,style:{"--radix-collapsible-content-height":y?"".concat(y,"px"):void 0,"--radix-collapsible-content-width":g?"".concat(g,"px"):void 0,...e.style},children:b&&i})});function C(e){return e?"open":"closed"}var M=y},6394:function(e,t,n){"use strict";n.d(t,{f:function(){return l}});var r=n(2265),a=n(66840),i=n(57437),s=r.forwardRef((e,t)=>(0,i.jsx)(a.WV.label,{...e,ref:t,onMouseDown:t=>{var n;t.target.closest("button, input, select, textarea")||(null===(n=e.onMouseDown)||void 0===n||n.call(e,t),!t.defaultPrevented&&t.detail>1&&t.preventDefault())}}));s.displayName="Label";var l=s}},function(e){e.O(0,[9851,7629,7093,6148,847,1942,7648,7823,8068,5799,605,4567,1206,5338,3825,1785,3246,9877,7598,342,6373,3832,8030,6367,2971,2117,1744],function(){return e(e.s=6563)}),_N_E=e.O()}]);
2
+ //# sourceMappingURL=page-2c03bbe32800acc3.js.map