@exulu/frontend 1.3.2 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.next/BUILD_ID +1 -1
- package/dist/.next/app-build-manifest.json +185 -174
- package/dist/.next/app-path-routes-manifest.json +1 -1
- package/dist/.next/build-manifest.json +2 -2
- package/dist/.next/prerender-manifest.json +1 -1
- package/dist/.next/server/app/(application)/agents/edit/[id]/page.js +1 -1
- package/dist/.next/server/app/(application)/agents/edit/[id]/page.js.nft.json +1 -1
- package/dist/.next/server/app/(application)/agents/edit/[id]/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/agents/page.js +1 -2
- package/dist/.next/server/app/(application)/agents/page.js.nft.json +1 -1
- package/dist/.next/server/app/(application)/agents/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/chat/[agent]/[session]/page.js +1 -1
- package/dist/.next/server/app/(application)/chat/[agent]/[session]/page.js.nft.json +1 -1
- package/dist/.next/server/app/(application)/chat/[agent]/[session]/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/chat/[agent]/page.js +1 -1
- package/dist/.next/server/app/(application)/chat/[agent]/page.js.nft.json +1 -1
- package/dist/.next/server/app/(application)/chat/[agent]/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/chat/page.js +1 -1
- package/dist/.next/server/app/(application)/chat/page.js.nft.json +1 -1
- package/dist/.next/server/app/(application)/chat/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/configuration/page.js +1 -1
- package/dist/.next/server/app/(application)/configuration/page.js.nft.json +1 -1
- package/dist/.next/server/app/(application)/configuration/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/dashboard/page.js +5 -1
- package/dist/.next/server/app/(application)/dashboard/page.js.nft.json +1 -1
- package/dist/.next/server/app/(application)/dashboard/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/data/[[...query]]/page.js +5 -1
- package/dist/.next/server/app/(application)/data/[[...query]]/page.js.nft.json +1 -1
- package/dist/.next/server/app/(application)/data/[[...query]]/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/evals/[id]/page.js +1 -1
- package/dist/.next/server/app/(application)/evals/[id]/page.js.nft.json +1 -1
- package/dist/.next/server/app/(application)/evals/[id]/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/evals/[id]/runs/page.js +1 -1
- package/dist/.next/server/app/(application)/evals/[id]/runs/page.js.nft.json +1 -1
- package/dist/.next/server/app/(application)/evals/[id]/runs/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/evals/cases/page.js +1 -1
- package/dist/.next/server/app/(application)/evals/cases/page.js.nft.json +1 -1
- package/dist/.next/server/app/(application)/evals/cases/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/evals/page.js +1 -1
- package/dist/.next/server/app/(application)/evals/page.js.nft.json +1 -1
- package/dist/.next/server/app/(application)/evals/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/explorer/page.js +1 -1
- package/dist/.next/server/app/(application)/explorer/page.js.nft.json +1 -1
- package/dist/.next/server/app/(application)/explorer/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/jobs/page.js +1 -1
- package/dist/.next/server/app/(application)/jobs/page.js.nft.json +1 -1
- package/dist/.next/server/app/(application)/jobs/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/keys/page.js +1 -1
- package/dist/.next/server/app/(application)/keys/page.js.nft.json +1 -1
- package/dist/.next/server/app/(application)/keys/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/page.js +1 -1
- package/dist/.next/server/app/(application)/page.js.nft.json +1 -1
- package/dist/.next/server/app/(application)/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/projects/[project]/page.js +1 -1
- package/dist/.next/server/app/(application)/projects/[project]/page.js.nft.json +1 -1
- package/dist/.next/server/app/(application)/projects/[project]/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/projects/page.js +1 -1
- package/dist/.next/server/app/(application)/projects/page.js.nft.json +1 -1
- package/dist/.next/server/app/(application)/projects/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/roles/page.js +1 -1
- package/dist/.next/server/app/(application)/roles/page.js.nft.json +1 -1
- package/dist/.next/server/app/(application)/roles/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/token/page.js +1 -1
- package/dist/.next/server/app/(application)/token/page.js.nft.json +1 -1
- package/dist/.next/server/app/(application)/token/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/users/page.js +1 -1
- package/dist/.next/server/app/(application)/users/page.js.nft.json +1 -1
- package/dist/.next/server/app/(application)/users/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/variables/create/page.js +1 -1
- package/dist/.next/server/app/(application)/variables/create/page.js.nft.json +1 -1
- package/dist/.next/server/app/(application)/variables/create/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/variables/edit/[variable_id]/page.js +1 -1
- package/dist/.next/server/app/(application)/variables/edit/[variable_id]/page.js.nft.json +1 -1
- package/dist/.next/server/app/(application)/variables/edit/[variable_id]/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/variables/page.js +1 -1
- package/dist/.next/server/app/(application)/variables/page.js.nft.json +1 -1
- package/dist/.next/server/app/(application)/variables/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/variables/usage/[variable_id]/page.js +1 -1
- package/dist/.next/server/app/(application)/variables/usage/[variable_id]/page.js.nft.json +1 -1
- package/dist/.next/server/app/(application)/variables/usage/[variable_id]/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/workflows/page.js +1 -1
- package/dist/.next/server/app/(application)/workflows/page.js.nft.json +1 -1
- package/dist/.next/server/app/(application)/workflows/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(authentication)/login/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/_not-found.html +1 -1
- package/dist/.next/server/app/_not-found.rsc +1 -1
- package/dist/.next/server/app/api/auth/[...nextauth]/route.js +9 -9
- package/dist/.next/server/app-paths-manifest.json +5 -5
- package/dist/.next/server/chunks/1051.js +16 -16
- package/dist/.next/server/chunks/2270.js +188 -100
- package/dist/.next/server/chunks/{8838.js → 2875.js} +1 -1
- package/dist/.next/server/chunks/2916.js +1 -1
- package/dist/.next/server/chunks/3503.js +1 -0
- package/dist/.next/server/chunks/{7544.js → 4552.js} +1 -1
- package/dist/.next/server/chunks/{3393.js → 4739.js} +1 -1
- package/dist/.next/server/chunks/5192.js +1 -1
- package/dist/.next/server/chunks/5999.js +2 -0
- package/dist/.next/server/chunks/6282.js +1 -0
- package/dist/.next/server/chunks/6623.js +1 -0
- package/dist/.next/server/chunks/7721.js +1 -0
- package/dist/.next/server/chunks/7944.js +2 -2
- package/dist/.next/server/chunks/8050.js +1 -0
- package/dist/.next/server/chunks/8206.js +1 -0
- package/dist/.next/server/chunks/8679.js +5 -0
- package/dist/.next/server/middleware-manifest.json +5 -5
- package/dist/.next/server/pages/404.html +1 -1
- package/dist/.next/server/pages/500.html +1 -1
- package/dist/.next/server/server-reference-manifest.json +1 -1
- package/dist/.next/static/chunks/1294-368dc8ec59054da4.js +2 -0
- package/dist/.next/static/chunks/1294-368dc8ec59054da4.js.map +1 -0
- package/dist/.next/static/chunks/{1645-e5fd10236c0183ce.js → 1645-570e014100772437.js} +1 -1
- package/dist/.next/static/chunks/{1645-e5fd10236c0183ce.js.map → 1645-570e014100772437.js.map} +1 -1
- package/dist/.next/static/chunks/1957-5867716304ecd208.js +2 -0
- package/dist/.next/static/chunks/1957-5867716304ecd208.js.map +1 -0
- package/dist/.next/static/chunks/{2293-59b4bbce0c5bd2f2.js → 2293-1681cdef5b8c0c0b.js} +1 -1
- package/dist/.next/static/chunks/{2293-59b4bbce0c5bd2f2.js.map → 2293-1681cdef5b8c0c0b.js.map} +1 -1
- package/dist/.next/static/chunks/3475-28ce4fce960656bd.js +2 -0
- package/dist/.next/static/chunks/3475-28ce4fce960656bd.js.map +1 -0
- package/dist/.next/static/chunks/3832-a5e8fc6647e2be65.js +2 -0
- package/dist/.next/static/chunks/3832-a5e8fc6647e2be65.js.map +1 -0
- package/dist/.next/static/chunks/{4386-a36fe9c65884f025.js → 4386-c7690667749bff6a.js} +1 -1
- package/dist/.next/static/chunks/{4386-a36fe9c65884f025.js.map → 4386-c7690667749bff6a.js.map} +1 -1
- package/dist/.next/static/chunks/4750-4d5c13bbc96bc19b.js +2 -0
- package/dist/.next/static/chunks/4750-4d5c13bbc96bc19b.js.map +1 -0
- package/dist/.next/static/chunks/5243-1aaa41b2cd0ea87c.js +2 -0
- package/dist/.next/static/chunks/5243-1aaa41b2cd0ea87c.js.map +1 -0
- package/dist/.next/static/chunks/5978-814d6900645d2fcc.js +2 -0
- package/dist/.next/static/chunks/5978-814d6900645d2fcc.js.map +1 -0
- package/dist/.next/static/chunks/6373-651cb258c9e2b57b.js +2 -0
- package/dist/.next/static/chunks/6373-651cb258c9e2b57b.js.map +1 -0
- package/dist/.next/static/chunks/{7564-44a20b31206685e1.js → 6545-5a1d7cf4d5ca770e.js} +21 -21
- package/dist/.next/static/chunks/6545-5a1d7cf4d5ca770e.js.map +1 -0
- package/dist/.next/static/chunks/6839-0f4cfb48058a5ab6.js +2 -0
- package/dist/.next/static/chunks/6839-0f4cfb48058a5ab6.js.map +1 -0
- package/dist/.next/static/chunks/723-94e596796cbf911d.js +2 -0
- package/dist/.next/static/chunks/723-94e596796cbf911d.js.map +1 -0
- package/dist/.next/static/chunks/8202-db2cc384c66bc1be.js +2 -0
- package/dist/.next/static/chunks/8202-db2cc384c66bc1be.js.map +1 -0
- package/dist/.next/static/chunks/8269-37dd07515eb44201.js +2 -0
- package/dist/.next/static/chunks/8269-37dd07515eb44201.js.map +1 -0
- package/dist/.next/static/chunks/8469-ba31cbd7acab5f94.js +2 -0
- package/dist/.next/static/chunks/8469-ba31cbd7acab5f94.js.map +1 -0
- package/dist/.next/static/chunks/8824-20030459012376a3.js +2 -0
- package/dist/.next/static/chunks/8824-20030459012376a3.js.map +1 -0
- package/dist/.next/static/chunks/9105-3800f721d38e2b9a.js +2 -0
- package/dist/.next/static/chunks/9105-3800f721d38e2b9a.js.map +1 -0
- package/dist/.next/static/chunks/9183-a51605ff26b92fed.js +41 -0
- package/dist/.next/static/chunks/9183-a51605ff26b92fed.js.map +1 -0
- package/dist/.next/static/chunks/app/(application)/agents/edit/[id]/page-511f168123f85285.js +2 -0
- package/dist/.next/static/chunks/app/(application)/agents/edit/[id]/page-511f168123f85285.js.map +1 -0
- package/dist/.next/static/chunks/app/(application)/agents/{page-499ac3bd1044306c.js → page-63643deabdaa6b2c.js} +2 -2
- package/dist/.next/static/chunks/app/(application)/agents/{page-499ac3bd1044306c.js.map → page-63643deabdaa6b2c.js.map} +1 -1
- package/dist/.next/static/chunks/app/(application)/chat/[agent]/[session]/{page-3807a8bc2ae87548.js → page-62c7321ba26632af.js} +2 -2
- package/dist/.next/static/chunks/app/(application)/chat/[agent]/[session]/page-62c7321ba26632af.js.map +1 -0
- package/dist/.next/static/chunks/app/(application)/chat/{layout-53796525bd3e2443.js → layout-5eb1d22ddcbc0b55.js} +2 -2
- package/dist/.next/static/chunks/app/(application)/chat/{layout-53796525bd3e2443.js.map → layout-5eb1d22ddcbc0b55.js.map} +1 -1
- package/dist/.next/static/chunks/app/(application)/configuration/{page-2d8a0e2664ab9a94.js → page-8f92af5318feb84f.js} +1 -1
- package/dist/.next/static/chunks/app/(application)/configuration/{page-2d8a0e2664ab9a94.js.map → page-8f92af5318feb84f.js.map} +1 -1
- package/dist/.next/static/chunks/app/(application)/dashboard/page-00e425d942e0d769.js +2 -0
- package/dist/.next/static/chunks/app/(application)/dashboard/page-00e425d942e0d769.js.map +1 -0
- package/dist/.next/static/chunks/app/(application)/data/[[...query]]/layout-a460a56d3efac658.js +2 -0
- package/dist/.next/static/chunks/app/(application)/data/[[...query]]/layout-a460a56d3efac658.js.map +1 -0
- package/dist/.next/static/chunks/app/(application)/data/[[...query]]/page-bb06a9553c9ed178.js +2 -0
- package/dist/.next/static/chunks/app/(application)/data/[[...query]]/page-bb06a9553c9ed178.js.map +1 -0
- package/dist/.next/static/chunks/app/(application)/evals/[id]/{page-2238f1fb73d93328.js → page-ef82e92ca7d0da6c.js} +2 -2
- package/dist/.next/static/chunks/app/(application)/evals/[id]/{page-2238f1fb73d93328.js.map → page-ef82e92ca7d0da6c.js.map} +1 -1
- package/dist/.next/static/chunks/app/(application)/evals/[id]/runs/page-6622dd1b22a7885d.js +2 -0
- package/dist/.next/static/chunks/app/(application)/evals/[id]/runs/page-6622dd1b22a7885d.js.map +1 -0
- package/dist/.next/static/chunks/app/(application)/evals/cases/{page-ea5faf58b368feae.js → page-6246be9d6592d1d3.js} +2 -2
- package/dist/.next/static/chunks/app/(application)/evals/cases/{page-ea5faf58b368feae.js.map → page-6246be9d6592d1d3.js.map} +1 -1
- package/dist/.next/static/chunks/app/(application)/evals/{page-f79e1a90384ba618.js → page-b1e1fd7dba1e675f.js} +2 -2
- package/dist/.next/static/chunks/app/(application)/evals/{page-f79e1a90384ba618.js.map → page-b1e1fd7dba1e675f.js.map} +1 -1
- package/dist/.next/static/chunks/app/(application)/jobs/{page-e6f02a338bec4806.js → page-a96441a0bc654d68.js} +1 -1
- package/dist/.next/static/chunks/app/(application)/jobs/{page-e6f02a338bec4806.js.map → page-a96441a0bc654d68.js.map} +1 -1
- package/dist/.next/static/chunks/app/(application)/keys/{page-59ee4e0281131cbc.js → page-163aadfe9ad0d794.js} +1 -1
- package/dist/.next/static/chunks/app/(application)/keys/{page-59ee4e0281131cbc.js.map → page-163aadfe9ad0d794.js.map} +1 -1
- package/dist/.next/static/chunks/app/(application)/{layout-73d93420d0c6661c.js → layout-694c53aca85ef437.js} +2 -2
- package/dist/.next/static/chunks/app/(application)/{layout-73d93420d0c6661c.js.map → layout-694c53aca85ef437.js.map} +1 -1
- package/dist/.next/static/chunks/app/(application)/projects/[project]/page-e69828fde85c50af.js +2 -0
- package/dist/.next/static/chunks/app/(application)/projects/[project]/page-e69828fde85c50af.js.map +1 -0
- package/dist/.next/static/chunks/app/(application)/projects/{layout-f73ad7daf4825f1b.js → layout-d7642b25bf6d33b3.js} +2 -2
- package/dist/.next/static/chunks/app/(application)/projects/{layout-f73ad7daf4825f1b.js.map → layout-d7642b25bf6d33b3.js.map} +1 -1
- package/dist/.next/static/chunks/app/(application)/roles/page-5d5e5142f0997122.js +2 -0
- package/dist/.next/static/chunks/app/(application)/roles/page-5d5e5142f0997122.js.map +1 -0
- package/dist/.next/static/chunks/app/(application)/users/{page-e0a04fda52138aa0.js → page-b862cb199fd72525.js} +2 -2
- package/dist/.next/static/chunks/app/(application)/users/{page-e0a04fda52138aa0.js.map → page-b862cb199fd72525.js.map} +1 -1
- package/dist/.next/static/chunks/app/(application)/variables/create/{page-6c6076f3f253190d.js → page-d79d5c1c1ecabdb5.js} +1 -1
- package/dist/.next/static/chunks/app/(application)/variables/create/{page-6c6076f3f253190d.js.map → page-d79d5c1c1ecabdb5.js.map} +1 -1
- package/dist/.next/static/chunks/app/(application)/variables/edit/[variable_id]/{page-a3fa477fead5609a.js → page-72cf3aa95776ab96.js} +1 -1
- package/dist/.next/static/chunks/app/(application)/variables/edit/[variable_id]/{page-a3fa477fead5609a.js.map → page-72cf3aa95776ab96.js.map} +1 -1
- package/dist/.next/static/chunks/app/(application)/variables/{page-ddeff54a8b19bdbe.js → page-67864b471b48c950.js} +2 -2
- package/dist/.next/static/chunks/app/(application)/variables/{page-ddeff54a8b19bdbe.js.map → page-67864b471b48c950.js.map} +1 -1
- package/dist/.next/static/chunks/app/(application)/variables/usage/[variable_id]/{page-ed6d136e7ee3a591.js → page-208b4c9cc64abf2e.js} +1 -1
- package/dist/.next/static/chunks/app/(application)/variables/usage/[variable_id]/{page-ed6d136e7ee3a591.js.map → page-208b4c9cc64abf2e.js.map} +1 -1
- package/dist/.next/static/chunks/app/(application)/workflows/page-5b1ffc7c5012fdf6.js +2 -0
- package/dist/.next/static/chunks/app/(application)/workflows/page-5b1ffc7c5012fdf6.js.map +1 -0
- package/dist/.next/static/css/006966ab2edd0ebc.css +4 -0
- package/dist/.next/static/css/006966ab2edd0ebc.css.map +1 -0
- package/dist/.next/static/css/e3f2a16ab7676b05.css.map +1 -1
- package/dist/package.json +4 -1
- package/package.json +1 -1
- package/dist/.next/server/chunks/3743.js +0 -1
- package/dist/.next/server/chunks/4375.js +0 -1
- package/dist/.next/server/chunks/4680.js +0 -1
- package/dist/.next/server/chunks/7203.js +0 -5
- package/dist/.next/server/chunks/7598.js +0 -5
- package/dist/.next/server/chunks/8806.js +0 -1
- package/dist/.next/static/chunks/1957-670ddf66742d95f2.js +0 -2
- package/dist/.next/static/chunks/1957-670ddf66742d95f2.js.map +0 -1
- package/dist/.next/static/chunks/3397-5a704b2e12e9e883.js +0 -2
- package/dist/.next/static/chunks/3397-5a704b2e12e9e883.js.map +0 -1
- package/dist/.next/static/chunks/3832-10b779e2f89f162f.js +0 -2
- package/dist/.next/static/chunks/3832-10b779e2f89f162f.js.map +0 -1
- package/dist/.next/static/chunks/3998-c1c5bec61ce07357.js +0 -2
- package/dist/.next/static/chunks/3998-c1c5bec61ce07357.js.map +0 -1
- package/dist/.next/static/chunks/428-61741966c36f4f72.js +0 -2
- package/dist/.next/static/chunks/428-61741966c36f4f72.js.map +0 -1
- package/dist/.next/static/chunks/5585-4f0c084850210a82.js +0 -2
- package/dist/.next/static/chunks/5585-4f0c084850210a82.js.map +0 -1
- package/dist/.next/static/chunks/5615-042f927b657e6db1.js +0 -41
- package/dist/.next/static/chunks/5615-042f927b657e6db1.js.map +0 -1
- package/dist/.next/static/chunks/5978-f3b8475a2d9f9299.js +0 -2
- package/dist/.next/static/chunks/5978-f3b8475a2d9f9299.js.map +0 -1
- package/dist/.next/static/chunks/6242-c1c2f1479529e9d4.js +0 -2
- package/dist/.next/static/chunks/6242-c1c2f1479529e9d4.js.map +0 -1
- package/dist/.next/static/chunks/6373-fc4799cc7a13474a.js +0 -2
- package/dist/.next/static/chunks/6373-fc4799cc7a13474a.js.map +0 -1
- package/dist/.next/static/chunks/7398-c6de1642586049cd.js +0 -2
- package/dist/.next/static/chunks/7398-c6de1642586049cd.js.map +0 -1
- package/dist/.next/static/chunks/7564-44a20b31206685e1.js.map +0 -1
- package/dist/.next/static/chunks/79-1d568f3c4cd45bd4.js +0 -2
- package/dist/.next/static/chunks/79-1d568f3c4cd45bd4.js.map +0 -1
- package/dist/.next/static/chunks/app/(application)/agents/edit/[id]/page-b66390eb4a95ac1a.js +0 -2
- package/dist/.next/static/chunks/app/(application)/agents/edit/[id]/page-b66390eb4a95ac1a.js.map +0 -1
- package/dist/.next/static/chunks/app/(application)/chat/[agent]/[session]/page-3807a8bc2ae87548.js.map +0 -1
- package/dist/.next/static/chunks/app/(application)/dashboard/page-85d3f8d2bd28ae4b.js +0 -2
- package/dist/.next/static/chunks/app/(application)/dashboard/page-85d3f8d2bd28ae4b.js.map +0 -1
- package/dist/.next/static/chunks/app/(application)/data/[[...query]]/layout-822dad4cb57f62e2.js +0 -2
- package/dist/.next/static/chunks/app/(application)/data/[[...query]]/layout-822dad4cb57f62e2.js.map +0 -1
- package/dist/.next/static/chunks/app/(application)/data/[[...query]]/page-3efd7701534078ea.js +0 -2
- package/dist/.next/static/chunks/app/(application)/data/[[...query]]/page-3efd7701534078ea.js.map +0 -1
- package/dist/.next/static/chunks/app/(application)/evals/[id]/runs/page-b6a3cb8435be3ade.js +0 -2
- package/dist/.next/static/chunks/app/(application)/evals/[id]/runs/page-b6a3cb8435be3ade.js.map +0 -1
- package/dist/.next/static/chunks/app/(application)/projects/[project]/page-19382bb263f85fda.js +0 -2
- package/dist/.next/static/chunks/app/(application)/projects/[project]/page-19382bb263f85fda.js.map +0 -1
- package/dist/.next/static/chunks/app/(application)/roles/page-acd9ef282bc53557.js +0 -2
- package/dist/.next/static/chunks/app/(application)/roles/page-acd9ef282bc53557.js.map +0 -1
- package/dist/.next/static/chunks/app/(application)/workflows/page-38488c44d89b32f4.js +0 -2
- package/dist/.next/static/chunks/app/(application)/workflows/page-38488c44d89b32f4.js.map +0 -1
- package/dist/.next/static/css/a7092ddec8ffd4fb.css +0 -4
- package/dist/.next/static/css/a7092ddec8ffd4fb.css.map +0 -1
- /package/dist/.next/static/{HHwzgh0RLIMeodnSs4vIv → soJPoIxCmlpJ75t9n-Q9V}/_buildManifest.js +0 -0
- /package/dist/.next/static/{HHwzgh0RLIMeodnSs4vIv → soJPoIxCmlpJ75t9n-Q9V}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static/chunks/app/(application)/projects/layout-f73ad7daf4825f1b.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  - 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  - 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  - 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  - 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-d7642b25bf6d33b3.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  - 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  - 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  - 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  - 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":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4360],{38434:function(e,s,a){Promise.resolve().then(a.bind(a,96126))},96126:function(e,s,a){"use strict";a.r(s),a.d(s,{default:function(){return U}});var t=a(57437),r=a(2265),l=a(32660),n=a(99397),i=a(15863),d=a(88906),o=a(15868),c=a(18930),u=a(62869),f=a(27648),m=a(95186),x=a(27107),p=a(66070),h=a(73578),v=a(26110),g=a(35974),j=a(77992),b=a(7211),N=a(12199),w=a(27689),y=a(82222),k=a(42042),R=a(32790),C=a(95805),S=a(98145),A=a(64972),T=a(26815),Z=a(42325),D=a(40519),E=a(94508);let _=r.forwardRef((e,s)=>{let{className:a,...r}=e;return(0,t.jsx)(Z.fC,{className:(0,E.cn)("grid gap-2",a),...r,ref:s})});_.displayName=Z.fC.displayName;let O=r.forwardRef((e,s)=>{let{className:a,...r}=e;return(0,t.jsx)(Z.ck,{ref:s,className:(0,E.cn)("aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",a),...r,children:(0,t.jsx)(Z.z$,{className:"flex items-center justify-center",children:(0,t.jsx)(D.Z,{className:"size-2.5 fill-current text-current"})})})});O.displayName=Z.ck.displayName;let I=[{value:"",label:"No Access",description:"Cannot access this resource"},{value:"read",label:"Read Only",description:"Can view but not modify"},{value:"write",label:"Read/Write",description:"Full access to create, read, update, and delete"}],z=[{key:"agents",label:"Agents",icon:y.Z,description:"AI agents and their configurations"},{key:"workflows",label:"Workflows",icon:k.Z,description:"Workflow templates and executions"},{key:"variables",label:"Variables",icon:R.Z,description:"Environment variables and secrets"},{key:"users",label:"Users",icon:C.Z,description:"User management and roles"},{key:"api",label:"API",icon:S.Z,description:"API access and management"},{key:"evals",label:"Evals",icon:A.Z,description:"Evaluation sets, test cases, and eval runs"}];function P(e){let{initialData:s,onSubmit:a,loading:l,onCancel:n}=e,[o,c]=(0,r.useState)((null==s?void 0:s.name)||""),[f,x]=(0,r.useState)({agents:(null==s?void 0:s.agents)||"",api:(null==s?void 0:s.api)||"",workflows:(null==s?void 0:s.workflows)||"",variables:(null==s?void 0:s.variables)||"",users:(null==s?void 0:s.users)||"",evals:(null==s?void 0:s.evals)||""});(0,r.useEffect)(()=>{s&&(c(s.name),x({agents:s.agents||"",api:s.api||"",workflows:s.workflows||"",variables:s.variables||"",users:s.users||"",evals:s.evals||""}))},[s]);let h=(e,s)=>{x(a=>({...a,[e]:s}))},v=async e=>{if(e.preventDefault(),!o.trim())return;let s={name:o.trim(),agents:f.agents||null,api:f.api||null,workflows:f.workflows||null,variables:f.variables||null,users:f.users||null,evals:f.evals||null};await a(s)};return(0,t.jsxs)("form",{onSubmit:v,className:"space-y-6",children:[(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)(T._,{htmlFor:"roleName",children:"Role Name"}),(0,t.jsx)(m.I,{id:"roleName",placeholder:"e.g. Admin, Developer, Viewer",disabled:l||(null==s?void 0:s.name)==="admin"||(null==s?void 0:s.name)==="default",value:o,onChange:e=>c(e.target.value),required:!0}),(null==s?void 0:s.name)==="admin"||(null==s?void 0:s.name)==="default"?(0,t.jsx)("p",{className:"text-sm text-destructive",children:"Admin and default roles names cannot be changed, these are reserved for system defaults."}):null]}),(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h3",{className:"text-lg font-medium",children:"Permissions"}),(0,t.jsx)("p",{className:"text-sm text-muted-foreground",children:"Configure access levels for different areas of the system"})]}),z.map(e=>{let s=e.icon;return(0,t.jsxs)(p.Zb,{children:[(0,t.jsxs)(p.Ol,{className:"pb-3",children:[(0,t.jsxs)(p.ll,{className:"flex items-center gap-2 text-base",children:[(0,t.jsx)(s,{className:"h-4 w-4"}),e.label]}),(0,t.jsx)(p.SZ,{className:"text-sm",children:e.description})]}),(0,t.jsx)(p.aY,{children:(0,t.jsx)(_,{value:f[e.key],onValueChange:s=>h(e.key,s),disabled:l,children:I.map(s=>(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,t.jsx)(O,{value:s.value,id:"".concat(e.key,"-").concat(s.value)}),(0,t.jsx)(T._,{htmlFor:"".concat(e.key,"-").concat(s.value),className:"flex-1 cursor-pointer",children:(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsx)("span",{className:"font-medium",children:s.label}),(0,t.jsx)("span",{className:"text-sm text-muted-foreground",children:s.description})]})})]},s.value))})})]},e.key)})]}),(0,t.jsxs)("div",{className:"flex items-center justify-end gap-3 pt-4 border-t",children:[(0,t.jsx)(u.z,{type:"button",variant:"outline",onClick:n,disabled:l,children:"Cancel"}),(0,t.jsx)(u.z,{type:"submit",disabled:l||!o.trim(),children:l?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.Z,{className:"mr-2 h-4 w-4 animate-spin"}),s?"Updating...":"Creating..."]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(d.Z,{className:"mr-2 h-4 w-4"}),s?"Update Role":"Create Role"]})})]})]})}function U(){var e;let[s,a]=(0,r.useState)(""),[y,k]=(0,r.useState)(!1),[R,C]=(0,r.useState)(!1),[S,A]=(0,r.useState)(!1),[T,Z]=(0,r.useState)(null),{loading:D,error:E,data:_,refetch:O}=(0,b.aM)(w.l1,{variables:{page:1,limit:100},fetchPolicy:"cache-first",nextFetchPolicy:"network-only"}),[I,{loading:z}]=(0,N.D)(w.kH,{refetchQueries:[w.l1,"GetUserRoles"]}),[U,{loading:V}]=(0,N.D)(w.ZX,{refetchQueries:[w.l1,"GetUserRoles"]}),[F,{loading:M}]=(0,N.D)(w.JM,{refetchQueries:[w.l1,"GetUserRoles"]}),W=((null==_?void 0:null===(e=_.rolesPagination)||void 0===e?void 0:e.items)||[]).filter(e=>e.name.toLowerCase().includes(s.toLowerCase())),L=e=>{let s=[];if(e.agents){let a=e.agents.toLowerCase();a.includes("write")||a.includes("create")||a.includes("update")||a.includes("delete")?s.push({name:"Agents",level:"Read/Write"}):(a.includes("read")||a.includes("view"))&&s.push({name:"Agents",level:"Read"})}if(e.workflows){let a=e.workflows.toLowerCase();a.includes("write")||a.includes("create")||a.includes("update")||a.includes("delete")?s.push({name:"Workflows",level:"Read/Write"}):(a.includes("read")||a.includes("view"))&&s.push({name:"Workflows",level:"Read"})}if(e.variables){let a=e.variables.toLowerCase();a.includes("write")||a.includes("create")||a.includes("update")||a.includes("delete")?s.push({name:"Variables",level:"Read/Write"}):(a.includes("read")||a.includes("view"))&&s.push({name:"Variables",level:"Read"})}if(e.users){let a=e.users.toLowerCase();a.includes("write")||a.includes("create")||a.includes("update")||a.includes("delete")?s.push({name:"Users",level:"Read/Write"}):(a.includes("read")||a.includes("view"))&&s.push({name:"Users",level:"Read"})}if(e.api){let a=e.api.toLowerCase();a.includes("write")||a.includes("create")||a.includes("update")||a.includes("delete")?s.push({name:"API",level:"Read/Write"}):(a.includes("read")||a.includes("view"))&&s.push({name:"API",level:"Read"})}return s},q=async e=>{try{await I({variables:{name:e.name,agents:e.agents,api:e.api,workflows:e.workflows,variables:e.variables,users:e.users}}),k(!1),(0,j.Am)({title:"Success",description:"Role created successfully"})}catch(e){(0,j.Am)({title:"Error",description:"Failed to create role",variant:"destructive"})}},B=async e=>{if(T)try{await U({variables:{id:T.id,name:e.name,agents:e.agents,api:e.api,workflows:e.workflows,variables:e.variables,users:e.users}}),C(!1),Z(null),(0,j.Am)({title:"Success",description:"Role updated successfully"})}catch(e){(0,j.Am)({title:"Error",description:"Failed to update role",variant:"destructive"})}},Y=async()=>{if(T)try{await F({variables:{id:T.id}}),A(!1),Z(null),(0,j.Am)({title:"Success",description:"Role deleted successfully"})}catch(e){(0,j.Am)({title:"Error",description:"Failed to delete role",variant:"destructive"})}};return(0,t.jsxs)("div",{className:"container mx-auto py-6 space-y-8 max-w-7xl",children:[(0,t.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,t.jsx)(f.default,{href:"/users",children:(0,t.jsxs)(u.z,{variant:"ghost",size:"sm",className:"mb-2 w-fit",children:[(0,t.jsx)(l.Z,{className:"mr-2 h-4 w-4"}),"Back to Users"]})}),(0,t.jsx)("h1",{className:"text-3xl font-bold tracking-tight",children:"Role Management"}),(0,t.jsx)("p",{className:"text-muted-foreground",children:"Create and manage roles with specific permissions for agents, workflows, variables, the api and users."})]}),(0,t.jsxs)(p.Zb,{children:[(0,t.jsxs)(p.Ol,{children:[(0,t.jsx)(p.ll,{children:"Roles"}),(0,t.jsx)(p.SZ,{children:"Manage system roles and their permissions"})]}),(0,t.jsx)(p.aY,{children:(0,t.jsxs)("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",children:[(0,t.jsx)(m.I,{placeholder:"Search roles...",value:s,onChange:e=>a(e.target.value),className:"flex-1 max-w-md"}),(0,t.jsxs)(v.Vq,{open:y,onOpenChange:k,children:[(0,t.jsx)(v.hg,{asChild:!0,children:(0,t.jsxs)(u.z,{children:[(0,t.jsx)(n.Z,{className:"mr-2 h-4 w-4"}),"Create Role"]})}),(0,t.jsxs)(v.cZ,{className:"max-w-2xl max-h-[90vh] overflow-y-auto",children:[(0,t.jsxs)(v.fK,{children:[(0,t.jsx)(v.$N,{children:"Create New Role"}),(0,t.jsx)(v.Be,{children:"Define the role name and permissions for different system areas."})]}),(0,t.jsx)(P,{onSubmit:q,loading:z,onCancel:()=>k(!1)})]})]})]})})]}),(0,t.jsx)(p.Zb,{children:(0,t.jsx)(p.aY,{className:"p-0",children:D?(0,t.jsxs)("div",{className:"text-center py-8",children:[(0,t.jsx)(i.Z,{className:"h-8 w-8 animate-spin mx-auto mb-2"}),(0,t.jsx)("p",{className:"text-muted-foreground",children:"Loading roles..."})]}):0===W.length?(0,t.jsx)("div",{className:"text-center py-8 text-muted-foreground",children:s?"No roles found matching your search.":"No roles created yet. Create your first role above."}):(0,t.jsx)("div",{className:"overflow-x-auto",children:(0,t.jsxs)(h.iA,{children:[(0,t.jsx)(h.xD,{children:(0,t.jsxs)(h.SC,{children:[(0,t.jsx)(h.ss,{children:"Role Name"}),(0,t.jsx)(h.ss,{children:"Permissions"}),(0,t.jsx)(h.ss,{children:"Created"}),(0,t.jsx)(h.ss,{children:"Updated"}),(0,t.jsx)(h.ss,{className:"text-right",children:"Actions"})]})}),(0,t.jsx)(h.RM,{children:W.map(e=>(0,t.jsxs)(h.SC,{children:[(0,t.jsx)(h.pj,{children:(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(d.Z,{className:"h-4 w-4 text-muted-foreground"}),(0,t.jsx)("span",{className:"font-medium",children:e.name})]})}),(0,t.jsx)(h.pj,{children:(0,t.jsxs)("div",{className:"flex flex-wrap gap-1",children:[L(e).map((e,s)=>(0,t.jsxs)(g.C,{variant:"secondary",className:"text-xs",children:[e.name,": ",e.level]},s)),0===L(e).length&&(0,t.jsx)(g.C,{variant:"outline",className:"text-xs",children:"No permissions"})]})}),(0,t.jsx)(h.pj,{children:(0,x.WU)(new Date(e.createdAt||""),"PP hh:mm")}),(0,t.jsx)(h.pj,{children:(0,x.WU)(new Date(e.updatedAt||""),"PP hh:mm")}),(0,t.jsx)(h.pj,{className:"text-right",children:(0,t.jsxs)("div",{className:"flex items-center justify-end gap-2",children:[(0,t.jsxs)(v.Vq,{open:R&&(null==T?void 0:T.id)===e.id,onOpenChange:e=>{C(e),e||Z(null)},children:[(0,t.jsx)(v.hg,{asChild:!0,children:(0,t.jsx)(u.z,{variant:"ghost",size:"icon",onClick:()=>Z(e),className:"h-8 w-8",children:(0,t.jsx)(o.Z,{className:"h-4 w-4"})})}),(0,t.jsxs)(v.cZ,{className:"max-w-2xl max-h-[90vh] overflow-y-auto",children:[(0,t.jsxs)(v.fK,{children:[(0,t.jsx)(v.$N,{children:"Edit Role"}),(0,t.jsx)(v.Be,{children:"Update the role name and permissions."})]}),(0,t.jsx)(P,{initialData:T,onSubmit:B,loading:V,onCancel:()=>{C(!1),Z(null)}})]})]}),(0,t.jsxs)(v.Vq,{open:S&&(null==T?void 0:T.id)===e.id,onOpenChange:e=>{A(e),e||Z(null)},children:[(0,t.jsx)(v.hg,{asChild:!0,children:(0,t.jsx)(u.z,{variant:"ghost",size:"icon",onClick:()=>Z(e),disabled:"admin"===e.name||"default"===e.name,className:"h-8 w-8 text-red-500 hover:text-red-600 hover:bg-red-50 dark:hover:bg-red-950",children:(0,t.jsx)(c.Z,{className:"h-4 w-4"})})}),(0,t.jsxs)(v.cZ,{children:[(0,t.jsxs)(v.fK,{children:[(0,t.jsx)(v.$N,{children:"Delete Role"}),(0,t.jsxs)(v.Be,{children:['Are you sure you want to delete the role "',null==T?void 0:T.name,'"? This action cannot be undone.']})]}),(0,t.jsxs)(v.cN,{children:[(0,t.jsx)(u.z,{variant:"outline",onClick:()=>{A(!1),Z(null)},children:"Cancel"}),(0,t.jsx)(u.z,{variant:"destructive",onClick:Y,disabled:M||"admin"===e.name||"default"===e.name,children:M?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.Z,{className:"mr-2 h-4 w-4 animate-spin"}),"Deleting..."]}):"Delete Role"})]})]})]})]})})]},e.id))})]})})})})]})}},35974:function(e,s,a){"use strict";a.d(s,{C:function(){return i}});var t=a(57437),r=a(90535);a(2265);var l=a(94508);let n=(0,r.j)("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",outline:"text-foreground"}},defaultVariants:{variant:"default"}});function i(e){let{className:s,variant:a,...r}=e;return(0,t.jsx)("div",{className:(0,l.cn)(n({variant:a}),s),...r})}},66070:function(e,s,a){"use strict";a.d(s,{Ol:function(){return i},SZ:function(){return o},Zb:function(){return n},aY:function(){return c},eW:function(){return u},ll:function(){return d}});var t=a(57437),r=a(2265),l=a(94508);let n=r.forwardRef((e,s)=>{let{className:a,...r}=e;return(0,t.jsx)("div",{ref:s,className:(0,l.cn)("rounded-lg border bg-card text-card-foreground shadow-sm",a),...r})});n.displayName="Card";let i=r.forwardRef((e,s)=>{let{className:a,...r}=e;return(0,t.jsx)("div",{ref:s,className:(0,l.cn)("flex flex-col space-y-1.5 p-6",a),...r})});i.displayName="CardHeader";let d=r.forwardRef((e,s)=>{let{className:a,...r}=e;return(0,t.jsx)("h3",{ref:s,className:(0,l.cn)("text-2xl font-semibold leading-none tracking-tight",a),...r})});d.displayName="CardTitle";let o=r.forwardRef((e,s)=>{let{className:a,...r}=e;return(0,t.jsx)("p",{ref:s,className:(0,l.cn)("text-sm text-muted-foreground",a),...r})});o.displayName="CardDescription";let c=r.forwardRef((e,s)=>{let{className:a,...r}=e;return(0,t.jsx)("div",{ref:s,className:(0,l.cn)("p-6 pt-0",a),...r})});c.displayName="CardContent";let u=r.forwardRef((e,s)=>{let{className:a,...r}=e;return(0,t.jsx)("div",{ref:s,className:(0,l.cn)("flex items-center p-6 pt-0",a),...r})});u.displayName="CardFooter"},26110:function(e,s,a){"use strict";a.d(s,{$N:function(){return p},Be:function(){return h},Vq:function(){return d},cN:function(){return x},cZ:function(){return f},fK:function(){return m},hg:function(){return o}});var t=a(57437),r=a(34567),l=a(32489),n=a(2265),i=a(94508);let d=r.fC,o=r.xz,c=r.h_;r.x8;let u=n.forwardRef((e,s)=>{let{className:a,...l}=e;return(0,t.jsx)(r.aV,{ref:s,className:(0,i.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",a),...l})});u.displayName=r.aV.displayName;let f=n.forwardRef((e,s)=>{let{className:a,children:n,...d}=e;return(0,t.jsxs)(c,{children:[(0,t.jsx)(u,{}),(0,t.jsxs)(r.VY,{ref:s,className:(0,i.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",a),...d,children:[n,(0,t.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,t.jsx)(l.Z,{className:"size-4"}),(0,t.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})});f.displayName=r.VY.displayName;let m=e=>{let{className:s,...a}=e;return(0,t.jsx)("div",{className:(0,i.cn)("flex flex-col space-y-1.5 text-center sm:text-left",s),...a})};m.displayName="DialogHeader";let x=e=>{let{className:s,...a}=e;return(0,t.jsx)("div",{className:(0,i.cn)("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",s),...a})};x.displayName="DialogFooter";let p=n.forwardRef((e,s)=>{let{className:a,...l}=e;return(0,t.jsx)(r.Dx,{ref:s,className:(0,i.cn)("text-lg font-semibold leading-none tracking-tight",a),...l})});p.displayName=r.Dx.displayName;let h=n.forwardRef((e,s)=>{let{className:a,...l}=e;return(0,t.jsx)(r.dk,{ref:s,className:(0,i.cn)("text-sm text-muted-foreground",a),...l})});h.displayName=r.dk.displayName},95186:function(e,s,a){"use strict";a.d(s,{I:function(){return n}});var t=a(57437),r=a(2265),l=a(94508);let n=r.forwardRef((e,s)=>{let{className:a,type:r,...n}=e;return(0,t.jsx)("input",{type:r,className:(0,l.cn)("flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium 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",a),ref:s,...n})});n.displayName="Input"},26815:function(e,s,a){"use strict";a.d(s,{_:function(){return o}});var t=a(57437),r=a(6394),l=a(90535),n=a(2265),i=a(94508);let d=(0,l.j)("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"),o=n.forwardRef((e,s)=>{let{className:a,...l}=e;return(0,t.jsx)(r.f,{ref:s,className:(0,i.cn)(d(),a),...l})});o.displayName=r.f.displayName},73578:function(e,s,a){"use strict";a.d(s,{RM:function(){return d},Rn:function(){return f},SC:function(){return o},iA:function(){return n},pj:function(){return u},ss:function(){return c},xD:function(){return i}});var t=a(57437),r=a(2265),l=a(94508);let n=r.forwardRef((e,s)=>{let{className:a,...r}=e;return(0,t.jsx)("div",{className:"relative w-full overflow-auto",children:(0,t.jsx)("table",{ref:s,className:(0,l.cn)("w-full caption-bottom text-sm",a),...r})})});n.displayName="Table";let i=r.forwardRef((e,s)=>{let{className:a,...r}=e;return(0,t.jsx)("thead",{ref:s,className:(0,l.cn)("[&_tr]:border-b",a),...r})});i.displayName="TableHeader";let d=r.forwardRef((e,s)=>{let{className:a,...r}=e;return(0,t.jsx)("tbody",{ref:s,className:(0,l.cn)("[&_tr:last-child]:border-0",a),...r})});d.displayName="TableBody",r.forwardRef((e,s)=>{let{className:a,...r}=e;return(0,t.jsx)("tfoot",{ref:s,className:(0,l.cn)("border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",a),...r})}).displayName="TableFooter";let o=r.forwardRef((e,s)=>{let{className:a,...r}=e;return(0,t.jsx)("tr",{ref:s,className:(0,l.cn)("border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted",a),...r})});o.displayName="TableRow";let c=r.forwardRef((e,s)=>{let{className:a,...r}=e;return(0,t.jsx)("th",{ref:s,className:(0,l.cn)("h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0 [&:has([role=checkbox])]:w-[40px]",a),...r})});c.displayName="TableHead";let u=r.forwardRef((e,s)=>{let{className:a,...r}=e;return(0,t.jsx)("td",{ref:s,className:(0,l.cn)("p-4 align-middle [&:has([role=checkbox])]:pr-0 [&:has([role=checkbox])]:w-[40px]",a),...r})});u.displayName="TableCell";let f=r.forwardRef((e,s)=>{let{className:a,...r}=e;return(0,t.jsx)("caption",{ref:s,className:(0,l.cn)("mt-4 text-sm text-muted-foreground",a),...r})});f.displayName="TableCaption"},77992:function(e,s,a){"use strict";a.d(s,{Am:function(){return u},pm:function(){return f}});var t=a(2265);let r=0,l=new Map,n=e=>{if(l.has(e))return;let s=setTimeout(()=>{l.delete(e),c({type:"REMOVE_TOAST",toastId:e})},1e6);l.set(e,s)},i=(e,s)=>{switch(s.type){case"ADD_TOAST":return{...e,toasts:[s.toast,...e.toasts].slice(0,1)};case"UPDATE_TOAST":return{...e,toasts:e.toasts.map(e=>e.id===s.toast.id?{...e,...s.toast}:e)};case"DISMISS_TOAST":{let{toastId:a}=s;return a?n(a):e.toasts.forEach(e=>{n(e.id)}),{...e,toasts:e.toasts.map(e=>e.id===a||void 0===a?{...e,open:!1}:e)}}case"REMOVE_TOAST":if(void 0===s.toastId)return{...e,toasts:[]};return{...e,toasts:e.toasts.filter(e=>e.id!==s.toastId)}}},d=[],o={toasts:[]};function c(e){o=i(o,e),d.forEach(e=>{e(o)})}function u(e){let{...s}=e,a=(r=(r+1)%Number.MAX_SAFE_INTEGER).toString(),t=()=>c({type:"DISMISS_TOAST",toastId:a});return c({type:"ADD_TOAST",toast:{...s,id:a,open:!0,onOpenChange:e=>{e||t()}}}),{id:a,dismiss:t,update:e=>c({type:"UPDATE_TOAST",toast:{...e,id:a}})}}function f(){let[e,s]=t.useState(o);return t.useEffect(()=>(d.push(s),()=>{let e=d.indexOf(s);e>-1&&d.splice(e,1)}),[e]),{...e,toast:u,dismiss:e=>c({type:"DISMISS_TOAST",toastId:e})}}}},function(e){e.O(0,[9851,7629,7093,6148,847,1942,7648,7823,8068,4567,3825,7107,5436,6373,2971,2117,1744],function(){return e(e.s=38434)}),_N_E=e.O()}]);
|
|
2
|
+
//# sourceMappingURL=page-5d5e5142f0997122.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static/chunks/app/(application)/roles/page-5d5e5142f0997122.js","mappings":"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","sources":["webpack://_N_E/?f649","webpack://_N_E/./components/ui/radio-group.tsx","webpack://_N_E/./components/role-form.tsx","webpack://_N_E/./app/(application)/roles/page.tsx","webpack://_N_E/./components/ui/badge.tsx","webpack://_N_E/./components/ui/card.tsx","webpack://_N_E/./components/ui/dialog.tsx","webpack://_N_E/./components/ui/input.tsx","webpack://_N_E/./components/ui/label.tsx","webpack://_N_E/./components/ui/table.tsx","webpack://_N_E/./components/ui/use-toast.ts"],"sourcesContent":["import(/* webpackMode: \"eager\" */ \"/home/runner/work/exulu-frontend/exulu-frontend/app/(application)/roles/page.tsx\");\n","\"use client\";\n\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\nimport { Circle } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst RadioGroup = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>\n>(({ className, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Root\n className={cn(\"grid gap-2\", className)}\n {...props}\n ref={ref}\n />\n );\n});\nRadioGroup.displayName = RadioGroupPrimitive.Root.displayName;\n\nconst RadioGroupItem = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>\n>(({ className, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cn(\n \"aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus: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 {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <Circle className=\"size-2.5 fill-current text-current\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n );\n});\nRadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;\n\nexport { RadioGroup, RadioGroupItem };\n","\"use client\"\n\nimport { useState, useEffect } from \"react\"\nimport { Loader2, Shield, Users, Workflow, Variable, Bot, CodeSquare, Brain } from \"lucide-react\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from \"@/components/ui/card\"\nimport { RadioGroup, RadioGroupItem } from \"@/components/ui/radio-group\"\nimport { UserRole } from \"@/types/models/user-role\"\n\ninterface RoleFormProps {\n initialData?: UserRole | null\n onSubmit: (roleData: any) => Promise<void>\n loading: boolean\n onCancel: () => void\n}\n\nconst PERMISSION_OPTIONS = [\n { value: \"\", label: \"No Access\", description: \"Cannot access this resource\" },\n { value: \"read\", label: \"Read Only\", description: \"Can view but not modify\" },\n { value: \"write\", label: \"Read/Write\", description: \"Full access to create, read, update, and delete\" },\n]\n\nconst PERMISSION_AREAS = [\n {\n key: \"agents\" as const,\n label: \"Agents\",\n icon: Bot,\n description: \"AI agents and their configurations\"\n },\n {\n key: \"workflows\" as const,\n label: \"Workflows\",\n icon: Workflow,\n description: \"Workflow templates and executions\"\n },\n {\n key: \"variables\" as const,\n label: \"Variables\",\n icon: Variable,\n description: \"Environment variables and secrets\"\n },\n {\n key: \"users\" as const,\n label: \"Users\",\n icon: Users,\n description: \"User management and roles\"\n },\n {\n key: \"api\" as const,\n label: \"API\",\n icon: CodeSquare,\n description: \"API access and management\"\n },\n {\n key: \"evals\" as const,\n label: \"Evals\",\n icon: Brain,\n description: \"Evaluation sets, test cases, and eval runs\"\n }\n]\n\nexport function RoleForm({ initialData, onSubmit, loading, onCancel }: RoleFormProps) {\n const [name, setName] = useState(initialData?.name || \"\")\n const [permissions, setPermissions] = useState({\n agents: initialData?.agents || \"\",\n api: initialData?.api || \"\",\n workflows: initialData?.workflows || \"\",\n variables: initialData?.variables || \"\",\n users: initialData?.users || \"\",\n evals: initialData?.evals || \"\",\n })\n\n useEffect(() => {\n if (initialData) {\n setName(initialData.name)\n setPermissions({\n agents: initialData.agents || \"\",\n api: initialData.api || \"\",\n workflows: initialData.workflows || \"\",\n variables: initialData.variables || \"\",\n users: initialData.users || \"\",\n evals: initialData.evals || \"\"\n })\n }\n }, [initialData])\n\n const handlePermissionChange = (area: keyof typeof permissions, value: string) => {\n setPermissions(prev => ({\n ...prev,\n [area]: value\n }))\n }\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault()\n\n if (!name.trim()) {\n return\n }\n\n const roleData = {\n name: name.trim(),\n agents: permissions.agents || null,\n api: permissions.api || null,\n workflows: permissions.workflows || null,\n variables: permissions.variables || null,\n users: permissions.users || null,\n evals: permissions.evals || null\n }\n\n await onSubmit(roleData)\n }\n\n return (\n <form onSubmit={handleSubmit} className=\"space-y-6\">\n {/* Role Name */}\n <div className=\"space-y-2\">\n <Label htmlFor=\"roleName\">Role Name</Label>\n <Input\n id=\"roleName\"\n placeholder=\"e.g. Admin, Developer, Viewer\"\n disabled={loading || initialData?.name === \"admin\" || initialData?.name === \"default\"}\n value={name}\n onChange={(e) => setName(e.target.value)}\n required\n />\n {initialData?.name === \"admin\" || initialData?.name === \"default\" ? (\n <p className=\"text-sm text-destructive\">\n Admin and default roles names cannot be changed, these are reserved for system defaults.\n </p>\n ) : null}\n </div>\n\n {/* Permissions */}\n <div className=\"space-y-4\">\n <div>\n <h3 className=\"text-lg font-medium\">Permissions</h3>\n <p className=\"text-sm text-muted-foreground\">\n Configure access levels for different areas of the system\n </p>\n </div>\n\n {PERMISSION_AREAS.map((area) => {\n const Icon = area.icon\n return (\n <Card key={area.key}>\n <CardHeader className=\"pb-3\">\n <CardTitle className=\"flex items-center gap-2 text-base\">\n <Icon className=\"h-4 w-4\" />\n {area.label}\n </CardTitle>\n <CardDescription className=\"text-sm\">\n {area.description}\n </CardDescription>\n </CardHeader>\n <CardContent>\n <RadioGroup\n value={permissions[area.key]}\n onValueChange={(value) => handlePermissionChange(area.key, value)}\n disabled={loading}\n >\n {PERMISSION_OPTIONS.map((option) => (\n <div key={option.value} className=\"flex items-center space-x-2\">\n <RadioGroupItem value={option.value} id={`${area.key}-${option.value}`} />\n <Label\n htmlFor={`${area.key}-${option.value}`}\n className=\"flex-1 cursor-pointer\"\n >\n <div className=\"flex items-center justify-between\">\n <span className=\"font-medium\">{option.label}</span>\n <span className=\"text-sm text-muted-foreground\">\n {option.description}\n </span>\n </div>\n </Label>\n </div>\n ))}\n </RadioGroup>\n </CardContent>\n </Card>\n )\n })}\n </div>\n\n {/* Actions */}\n <div className=\"flex items-center justify-end gap-3 pt-4 border-t\">\n <Button type=\"button\" variant=\"outline\" onClick={onCancel} disabled={loading}>\n Cancel\n </Button>\n <Button type=\"submit\" disabled={loading || !name.trim()}>\n {loading ? (\n <>\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n {initialData ? \"Updating...\" : \"Creating...\"}\n </>\n ) : (\n <>\n <Shield className=\"mr-2 h-4 w-4\" />\n {initialData ? \"Update Role\" : \"Create Role\"}\n </>\n )}\n </Button>\n </div>\n </form>\n )\n}","\"use client\"\n\nimport { useState } from \"react\"\nimport { Plus, Trash2, Edit, Shield, Loader2, ArrowLeft } from \"lucide-react\"\nimport { Button } from \"@/components/ui/button\"\nimport Link from \"next/link\"\nimport { Input } from \"@/components/ui/input\"\nimport { format } from \"date-fns\"\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from \"@/components/ui/card\"\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from \"@/components/ui/table\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/components/ui/dialog\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { toast } from \"@/components/ui/use-toast\"\nimport { useMutation, useQuery } from \"@apollo/client\"\nimport { GET_USER_ROLES, CREATE_USER_ROLE, UPDATE_USER_ROLE_BY_ID, REMOVE_USER_ROLE_BY_ID } from \"@/queries/queries\"\nimport { RoleForm } from \"@/components/role-form\"\nimport { UserRole } from \"@/types/models/user-role\"\n\nexport default function RoleManagement() {\n const [searchTerm, setSearchTerm] = useState(\"\")\n const [createDialogOpen, setCreateDialogOpen] = useState(false)\n const [editDialogOpen, setEditDialogOpen] = useState(false)\n const [deleteDialogOpen, setDeleteDialogOpen] = useState(false)\n const [selectedRole, setSelectedRole] = useState<UserRole | null>(null)\n\n const { loading, error, data, refetch } = useQuery(GET_USER_ROLES, {\n variables: { page: 1, limit: 100 },\n fetchPolicy: \"cache-first\",\n nextFetchPolicy: \"network-only\",\n })\n\n const [createRole, { loading: createLoading }] = useMutation(CREATE_USER_ROLE, {\n refetchQueries: [GET_USER_ROLES, \"GetUserRoles\"],\n })\n\n const [updateRole, { loading: updateLoading }] = useMutation(UPDATE_USER_ROLE_BY_ID, {\n refetchQueries: [GET_USER_ROLES, \"GetUserRoles\"],\n })\n\n const [deleteRole, { loading: deleteLoading }] = useMutation(REMOVE_USER_ROLE_BY_ID, {\n refetchQueries: [GET_USER_ROLES, \"GetUserRoles\"],\n })\n\n const roles: UserRole[] = data?.rolesPagination?.items || []\n const filteredRoles = roles.filter(role =>\n role.name.toLowerCase().includes(searchTerm.toLowerCase())\n )\n\n const formatPermissions = (role: UserRole) => {\n const permissions: { name: string; level: string }[] = []\n \n if (role.agents) {\n const agentPerms = role.agents.toLowerCase()\n if (agentPerms.includes('write') || agentPerms.includes('create') || agentPerms.includes('update') || agentPerms.includes('delete')) {\n permissions.push({ name: \"Agents\", level: \"Read/Write\" })\n } else if (agentPerms.includes('read') || agentPerms.includes('view')) {\n permissions.push({ name: \"Agents\", level: \"Read\" })\n }\n }\n \n if (role.workflows) {\n const workflowPerms = role.workflows.toLowerCase()\n if (workflowPerms.includes('write') || workflowPerms.includes('create') || workflowPerms.includes('update') || workflowPerms.includes('delete')) {\n permissions.push({ name: \"Workflows\", level: \"Read/Write\" })\n } else if (workflowPerms.includes('read') || workflowPerms.includes('view')) {\n permissions.push({ name: \"Workflows\", level: \"Read\" })\n }\n }\n \n if (role.variables) {\n const variablePerms = role.variables.toLowerCase()\n if (variablePerms.includes('write') || variablePerms.includes('create') || variablePerms.includes('update') || variablePerms.includes('delete')) {\n permissions.push({ name: \"Variables\", level: \"Read/Write\" })\n } else if (variablePerms.includes('read') || variablePerms.includes('view')) {\n permissions.push({ name: \"Variables\", level: \"Read\" })\n }\n }\n \n if (role.users) {\n const userPerms = role.users.toLowerCase()\n if (userPerms.includes('write') || userPerms.includes('create') || userPerms.includes('update') || userPerms.includes('delete')) {\n permissions.push({ name: \"Users\", level: \"Read/Write\" })\n } else if (userPerms.includes('read') || userPerms.includes('view')) {\n permissions.push({ name: \"Users\", level: \"Read\" })\n }\n }\n\n if (role.api) {\n const apiPerms = role.api.toLowerCase()\n if (apiPerms.includes('write') || apiPerms.includes('create') || apiPerms.includes('update') || apiPerms.includes('delete')) {\n permissions.push({ name: \"API\", level: \"Read/Write\" })\n } else if (apiPerms.includes('read') || apiPerms.includes('view')) {\n permissions.push({ name: \"API\", level: \"Read\" })\n }\n }\n\n return permissions\n }\n\n const handleCreateRole = async (roleData: any) => {\n try {\n await createRole({\n variables: {\n name: roleData.name,\n agents: roleData.agents,\n api: roleData.api,\n workflows: roleData.workflows,\n variables: roleData.variables,\n users: roleData.users,\n }\n })\n setCreateDialogOpen(false)\n toast({\n title: \"Success\",\n description: \"Role created successfully\",\n })\n } catch (error) {\n toast({\n title: \"Error\",\n description: \"Failed to create role\",\n variant: \"destructive\",\n })\n }\n }\n\n const handleUpdateRole = async (roleData: any) => {\n if (!selectedRole) return\n \n try {\n await updateRole({\n variables: {\n id: selectedRole.id,\n name: roleData.name,\n agents: roleData.agents,\n api: roleData.api,\n workflows: roleData.workflows,\n variables: roleData.variables,\n users: roleData.users,\n }\n })\n setEditDialogOpen(false)\n setSelectedRole(null)\n toast({\n title: \"Success\",\n description: \"Role updated successfully\",\n })\n } catch (error) {\n toast({\n title: \"Error\",\n description: \"Failed to update role\",\n variant: \"destructive\",\n })\n }\n }\n\n const handleDeleteRole = async () => {\n if (!selectedRole) return\n \n try {\n await deleteRole({\n variables: { id: selectedRole.id }\n })\n setDeleteDialogOpen(false)\n setSelectedRole(null)\n toast({\n title: \"Success\",\n description: \"Role deleted successfully\",\n })\n } catch (error) {\n toast({\n title: \"Error\",\n description: \"Failed to delete role\",\n variant: \"destructive\",\n })\n }\n }\n\n return (\n <div className=\"container mx-auto py-6 space-y-8 max-w-7xl\">\n <div className=\"flex flex-col gap-2\">\n <Link href=\"/users\">\n <Button variant=\"ghost\" size=\"sm\" className=\"mb-2 w-fit\">\n <ArrowLeft className=\"mr-2 h-4 w-4\" />\n Back to Users\n </Button>\n </Link>\n <h1 className=\"text-3xl font-bold tracking-tight\">Role Management</h1>\n <p className=\"text-muted-foreground\">\n Create and manage roles with specific permissions for agents, workflows, variables, the api and users.\n </p>\n </div>\n\n {/* Search and Create */}\n <Card>\n <CardHeader>\n <CardTitle>Roles</CardTitle>\n <CardDescription>\n Manage system roles and their permissions\n </CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between\">\n <Input\n placeholder=\"Search roles...\"\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n className=\"flex-1 max-w-md\"\n />\n <Dialog open={createDialogOpen} onOpenChange={setCreateDialogOpen}>\n <DialogTrigger asChild>\n <Button>\n <Plus className=\"mr-2 h-4 w-4\" />\n Create Role\n </Button>\n </DialogTrigger>\n <DialogContent className=\"max-w-2xl max-h-[90vh] overflow-y-auto\">\n <DialogHeader>\n <DialogTitle>Create New Role</DialogTitle>\n <DialogDescription>\n Define the role name and permissions for different system areas.\n </DialogDescription>\n </DialogHeader>\n <RoleForm\n onSubmit={handleCreateRole}\n loading={createLoading}\n onCancel={() => setCreateDialogOpen(false)}\n />\n </DialogContent>\n </Dialog>\n </div>\n </CardContent>\n </Card>\n\n {/* Roles List */}\n <Card>\n <CardContent className=\"p-0\">\n {loading ? (\n <div className=\"text-center py-8\">\n <Loader2 className=\"h-8 w-8 animate-spin mx-auto mb-2\" />\n <p className=\"text-muted-foreground\">Loading roles...</p>\n </div>\n ) : filteredRoles.length === 0 ? (\n <div className=\"text-center py-8 text-muted-foreground\">\n {searchTerm ? \"No roles found matching your search.\" : \"No roles created yet. Create your first role above.\"}\n </div>\n ) : (\n <div className=\"overflow-x-auto\">\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Role Name</TableHead>\n <TableHead>Permissions</TableHead>\n <TableHead>Created</TableHead>\n <TableHead>Updated</TableHead>\n <TableHead className=\"text-right\">Actions</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {filteredRoles.map((role) => (\n <TableRow key={role.id}>\n <TableCell>\n <div className=\"flex items-center gap-2\">\n <Shield className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"font-medium\">{role.name}</span>\n </div>\n </TableCell>\n <TableCell>\n <div className=\"flex flex-wrap gap-1\">\n {formatPermissions(role).map((perm, index) => (\n <Badge \n key={index} \n variant={\"secondary\"}\n className=\"text-xs\"\n >\n {perm.name}: {perm.level}\n </Badge>\n ))}\n {formatPermissions(role).length === 0 && (\n <Badge variant=\"outline\" className=\"text-xs\">\n No permissions\n </Badge>\n )}\n </div>\n </TableCell>\n <TableCell>\n {format(new Date(role.createdAt || \"\"), \"PP hh:mm\")}\n </TableCell>\n <TableCell>\n {format(new Date(role.updatedAt || \"\"), \"PP hh:mm\")}\n </TableCell>\n <TableCell className=\"text-right\">\n <div className=\"flex items-center justify-end gap-2\">\n <Dialog open={editDialogOpen && selectedRole?.id === role.id} onOpenChange={(open) => {\n setEditDialogOpen(open)\n if (!open) setSelectedRole(null)\n }}>\n <DialogTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => setSelectedRole(role)}\n className=\"h-8 w-8\"\n >\n <Edit className=\"h-4 w-4\" />\n </Button>\n </DialogTrigger>\n <DialogContent className=\"max-w-2xl max-h-[90vh] overflow-y-auto\">\n <DialogHeader>\n <DialogTitle>Edit Role</DialogTitle>\n <DialogDescription>\n Update the role name and permissions.\n </DialogDescription>\n </DialogHeader>\n <RoleForm\n initialData={selectedRole}\n onSubmit={handleUpdateRole}\n loading={updateLoading}\n onCancel={() => {\n setEditDialogOpen(false)\n setSelectedRole(null)\n }}\n />\n </DialogContent>\n </Dialog>\n\n <Dialog open={deleteDialogOpen && selectedRole?.id === role.id} onOpenChange={(open) => {\n setDeleteDialogOpen(open)\n if (!open) setSelectedRole(null)\n }}>\n <DialogTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => setSelectedRole(role)}\n disabled={role.name === \"admin\" || role.name === \"default\"}\n className=\"h-8 w-8 text-red-500 hover:text-red-600 hover:bg-red-50 dark:hover:bg-red-950\"\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n </DialogTrigger>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Delete Role</DialogTitle>\n <DialogDescription>\n Are you sure you want to delete the role \"{selectedRole?.name}\"? This action cannot be undone.\n </DialogDescription>\n </DialogHeader>\n <DialogFooter>\n <Button \n variant=\"outline\" \n onClick={() => {\n setDeleteDialogOpen(false)\n setSelectedRole(null)\n }}\n >\n Cancel\n </Button>\n <Button \n variant=\"destructive\" \n onClick={handleDeleteRole}\n disabled={deleteLoading || role.name === \"admin\" || role.name === \"default\"}\n >\n {deleteLoading ? (\n <>\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n Deleting...\n </>\n ) : (\n \"Delete Role\"\n )}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </div>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n )}\n </CardContent>\n </Card>\n </div>\n )\n}","import { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst badgeVariants = cva(\n \"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-primary text-primary-foreground hover:bg-primary/80\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n destructive:\n \"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80\",\n outline: \"text-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {}\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return (\n <div className={cn(badgeVariants({ variant }), className)} {...props} />\n );\n}\n\nexport { Badge, badgeVariants };\n","import * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst Card = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"rounded-lg border bg-card text-card-foreground shadow-sm\",\n className,\n )}\n {...props}\n />\n));\nCard.displayName = \"Card\";\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col space-y-1.5 p-6\", className)}\n {...props}\n />\n));\nCardHeader.displayName = \"CardHeader\";\n\nconst CardTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn(\n \"text-2xl font-semibold leading-none tracking-tight\",\n className,\n )}\n {...props}\n />\n));\nCardTitle.displayName = \"CardTitle\";\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nCardDescription.displayName = \"CardDescription\";\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n));\nCardContent.displayName = \"CardContent\";\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center p-6 pt-0\", className)}\n {...props}\n />\n));\nCardFooter.displayName = \"CardFooter\";\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardDescription,\n CardContent,\n};\n","\"use client\";\n\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst Dialog = DialogPrimitive.Root;\n\nconst DialogTrigger = DialogPrimitive.Trigger;\n\nconst DialogPortal = DialogPrimitive.Portal;\n\nconst DialogClose = DialogPrimitive.Close;\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className,\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\",\n className,\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\">\n <X className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className,\n )}\n {...props}\n />\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className,\n )}\n {...props}\n />\n);\nDialogFooter.displayName = \"DialogFooter\";\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className,\n )}\n {...props}\n />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogClose,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n};\n","import * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium 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);\nInput.displayName = \"Input\";\n\nexport { Input };\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\nconst Table = React.forwardRef<\n HTMLTableElement,\n React.HTMLAttributes<HTMLTableElement>\n>(({ className, ...props }, ref) => (\n <div className=\"relative w-full overflow-auto\">\n <table\n ref={ref}\n className={cn(\"w-full caption-bottom text-sm\", className)}\n {...props}\n />\n </div>\n));\nTable.displayName = \"Table\";\n\nconst TableHeader = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <thead ref={ref} className={cn(\"[&_tr]:border-b\", className)} {...props} />\n));\nTableHeader.displayName = \"TableHeader\";\n\nconst TableBody = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tbody\n ref={ref}\n className={cn(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n));\nTableBody.displayName = \"TableBody\";\n\nconst TableFooter = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tfoot\n ref={ref}\n className={cn(\n \"border-t bg-muted/50 font-medium [&>tr]:last:border-b-0\",\n className,\n )}\n {...props}\n />\n));\nTableFooter.displayName = \"TableFooter\";\n\nconst TableRow = React.forwardRef<\n HTMLTableRowElement,\n React.HTMLAttributes<HTMLTableRowElement>\n>(({ className, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn(\n \"border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted\",\n className,\n )}\n {...props}\n />\n));\nTableRow.displayName = \"TableRow\";\n\nconst TableHead = React.forwardRef<\n HTMLTableCellElement,\n React.ThHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n \"h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0 [&:has([role=checkbox])]:w-[40px]\",\n className,\n )}\n {...props}\n />\n));\nTableHead.displayName = \"TableHead\";\n\nconst TableCell = React.forwardRef<\n HTMLTableCellElement,\n React.TdHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn(\n \"p-4 align-middle [&:has([role=checkbox])]:pr-0 [&:has([role=checkbox])]:w-[40px]\",\n className,\n )}\n {...props}\n />\n));\nTableCell.displayName = \"TableCell\";\n\nconst TableCaption = React.forwardRef<\n HTMLTableCaptionElement,\n React.HTMLAttributes<HTMLTableCaptionElement>\n>(({ className, ...props }, ref) => (\n <caption\n ref={ref}\n className={cn(\"mt-4 text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nTableCaption.displayName = \"TableCaption\";\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n};\n","\"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"],"names":["Promise","resolve","then","__webpack_require__","bind","RadioGroup","React","param","ref","className","props","jsx_runtime","jsx","RadioGroupPrimitive","cn","displayName","RadioGroupItem","Circle","PERMISSION_OPTIONS","value","label","description","PERMISSION_AREAS","key","icon","Bot","Workflow","Variable","Users","CodeSquare","Brain","RoleForm","initialData","onSubmit","loading","onCancel","name","setName","useState","permissions","setPermissions","agents","api","workflows","variables","users","evals","useEffect","handlePermissionChange","area","prev","handleSubmit","e","preventDefault","trim","roleData","jsxs","form","div","Label","htmlFor","Input","id","placeholder","disabled","onChange","target","required","p","h3","map","Icon","Card","CardHeader","CardTitle","CardDescription","CardContent","onValueChange","option","concat","span","Button","type","variant","onClick","Fragment","Loader2","Shield","RoleManagement","data","searchTerm","setSearchTerm","createDialogOpen","setCreateDialogOpen","editDialogOpen","setEditDialogOpen","deleteDialogOpen","setDeleteDialogOpen","selectedRole","setSelectedRole","error","refetch","useQuery","GET_USER_ROLES","page","limit","fetchPolicy","nextFetchPolicy","createRole","createLoading","useMutation","CREATE_USER_ROLE","refetchQueries","updateRole","updateLoading","UPDATE_USER_ROLE_BY_ID","deleteRole","deleteLoading","REMOVE_USER_ROLE_BY_ID","filteredRoles","roles","rolesPagination","items","filter","role","toLowerCase","includes","formatPermissions","agentPerms","push","level","workflowPerms","variablePerms","userPerms","apiPerms","handleCreateRole","toast","title","handleUpdateRole","handleDeleteRole","Link","href","size","ArrowLeft","h1","Dialog","open","onOpenChange","DialogTrigger","asChild","Plus","DialogContent","DialogHeader","DialogTitle","DialogDescription","length","Table","TableHeader","TableRow","TableHead","TableBody","TableCell","perm","index","Badge","format","Date","createdAt","updatedAt","Edit","Trash2","DialogFooter","badgeVariants","cva","variants","default","secondary","destructive","outline","defaultVariants","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__","CardFooter","DialogPrimitive","DialogPortal","DialogOverlay","children","X","input","labelVariants","LabelPrimitive","table","thead","tbody","TableFooter","tfoot","tr","th","td","TableCaption","caption","count","toastTimeouts","Map","addToRemoveQueue","has","toastId","timeout","setTimeout","delete","dispatch","set","reducer","state","action","toasts","slice","t","forEach","undefined","listeners","memoryState","listener","Number","MAX_SAFE_INTEGER","toString","dismiss","update","useToast","setState","indexOf","splice"],"sourceRoot":""}
|