/home/techb158/balavpn.abdallabala.com/.next/cache/webpack/client-production
NameSizeModeActions
0.pack151902800666editdlrm
1.pack10575480666editdlrm
2.pack101655780666editdlrm
3.pack27605650666editdlrm
4.pack39280666editdlrm
5.pack534490666editdlrm
6.pack39280666editdlrm
7.pack39280666editdlrm
8.pack39280666editdlrm
9.pack222120666editdlrm
10.pack2434950666editdlrm
11.pack39280666editdlrm
12.pack39280666editdlrm
13.pack39280666editdlrm
14.pack27941130666editdlrm
15.pack404710666editdlrm
16.pack405510666editdlrm
17.pack4487160666editdlrm
index.pack38735700666editdlrm
index.pack.old38730950666editdlrm
Edit: /home/techb158/balavpn.abdallabala.com/.next/cache/webpack/client-production/1.pack (1057548B)
wpc#webpack/lib/cache/PackFileCacheStrategyPackContentItems @MinifierWebpackPlugin|static/WQb5_ueN1C5ZTno0PN7kB/_ssgManifest.jsMinifierWebpackPlugin|static/WQb5_ueN1C5ZTno0PN7kB/_buildManifest.jsRealContentHashPlugin|analyse|static/WQb5_ueN1C5ZTno0PN7kB/_ssgManifest.jsRealContentHashPlugin|analyse|static/WQb5_ueN1C5ZTno0PN7kB/_buildManifest.jsRealContentHashPlugin|generate|static/WQb5_ueN1C5ZTno0PN7kB/_buildManifest.jsMinifierWebpackPlugin|static/Q2HD1n6rqBSfioNqHLbDi/_ssgManifest.jsMinifierWebpackPlugin|static/Q2HD1n6rqBSfioNqHLbDi/_buildManifest.jsRealContentHashPlugin|analyse|static/Q2HD1n6rqBSfioNqHLbDi/_ssgManifest.jsRealContentHashPlugin|analyse|static/Q2HD1n6rqBSfioNqHLbDi/_buildManifest.jsRealContentHashPlugin|generate|static/Q2HD1n6rqBSfioNqHLbDi/_buildManifest.jsMinifierWebpackPlugin|static/6SCOtfDkzBOxWgVtfY-6-/_ssgManifest.jsMinifierWebpackPlugin|static/6SCOtfDkzBOxWgVtfY-6-/_buildManifest.jsRealContentHashPlugin|analyse|static/6SCOtfDkzBOxWgVtfY-6-/_ssgManifest.jsRealContentHashPlugin|analyse|static/6SCOtfDkzBOxWgVtfY-6-/_buildManifest.jsRealContentHashPlugin|generate|static/6SCOtfDkzBOxWgVtfY-6-/_buildManifest.jsMinifierWebpackPlugin|static/cduSMscSdBZq3qlVl_EUs/_ssgManifest.jsMinifierWebpackPlugin|static/cduSMscSdBZq3qlVl_EUs/_buildManifest.jsRealContentHashPlugin|analyse|static/cduSMscSdBZq3qlVl_EUs/_ssgManifest.jsRealContentHashPlugin|analyse|static/cduSMscSdBZq3qlVl_EUs/_buildManifest.jsRealContentHashPlugin|generate|static/cduSMscSdBZq3qlVl_EUs/_buildManifest.jsMinifierWebpackPlugin|static/iR9M7Xp31RubTM79MqiLM/_ssgManifest.jsMinifierWebpackPlugin|static/iR9M7Xp31RubTM79MqiLM/_buildManifest.jsRealContentHashPlugin|analyse|static/iR9M7Xp31RubTM79MqiLM/_ssgManifest.jsRealContentHashPlugin|analyse|static/iR9M7Xp31RubTM79MqiLM/_buildManifest.jsRealContentHashPlugin|generate|static/iR9M7Xp31RubTM79MqiLM/_buildManifest.jsCompilation/modules|C:\Users\abd_b\OneDrive\Desktop\COSMIC AI-Risk Dashboard\Step 12 is complete Final QA, Demo Readiness, and Submission Freeze\application\saas-app\node_modules\next\dist\build\webpack\loaders\css-loader\src\runtime\api.jsCompilation/codeGeneration|C:\Users\abd_b\OneDrive\Desktop\COSMIC AI-Risk Dashboard\Step 12 is complete Final QA, Demo Readiness, and Submission Freeze\application\saas-app\node_modules\next\dist\build\webpack\loaders\css-loader\src\runtime\api.js|build timeCompilation/codeGeneration|webpack/runtime/compat get default export|build timeCompilation/codeGeneration|webpack/runtime/make namespace object|build timeCompilation/codeGeneration|webpack/runtime/define property getters|build timeCompilation/codeGeneration|webpack/runtime/hasOwnProperty shorthand|build timeMinifierWebpackPlugin|static/hhvMNVgOdIqgk2n8RYhcH/_ssgManifest.jsMinifierWebpackPlugin|static/hhvMNVgOdIqgk2n8RYhcH/_buildManifest.jsRealContentHashPlugin|analyse|static/hhvMNVgOdIqgk2n8RYhcH/_ssgManifest.jsRealContentHashPlugin|analyse|static/hhvMNVgOdIqgk2n8RYhcH/_buildManifest.jsRealContentHashPlugin|generate|static/hhvMNVgOdIqgk2n8RYhcH/_buildManifest.jsMinifierWebpackPlugin|static/kcXCCqaxYVEGQpXxFajT-/_ssgManifest.jsMinifierWebpackPlugin|static/kcXCCqaxYVEGQpXxFajT-/_buildManifest.jsRealContentHashPlugin|analyse|static/kcXCCqaxYVEGQpXxFajT-/_ssgManifest.jsRealContentHashPlugin|analyse|static/kcXCCqaxYVEGQpXxFajT-/_buildManifest.jsRealContentHashPlugin|generate|static/kcXCCqaxYVEGQpXxFajT-/_buildManifest.jsMinifierWebpackPlugin|static/chunks/app/signup/page-ed3b5e41b2ae0811.jsMinifierWebpackPlugin|static/chunks/app/login/page-f18fac8497ba3a6a.jsRealContentHashPlugin|analyse|static/chunks/app/signup/page-ed3b5e41b2ae0811.jsRealContentHashPlugin|analyse|static/chunks/app/login/page-f18fac8497ba3a6a.jsMinifierWebpackPlugin|static/kA9zE89mIrQKNGeqz9DRX/_ssgManifest.jsMinifierWebpackPlugin|static/kA9zE89mIrQKNGeqz9DRX/_buildManifest.jsRealContentHashPlugin|analyse|static/kA9zE89mIrQKNGeqz9DRX/_ssgManifest.jsRealContentHashPlugin|analyse|static/kA9zE89mIrQKNGeqz9DRX/_buildManifest.jsRealContentHashPlugin|generate|static/kA9zE89mIrQKNGeqz9DRX/_buildManifest.jsMinifierWebpackPlugin|static/chunks/app/api/auth/logout/route-10e0a6ebfcd5b2ac.jsMinifierWebpackPlugin|static/chunks/app/api/auth/login/route-649fba498029f4be.jsMinifierWebpackPlugin|static/chunks/app/api/auth/accept-invite/route-e7177e6894da661b.jsMinifierWebpackPlugin|static/chunks/app/api/auth/invite/route-40a58bf341775023.jsMinifierWebpackPlugin|static/chunks/app/api/auth/signup/route-389d5ea13d1267e6.jsMinifierWebpackPlugin|static/chunks/app/api/auth/session/route-39f2cff6c3181ff5.jsMinifierWebpackPlugin|static/chunks/app/api/auth/me/route-9b4ffa232d37f473.jsMinifierWebpackPlugin|static/chunks/app/api/auth/sso/callback/route-f22cbfd63775de5f.jsMinifierWebpackPlugin|static/chunks/app/api/billing/portal/route-18ad8151a2b9bae9.jsMinifierWebpackPlugin|static/chunks/app/api/billing/webhook/route-6b5fb9ac274dd41f.jsMinifierWebpackPlugin|static/chunks/app/api/billing/checkout/route-2c17043d7c8a8aa4.jsMinifierWebpackPlugin|static/chunks/app/api/auth/sso/route-ff642f852ce28de1.jsMinifierWebpackPlugin|static/chunks/app/api/integrations/[integrationId]/live/sync/route-9dd75e1481dbb63e.jsMinifierWebpackPlugin|static/chunks/app/api/gates/[gateId]/decisions/route-b23d1cd9ec504f6c.jsMinifierWebpackPlugin|static/chunks/app/api/billing/subscription/route-c626092190583e36.jsMinifierWebpackPlugin|static/chunks/app/api/gate-criteria/[criterionId]/route-2a5d43b83eb8074d.jsMinifierWebpackPlugin|static/chunks/app/api/integration-providers/route-08a82332d5c6f47e.jsMinifierWebpackPlugin|static/chunks/app/api/integrations/[integrationId]/live/test/route-ee93dd9fa2e5abfe.jsMinifierWebpackPlugin|static/chunks/app/api/health/route-7db111a490d20dc3.jsMinifierWebpackPlugin|static/chunks/app/api/mitigations/[mitigationId]/evidence/route-73138d669726eb62.jsMinifierWebpackPlugin|static/chunks/app/api/metrics/route-a42c683bc5c1f4cd.jsMinifierWebpackPlugin|static/chunks/app/api/integrations/[integrationId]/sync/route-65f8c44230f1250c.jsMinifierWebpackPlugin|static/chunks/app/api/mitigations/[mitigationId]/route-4f044631084eff9d.jsMinifierWebpackPlugin|static/chunks/app/api/integrations/[integrationId]/route-fb926cf16428bc35.jsMinifierWebpackPlugin|static/chunks/app/api/projects/[projectId]/reports/[reportType]/route-2b0d5b284e9097b3.jsMinifierWebpackPlugin|static/chunks/app/api/projects/[projectId]/dashboard/route-b7968027bad2b853.jsMinifierWebpackPlugin|static/chunks/app/api/projects/[projectId]/mitigations/route-5138b0ecf5471398.jsMinifierWebpackPlugin|static/chunks/app/api/projects/[projectId]/audit/route-f04fe521c6160496.jsMinifierWebpackPlugin|static/chunks/app/api/projects/[projectId]/risks/route-79ac0adb77017779.jsMinifierWebpackPlugin|static/chunks/app/api/risks/[riskId]/mitigations/route-705e26d9250f9621.jsMinifierWebpackPlugin|static/chunks/app/api/projects/[projectId]/route-f32c675c9d388441.jsMinifierWebpackPlugin|static/chunks/app/api/risks/[riskId]/route-c9a163196358f1c3.jsMinifierWebpackPlugin|static/chunks/app/api/projects/[projectId]/gate/evaluate/route-4395fe9619ca860b.jsMinifierWebpackPlugin|static/chunks/app/api/ready/route-df9a68a34ccf4cb6.jsMinifierWebpackPlugin|static/chunks/app/api/workspaces/[workspaceId]/integration-mappings/route-2cb07be162e96cb6.jsMinifierWebpackPlugin|static/chunks/app/api/projects/[projectId]/gate/history/route-5c97fed6c0da77ef.jsMinifierWebpackPlugin|static/chunks/app/api/workspaces/[workspaceId]/route-8a338340f7cddb2f.jsMinifierWebpackPlugin|static/chunks/app/api/workspaces/[workspaceId]/projects/route-5c548f621bd6c5a9.jsMinifierWebpackPlugin|static/chunks/app/api/organizations/route-1740725c4648b998.jsMinifierWebpackPlugin|static/chunks/app/api/workspaces/[workspaceId]/sync-runs/route-678d331edf80e7b8.jsMinifierWebpackPlugin|static/chunks/app/api/workspaces/[workspaceId]/integrations/route-36798902b671b661.jsMinifierWebpackPlugin|static/chunks/app/api/workspaces/route-6cf8dc8aceeff4f0.jsMinifierWebpackPlugin|static/chunks/app/page-a83a6d823464b0e3.jsCssMinimizerPlugin|static/css/e8f5205552323513.cssRealContentHashPlugin|analyse|static/chunks/app/api/auth/logout/route-10e0a6ebfcd5b2ac.jsRealContentHashPlugin|analyse|static/chunks/app/api/auth/login/route-649fba498029f4be.jsRealContentHashPlugin|analyse|static/chunks/app/api/auth/accept-invite/route-e7177e6894da661b.jsRealContentHashPlugin|analyse|static/chunks/app/api/auth/invite/route-40a58bf341775023.jsRealContentHashPlugin|analyse|static/chunks/app/api/auth/signup/route-389d5ea13d1267e6.jsRealContentHashPlugin|analyse|static/chunks/app/api/auth/session/route-39f2cff6c3181ff5.jsRealContentHashPlugin|analyse|static/chunks/app/api/auth/me/route-9b4ffa232d37f473.jsRealContentHashPlugin|analyse|static/chunks/app/api/auth/sso/callback/route-f22cbfd63775de5f.jsRealContentHashPlugin|analyse|static/chunks/app/api/billing/portal/route-18ad8151a2b9bae9.jsRealContentHashPlugin|analyse|static/chunks/app/api/billing/webhook/route-6b5fb9ac274dd41f.jsRealContentHashPlugin|analyse|static/chunks/app/api/billing/checkout/route-2c17043d7c8a8aa4.jsRealContentHashPlugin|analyse|static/chunks/app/api/auth/sso/route-ff642f852ce28de1.jsRealContentHashPlugin|analyse|static/chunks/app/api/integrations/[integrationId]/live/sync/route-9dd75e1481dbb63e.jsRealContentHashPlugin|analyse|static/chunks/app/api/gates/[gateId]/decisions/route-b23d1cd9ec504f6c.jsRealContentHashPlugin|analyse|static/chunks/app/api/billing/subscription/route-c626092190583e36.jsRealContentHashPlugin|analyse|static/chunks/app/api/gate-criteria/[criterionId]/route-2a5d43b83eb8074d.jsRealContentHashPlugin|analyse|static/chunks/app/api/integration-providers/route-08a82332d5c6f47e.jsRealContentHashPlugin|analyse|static/chunks/app/api/integrations/[integrationId]/live/test/route-ee93dd9fa2e5abfe.jsRealContentHashPlugin|analyse|static/chunks/app/api/health/route-7db111a490d20dc3.jsRealContentHashPlugin|analyse|static/chunks/app/api/mitigations/[mitigationId]/evidence/route-73138d669726eb62.jsRealContentHashPlugin|analyse|static/chunks/app/api/metrics/route-a42c683bc5c1f4cd.jsRealContentHashPlugin|analyse|static/chunks/app/api/integrations/[integrationId]/sync/route-65f8c44230f1250c.jsRealContentHashPlugin|analyse|static/chunks/app/api/mitigations/[mitigationId]/route-4f044631084eff9d.jsRealContentHashPlugin|analyse|static/chunks/app/api/integrations/[integrationId]/route-fb926cf16428bc35.jsRealContentHashPlugin|analyse|static/chunks/app/api/projects/[projectId]/reports/[reportType]/route-2b0d5b284e9097b3.jsRealContentHashPlugin|analyse|static/chunks/app/api/projects/[projectId]/dashboard/route-b7968027bad2b853.jsRealContentHashPlugin|analyse|static/chunks/app/api/projects/[projectId]/mitigations/route-5138b0ecf5471398.jsRealContentHashPlugin|analyse|static/chunks/app/api/projects/[projectId]/audit/route-f04fe521c6160496.jsRealContentHashPlugin|analyse|static/chunks/app/api/projects/[projectId]/risks/route-79ac0adb77017779.jsRealContentHashPlugin|analyse|static/chunks/app/api/risks/[riskId]/mitigations/route-705e26d9250f9621.jsRealContentHashPlugin|analyse|static/chunks/app/api/projects/[projectId]/route-f32c675c9d388441.jsRealContentHashPlugin|analyse|static/chunks/app/api/risks/[riskId]/route-c9a163196358f1c3.jsRealContentHashPlugin|analyse|static/chunks/app/api/projects/[projectId]/gate/evaluate/route-4395fe9619ca860b.jsRealContentHashPlugin|analyse|static/chunks/app/api/ready/route-df9a68a34ccf4cb6.jsRealContentHashPlugin|analyse|static/chunks/app/api/workspaces/[workspaceId]/integration-mappings/route-2cb07be162e96cb6.jsRealContentHashPlugin|analyse|static/chunks/app/api/projects/[projectId]/gate/history/route-5c97fed6c0da77ef.jsRealContentHashPlugin|analyse|static/chunks/app/api/workspaces/[workspaceId]/route-8a338340f7cddb2f.jsRealContentHashPlugin|analyse|static/chunks/app/api/workspaces/[workspaceId]/projects/route-5c548f621bd6c5a9.jsRealContentHashPlugin|analyse|static/chunks/app/api/organizations/route-1740725c4648b998.jsRealContentHashPlugin|analyse|static/chunks/app/api/workspaces/[workspaceId]/sync-runs/route-678d331edf80e7b8.jsRealContentHashPlugin|analyse|static/chunks/app/api/workspaces/[workspaceId]/integrations/route-36798902b671b661.jsRealContentHashPlugin|analyse|static/chunks/app/api/workspaces/route-6cf8dc8aceeff4f0.jsRealContentHashPlugin|analyse|static/chunks/app/page-a83a6d823464b0e3.jsRealContentHashPlugin|analyse|static/css/e8f5205552323513.cssCompilation/codeGeneration|javascript/auto|C:\Users\abd_b\OneDrive\Desktop\COSMIC AI-Risk Dashboard\Step 12 is complete Final QA, Demo Readiness, and Submission Freeze\application\saas-app\node_modules\next\dist\build\webpack\loaders\next-flight-client-module-loader.js!C:\Users\abd_b\OneDrive\Desktop\COSMIC AI-Risk Dashboard\Step 12 is complete Final QA, Demo Readiness, and Submission Freeze\application\saas-app\node_modules\next\dist\build\webpack\loaders\next-swc-loader.js??ruleSet[1].rules[16].oneOf[6].use[1]!C:\Users\abd_b\OneDrive\Desktop\COSMIC AI-Risk Dashboard\Step 12 is complete Final QA, Demo Readiness, and Submission Freeze\application\saas-app\src\app\dashboard\page.jsx|app-pages-browser|webpackMinifierWebpackPlugin|static/chunks/app/dashboard/layout-9e8421f4c090faf2.jsMinifierWebpackPlugin|static/chunks/app/dashboard/page-d8c7ca8aed6c021b.jsMinifierWebpackPlugin|static/chunks/4bd1b696-3a38a6ef84334d14.jsMinifierWebpackPlugin|static/chunks/1255-1b13c8d0def31f5d.jsRealContentHashPlugin|analyse|static/chunks/app/dashboard/layout-9e8421f4c090faf2.jsRealContentHashPlugin|analyse|static/chunks/app/dashboard/page-d8c7ca8aed6c021b.jsRealContentHashPlugin|analyse|static/chunks/4bd1b696-3a38a6ef84334d14.jsRealContentHashPlugin|analyse|static/chunks/1255-1b13c8d0def31f5d.jsMinifierWebpackPlugin|static/CbuUuEw93fExgYx4HhpCZ/_ssgManifest.jsMinifierWebpackPlugin|static/CbuUuEw93fExgYx4HhpCZ/_buildManifest.jsRealContentHashPlugin|analyse|static/CbuUuEw93fExgYx4HhpCZ/_ssgManifest.jsRealContentHashPlugin|analyse|static/CbuUuEw93fExgYx4HhpCZ/_buildManifest.jsRealContentHashPlugin|generate|static/CbuUuEw93fExgYx4HhpCZ/_buildManifest.jsMinifierWebpackPlugin|static/vWOqLn3cE-kkCq--ZBEjK/_ssgManifest.jsMinifierWebpackPlugin|static/vWOqLn3cE-kkCq--ZBEjK/_buildManifest.jsRealContentHashPlugin|analyse|static/vWOqLn3cE-kkCq--ZBEjK/_ssgManifest.jsRealContentHashPlugin|analyse|static/vWOqLn3cE-kkCq--ZBEjK/_buildManifest.jsRealContentHashPlugin|generate|static/vWOqLn3cE-kkCq--ZBEjK/_buildManifest.jsMinifierWebpackPlugin|static/chunks/app/dashboard/page-d08802324a84acaf.jsRealContentHashPlugin|analyse|static/chunks/app/dashboard/page-d08802324a84acaf.jsMinifierWebpackPlugin|static/nePkcP1kGbLYAS6jbX2Zr/_ssgManifest.jsMinifierWebpackPlugin|static/nePkcP1kGbLYAS6jbX2Zr/_buildManifest.jsRealContentHashPlugin|analyse|static/nePkcP1kGbLYAS6jbX2Zr/_ssgManifest.jsRealContentHashPlugin|analyse|static/nePkcP1kGbLYAS6jbX2Zr/_buildManifest.jsRealContentHashPlugin|generate|static/nePkcP1kGbLYAS6jbX2Zr/_buildManifest.jsMinifierWebpackPlugin|static/chunks/app/dashboard/page-7835d3625e40d27c.jsMinifierWebpackPlugin|static/vnHGa9ig58Jv-QThFPrF1/_ssgManifest.jsMinifierWebpackPlugin|static/vnHGa9ig58Jv-QThFPrF1/_buildManifest.jsRealContentHashPlugin|analyse|static/chunks/app/dashboard/page-7835d3625e40d27c.jsRealContentHashPlugin|analyse|static/vnHGa9ig58Jv-QThFPrF1/_ssgManifest.jsRealContentHashPlugin|analyse|static/vnHGa9ig58Jv-QThFPrF1/_buildManifest.jsRealContentHashPlugin|generate|static/vnHGa9ig58Jv-QThFPrF1/_buildManifest.jsMinifierWebpackPlugin|static/dDRn3YQvUAbcJBt3oCM34/_ssgManifest.jsMinifierWebpackPlugin|static/dDRn3YQvUAbcJBt3oCM34/_buildManifest.jsRealContentHashPlugin|analyse|static/dDRn3YQvUAbcJBt3oCM34/_ssgManifest.jsRealContentHashPlugin|analyse|static/dDRn3YQvUAbcJBt3oCM34/_buildManifest.jsRealContentHashPlugin|generate|static/dDRn3YQvUAbcJBt3oCM34/_buildManifest.jsMinifierWebpackPlugin|static/IlpLEbcZmwaQfF-tE732Z/_ssgManifest.jsMinifierWebpackPlugin|static/IlpLEbcZmwaQfF-tE732Z/_buildManifest.jsRealContentHashPlugin|analyse|static/IlpLEbcZmwaQfF-tE732Z/_ssgManifest.jsRealContentHashPlugin|analyse|static/IlpLEbcZmwaQfF-tE732Z/_buildManifest.jsRealContentHashPlugin|generate|static/IlpLEbcZmwaQfF-tE732Z/_buildManifest.jsMinifierWebpackPlugin|static/chunks/app/dashboard/page-62fe91578c662910.jsRealContentHashPlugin|analyse|static/chunks/app/dashboard/page-62fe91578c662910.jsMinifierWebpackPlugin|static/chunks/app/dashboard/page-f6897b57f7b69ac0.jsMinifierWebpackPlugin|static/4tv9a38aUiIQJ820OQ1w9/_ssgManifest.jsMinifierWebpackPlugin|static/4tv9a38aUiIQJ820OQ1w9/_buildManifest.jsRealContentHashPlugin|analyse|static/chunks/app/dashboard/page-f6897b57f7b69ac0.jsRealContentHashPlugin|analyse|static/4tv9a38aUiIQJ820OQ1w9/_ssgManifest.jsRealContentHashPlugin|analyse|static/4tv9a38aUiIQJ820OQ1w9/_buildManifest.jsRealContentHashPlugin|generate|static/4tv9a38aUiIQJ820OQ1w9/_buildManifest.jsMinifierWebpackPlugin|static/chunks/app/dashboard/page-e6d6d863b9c5facd.jsMinifierWebpackPlugin|static/3_0t7AicTGEEAaPn2eVRB/_ssgManifest.jsMinifierWebpackPlugin|static/3_0t7AicTGEEAaPn2eVRB/_buildManifest.jsRealContentHashPlugin|analyse|static/chunks/app/dashboard/page-e6d6d863b9c5facd.jsRealContentHashPlugin|analyse|static/3_0t7AicTGEEAaPn2eVRB/_ssgManifest.jsRealContentHashPlugin|analyse|static/3_0t7AicTGEEAaPn2eVRB/_buildManifest.jsRealContentHashPlugin|generate|static/3_0t7AicTGEEAaPn2eVRB/_buildManifest.jsMinifierWebpackPlugin|static/chunks/app/dashboard/page-ebfac2433fff5568.jsMinifierWebpackPlugin|static/sty3S-oKDfB9NdmMJRBYz/_ssgManifest.jsMinifierWebpackPlugin|static/sty3S-oKDfB9NdmMJRBYz/_buildManifest.jsRealContentHashPlugin|analyse|static/chunks/app/dashboard/page-ebfac2433fff5568.jsRealContentHashPlugin|analyse|static/sty3S-oKDfB9NdmMJRBYz/_ssgManifest.jsRealContentHashPlugin|analyse|static/sty3S-oKDfB9NdmMJRBYz/_buildManifest.jsRealContentHashPlugin|generate|static/sty3S-oKDfB9NdmMJRBYz/_buildManifest.jsMinifierWebpackPlugin|static/chunks/app/dashboard/page-6a9603810f640729.jsMinifierWebpackPlugin|static/fg5bcDpT8z2TnH3_Ok6kT/_ssgManifest.jsMinifierWebpackPlugin|static/fg5bcDpT8z2TnH3_Ok6kT/_buildManifest.jsRealContentHashPlugin|analyse|static/chunks/app/dashboard/page-6a9603810f640729.jsRealContentHashPlugin|analyse|static/fg5bcDpT8z2TnH3_Ok6kT/_ssgManifest.jsRealContentHashPlugin|analyse|static/fg5bcDpT8z2TnH3_Ok6kT/_buildManifest.jsRealContentHashPlugin|generate|static/fg5bcDpT8z2TnH3_Ok6kT/_buildManifest.jsMinifierWebpackPlugin|static/chunks/app/dashboard/page-3f267d9e2c1f2be3.jsMinifierWebpackPlugin|static/Qm5X11DG_eFhhQovjItXP/_ssgManifest.jsMinifierWebpackPlugin|static/Qm5X11DG_eFhhQovjItXP/_buildManifest.jsRealContentHashPlugin|analyse|static/chunks/app/dashboard/page-3f267d9e2c1f2be3.jsRealContentHashPlugin|analyse|static/Qm5X11DG_eFhhQovjItXP/_ssgManifest.jsRealContentHashPlugin|analyse|static/Qm5X11DG_eFhhQovjItXP/_buildManifest.jsRealContentHashPlugin|generate|static/Qm5X11DG_eFhhQovjItXP/_buildManifest.jsMinifierWebpackPlugin|static/kzy270SHtS7iBqaHWTSs7/_ssgManifest.jsMinifierWebpackPlugin|static/kzy270SHtS7iBqaHWTSs7/_buildManifest.jsRealContentHashPlugin|analyse|static/kzy270SHtS7iBqaHWTSs7/_ssgManifest.jsRealContentHashPlugin|analyse|static/kzy270SHtS7iBqaHWTSs7/_buildManifest.jsRealContentHashPlugin|generate|static/kzy270SHtS7iBqaHWTSs7/_buildManifest.jsMinifierWebpackPlugin|static/chunks/app/dashboard/page-b5699718a3b514fa.jsRealContentHashPlugin|analyse|static/chunks/app/dashboard/page-b5699718a3b514fa.jsMinifierWebpackPlugin|static/chunks/app/dashboard/page-13249de5af9f4d13.jsMinifierWebpackPlugin|static/uda0ZQtlx501_BmHJdoNN/_ssgManifest.jsMinifierWebpackPlugin|static/uda0ZQtlx501_BmHJdoNN/_buildManifest.jsRealContentHashPlugin|analyse|static/chunks/app/dashboard/page-13249de5af9f4d13.jsRealContentHashPlugin|analyse|static/uda0ZQtlx501_BmHJdoNN/_ssgManifest.jsRealContentHashPlugin|analyse|static/uda0ZQtlx501_BmHJdoNN/_buildManifest.jsRealContentHashPlugin|generate|static/uda0ZQtlx501_BmHJdoNN/_buildManifest.jsMinifierWebpackPlugin|static/kb92KMhyg4HgcUzPZYBSR/_ssgManifest.jsMinifierWebpackPlugin|static/kb92KMhyg4HgcUzPZYBSR/_buildManifest.jsRealContentHashPlugin|analyse|static/kb92KMhyg4HgcUzPZYBSR/_ssgManifest.jsRealContentHashPlugin|analyse|static/kb92KMhyg4HgcUzPZYBSR/_buildManifest.jsRealContentHashPlugin|generate|static/kb92KMhyg4HgcUzPZYBSR/_buildManifest.jsMinifierWebpackPlugin|static/chunks/app/dashboard/page-7c04b9a24b9d879e.jsMinifierWebpackPlugin|static/I1-3U3_abIqeH5ks1252c/_ssgManifest.jsMinifierWebpackPlugin|static/I1-3U3_abIqeH5ks1252c/_buildManifest.jsRealContentHashPlugin|analyse|static/chunks/app/dashboard/page-7c04b9a24b9d879e.jsRealContentHashPlugin|analyse|static/I1-3U3_abIqeH5ks1252c/_ssgManifest.jsRealContentHashPlugin|analyse|static/I1-3U3_abIqeH5ks1252c/_buildManifest.jsRealContentHashPlugin|generate|static/I1-3U3_abIqeH5ks1252c/_buildManifest.jssourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSourceMself.__SSG_MANIFEST=new Set,self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB(); Zself.__BUILD_MANIFEST=function(e,r,t,_){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},__routerFilterStatic:{numItems:24,errorRate:1e-4,numBits:461,numHashes:14,bitArray:[1,0,1,e,e,e,e,e,0,e,r,r,e,e,r,e,r,e,e,r,e,r,e,r,e,e,r,r,r,e,e,r,r,r,e,r,r,e,r,r,e,r,r,e,e,r,r,r,r,e,e,e,r,e,r,r,e,e,e,e,e,r,e,r,e,r,e,e,r,r,e,r,e,e,e,r,r,e,e,r,r,e,e,e,r,r,e,e,e,e,e,r,r,r,r,r,e,e,e,r,e,e,r,r,e,e,e,e,r,r,r,e,e,r,e,e,r,r,e,e,r,r,r,e,r,r,r,r,r,r,e,r,e,r,r,e,r,e,e,r,e,r,e,e,r,r,e,r,r,e,r,e,e,e,r,r,r,e,e,e,r,e,e,r,r,r,r,e,e,e,r,e,r,e,e,e,e,e,e,e,e,e,r,e,r,e,e,e,r,r,r,e,r,r,e,e,r,e,r,r,r,e,e,e,e,e,r,e,e,e,r,e,r,e,e,e,e,e,e,r,r,e,e,r,r,e,e,e,r,e,r,r,e,r,r,e,r,e,e,e,r,e,e,e,r,r,e,e,r,e,r,r,e,e,r,e,e,e,r,e,e,r,r,e,r,e,r,r,e,r,e,r,e,e,e,e,r,e,e,r,e,e,r,r,e,e,e,e,e,e,r,r,e,e,e,e,e,r,e,e,r,e,e,e,e,r,e,r,r,e,e,e,r,e,e,r,e,e,r,r,e,e,e,r,r,r,e,r,r,r,r,e,e,r,e,e,r,r,r,r,e,r,e,r,r,r,r,r,e,r,r,r,r,r,r,e,e,r,e,r,r,e,e,e,e,r,r,r,r,r,r,r,e,e,e,r,r,e,r,e,e,r,e,r,e,e,r,r,r,r,r,e,r,e,r,r,e,r,r,r,e,r,e,r,e,e,e,e,r,e,r,e,e,e,e,r,r,r,e,r,e,r,e,e,e,r,r,e,e,r,e,r,r,r,e,r,r,r,e,r,r,r,r,r,r,e,r,e,r,e,e,r,e,e,r,e,e,r,e,e,e]},__routerFilterDynamic:{numItems:7,errorRate:1e-4,numBits:135,numHashes:14,bitArray:[r,e,e,e,e,e,e,r,e,e,r,r,r,r,e,r,e,e,r,r,e,e,e,e,r,r,r,e,e,r,e,r,e,r,e,e,e,e,r,r,e,e,r,r,e,e,e,r,r,r,r,e,e,r,e,e,r,r,r,e,e,e,e,r,r,r,r,r,r,r,r,r,e,e,e,e,e,r,r,r,e,e,r,r,r,e,e,e,r,r,e,r,e,e,r,e,e,r,r,e,r,e,e,e,r,r,e,e,e,r,r,r,r,e,r,r,e,e,r,r,r,r,e,r,r,r,r,e,r,e,e,r,e,r,r]},"/_error":["static/chunks/pages/_error-adab2008ace8b58f.js"],sortedPages:["/_app","/_error"]}}(1,0,1e-4,14),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB(); adab2008ace8b58fZself.__BUILD_MANIFEST=function(e,r,t,_){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},__routerFilterStatic:{numItems:24,errorRate:1e-4,numBits:461,numHashes:14,bitArray:[1,0,1,e,e,e,e,e,0,e,r,r,e,e,r,e,r,e,e,r,e,r,e,r,e,e,r,r,r,e,e,r,r,r,e,r,r,e,r,r,e,r,r,e,e,r,r,r,r,e,e,e,r,e,r,r,e,e,e,e,e,r,e,r,e,r,e,e,r,r,e,r,e,e,e,r,r,e,e,r,r,e,e,e,r,r,e,e,e,e,e,r,r,r,r,r,e,e,e,r,e,e,r,r,e,e,e,e,r,r,r,e,e,r,e,e,r,r,e,e,r,r,r,e,r,r,r,r,r,r,e,r,e,r,r,e,r,e,e,r,e,r,e,e,r,r,e,r,r,e,r,e,e,e,r,r,r,e,e,e,r,e,e,r,r,r,r,e,e,e,r,e,r,e,e,e,e,e,e,e,e,e,r,e,r,e,e,e,r,r,r,e,r,r,e,e,r,e,r,r,r,e,e,e,e,e,r,e,e,e,r,e,r,e,e,e,e,e,e,r,r,e,e,r,r,e,e,e,r,e,r,r,e,r,r,e,r,e,e,e,r,e,e,e,r,r,e,e,r,e,r,r,e,e,r,e,e,e,r,e,e,r,r,e,r,e,r,r,e,r,e,r,e,e,e,e,r,e,e,r,e,e,r,r,e,e,e,e,e,e,r,r,e,e,e,e,e,r,e,e,r,e,e,e,e,r,e,r,r,e,e,e,r,e,e,r,e,e,r,r,e,e,e,r,r,r,e,r,r,r,r,e,e,r,e,e,r,r,r,r,e,r,e,r,r,r,r,r,e,r,r,r,r,r,r,e,e,r,e,r,r,e,e,e,e,r,r,r,r,r,r,r,e,e,e,r,r,e,r,e,e,r,e,r,e,e,r,r,r,r,r,e,r,e,r,r,e,r,r,r,e,r,e,r,e,e,e,e,r,e,r,e,e,e,e,r,r,r,e,r,e,r,e,e,e,r,r,e,e,r,e,r,r,r,e,r,r,r,e,r,r,r,r,r,r,e,r,e,r,e,e,r,e,e,r,e,e,r,e,e,e]},__routerFilterDynamic:{numItems:7,errorRate:1e-4,numBits:135,numHashes:14,bitArray:[r,e,e,e,e,e,e,r,e,e,r,r,r,r,e,r,e,e,r,r,e,e,e,e,r,r,r,e,e,r,e,r,e,r,e,e,e,e,r,r,e,e,r,r,e,e,e,r,r,r,r,e,e,r,e,e,r,r,r,e,e,e,e,r,r,r,r,r,r,r,r,r,e,e,e,e,e,r,r,r,e,e,r,r,r,e,e,e,r,r,e,r,e,e,r,e,e,r,r,e,r,e,e,e,r,r,e,e,e,r,r,r,r,e,r,r,e,e,r,r,r,r,e,r,r,r,r,e,r,e,e,r,e,r,r]},"/_error":["static/chunks/pages/_error-e4ba546eb376bdf4.js"],sortedPages:["/_app","/_error"]}}(1,0,1e-4,14),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();   Zself.__BUILD_MANIFEST=function(e,r,t,_){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},__routerFilterStatic:{numItems:24,errorRate:1e-4,numBits:461,numHashes:14,bitArray:[1,0,1,e,e,e,e,e,0,e,r,r,e,e,r,e,r,e,e,r,e,r,e,r,e,e,r,r,r,e,e,r,r,r,e,r,r,e,r,r,e,r,r,e,e,r,r,r,r,e,e,e,r,e,r,r,e,e,e,e,e,r,e,r,e,r,e,e,r,r,e,r,e,e,e,r,r,e,e,r,r,e,e,e,r,r,e,e,e,e,e,r,r,r,r,r,e,e,e,r,e,e,r,r,e,e,e,e,r,r,r,e,e,r,e,e,r,r,e,e,r,r,r,e,r,r,r,r,r,r,e,r,e,r,r,e,r,e,e,r,e,r,e,e,r,r,e,r,r,e,r,e,e,e,r,r,r,e,e,e,r,e,e,r,r,r,r,e,e,e,r,e,r,e,e,e,e,e,e,e,e,e,r,e,r,e,e,e,r,r,r,e,r,r,e,e,r,e,r,r,r,e,e,e,e,e,r,e,e,e,r,e,r,e,e,e,e,e,e,r,r,e,e,r,r,e,e,e,r,e,r,r,e,r,r,e,r,e,e,e,r,e,e,e,r,r,e,e,r,e,r,r,e,e,r,e,e,e,r,e,e,r,r,e,r,e,r,r,e,r,e,r,e,e,e,e,r,e,e,r,e,e,r,r,e,e,e,e,e,e,r,r,e,e,e,e,e,r,e,e,r,e,e,e,e,r,e,r,r,e,e,e,r,e,e,r,e,e,r,r,e,e,e,r,r,r,e,r,r,r,r,e,e,r,e,e,r,r,r,r,e,r,e,r,r,r,r,r,e,r,r,r,r,r,r,e,e,r,e,r,r,e,e,e,e,r,r,r,r,r,r,r,e,e,e,r,r,e,r,e,e,r,e,r,e,e,r,r,r,r,r,e,r,e,r,r,e,r,r,r,e,r,e,r,e,e,e,e,r,e,r,e,e,e,e,r,r,r,e,r,e,r,e,e,e,r,r,e,e,r,e,r,r,r,e,r,r,r,e,r,r,r,r,r,r,e,r,e,r,e,e,r,e,e,r,e,e,r,e,e,e]},__routerFilterDynamic:{numItems:7,errorRate:1e-4,numBits:135,numHashes:14,bitArray:[r,e,e,e,e,e,e,r,e,e,r,r,r,r,e,r,e,e,r,r,e,e,e,e,r,r,r,e,e,r,e,r,e,r,e,e,e,e,r,r,e,e,r,r,e,e,e,r,r,r,r,e,e,r,e,e,r,r,r,e,e,e,e,r,r,r,r,r,r,r,r,r,e,e,e,e,e,r,r,r,e,e,r,r,r,e,e,e,r,r,e,r,e,e,r,e,e,r,r,e,r,e,e,e,r,r,e,e,e,r,r,r,r,e,r,r,e,e,r,r,r,r,e,r,r,r,r,e,r,e,e,r,e,r,r]},"/_error":["static/chunks/pages/_error-e4ba546eb376bdf4.js"],sortedPages:["/_app","/_error"]}}(1,0,1e-4,14),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();          webpack/lib/NormalModule= /* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ // css base code, injected by the css-loader // eslint-disable-next-line func-names "use strict"; module.exports = function(useSourceMap) { var list = [] // return the list of modules as css string ; list.toString = function toString() { return this.map(function(item) { // eslint-disable-next-line @typescript-eslint/no-use-before-define var content = cssWithMappingToString(item, useSourceMap); if (item[2]) { return '@media '.concat(item[2], ' {').concat(content, '}'); } return content; }).join(''); } // import a list of modules into the list ; // eslint-disable-next-line func-names // @ts-expect-error TODO: fix type list.i = function(modules, mediaQuery, dedupe) { if (typeof modules === 'string') { // eslint-disable-next-line no-param-reassign modules = [ [ null, modules, '' ] ]; } var alreadyImportedModules = {}; if (dedupe) { for(var i = 0; i < this.length; i++){ // eslint-disable-next-line prefer-destructuring var id = this[i][0]; if (id != null) { alreadyImportedModules[id] = true; } } } for(var _i = 0; _i < modules.length; _i++){ var item = [].concat(modules[_i]); if (dedupe && alreadyImportedModules[item[0]]) { continue; } if (mediaQuery) { if (!item[2]) { item[2] = mediaQuery; } else { item[2] = ''.concat(mediaQuery, ' and ').concat(item[2]); } } list.push(item); } }; return list; }; function cssWithMappingToString(item, useSourceMap) { var content = item[1] || '' // eslint-disable-next-line prefer-destructuring ; var cssMapping = item[3]; if (!cssMapping) { return content; } if (useSourceMap && typeof btoa === 'function') { // eslint-disable-next-line @typescript-eslint/no-use-before-define var sourceMapping = toComment(cssMapping); var sourceURLs = cssMapping.sources.map(function(source) { return '/*# sourceURL='.concat(cssMapping.sourceRoot || '').concat(source, ' */'); }); return [ content ].concat(sourceURLs).concat([ sourceMapping ]).join('\n'); } return [ content ].join('\n'); } // Adapted from convert-source-map (MIT) function toComment(sourceMap) { // eslint-disable-next-line no-undef var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))); var data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,'.concat(base64); return '/*# '.concat(data, ' */'); } //# sourceMappingURL=api.js.map  javascript/autoC:\Users\abd_b\OneDrive\Desktop\COSMIC AI-Risk Dashboard\Step 12 is complete Final QA, Demo Readiness, and Submission Freeze\application\saas-app\node_modules\next\dist\build\webpack\loaders\css-loader\src\runtimealiasfullySpecifiedfallbackserver-only$client-only$next/dist/compiled/client-only$next/dist/compiled/server-onlynextnext/dist/compiled/server-only/indexnext/dist/compiled/client-only/indexC:\Users\abd_b\OneDrive\Desktop\COSMIC AI-Risk Dashboard\Step 12 is complete Final QA, Demo Readiness, and Submission Freeze\application\saas-app\node_modules\next `assertbufferconstantscryptodomainhttphttpsospathpunycodeprocessquerystringstreamstring_decodersystimersttyutilvmzlibeventssetImmediateC:\Users\abd_b\OneDrive\Desktop\COSMIC AI-Risk Dashboard\Step 12 is complete Final QA, Demo Readiness, and Submission Freeze\application\saas-app\node_modules\next\dist\compiled\assert\assert.jsC:\Users\abd_b\OneDrive\Desktop\COSMIC AI-Risk Dashboard\Step 12 is complete Final QA, Demo Readiness, and Submission Freeze\application\saas-app\node_modules\next\dist\compiled\buffer\index.jsC:\Users\abd_b\OneDrive\Desktop\COSMIC AI-Risk Dashboard\Step 12 is complete Final QA, Demo Readiness, and Submission Freeze\application\saas-app\node_modules\next\dist\compiled\constants-browserify\constants.jsonC:\Users\abd_b\OneDrive\Desktop\COSMIC AI-Risk Dashboard\Step 12 is complete Final QA, Demo Readiness, and Submission Freeze\application\saas-app\node_modules\next\dist\compiled\crypto-browserify\index.jsC:\Users\abd_b\OneDrive\Desktop\COSMIC AI-Risk Dashboard\Step 12 is complete Final QA, Demo Readiness, and Submission Freeze\application\saas-app\node_modules\next\dist\compiled\domain-browser\index.jsC:\Users\abd_b\OneDrive\Desktop\COSMIC AI-Risk Dashboard\Step 12 is complete Final QA, Demo Readiness, and Submission Freeze\application\saas-app\node_modules\next\dist\compiled\stream-http\index.jsC:\Users\abd_b\OneDrive\Desktop\COSMIC AI-Risk Dashboard\Step 12 is complete Final QA, Demo Readiness, and Submission Freeze\application\saas-app\node_modules\next\dist\compiled\https-browserify\index.jsC:\Users\abd_b\OneDrive\Desktop\COSMIC AI-Risk Dashboard\Step 12 is complete Final QA, Demo Readiness, and Submission Freeze\application\saas-app\node_modules\next\dist\compiled\os-browserify\browser.jsC:\Users\abd_b\OneDrive\Desktop\COSMIC AI-Risk Dashboard\Step 12 is complete Final QA, Demo Readiness, and Submission Freeze\application\saas-app\node_modules\next\dist\compiled\path-browserify\index.jsC:\Users\abd_b\OneDrive\Desktop\COSMIC AI-Risk Dashboard\Step 12 is complete Final QA, Demo Readiness, and Submission Freeze\application\saas-app\node_modules\next\dist\compiled\punycode\punycode.jsC:\Users\abd_b\OneDrive\Desktop\COSMIC AI-Risk Dashboard\Step 12 is complete Final QA, Demo Readiness, and Submission Freeze\application\saas-app\node_modules\next\dist\build\polyfills\process.jsC:\Users\abd_b\OneDrive\Desktop\COSMIC AI-Risk Dashboard\Step 12 is complete Final QA, Demo Readiness, and Submission Freeze\application\saas-app\node_modules\next\dist\compiled\querystring-es3\index.jsC:\Users\abd_b\OneDrive\Desktop\COSMIC AI-Risk Dashboard\Step 12 is complete Final QA, Demo Readiness, and Submission Freeze\application\saas-app\node_modules\next\dist\compiled\stream-browserify\index.jsC:\Users\abd_b\OneDrive\Desktop\COSMIC AI-Risk Dashboard\Step 12 is complete Final QA, Demo Readiness, and Submission Freeze\application\saas-app\node_modules\next\dist\compiled\string_decoder\string_decoder.jsC:\Users\abd_b\OneDrive\Desktop\COSMIC AI-Risk Dashboard\Step 12 is complete Final QA, Demo Readiness, and Submission Freeze\application\saas-app\node_modules\next\dist\compiled\util\util.jsC:\Users\abd_b\OneDrive\Desktop\COSMIC AI-Risk Dashboard\Step 12 is complete Final QA, Demo Readiness, and Submission Freeze\application\saas-app\node_modules\next\dist\compiled\timers-browserify\main.jsC:\Users\abd_b\OneDrive\Desktop\COSMIC AI-Risk Dashboard\Step 12 is complete Final QA, Demo Readiness, and Submission Freeze\application\saas-app\node_modules\next\dist\compiled\tty-browserify\index.jsC:\Users\abd_b\OneDrive\Desktop\COSMIC AI-Risk Dashboard\Step 12 is complete Final QA, Demo Readiness, and Submission Freeze\application\saas-app\node_modules\next\dist\compiled\vm-browserify\index.jsC:\Users\abd_b\OneDrive\Desktop\COSMIC AI-Risk Dashboard\Step 12 is complete Final QA, Demo Readiness, and Submission Freeze\application\saas-app\node_modules\next\dist\compiled\browserify-zlib\index.jsC:\Users\abd_b\OneDrive\Desktop\COSMIC AI-Risk Dashboard\Step 12 is complete Final QA, Demo Readiness, and Submission Freeze\application\saas-app\node_modules\next\dist\compiled\events\events.jsC:\Users\abd_b\OneDrive\Desktop\COSMIC AI-Risk Dashboard\Step 12 is complete Final QA, Demo Readiness, and Submission Freeze\application\saas-app\node_modules\next\dist\compiled\setimmediate\setImmediate.js` cacheableparsedfileDependenciescontextDependenciesmissingDependenciesbuildDependenciesvalueDependencieshashassetsassetsInfostricttopLevelDeclarationssnapshot webpack/DefinePlugin_hashff9a23f2114dae3efe1565e0 cssWithMappingToStringtoCommentwebpack/lib/FileSystemInfoSnapshot@ pKyBnext@15.5.20C:\Users\abd_b\OneDrive\Desktop\COSMIC AI-Risk Dashboard\Step 12 is complete Final QA, Demo Readiness, and Submission Freeze\application\saas-app\node_modules\next\dist\build\webpack\loaders\css-loader\src\runtime\api.jsC:\Users\abd_b\OneDrive\Desktop\COSMIC AI-Risk Dashboard\Step 12 is complete Final QA, Demo Readiness, and Submission Freeze\application\saas-app\node_modules\next\package.jsonwebpack/lib/dependencies/ConstDependencyA ` webpack/lib/dependencies/CommonJsSelfReferenceDependencyAmodule.exports`sourcesruntimeRequirementsdata javascriptwebpack/lib/util/registerExternalSerializerwebpack-sources/CachedSource  webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource= /* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ // css base code, injected by the css-loader // eslint-disable-next-line func-names "use strict"; module.exports = function(useSourceMap) { var list = [] // return the list of modules as css string ; list.toString = function toString() { return this.map(function(item) { // eslint-disable-next-line @typescript-eslint/no-use-before-define var content = cssWithMappingToString(item, useSourceMap); if (item[2]) { return '@media '.concat(item[2], ' {').concat(content, '}'); } return content; }).join(''); } // import a list of modules into the list ; // eslint-disable-next-line func-names // @ts-expect-error TODO: fix type list.i = function(modules, mediaQuery, dedupe) { if (typeof modules === 'string') { // eslint-disable-next-line no-param-reassign modules = [ [ null, modules, '' ] ]; } var alreadyImportedModules = {}; if (dedupe) { for(var i = 0; i < this.length; i++){ // eslint-disable-next-line prefer-destructuring var id = this[i][0]; if (id != null) { alreadyImportedModules[id] = true; } } } for(var _i = 0; _i < modules.length; _i++){ var item = [].concat(modules[_i]); if (dedupe && alreadyImportedModules[item[0]]) { continue; } if (mediaQuery) { if (!item[2]) { item[2] = mediaQuery; } else { item[2] = ''.concat(mediaQuery, ' and ').concat(item[2]); } } list.push(item); } }; return list; }; function cssWithMappingToString(item, useSourceMap) { var content = item[1] || '' // eslint-disable-next-line prefer-destructuring ; var cssMapping = item[3]; if (!cssMapping) { return content; } if (useSourceMap && typeof btoa === 'function') { // eslint-disable-next-line @typescript-eslint/no-use-before-define var sourceMapping = toComment(cssMapping); var sourceURLs = cssMapping.sources.map(function(source) { return '/*# sourceURL='.concat(cssMapping.sourceRoot || '').concat(source, ' */'); }); return [ content ].concat(sourceURLs).concat([ sourceMapping ]).join('\n'); } return [ content ].join('\n'); } // Adapted from convert-source-map (MIT) function toComment(sourceMap) { // eslint-disable-next-line no-undef var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))); var data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,'.concat(base64); return '/*# '.concat(data, ' */'); } //# sourceMappingURL=api.js.map A Vsizemaps0 /* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ // css base code, injected by the css-loader // eslint-disable-next-line func-names module.exports = function(useSourceMap) { var list = [] // return the list of modules as css string ; list.toString = function toString() { return this.map(function(item) { // eslint-disable-next-line @typescript-eslint/no-use-before-define var content = cssWithMappingToString(item, useSourceMap); if (item[2]) { return '@media '.concat(item[2], ' {').concat(content, '}'); } return content; }).join(''); } // import a list of modules into the list ; // eslint-disable-next-line func-names // @ts-expect-error TODO: fix type list.i = function(modules, mediaQuery, dedupe) { if (typeof modules === 'string') { // eslint-disable-next-line no-param-reassign modules = [ [ null, modules, '' ] ]; } var alreadyImportedModules = {}; if (dedupe) { for(var i = 0; i < this.length; i++){ // eslint-disable-next-line prefer-destructuring var id = this[i][0]; if (id != null) { alreadyImportedModules[id] = true; } } } for(var _i = 0; _i < modules.length; _i++){ var item = [].concat(modules[_i]); if (dedupe && alreadyImportedModules[item[0]]) { continue; } if (mediaQuery) { if (!item[2]) { item[2] = mediaQuery; } else { item[2] = ''.concat(mediaQuery, ' and ').concat(item[2]); } } list.push(item); } }; return list; }; function cssWithMappingToString(item, useSourceMap) { var content = item[1] || '' // eslint-disable-next-line prefer-destructuring ; var cssMapping = item[3]; if (!cssMapping) { return content; } if (useSourceMap && typeof btoa === 'function') { // eslint-disable-next-line @typescript-eslint/no-use-before-define var sourceMapping = toComment(cssMapping); var sourceURLs = cssMapping.sources.map(function(source) { return '/*# sourceURL='.concat(cssMapping.sourceRoot || '').concat(source, ' */'); }); return [ content ].concat(sourceURLs).concat([ sourceMapping ]).join('\n'); } return [ content ].join('\n'); } // Adapted from convert-source-map (MIT) function toComment(sourceMap) { // eslint-disable-next-line no-undef var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))); var data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,'.concat(base64); return '/*# '.concat(data, ' */'); } //# sourceMappingURL=api.js.map  module  runtime // getDefaultExport function for compatibility with non-harmony modules __webpack_require__.n = (module) => { var getter = module && module.__esModule ? () => (module['default']) : () => (module); __webpack_require__.d(getter, { a: getter }); return getter; };    // define __esModule on exports __webpack_require__.r = (exports) => { if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); } Object.defineProperty(exports, '__esModule', { value: true }); };    4// define getter functions for harmony exports __webpack_require__.d = (exports, definition) => { for(var key in definition) { if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); } } };    X__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))   9:  7; <I  ./  ,0 1>  # (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[879],{63:(e,t,i)=>{"use strict";var r=i(7260);i.o(r,"useRouter")&&i.d(t,{useRouter:function(){return r.useRouter}}),i.o(r,"useSearchParams")&&i.d(t,{useSearchParams:function(){return r.useSearchParams}})},774:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>s});var r=i(5155),a=i(2115),n=i(63);function s(){let e=(0,n.useRouter)(),[t,i]=(0,a.useState)(""),[s,o]=(0,a.useState)(""),[l,d]=(0,a.useState)(""),[u,c]=(0,a.useState)("");async function h(i){i.preventDefault(),c("");try{let i=await fetch("/api/auth/signup",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:t,displayName:s,password:l})});if(!i.ok){let e=await i.json();throw Error(e.error||"Signup failed")}e.push("/dashboard")}catch(e){c(e.message)}}return(0,r.jsx)("main",{className:"shell",style:{display:"flex",alignItems:"center",justifyContent:"center",minHeight:"100vh"},children:(0,r.jsxs)("div",{className:"panel",style:{maxWidth:420,width:"100%",padding:32},children:[(0,r.jsx)("div",{className:"brand",style:{fontSize:24,marginBottom:24,textAlign:"center"},children:"COSMIC AI-Risk SaaS"}),(0,r.jsx)("h2",{style:{marginBottom:8},children:"Create account"}),(0,r.jsx)("p",{className:"muted",style:{marginBottom:24},children:"Sign up for a new workspace"}),u&&(0,r.jsx)("div",{style:{background:"var(--blocked-soft)",color:"var(--blocked)",padding:"8px 12px",borderRadius:8,marginBottom:16,fontSize:14},children:u}),(0,r.jsxs)("form",{onSubmit:h,children:[(0,r.jsxs)("div",{style:{marginBottom:16},children:[(0,r.jsx)("label",{style:{display:"block",marginBottom:4,fontSize:14,fontWeight:600},children:"Email"}),(0,r.jsx)("input",{type:"email",value:t,onChange:e=>i(e.target.value),required:!0,style:{width:"100%",padding:"10px 12px",borderRadius:8,border:"1px solid var(--line)",fontSize:16,boxSizing:"border-box"}})]}),(0,r.jsxs)("div",{style:{marginBottom:16},children:[(0,r.jsx)("label",{style:{display:"block",marginBottom:4,fontSize:14,fontWeight:600},children:"Display name"}),(0,r.jsx)("input",{type:"text",value:s,onChange:e=>o(e.target.value),style:{width:"100%",padding:"10px 12px",borderRadius:8,border:"1px solid var(--line)",fontSize:16,boxSizing:"border-box"}})]}),(0,r.jsxs)("div",{style:{marginBottom:24},children:[(0,r.jsx)("label",{style:{display:"block",marginBottom:4,fontSize:14,fontWeight:600},children:"Password"}),(0,r.jsx)("input",{type:"password",value:l,onChange:e=>d(e.target.value),required:!0,minLength:8,style:{width:"100%",padding:"10px 12px",borderRadius:8,border:"1px solid var(--line)",fontSize:16,boxSizing:"border-box"}})]}),(0,r.jsx)("button",{type:"submit",className:"button primary",style:{width:"100%",padding:"12px 24px",fontSize:16},children:"Create account"})]}),(0,r.jsx)("p",{style:{marginTop:16,textAlign:"center",fontSize:14},children:(0,r.jsx)("a",{href:"/login",style:{color:"var(--green)"},children:"Already have an account?"})})]})})}},7880:(e,t,i)=>{Promise.resolve().then(i.bind(i,774))}},e=>{e.O(0,[8441,1255,7358],()=>e(e.s=7880)),_N_E=e.O()}]);    (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4520],{63:(e,t,s)=>{"use strict";var r=s(7260);s.o(r,"useRouter")&&s.d(t,{useRouter:function(){return r.useRouter}}),s.o(r,"useSearchParams")&&s.d(t,{useSearchParams:function(){return r.useSearchParams}})},2475:(e,t,s)=>{Promise.resolve().then(s.bind(s,9107))},9107:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>a});var r=s(5155),i=s(2115),n=s(63);function a(){let e=(0,n.useRouter)(),[t,s]=(0,i.useState)(""),[a,o]=(0,i.useState)(""),[l,d]=(0,i.useState)(""),[c,h]=(0,i.useState)(!1);async function u(s){s.preventDefault(),d("");try{let s=await fetch("/api/auth/login",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:t,password:a})});if(!s.ok){let e=await s.json();throw Error(e.error||"Login failed")}e.push("/dashboard")}catch(e){d(e.message)}}return(0,i.useEffect)(()=>{fetch("/api/auth/sso").then(e=>{501!==e.status&&h(!0)}).catch(()=>{})},[]),(0,r.jsx)("main",{className:"shell",style:{display:"flex",alignItems:"center",justifyContent:"center",minHeight:"100vh"},children:(0,r.jsxs)("div",{className:"panel",style:{maxWidth:420,width:"100%",padding:32},children:[(0,r.jsx)("div",{className:"brand",style:{fontSize:24,marginBottom:24,textAlign:"center"},children:"COSMIC AI-Risk SaaS"}),(0,r.jsx)("h2",{style:{marginBottom:8},children:"Sign in"}),(0,r.jsx)("p",{className:"muted",style:{marginBottom:24},children:"Enter your credentials to access the dashboard"}),l&&(0,r.jsx)("div",{style:{background:"var(--blocked-soft)",color:"var(--blocked)",padding:"8px 12px",borderRadius:8,marginBottom:16,fontSize:14},children:l}),(0,r.jsxs)("form",{onSubmit:u,children:[(0,r.jsxs)("div",{style:{marginBottom:16},children:[(0,r.jsx)("label",{style:{display:"block",marginBottom:4,fontSize:14,fontWeight:600},children:"Email"}),(0,r.jsx)("input",{type:"email",value:t,onChange:e=>s(e.target.value),required:!0,style:{width:"100%",padding:"10px 12px",borderRadius:8,border:"1px solid var(--line)",fontSize:16,boxSizing:"border-box"}})]}),(0,r.jsxs)("div",{style:{marginBottom:24},children:[(0,r.jsx)("label",{style:{display:"block",marginBottom:4,fontSize:14,fontWeight:600},children:"Password"}),(0,r.jsx)("input",{type:"password",value:a,onChange:e=>o(e.target.value),required:!0,style:{width:"100%",padding:"10px 12px",borderRadius:8,border:"1px solid var(--line)",fontSize:16,boxSizing:"border-box"}})]}),(0,r.jsx)("button",{type:"submit",className:"button primary",style:{width:"100%",padding:"12px 24px",fontSize:16},children:"Sign in"})]}),c&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:12,margin:"16px 0"},children:[(0,r.jsx)("hr",{style:{flex:1,border:"none",borderTop:"1px solid var(--line)"}}),(0,r.jsx)("span",{className:"muted",style:{fontSize:12},children:"OR"}),(0,r.jsx)("hr",{style:{flex:1,border:"none",borderTop:"1px solid var(--line)"}})]}),(0,r.jsx)("a",{href:"/api/auth/sso",className:"button secondary",style:{width:"100%",padding:"12px 24px",fontSize:16,textAlign:"center"},children:"Sign in with SSO"})]}),(0,r.jsx)("p",{style:{marginTop:16,textAlign:"center",fontSize:14},children:(0,r.jsx)("a",{href:"/signup",style:{color:"var(--green)"},children:"Create an account"})})]})})}}},e=>{e.O(0,[8441,1255,7358],()=>e(e.s=2475)),_N_E=e.O()}]);     '   U(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[95,146,273,1506,1596,1748,1754,2045,2382,2627,2772,3099,3140,3591,3657,3745,4119,4310,4840,5033,5051,5255,5298,5368,5722,6002,6539,6696,7042,7099,7758,8119,8156,8489,8591,8623,8673,8678,8887,8974,8999,9238,9457],{4441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=4441)),_N_E=_.O()}]);                                                                                      webpack/lib/util/registerExternalSerializerwebpack-sources/SourceMapSource:root{--bg:#f7faf9;--ink:#12201c;--muted:#61716b;--line:#dce7e2;--panel:#ffffff;--accent:#0f7a5f;--accent-strong:#075f49;--warn:#a15c00;--danger:#b42318}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font-family:Arial,Helvetica,sans-serif}a{color:inherit}.shell{min-height:100vh}.topbar{display:flex;justify-content:space-between;gap:24px;align-items:center;padding:18px 28px;border-bottom:1px solid var(--line);background:var(--panel)}.brand{font-weight:700;color:var(--accent-strong)}.nav{display:flex;gap:14px;color:var(--muted);font-size:14px}.hero{min-height:92vh;padding:64px 28px;display:grid;align-items:center;background:linear-gradient(rgba(247,250,249,.86),rgba(247,250,249,.96)),url(https://images.unsplash.com/photo-1451187580459-43490279c0fa?auto=format&fit=crop&w=1800&q=80);background-size:cover;background-position:50%}.content,.hero-inner{width:min(1180px,100%);margin:0 auto}.hero h1{margin:0 0 18px;max-width:780px;font-size:clamp(40px,7vw,86px);line-height:.98;letter-spacing:0}.hero p{max-width:680px;color:var(--muted);font-size:20px;line-height:1.5}.actions{display:flex;flex-wrap:wrap;gap:12px;margin-top:28px}.button{display:inline-flex;min-height:42px;align-items:center;justify-content:center;padding:0 16px;border:1px solid var(--accent);border-radius:6px;background:var(--accent);color:white;text-decoration:none;font-weight:700}.button.secondary{background:white;color:var(--accent-strong)}.content{padding:28px}.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));grid-gap:14px;gap:14px}.panel{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:18px}.panel h2,.panel h3{margin-top:0}.metric{font-size:34px;font-weight:800;color:var(--accent-strong)}.muted{color:var(--muted)}.table{width:100%;border-collapse:collapse}.table td,.table th{padding:10px;border-bottom:1px solid var(--line);text-align:left}.badge{display:inline-flex;border-radius:999px;padding:4px 9px;background:#e7f5ef;color:var(--accent-strong);font-size:12px;font-weight:700}@media (max-width:720px){.topbar{align-items:flex-start;flex-direction:column}}.app-shell{display:flex;min-height:100vh}.sidebar-toggle{display:none;position:fixed;top:12px;left:12px;z-index:100;background:var(--panel);border:1px solid var(--line);border-radius:6px;padding:8px 12px;font-size:18px;cursor:pointer}.sidebar{width:220px;background:var(--panel);border-right:1px solid var(--line);display:flex;flex-direction:column;flex-shrink:0}.sidebar-brand{padding:20px 18px 12px;font-weight:800;font-size:18px;color:var(--accent-strong);letter-spacing:-.03em}.sidebar-user{padding:0 18px 16px;border-bottom:1px solid var(--line)}.sidebar-user-name{font-weight:600;font-size:13px}.sidebar-user-email{font-size:11px;color:var(--muted);overflow:hidden;text-overflow:ellipsis}.sidebar-nav{flex:1 1;padding:8px;display:flex;flex-direction:column;gap:2px}.sidebar-link{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:6px;text-decoration:none;font-size:14px;font-weight:500;color:var(--muted);transition:all .15s}.sidebar-link:hover{background:#eef6f3;color:var(--ink)}.sidebar-link.active{background:#e0f0ea;color:var(--accent-strong);font-weight:700}.sidebar-icon{width:20px;text-align:center;font-size:16px}.sidebar-footer{padding:8px;border-top:1px solid var(--line)}.sidebar-logout{width:100%;padding:10px 12px;border:none;border-radius:6px;background:transparent;color:var(--muted);font-size:14px;cursor:pointer;text-align:left}.sidebar-logout:hover{background:#fef2f0;color:var(--danger)}.sidebar-overlay{display:none}.app-main{flex:1 1;min-width:0;padding:24px 28px}.shell-loading{display:flex;align-items:center;justify-content:center;min-height:100vh}.spinner{width:32px;height:32px;border:3px solid var(--line);border-top-color:var(--accent);border-radius:50%;animation:spin .6s linear infinite}@keyframes spin{to{transform:rotate(1turn)}}@media (max-width:768px){.sidebar-toggle{display:block}.sidebar{position:fixed;top:0;left:0;bottom:0;z-index:99;transform:translateX(-100%);transition:transform .2s}.sidebar.open{transform:translateX(0)}.sidebar-overlay{display:block;position:fixed;inset:0;background:rgba(0,0,0,.3);z-index:98}.app-main{padding:16px}}.tabs{display:flex;gap:0;border-bottom:2px solid var(--line);margin-bottom:24px}.tab{padding:10px 20px;background:transparent;color:var(--muted);font-size:14px;font-weight:600;cursor:pointer;border:none;border-bottom:2px solid transparent;margin-bottom:-2px;transition:all .15s}.tab:hover{color:var(--ink)}.tab.active{color:var(--accent-strong);border-bottom-color:var(--accent-strong)}.dash-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:24px}.dash-header h1{margin:0;font-size:24px}.dash-header .muted{margin:2px 0 0;font-size:13px}.dash-actions{display:flex;gap:8px}.metric-card{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:20px}.metric-card h3{margin:0 0 8px;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}.metric-value{font-size:32px;font-weight:800;line-height:1}.metric-value.good{color:var(--green,#0f7a5f)}.metric-value.warn{color:var(--warn)}.metric-value.bad{color:var(--danger)}.metric-sub{font-size:12px;color:var(--muted);margin-top:4px}.table-wrap{overflow-x:auto}.table th{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);white-space:nowrap}.table td{font-size:13px}.table tbody tr:hover{background:#f0f7f4}.table tbody tr{cursor:pointer;transition:background .1s}.table .sortable{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.table .sortable:hover{color:var(--ink)}.bar-wrap{height:8px;background:var(--line);border-radius:4px;overflow:hidden}.bar-fill{height:100%;border-radius:4px;transition:width .3s}.badge.open{background:#fef3e7;color:var(--warn)}.badge.in-mitigation{background:#e7f0ff;color:#0055cc}.badge.accepted{background:#e7f5ef;color:var(--accent-strong)}.badge.closed{background:#e5e9e7;color:var(--muted)}.badge.pass{background:#e7f5ef;color:var(--accent-strong)}.badge.warning{background:#fef3e7;color:var(--warn)}.badge.blocked{background:#fef0ef;color:var(--danger)}.badge.not-started{background:#f0f2f1;color:var(--muted)}.badge.in-progress{background:#e7f0ff;color:#0055cc}.badge.done{background:#e7f5ef;color:var(--accent-strong)}.badge.rejected{background:#fef0ef;color:var(--danger)}.badge.approved{background:#e7f5ef;color:var(--accent-strong)}.badge.pending{background:#fef3e7;color:var(--warn)}.input,.select{width:100%;padding:8px 12px;border:1px solid var(--line);border-radius:6px;font-size:13px;background:var(--panel);color:var(--ink)}.input:focus,.select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 2px rgba(15,122,95,.15)}.select{cursor:pointer}.search-wrap{position:relative;margin-bottom:16px}.search-wrap .input{padding-left:32px}.search-icon{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--muted);font-size:14px}.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.4);display:flex;align-items:center;justify-content:center;z-index:200;padding:20px}.modal{background:var(--panel);border-radius:12px;padding:24px;width:100%;max-width:520px;max-height:80vh;overflow-y:auto;box-shadow:0 8px 32px rgba(0,0,0,.12)}.modal h2{margin:0 0 16px;font-size:18px}.modal-actions{display:flex;gap:8px;justify-content:flex-end;margin-top:20px}.toast-container{position:fixed;bottom:20px;right:20px;z-index:300;display:flex;flex-direction:column;gap:8px}.toast{padding:12px 20px;border-radius:8px;font-size:13px;font-weight:600;box-shadow:0 4px 16px rgba(0,0,0,.1);animation:slideUp .2s ease}.toast.success{background:#e7f5ef;color:var(--accent-strong);border:1px solid #b8d9cc}.toast.error{background:#fef0ef;color:var(--danger);border:1px solid #f5c6c0}@keyframes slideUp{0%{transform:translateY(20px);opacity:0}to{transform:translateY(0);opacity:1}}.empty-state{text-align:center;padding:48px 24px;color:var(--muted)}.empty-state .empty-icon{font-size:40px;margin-bottom:12px}.empty-state p{margin:0}static/css/e8f5205552323513.css:{"version":3,"sources":["e8f5205552323513.css"],"names":[],"mappings":"AAAA,MACE,YAAa,CACb,aAAc,CACd,eAAgB,CAChB,cAAe,CACf,eAAgB,CAChB,gBAAiB,CACjB,uBAAwB,CACxB,cAAe,CACf,gBACF,CAEA,EACE,qBACF,CAEA,KACE,QAAS,CACT,oBAAqB,CACrB,gBAAiB,CACjB,sCACF,CAEA,EACE,aACF,CAEA,OACE,gBACF,CAEA,QACE,YAAa,CACb,6BAA8B,CAC9B,QAAS,CACT,kBAAmB,CACnB,iBAAkB,CAClB,mCAAoC,CACpC,uBACF,CAEA,OACE,eAAgB,CAChB,0BACF,CAEA,KACE,YAAa,CACb,QAAS,CACT,kBAAmB,CACnB,cACF,CAEA,MACE,eAAgB,CAChB,iBAAkB,CAClB,YAAa,CACb,kBAAmB,CACnB,0KAEsG,CACtG,qBAAsB,CACtB,uBACF,CAEA,qBAEE,sBAAwB,CACxB,aACF,CAEA,SACE,eAAgB,CAChB,eAAgB,CAChB,8BAAiC,CACjC,eAAiB,CACjB,gBACF,CAEA,QACE,eAAgB,CAChB,kBAAmB,CACnB,cAAe,CACf,eACF,CAEA,SACE,YAAa,CACb,cAAe,CACf,QAAS,CACT,eACF,CAEA,QACE,mBAAoB,CACpB,eAAgB,CAChB,kBAAmB,CACnB,sBAAuB,CACvB,cAAe,CACf,8BAA+B,CAC/B,iBAAkB,CAClB,wBAAyB,CACzB,WAAY,CACZ,oBAAqB,CACrB,eACF,CAEA,kBACE,gBAAiB,CACjB,0BACF,CAEA,SACE,YACF,CAEA,MACE,YAAa,CACb,wDAA2D,CAC3D,aAAc,CACd,QACF,CAEA,OACE,uBAAwB,CACxB,4BAA6B,CAC7B,iBAAkB,CAClB,YACF,CAEA,oBAEE,YACF,CAEA,QACE,cAAe,CACf,eAAgB,CAChB,0BACF,CAEA,OACE,kBACF,CAEA,OACE,UAAW,CACX,wBACF,CAEA,oBAEE,YAAa,CACb,mCAAoC,CACpC,eACF,CAEA,OACE,mBAAoB,CACpB,mBAAoB,CACpB,eAAgB,CAChB,kBAAmB,CACnB,0BAA2B,CAC3B,cAAe,CACf,eACF,CAEA,yBACE,QACE,sBAAuB,CACvB,qBACF,CACF,CAGA,WAAa,YAAa,CAAE,gBAAmB,CAC/C,gBAAkB,YAAa,CAAE,cAAe,CAAE,QAAS,CAAE,SAAU,CAAE,WAAY,CAAE,uBAAwB,CAAE,4BAA6B,CAAE,iBAAkB,CAAE,gBAAiB,CAAE,cAAe,CAAE,cAAiB,CACzN,SAAW,WAAY,CAAE,uBAAwB,CAAE,kCAAmC,CAAE,YAAa,CAAE,qBAAsB,CAAE,aAAgB,CAC/I,eAAiB,sBAAuB,CAAE,eAAgB,CAAE,cAAe,CAAE,0BAA2B,CAAE,qBAAyB,CACnI,cAAgB,mBAAoB,CAAE,mCAAsC,CAC5E,mBAAqB,eAAgB,CAAE,cAAiB,CACxD,oBAAsB,cAAe,CAAE,kBAAmB,CAAE,eAAgB,CAAE,sBAAyB,CACvG,aAAe,QAAS,CAAE,WAAY,CAAE,YAAa,CAAE,qBAAsB,CAAE,OAAU,CACzF,cAAgB,YAAa,CAAE,kBAAmB,CAAE,QAAS,CAAE,iBAAkB,CAAE,iBAAkB,CAAE,oBAAqB,CAAE,cAAe,CAAE,eAAgB,CAAE,kBAAmB,CAAE,mBAAuB,CAC7M,oBAAsB,kBAAmB,CAAE,gBAAmB,CAC9D,qBAAuB,kBAAmB,CAAE,0BAA2B,CAAE,eAAkB,CAC3F,cAAgB,UAAW,CAAE,iBAAkB,CAAE,cAAiB,CAClE,gBAAkB,WAAY,CAAE,gCAAmC,CACnE,gBAAkB,UAAW,CAAE,iBAAkB,CAAE,WAAY,CAAE,iBAAkB,CAAE,sBAAuB,CAAE,kBAAmB,CAAE,cAAe,CAAE,cAAe,CAAE,eAAkB,CACvL,sBAAwB,kBAAmB,CAAE,mBAAsB,CACnE,iBAAmB,YAAe,CAClC,UAAY,QAAS,CAAE,WAAY,CAAE,iBAAoB,CACzD,eAAiB,YAAa,CAAE,kBAAmB,CAAE,sBAAuB,CAAE,gBAAmB,CACjG,SAAW,UAAW,CAAE,WAAY,CAAiC,4BAA+B,CAA/B,8BAA+B,CAAE,iBAAkB,CAAE,kCAAsC,CAChK,gBAAkB,GAAK,uBAA2B,CAAE,CAEpD,yBACE,gBAAkB,aAAgB,CAClC,SAAW,cAAe,CAAE,KAAM,CAAE,MAAO,CAAE,QAAS,CAAE,UAAW,CAAE,2BAA4B,CAAE,wBAA4B,CAC/H,cAAgB,uBAA0B,CAC1C,iBAAmB,aAAc,CAAE,cAAe,CAAE,OAAQ,CAAE,yBAA2B,CAAE,UAAa,CACxG,UAAY,YAAe,CAC7B,CAGA,MAAQ,YAAa,CAAE,KAAM,CAAE,mCAAoC,CAAE,kBAAqB,CAC1F,KAAO,iBAAkB,CAAgB,sBAAuB,CAAE,kBAAmB,CAAE,cAAe,CAAE,eAAgB,CAAE,cAAe,CAAE,WAAoC,CAApC,mCAAoC,CAAE,kBAAmB,CAAE,mBAAuB,CAC7N,WAAa,gBAAmB,CAChC,YAAc,0BAA2B,CAAE,wCAA2C,CAGtF,aAAe,YAAa,CAAE,6BAA8B,CAAE,sBAAuB,CAAE,kBAAqB,CAC5G,gBAAkB,QAAS,CAAE,cAAiB,CAC9C,oBAAsB,cAAe,CAAE,cAAiB,CACxD,cAAgB,YAAa,CAAE,OAAU,CAGzC,aAAe,uBAAwB,CAAE,4BAA6B,CAAE,iBAAkB,CAAE,YAAe,CAC3G,gBAAkB,cAAe,CAAE,cAAe,CAAE,eAAgB,CAAE,wBAAyB,CAAE,oBAAsB,CAAE,kBAAqB,CAC9I,cAAgB,cAAe,CAAE,eAAgB,CAAE,aAAgB,CACnE,mBAAqB,0BAA8B,CACnD,mBAAqB,iBAAoB,CACzC,kBAAoB,mBAAsB,CAC1C,YAAc,cAAe,CAAE,kBAAmB,CAAE,cAAiB,CAGrE,YAAc,eAAkB,CAChC,UAAY,cAAe,CAAE,eAAgB,CAAE,wBAAyB,CAAE,oBAAsB,CAAE,kBAAmB,CAAE,kBAAqB,CAC5I,UAAY,cAAiB,CAC7B,sBAAwB,kBAAqB,CAC7C,gBAAkB,cAAe,CAAE,yBAA6B,CAChE,iBAAmB,cAAe,CAAE,wBAAyB,CAAE,qBAAsB,CAAE,gBAAmB,CAC1G,uBAAyB,gBAAmB,CAG5C,UAAY,UAAW,CAAE,sBAAuB,CAAE,iBAAkB,CAAE,eAAkB,CACxF,UAAY,WAAY,CAAE,iBAAkB,CAAE,oBAAwB,CAGtE,YAAc,kBAAmB,CAAE,iBAAoB,CACvD,qBAAuB,kBAAmB,CAAE,aAAgB,CAC5D,gBAAkB,kBAAmB,CAAE,0BAA6B,CACpE,cAAgB,kBAAmB,CAAE,kBAAqB,CAC1D,YAAc,kBAAmB,CAAE,0BAA6B,CAChE,eAAiB,kBAAmB,CAAE,iBAAoB,CAC1D,eAAiB,kBAAmB,CAAE,mBAAsB,CAC5D,mBAAqB,kBAAmB,CAAE,kBAAqB,CAC/D,mBAAqB,kBAAmB,CAAE,aAAgB,CAC1D,YAAc,kBAAmB,CAAE,0BAA6B,CAChE,gBAAkB,kBAAmB,CAAE,mBAAsB,CAC7D,gBAAkB,kBAAmB,CAAE,0BAA6B,CACpE,eAAiB,kBAAmB,CAAE,iBAAoB,CAG1D,eAAkB,UAAW,CAAE,gBAAiB,CAAE,4BAA6B,CAAE,iBAAkB,CAAE,cAAe,CAAE,uBAAwB,CAAE,gBAAmB,CACnK,2BAA8B,YAAa,CAAE,0BAA2B,CAAE,wCAA4C,CACtH,QAAU,cAAiB,CAC3B,aAAe,iBAAkB,CAAE,kBAAqB,CACxD,oBAAsB,iBAAoB,CAC1C,aAAe,iBAAkB,CAAE,SAAU,CAAE,OAAQ,CAAE,0BAA2B,CAAE,kBAAmB,CAAE,cAAiB,CAG5H,eAAiB,cAAe,CAAE,OAAQ,CAAE,yBAA2B,CAAE,YAAa,CAAE,kBAAmB,CAAE,sBAAuB,CAAE,WAAY,CAAE,YAAe,CACnK,OAAS,uBAAwB,CAAE,kBAAmB,CAAE,YAAa,CAAE,UAAW,CAAE,eAAgB,CAAE,eAAgB,CAAE,eAAgB,CAAE,qCAAyC,CACnL,UAAY,eAAgB,CAAE,cAAiB,CAC/C,eAAiB,YAAa,CAAE,OAAQ,CAAE,wBAAyB,CAAE,eAAkB,CAGvF,iBAAmB,cAAe,CAAE,WAAY,CAAE,UAAW,CAAE,WAAY,CAAE,YAAa,CAAE,qBAAsB,CAAE,OAAU,CAC9H,OAAS,iBAAkB,CAAE,iBAAkB,CAAE,cAAe,CAAE,eAAgB,CAAE,oCAAsC,CAAE,0BAA8B,CAC1J,eAAiB,kBAAmB,CAAE,0BAA2B,CAAE,wBAA2B,CAC9F,aAAe,kBAAmB,CAAE,mBAAoB,CAAE,wBAA2B,CACrF,mBAAqB,GAAO,0BAA2B,CAAE,SAAY,CAAE,GAAK,uBAAwB,CAAE,SAAY,CAAE,CAGpH,aAAe,iBAAkB,CAAE,iBAAkB,CAAE,kBAAqB,CAC5E,yBAA2B,cAAe,CAAE,kBAAqB,CACjE,eAAiB,QAAW","file":"e8f5205552323513.css","sourcesContent":[":root {\n --bg: #f7faf9;\n --ink: #12201c;\n --muted: #61716b;\n --line: #dce7e2;\n --panel: #ffffff;\n --accent: #0f7a5f;\n --accent-strong: #075f49;\n --warn: #a15c00;\n --danger: #b42318;\n}\n\n* {\n box-sizing: border-box;\n}\n\nbody {\n margin: 0;\n background: var(--bg);\n color: var(--ink);\n font-family: Arial, Helvetica, sans-serif;\n}\n\na {\n color: inherit;\n}\n\n.shell {\n min-height: 100vh;\n}\n\n.topbar {\n display: flex;\n justify-content: space-between;\n gap: 24px;\n align-items: center;\n padding: 18px 28px;\n border-bottom: 1px solid var(--line);\n background: var(--panel);\n}\n\n.brand {\n font-weight: 700;\n color: var(--accent-strong);\n}\n\n.nav {\n display: flex;\n gap: 14px;\n color: var(--muted);\n font-size: 14px;\n}\n\n.hero {\n min-height: 92vh;\n padding: 64px 28px;\n display: grid;\n align-items: center;\n background:\n linear-gradient(rgba(247, 250, 249, 0.86), rgba(247, 250, 249, 0.96)),\n url(\"https://images.unsplash.com/photo-1451187580459-43490279c0fa?auto=format&fit=crop&w=1800&q=80\");\n background-size: cover;\n background-position: center;\n}\n\n.hero-inner,\n.content {\n width: min(1180px, 100%);\n margin: 0 auto;\n}\n\n.hero h1 {\n margin: 0 0 18px;\n max-width: 780px;\n font-size: clamp(40px, 7vw, 86px);\n line-height: 0.98;\n letter-spacing: 0;\n}\n\n.hero p {\n max-width: 680px;\n color: var(--muted);\n font-size: 20px;\n line-height: 1.5;\n}\n\n.actions {\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n margin-top: 28px;\n}\n\n.button {\n display: inline-flex;\n min-height: 42px;\n align-items: center;\n justify-content: center;\n padding: 0 16px;\n border: 1px solid var(--accent);\n border-radius: 6px;\n background: var(--accent);\n color: white;\n text-decoration: none;\n font-weight: 700;\n}\n\n.button.secondary {\n background: white;\n color: var(--accent-strong);\n}\n\n.content {\n padding: 28px;\n}\n\n.grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\n grid-gap: 14px;\n gap: 14px;\n}\n\n.panel {\n background: var(--panel);\n border: 1px solid var(--line);\n border-radius: 8px;\n padding: 18px;\n}\n\n.panel h2,\n.panel h3 {\n margin-top: 0;\n}\n\n.metric {\n font-size: 34px;\n font-weight: 800;\n color: var(--accent-strong);\n}\n\n.muted {\n color: var(--muted);\n}\n\n.table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.table th,\n.table td {\n padding: 10px;\n border-bottom: 1px solid var(--line);\n text-align: left;\n}\n\n.badge {\n display: inline-flex;\n border-radius: 999px;\n padding: 4px 9px;\n background: #e7f5ef;\n color: var(--accent-strong);\n font-size: 12px;\n font-weight: 700;\n}\n\n@media (max-width: 720px) {\n .topbar {\n align-items: flex-start;\n flex-direction: column;\n }\n}\n\n/* ── App Shell ── */\n.app-shell { display: flex; min-height: 100vh; }\n.sidebar-toggle { display: none; position: fixed; top: 12px; left: 12px; z-index: 100; background: var(--panel); border: 1px solid var(--line); border-radius: 6px; padding: 8px 12px; font-size: 18px; cursor: pointer; }\n.sidebar { width: 220px; background: var(--panel); border-right: 1px solid var(--line); display: flex; flex-direction: column; flex-shrink: 0; }\n.sidebar-brand { padding: 20px 18px 12px; font-weight: 800; font-size: 18px; color: var(--accent-strong); letter-spacing: -0.03em; }\n.sidebar-user { padding: 0 18px 16px; border-bottom: 1px solid var(--line); }\n.sidebar-user-name { font-weight: 600; font-size: 13px; }\n.sidebar-user-email { font-size: 11px; color: var(--muted); overflow: hidden; text-overflow: ellipsis; }\n.sidebar-nav { flex: 1 1; padding: 8px; display: flex; flex-direction: column; gap: 2px; }\n.sidebar-link { display: flex; align-items: center; gap: 10px; padding: 10px 12px; border-radius: 6px; text-decoration: none; font-size: 14px; font-weight: 500; color: var(--muted); transition: all 0.15s; }\n.sidebar-link:hover { background: #eef6f3; color: var(--ink); }\n.sidebar-link.active { background: #e0f0ea; color: var(--accent-strong); font-weight: 700; }\n.sidebar-icon { width: 20px; text-align: center; font-size: 16px; }\n.sidebar-footer { padding: 8px; border-top: 1px solid var(--line); }\n.sidebar-logout { width: 100%; padding: 10px 12px; border: none; border-radius: 6px; background: transparent; color: var(--muted); font-size: 14px; cursor: pointer; text-align: left; }\n.sidebar-logout:hover { background: #fef2f0; color: var(--danger); }\n.sidebar-overlay { display: none; }\n.app-main { flex: 1 1; min-width: 0; padding: 24px 28px; }\n.shell-loading { display: flex; align-items: center; justify-content: center; min-height: 100vh; }\n.spinner { width: 32px; height: 32px; border: 3px solid var(--line); border-top-color: var(--accent); border-radius: 50%; animation: spin 0.6s linear infinite; }\n@keyframes spin { to { transform: rotate(360deg); } }\n\n@media (max-width: 768px) {\n .sidebar-toggle { display: block; }\n .sidebar { position: fixed; top: 0; left: 0; bottom: 0; z-index: 99; transform: translateX(-100%); transition: transform 0.2s; }\n .sidebar.open { transform: translateX(0); }\n .sidebar-overlay { display: block; position: fixed; inset: 0; background: rgba(0,0,0,0.3); z-index: 98; }\n .app-main { padding: 16px; }\n}\n\n/* ── Tabs ── */\n.tabs { display: flex; gap: 0; border-bottom: 2px solid var(--line); margin-bottom: 24px; }\n.tab { padding: 10px 20px; border: none; background: transparent; color: var(--muted); font-size: 14px; font-weight: 600; cursor: pointer; border-bottom: 2px solid transparent; margin-bottom: -2px; transition: all 0.15s; }\n.tab:hover { color: var(--ink); }\n.tab.active { color: var(--accent-strong); border-bottom-color: var(--accent-strong); }\n\n/* ── Dashboard header ── */\n.dash-header { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 24px; }\n.dash-header h1 { margin: 0; font-size: 24px; }\n.dash-header .muted { margin: 2px 0 0; font-size: 13px; }\n.dash-actions { display: flex; gap: 8px; }\n\n/* ── Metric panels ── */\n.metric-card { background: var(--panel); border: 1px solid var(--line); border-radius: 8px; padding: 20px; }\n.metric-card h3 { margin: 0 0 8px; font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; color: var(--muted); }\n.metric-value { font-size: 32px; font-weight: 800; line-height: 1; }\n.metric-value.good { color: var(--green, #0f7a5f); }\n.metric-value.warn { color: var(--warn); }\n.metric-value.bad { color: var(--danger); }\n.metric-sub { font-size: 12px; color: var(--muted); margin-top: 4px; }\n\n/* ── Interactive table ── */\n.table-wrap { overflow-x: auto; }\n.table th { font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; color: var(--muted); white-space: nowrap; }\n.table td { font-size: 13px; }\n.table tbody tr:hover { background: #f0f7f4; }\n.table tbody tr { cursor: pointer; transition: background 0.1s; }\n.table .sortable { cursor: pointer; -webkit-user-select: none; -moz-user-select: none; user-select: none; }\n.table .sortable:hover { color: var(--ink); }\n\n/* ── Bar ── */\n.bar-wrap { height: 8px; background: var(--line); border-radius: 4px; overflow: hidden; }\n.bar-fill { height: 100%; border-radius: 4px; transition: width 0.3s; }\n\n/* ── Status badges ── */\n.badge.open { background: #fef3e7; color: var(--warn); }\n.badge.in-mitigation { background: #e7f0ff; color: #0055cc; }\n.badge.accepted { background: #e7f5ef; color: var(--accent-strong); }\n.badge.closed { background: #e5e9e7; color: var(--muted); }\n.badge.pass { background: #e7f5ef; color: var(--accent-strong); }\n.badge.warning { background: #fef3e7; color: var(--warn); }\n.badge.blocked { background: #fef0ef; color: var(--danger); }\n.badge.not-started { background: #f0f2f1; color: var(--muted); }\n.badge.in-progress { background: #e7f0ff; color: #0055cc; }\n.badge.done { background: #e7f5ef; color: var(--accent-strong); }\n.badge.rejected { background: #fef0ef; color: var(--danger); }\n.badge.approved { background: #e7f5ef; color: var(--accent-strong); }\n.badge.pending { background: #fef3e7; color: var(--warn); }\n\n/* ── Inputs ── */\n.input, .select { width: 100%; padding: 8px 12px; border: 1px solid var(--line); border-radius: 6px; font-size: 13px; background: var(--panel); color: var(--ink); }\n.input:focus, .select:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 2px rgba(15,122,95,0.15); }\n.select { cursor: pointer; }\n.search-wrap { position: relative; margin-bottom: 16px; }\n.search-wrap .input { padding-left: 32px; }\n.search-icon { position: absolute; left: 10px; top: 50%; transform: translateY(-50%); color: var(--muted); font-size: 14px; }\n\n/* ── Modal ── */\n.modal-overlay { position: fixed; inset: 0; background: rgba(0,0,0,0.4); display: flex; align-items: center; justify-content: center; z-index: 200; padding: 20px; }\n.modal { background: var(--panel); border-radius: 12px; padding: 24px; width: 100%; max-width: 520px; max-height: 80vh; overflow-y: auto; box-shadow: 0 8px 32px rgba(0,0,0,0.12); }\n.modal h2 { margin: 0 0 16px; font-size: 18px; }\n.modal-actions { display: flex; gap: 8px; justify-content: flex-end; margin-top: 20px; }\n\n/* ── Toast ── */\n.toast-container { position: fixed; bottom: 20px; right: 20px; z-index: 300; display: flex; flex-direction: column; gap: 8px; }\n.toast { padding: 12px 20px; border-radius: 8px; font-size: 13px; font-weight: 600; box-shadow: 0 4px 16px rgba(0,0,0,0.1); animation: slideUp 0.2s ease; }\n.toast.success { background: #e7f5ef; color: var(--accent-strong); border: 1px solid #b8d9cc; }\n.toast.error { background: #fef0ef; color: var(--danger); border: 1px solid #f5c6c0; }\n@keyframes slideUp { from { transform: translateY(20px); opacity: 0; } to { transform: translateY(0); opacity: 1; } }\n\n/* ── Empty state ── */\n.empty-state { text-align: center; padding: 48px 24px; color: var(--muted); }\n.empty-state .empty-icon { font-size: 40px; margin-bottom: 12px; }\n.empty-state p { margin: 0; }\n\n"]}   webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSourceO__webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ DashboardPage) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5155); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2115); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(63); /* harmony import */ var _lib_api_client__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6282); webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSource/* __next_internal_client_entry_do_not_use__ default auto */ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime"; import { useEffect, useState, useCallback, useMemo } from 'react'; import { useRouter } from 'next/navigation'; import { api } from '../../lib/api-client'; const TABS = [ 'Overview', 'Risks', 'Mitigations', 'Gate', 'Integrations' ]; const PAGE_SIZE = 20; function useToast() { const [toasts, setToasts] = useState([]); const add = useCallback(function(message) { let type = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 'success'; const id = Date.now() + Math.random(); setToasts((prev)=>[ ...prev, { id, message, type } ]); setTimeout(()=>setToasts((prev)=>prev.filter((t)=>t.id !== id)), 3000); }, []); return { toasts, add }; } function ToastContainer(param) { let { toasts } = param; if (!toasts.length) return null; return /*#__PURE__*/ _jsx("div", { className: "toast-container", children: toasts.map((t)=>/*#__PURE__*/ _jsx("div", { className: "toast ".concat(t.type), children: t.message }, t.id)) }); } function SearchInput(param) { let { value, onChange, placeholder } = param; return /*#__PURE__*/ _jsxs("div", { className: "search-wrap", children: [ /*#__PURE__*/ _jsx("span", { className: "search-icon", children: "⌕" }), /*#__PURE__*/ _jsx("input", { className: "input", value: value, onChange: (e)=>onChange(e.target.value), placeholder: placeholder || 'Search...' }) ] }); } function sortData(list, sortKey, sortDir) { if (!sortKey) return list; return [ ...list ].sort((a, b)=>{ const va = a[sortKey], vb = b[sortKey]; if (va == null) return 1; if (vb == null) return -1; const cmp = typeof va === 'number' ? va - vb : String(va).localeCompare(String(vb)); return sortDir === 'asc' ? cmp : -cmp; }); } function Badge(param) { let { children, className } = param; return /*#__PURE__*/ _jsx("span", { className: "badge ".concat(className || ''), children: children }); } function OverviewTab(param) { let { project, dashboard } = param; const panels = useMemo(()=>{ var _dashboard_summary, _dashboard_summary1, _dashboard_summary2, _dashboard_summary3, _dashboard_summary4, _dashboard_summary5, _dashboard_summary6, _dashboard_gate, _dashboard_summary7, _dashboard_summary8, _dashboard_summary9, _dashboard_summary10, _dashboard_summary11, _dashboard_summary12, _dashboard_summary13; if (!dashboard) return []; var _dashboard_summary_overallScore, _dashboard_summary_gateStatus, _dashboard_summary_openRisks, _dashboard_summary_mitigationCompletion; return [ { label: 'Overall Score', value: (_dashboard_summary_overallScore = (_dashboard_summary = dashboard.summary) === null || _dashboard_summary === void 0 ? void 0 : _dashboard_summary.overallScore) !== null && _dashboard_summary_overallScore !== void 0 ? _dashboard_summary_overallScore : '-', cls: ((_dashboard_summary1 = dashboard.summary) === null || _dashboard_summary1 === void 0 ? void 0 : _dashboard_summary1.overallScore) >= 75 ? 'bad' : ((_dashboard_summary2 = dashboard.summary) === null || _dashboard_summary2 === void 0 ? void 0 : _dashboard_summary2.overallScore) >= 50 ? 'warn' : 'good', sub: "Risk level: ".concat(((_dashboard_summary3 = dashboard.summary) === null || _dashboard_summary3 === void 0 ? void 0 : _dashboard_summary3.riskLevel) || '-') }, { label: 'Deployment Gate', value: (_dashboard_summary_gateStatus = (_dashboard_summary4 = dashboard.summary) === null || _dashboard_summary4 === void 0 ? void 0 : _dashboard_summary4.gateStatus) !== null && _dashboard_summary_gateStatus !== void 0 ? _dashboard_summary_gateStatus : '-', cls: ((_dashboard_summary5 = dashboard.summary) === null || _dashboard_summary5 === void 0 ? void 0 : _dashboard_summary5.gateStatus) === 'Ready' ? 'good' : ((_dashboard_summary6 = dashboard.summary) === null || _dashboard_summary6 === void 0 ? void 0 : _dashboard_summary6.gateStatus) === 'Warning' ? 'warn' : 'bad', sub: ((_dashboard_gate = dashboard.gate) === null || _dashboard_gate === void 0 ? void 0 : _dashboard_gate.message) || '' }, { label: 'Open Risks', value: (_dashboard_summary_openRisks = (_dashboard_summary7 = dashboard.summary) === null || _dashboard_summary7 === void 0 ? void 0 : _dashboard_summary7.openRisks) !== null && _dashboard_summary_openRisks !== void 0 ? _dashboard_summary_openRisks : 0, cls: (((_dashboard_summary8 = dashboard.summary) === null || _dashboard_summary8 === void 0 ? void 0 : _dashboard_summary8.openRisks) || 0) > 5 ? 'bad' : (((_dashboard_summary9 = dashboard.summary) === null || _dashboard_summary9 === void 0 ? void 0 : _dashboard_summary9.openRisks) || 0) > 2 ? 'warn' : 'good', sub: "".concat(((_dashboard_summary10 = dashboard.summary) === null || _dashboard_summary10 === void 0 ? void 0 : _dashboard_summary10.totalRisks) || 0, " total risks") }, { label: 'Mitigation', value: "".concat((_dashboard_summary_mitigationCompletion = (_dashboard_summary11 = dashboard.summary) === null || _dashboard_summary11 === void 0 ? void 0 : _dashboard_summary11.mitigationCompletion) !== null && _dashboard_summary_mitigationCompletion !== void 0 ? _dashboard_summary_mitigationCompletion : 0, "%"), cls: (((_dashboard_summary12 = dashboard.summary) === null || _dashboard_summary12 === void 0 ? void 0 : _dashboard_summary12.mitigationCompletion) || 0) < 40 ? 'bad' : (((_dashboard_summary13 = dashboard.summary) === null || _dashboard_summary13 === void 0 ? void 0 : _dashboard_summary13.mitigationCompletion) || 0) < 70 ? 'warn' : 'good', sub: 'Average active-risk completion' } ]; }, [ dashboard ]); if (!dashboard) return /*#__PURE__*/ _jsx("div", { className: "empty-state", children: /*#__PURE__*/ _jsx("p", { children: "Loading dashboard data..." }) }); return /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx("div", { className: "grid", style: { gridTemplateColumns: 'repeat(auto-fit, minmax(200px, 1fr))' }, children: panels.map((p)=>/*#__PURE__*/ _jsxs("div", { className: "metric-card", children: [ /*#__PURE__*/ _jsx("h3", { children: p.label }), /*#__PURE__*/ _jsx("div", { className: "metric-value ".concat(p.cls), children: p.value }), /*#__PURE__*/ _jsx("div", { className: "metric-sub", children: p.sub }) ] }, p.label)) }), /*#__PURE__*/ _jsxs("div", { className: "grid", style: { gridTemplateColumns: '1fr 1fr', marginTop: 18 }, children: [ /*#__PURE__*/ _jsxs("div", { className: "panel", children: [ /*#__PURE__*/ _jsx("h2", { children: "Dimensions" }), (dashboard.dimensions || []).map((dim)=>/*#__PURE__*/ _jsxs("div", { style: { marginBottom: 12 }, children: [ /*#__PURE__*/ _jsxs("div", { style: { display: 'flex', justifyContent: 'space-between', marginBottom: 4 }, children: [ /*#__PURE__*/ _jsx("span", { style: { fontSize: 13 }, children: dim.name }), /*#__PURE__*/ _jsx("strong", { style: { fontSize: 13 }, children: dim.score }) ] }), /*#__PURE__*/ _jsx("div", { className: "bar-wrap", children: /*#__PURE__*/ _jsx("div", { className: "bar-fill", style: { width: "".concat(Math.min(dim.score, 100), "%"), background: dim.score >= 50 ? 'var(--danger)' : dim.score >= 25 ? 'var(--warn)' : 'var(--accent)' } }) }) ] }, dim.name)) ] }), /*#__PURE__*/ _jsxs("div", { className: "panel", children: [ /*#__PURE__*/ _jsx("h2", { children: "Lifecycle" }), (dashboard.lifecycle || []).map((phase)=>/*#__PURE__*/ _jsxs("div", { style: { marginBottom: 12 }, children: [ /*#__PURE__*/ _jsxs("div", { style: { display: 'flex', justifyContent: 'space-between', marginBottom: 4 }, children: [ /*#__PURE__*/ _jsx("span", { style: { fontSize: 13 }, children: phase.name }), /*#__PURE__*/ _jsxs("span", { className: "muted", style: { fontSize: 12 }, children: [ phase.openRisks, " open" ] }) ] }), /*#__PURE__*/ _jsx("div", { className: "bar-wrap", children: /*#__PURE__*/ _jsx("div", { className: "bar-fill", style: { width: "".concat(Math.min(phase.riskScore || 0, 100), "%"), background: (phase.riskScore || 0) >= 50 ? 'var(--danger)' : (phase.riskScore || 0) >= 25 ? 'var(--warn)' : 'var(--accent)' } }) }) ] }, phase.name)) ] }) ] }) ] }); } function RisksTab(param) { let { project, dashboard, toast } = param; const [search, setSearch] = useState(''); const [sortKey, setSortKey] = useState('normalizedScore'); const [sortDir, setSortDir] = useState('desc'); const [page, setPage] = useState(0); const [selectedRisk, setSelectedRisk] = useState(null); const [updating, setUpdating] = useState(null); const risks = useMemo(()=>{ if (!(dashboard === null || dashboard === void 0 ? void 0 : dashboard.topRisks)) return []; return sortData(dashboard.topRisks, sortKey, sortDir); }, [ dashboard, sortKey, sortDir ]); const filtered = useMemo(()=>{ if (!search) return risks; const q = search.toLowerCase(); return risks.filter((r)=>(r.title || '').toLowerCase().includes(q) || (r.dimension || '').toLowerCase().includes(q) || (r.ownerDisplayName || '').toLowerCase().includes(q)); }, [ risks, search ]); const paged = filtered.slice(0, (page + 1) * PAGE_SIZE); const handleSort = (key)=>{ if (sortKey === key) setSortDir((d)=>d === 'asc' ? 'desc' : 'asc'); else { setSortKey(key); setSortDir('asc'); } }; const updateStatus = async (riskId, status)=>{ setUpdating(riskId); try { await api.patch("/api/risks/".concat(riskId), { status }); toast.add("Risk status updated to ".concat(status)); setSelectedRisk(null); } catch (e) { toast.add(e.message, 'error'); } finally{ setUpdating(null); } }; if (!dashboard) return /*#__PURE__*/ _jsx("div", { className: "empty-state", children: /*#__PURE__*/ _jsx("p", { children: "Loading..." }) }); return /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx(SearchInput, { value: search, onChange: setSearch, placeholder: "Search risks by title, dimension, owner..." }), /*#__PURE__*/ _jsx("div", { className: "table-wrap", children: /*#__PURE__*/ _jsxs("table", { className: "table", children: [ /*#__PURE__*/ _jsx("thead", { children: /*#__PURE__*/ _jsx("tr", { children: [ { key: 'id', label: 'ID' }, { key: 'title', label: 'Risk' }, { key: 'dimension', label: 'Dimension' }, { key: 'lifecyclePhase', label: 'Phase' }, { key: 'normalizedScore', label: 'Score' }, { key: 'residualScore', label: 'Residual' }, { key: 'status', label: 'Status' }, { key: 'ownerDisplayName', label: 'Owner' } ].map((col)=>/*#__PURE__*/ _jsxs("th", { className: "sortable", onClick: ()=>handleSort(col.key), children: [ col.label, " ", sortKey === col.key ? sortDir === 'asc' ? '▲' : '▼' : '' ] }, col.key)) }) }), /*#__PURE__*/ _jsx("tbody", { children: paged.map((risk)=>{ var _risk_id, _risk_dimension, _risk_status; return /*#__PURE__*/ _jsxs("tr", { onClick: ()=>setSelectedRisk(risk), children: [ /*#__PURE__*/ _jsx("td", { style: { fontFamily: 'monospace', fontSize: 12 }, children: (_risk_id = risk.id) === null || _risk_id === void 0 ? void 0 : _risk_id.slice(0, 8) }), /*#__PURE__*/ _jsx("td", { children: /*#__PURE__*/ _jsx("strong", { children: risk.title }) }), /*#__PURE__*/ _jsx("td", { children: /*#__PURE__*/ _jsx(Badge, { className: (_risk_dimension = risk.dimension) === null || _risk_dimension === void 0 ? void 0 : _risk_dimension.toLowerCase(), children: risk.dimension }) }), /*#__PURE__*/ _jsx("td", { style: { fontSize: 12 }, children: risk.lifecyclePhase }), /*#__PURE__*/ _jsx("td", { children: /*#__PURE__*/ _jsx("strong", { children: risk.normalizedScore }) }), /*#__PURE__*/ _jsx("td", { children: /*#__PURE__*/ _jsx("span", { style: { color: risk.residualScore >= 50 ? 'var(--danger)' : risk.residualScore >= 25 ? 'var(--warn)' : 'var(--accent)' }, children: risk.residualScore }) }), /*#__PURE__*/ _jsx("td", { children: /*#__PURE__*/ _jsx(Badge, { className: (_risk_status = risk.status) === null || _risk_status === void 0 ? void 0 : _risk_status.toLowerCase().replace(/\s+/g, '-'), children: risk.status }) }), /*#__PURE__*/ _jsx("td", { children: /*#__PURE__*/ _jsx("span", { className: "muted", children: risk.ownerDisplayName || '-' }) }) ] }, risk.id); }) }) ] }) }), filtered.length > paged.length && /*#__PURE__*/ _jsx("div", { style: { textAlign: 'center', marginTop: 12 }, children: /*#__PURE__*/ _jsxs("button", { className: "button secondary small", onClick: ()=>setPage((p)=>p + 1), children: [ "Show more (", filtered.length - paged.length, " remaining)" ] }) }), !filtered.length && /*#__PURE__*/ _jsx("div", { className: "empty-state", children: /*#__PURE__*/ _jsx("p", { children: "No risks match your search" }) }), selectedRisk && /*#__PURE__*/ _jsx("div", { className: "modal-overlay", onClick: ()=>setSelectedRisk(null), children: /*#__PURE__*/ _jsxs("div", { className: "modal", onClick: (e)=>e.stopPropagation(), children: [ /*#__PURE__*/ _jsx("h2", { children: selectedRisk.title }), /*#__PURE__*/ _jsxs("div", { style: { display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 12, fontSize: 13 }, children: [ /*#__PURE__*/ _jsxs("div", { children: [ /*#__PURE__*/ _jsx("span", { className: "muted", children: "Dimension" }), /*#__PURE__*/ _jsx("br", {}), selectedRisk.dimension ] }), /*#__PURE__*/ _jsxs("div", { children: [ /*#__PURE__*/ _jsx("span", { className: "muted", children: "Phase" }), /*#__PURE__*/ _jsx("br", {}), selectedRisk.lifecyclePhase ] }), /*#__PURE__*/ _jsxs("div", { children: [ /*#__PURE__*/ _jsx("span", { className: "muted", children: "Probability" }), /*#__PURE__*/ _jsx("br", {}), selectedRisk.probability ] }), /*#__PURE__*/ _jsxs("div", { children: [ /*#__PURE__*/ _jsx("span", { className: "muted", children: "Impact" }), /*#__PURE__*/ _jsx("br", {}), selectedRisk.impact ] }), /*#__PURE__*/ _jsxs("div", { children: [ /*#__PURE__*/ _jsx("span", { className: "muted", children: "Detectability" }), /*#__PURE__*/ _jsx("br", {}), selectedRisk.detectability ] }), /*#__PURE__*/ _jsxs("div", { children: [ /*#__PURE__*/ _jsx("span", { className: "muted", children: "Score" }), /*#__PURE__*/ _jsx("br", {}), /*#__PURE__*/ _jsx("strong", { children: selectedRisk.normalizedScore }) ] }), /*#__PURE__*/ _jsxs("div", { children: [ /*#__PURE__*/ _jsx("span", { className: "muted", children: "Residual" }), /*#__PURE__*/ _jsx("br", {}), selectedRisk.residualScore ] }), /*#__PURE__*/ _jsxs("div", { children: [ /*#__PURE__*/ _jsx("span", { className: "muted", children: "Owner" }), /*#__PURE__*/ _jsx("br", {}), selectedRisk.ownerDisplayName || '-' ] }) ] }), selectedRisk.description && /*#__PURE__*/ _jsxs("div", { style: { marginTop: 12, fontSize: 13 }, children: [ /*#__PURE__*/ _jsx("span", { className: "muted", children: "Description" }), /*#__PURE__*/ _jsx("br", {}), selectedRisk.description ] }), /*#__PURE__*/ _jsxs("div", { style: { marginTop: 16 }, children: [ /*#__PURE__*/ _jsx("span", { className: "muted", style: { fontSize: 12 }, children: "Update status:" }), /*#__PURE__*/ _jsx("div", { style: { display: 'flex', gap: 6, marginTop: 6, flexWrap: 'wrap' }, children: [ 'OPEN', 'IN_MITIGATION', 'ACCEPTED', 'CLOSED' ].map((s)=>/*#__PURE__*/ _jsx("button", { className: "button small ".concat(s === 'OPEN' ? 'secondary' : ''), onClick: ()=>updateStatus(selectedRisk.id, s), disabled: updating === selectedRisk.id, children: s.replace('_', ' ') }, s)) }) ] }), /*#__PURE__*/ _jsx("div", { className: "modal-actions", children: /*#__PURE__*/ _jsx("button", { className: "button secondary small", onClick: ()=>setSelectedRisk(null), children: "Close" }) }) ] }) }) ] }); } function MitigationsTab(param) { let { project, dashboard, toast } = param; const [search, setSearch] = useState(''); const [sortKey, setSortKey] = useState('progressPercent'); const [sortDir, setSortDir] = useState('asc'); const mitigations = useMemo(()=>{ if (!(dashboard === null || dashboard === void 0 ? void 0 : dashboard.mitigations)) return []; return sortData(dashboard.mitigations, sortKey, sortDir); }, [ dashboard, sortKey, sortDir ]); const filtered = useMemo(()=>{ if (!search) return mitigations; const q = search.toLowerCase(); return mitigations.filter((m)=>(m.title || '').toLowerCase().includes(q) || (m.riskTitle || '').toLowerCase().includes(q)); }, [ mitigations, search ]); const handleSort = (key)=>{ if (sortKey === key) setSortDir((d)=>d === 'asc' ? 'desc' : 'asc'); else { setSortKey(key); setSortDir('asc'); } }; if (!dashboard) return /*#__PURE__*/ _jsx("div", { className: "empty-state", children: /*#__PURE__*/ _jsx("p", { children: "Loading..." }) }); return /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx(SearchInput, { value: search, onChange: setSearch, placeholder: "Search mitigations..." }), /*#__PURE__*/ _jsx("div", { className: "table-wrap", children: /*#__PURE__*/ _jsxs("table", { className: "table", children: [ /*#__PURE__*/ _jsx("thead", { children: /*#__PURE__*/ _jsx("tr", { children: [ { key: 'title', label: 'Title' }, { key: 'riskTitle', label: 'Risk' }, { key: 'status', label: 'Status' }, { key: 'progressPercent', label: 'Progress' }, { key: 'effectivenessPercent', label: 'Effectiveness' }, { key: 'ownerDisplayName', label: 'Owner' } ].map((col)=>/*#__PURE__*/ _jsxs("th", { className: "sortable", onClick: ()=>handleSort(col.key), children: [ col.label, " ", sortKey === col.key ? sortDir === 'asc' ? '▲' : '▼' : '' ] }, col.key)) }) }), /*#__PURE__*/ _jsx("tbody", { children: filtered.slice(0, 50).map((m)=>{ var _m_status; return /*#__PURE__*/ _jsxs("tr", { children: [ /*#__PURE__*/ _jsx("td", { children: /*#__PURE__*/ _jsx("strong", { children: m.title }) }), /*#__PURE__*/ _jsx("td", { children: /*#__PURE__*/ _jsx("span", { className: "muted", children: m.riskTitle }) }), /*#__PURE__*/ _jsx("td", { children: /*#__PURE__*/ _jsx(Badge, { className: (_m_status = m.status) === null || _m_status === void 0 ? void 0 : _m_status.toLowerCase().replace(/\s+/g, '-'), children: m.status }) }), /*#__PURE__*/ _jsx("td", { children: /*#__PURE__*/ _jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: 8 }, children: [ /*#__PURE__*/ _jsx("div", { className: "bar-wrap", style: { flex: 1, maxWidth: 80 }, children: /*#__PURE__*/ _jsx("div", { className: "bar-fill", style: { width: "".concat(m.progressPercent || 0, "%"), background: (m.progressPercent || 0) >= 80 ? 'var(--accent)' : (m.progressPercent || 0) >= 30 ? 'var(--warn)' : 'var(--danger)' } }) }), m.progressPercent || 0, "%" ] }) }), /*#__PURE__*/ _jsxs("td", { children: [ m.effectivenessPercent || 0, "%" ] }), /*#__PURE__*/ _jsx("td", { children: /*#__PURE__*/ _jsx("span", { className: "muted", children: m.ownerDisplayName || '-' }) }) ] }, m.id); }) }) ] }) }), !filtered.length && /*#__PURE__*/ _jsx("div", { className: "empty-state", children: /*#__PURE__*/ _jsx("p", { children: "No mitigations found" }) }) ] }); } function GateTab(param) { let { project, dashboard } = param; var _dashboard_gate, _dashboard_summary; if (!dashboard) return /*#__PURE__*/ _jsx("div", { className: "empty-state", children: /*#__PURE__*/ _jsx("p", { children: "Loading..." }) }); const criteria = ((_dashboard_gate = dashboard.gate) === null || _dashboard_gate === void 0 ? void 0 : _dashboard_gate.criteria) || []; const gateStatus = ((_dashboard_summary = dashboard.summary) === null || _dashboard_summary === void 0 ? void 0 : _dashboard_summary.gateStatus) || 'Unknown'; const gateCls = gateStatus === 'Ready' ? 'good' : gateStatus === 'Warning' ? 'warn' : 'bad'; return /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs("div", { className: "dash-header", children: [ /*#__PURE__*/ _jsxs("div", { children: [ /*#__PURE__*/ _jsx("h1", { children: "Deployment Gate" }), /*#__PURE__*/ _jsx("p", { className: "muted", children: "Nine-criteria gate evaluation for AI deployment readiness" }) ] }), /*#__PURE__*/ _jsx("div", { className: "dash-actions", children: /*#__PURE__*/ _jsx("div", { className: "metric-value ".concat(gateCls), style: { fontSize: 28 }, children: gateStatus }) }) ] }), /*#__PURE__*/ _jsx("div", { className: "table-wrap", children: /*#__PURE__*/ _jsxs("table", { className: "table", children: [ /*#__PURE__*/ _jsx("thead", { children: /*#__PURE__*/ _jsxs("tr", { children: [ /*#__PURE__*/ _jsx("th", { children: "Criterion" }), /*#__PURE__*/ _jsx("th", { children: "Required" }), /*#__PURE__*/ _jsx("th", { children: "Actual" }), /*#__PURE__*/ _jsx("th", { children: "Status" }) ] }) }), /*#__PURE__*/ _jsx("tbody", { children: criteria.map((c)=>{ var _c_status; return /*#__PURE__*/ _jsxs("tr", { children: [ /*#__PURE__*/ _jsx("td", { children: /*#__PURE__*/ _jsx("strong", { children: c.name }) }), /*#__PURE__*/ _jsx("td", { children: c.required }), /*#__PURE__*/ _jsx("td", { children: c.actual }), /*#__PURE__*/ _jsx("td", { children: /*#__PURE__*/ _jsx(Badge, { className: (_c_status = c.status) === null || _c_status === void 0 ? void 0 : _c_status.toLowerCase(), children: c.status }) }) ] }, c.name); }) }) ] }) }), !criteria.length && /*#__PURE__*/ _jsx("div", { className: "empty-state", children: /*#__PURE__*/ _jsx("p", { children: "No gate criteria evaluated yet" }) }), /*#__PURE__*/ _jsxs("div", { style: { marginTop: 16, display: 'flex', gap: 8 }, children: [ /*#__PURE__*/ _jsx("a", { href: "/api/projects/".concat(project === null || project === void 0 ? void 0 : project.id, "/gate/evaluate"), className: "button secondary small", target: "_blank", children: "Evaluate (API)" }), /*#__PURE__*/ _jsx("a", { href: "/api/projects/".concat(project === null || project === void 0 ? void 0 : project.id, "/gate/history"), className: "button secondary small", target: "_blank", children: "History (API)" }) ] }) ] }); } function IntegrationsTab(param) { let { project, dashboard } = param; return /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx("div", { className: "dash-header", children: /*#__PURE__*/ _jsxs("div", { children: [ /*#__PURE__*/ _jsx("h1", { children: "Integrations" }), /*#__PURE__*/ _jsx("p", { className: "muted", children: "Connect Trello, Jira, Asana, or Microsoft Planner" }) ] }) }), /*#__PURE__*/ _jsx("div", { className: "grid", style: { gridTemplateColumns: 'repeat(auto-fit, minmax(240px, 1fr))' }, children: [ 'TRELLO', 'JIRA', 'ASANA', 'MICROSOFT_PLANNER' ].map((provider)=>/*#__PURE__*/ _jsxs("div", { className: "panel", style: { textAlign: 'center' }, children: [ /*#__PURE__*/ _jsx("div", { style: { fontSize: 32, marginBottom: 8 }, children: provider === 'TRELLO' ? '⊞' : provider === 'JIRA' ? '◆' : provider === 'ASANA' ? '◇' : '▣' }), /*#__PURE__*/ _jsx("h3", { style: { margin: '0 0 4px' }, children: provider.replace('_', ' ') }), /*#__PURE__*/ _jsx("p", { className: "muted", style: { fontSize: 12, margin: '0 0 12px' }, children: "Project management sync" }), /*#__PURE__*/ _jsxs("div", { style: { display: 'flex', gap: 6, justifyContent: 'center' }, children: [ /*#__PURE__*/ _jsx("a", { href: "/api/integration-providers", className: "button secondary small", children: "Configure" }), /*#__PURE__*/ _jsx("a", { href: "/api/integrations", className: "button secondary small", children: "Manage" }) ] }) ] }, provider)) }), /*#__PURE__*/ _jsx("div", { style: { marginTop: 12 }, children: /*#__PURE__*/ _jsx("a", { href: "/api/integration-providers", className: "button secondary small", target: "_blank", children: "Integration providers (API)" }) }) ] }); } export default function DashboardPage() { const router = useRouter(); const [tab, setTab] = useState('Overview'); const [project, setProject] = useState(null); const [dashboard, setDashboard] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const { toasts, add } = useToast(); useEffect(()=>{ const params = new URLSearchParams(window.location.search); const t = params.get('tab'); if (t && TABS.includes(t)) setTab(t); }, []); useEffect(()=>{ (async ()=>{ try { const workspaces = await api.get('/api/workspaces'); const ws = workspaces === null || workspaces === void 0 ? void 0 : workspaces[0]; if (!ws) { setError('No workspace found'); setLoading(false); return; } const projects = await api.get("/api/workspaces/".concat(ws.id, "/projects")); const proj = projects === null || projects === void 0 ? void 0 : projects[0]; if (!proj) { setError('No project found'); setLoading(false); return; } setProject(proj); const dash = await api.get("/api/projects/".concat(proj.id, "/dashboard")); setDashboard(dash); setLoading(false); } catch (e) { setError(e.message); setLoading(false); } })(); }, []); if (loading) return /*#__PURE__*/ _jsx("div", { className: "shell-loading", children: /*#__PURE__*/ _jsx("div", { className: "spinner" }) }); if (error) return /*#__PURE__*/ _jsxs("div", { className: "empty-state", children: [ /*#__PURE__*/ _jsx("div", { className: "empty-icon", children: "!" }), /*#__PURE__*/ _jsx("p", { children: error }) ] }); return /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs("div", { className: "dash-header", children: [ /*#__PURE__*/ _jsxs("div", { children: [ /*#__PURE__*/ _jsx("h1", { children: (project === null || project === void 0 ? void 0 : project.name) || 'Dashboard' }), /*#__PURE__*/ _jsx("p", { className: "muted", children: (project === null || project === void 0 ? void 0 : project.subtitle) || '' }) ] }), /*#__PURE__*/ _jsxs("div", { className: "dash-actions", children: [ /*#__PURE__*/ _jsx("a", { href: "/api/projects/".concat(project === null || project === void 0 ? void 0 : project.id, "/reports/executive.html"), className: "button secondary small", target: "_blank", children: "Report" }), /*#__PURE__*/ _jsx("a", { href: "/api/projects/".concat(project === null || project === void 0 ? void 0 : project.id, "/reports/risk-register.csv"), className: "button secondary small", target: "_blank", children: "CSV" }) ] }) ] }), /*#__PURE__*/ _jsx("div", { className: "tabs", children: TABS.map((t)=>/*#__PURE__*/ _jsx("button", { className: "tab ".concat(tab === t ? 'active' : ''), onClick: ()=>router.push("/dashboard?tab=".concat(t)), children: t }, t)) }), tab === 'Overview' && /*#__PURE__*/ _jsx(OverviewTab, { project: project, dashboard: dashboard }), tab === 'Risks' && /*#__PURE__*/ _jsx(RisksTab, { project: project, dashboard: dashboard, toast: { add } }), tab === 'Mitigations' && /*#__PURE__*/ _jsx(MitigationsTab, { project: project, dashboard: dashboard, toast: { add } }), tab === 'Gate' && /*#__PURE__*/ _jsx(GateTab, { project: project, dashboard: dashboard }), tab === 'Integrations' && /*#__PURE__*/ _jsx(IntegrationsTab, { project: project, dashboard: dashboard }), /*#__PURE__*/ _jsx(ToastContainer, { toasts: toasts }) ] }); } @`=_.ild g & , UY[_c{  gjbfTX !!P#S#$$&&;'>'))*_*7+;+9,=,--w/{/J2M222?6F6o6v6666677I7P7k7q7v8|8);+;<_<<<6=:=<=D=w=z=C>F>>>!?$?e?h?EE(H+HHHIIKKKKLLM_ MNNPP_PbPPQSQQQSSSSUUUUWWXXZZ|ZZ[[[[Z\_]\\\R^V^^^__````aabb&c)cddddYe\eIfLf ggggyh_|hDiHiiijjjjkkjlml\m_m'n+nnnooppqqrr0s4st thu_kuww z zzzE|L|u|||||||}}GJx_{ÇΊҊBEwzȌˌCFяԏ"&im_ØcfruœŜeiŸşUXnqߡEH#_&gkӤ֤x{^bҨը#& dgJMҮ_֮03ilmpڷݷil ad_CF!@GxJR ac)+Y\_psUY[c jm;>cgehHorMPqt(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment_lib_api_client__WEBPACK_IMPORTED_MODULE_3__/* .api */ .FH(0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect) __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ DashboardPage) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5155); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2115); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(63); /* harmony import */ var _lib_api_client__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6282); /* __next_internal_client_entry_do_not_use__ default auto */ const TABS = [ 'Overview', 'Risks', 'Mitigations', 'Gate', 'Integrations' ]; const PAGE_SIZE = 20; function useToast() { const [toasts, setToasts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]); const add = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(function(message) { let type = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 'success'; const id = Date.now() + Math.random(); setToasts((prev)=>[ ...prev, { id, message, type } ]); setTimeout(()=>setToasts((prev)=>prev.filter((t)=>t.id !== id)), 3000); }, []); return { toasts, add }; } function ToastContainer(param) { let { toasts } = param; if (!toasts.length) return null; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "toast-container", children: toasts.map((t)=>/*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "toast ".concat(t.type), children: t.message }, t.id)) }); } function SearchInput(param) { let { value, onChange, placeholder } = param; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "search-wrap", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "search-icon", children: "⌕" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("input", { className: "input", value: value, onChange: (e)=>onChange(e.target.value), placeholder: placeholder || 'Search...' }) ] }); } function sortData(list, sortKey, sortDir) { if (!sortKey) return list; return [ ...list ].sort((a, b)=>{ const va = a[sortKey], vb = b[sortKey]; if (va == null) return 1; if (vb == null) return -1; const cmp = typeof va === 'number' ? va - vb : String(va).localeCompare(String(vb)); return sortDir === 'asc' ? cmp : -cmp; }); } function Badge(param) { let { children, className } = param; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "badge ".concat(className || ''), children: children }); } function OverviewTab(param) { let { project, dashboard } = param; const panels = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{ var _dashboard_summary, _dashboard_summary1, _dashboard_summary2, _dashboard_summary3, _dashboard_summary4, _dashboard_summary5, _dashboard_summary6, _dashboard_gate, _dashboard_summary7, _dashboard_summary8, _dashboard_summary9, _dashboard_summary10, _dashboard_summary11, _dashboard_summary12, _dashboard_summary13; if (!dashboard) return []; var _dashboard_summary_overallScore, _dashboard_summary_gateStatus, _dashboard_summary_openRisks, _dashboard_summary_mitigationCompletion; return [ { label: 'Overall Score', value: (_dashboard_summary_overallScore = (_dashboard_summary = dashboard.summary) === null || _dashboard_summary === void 0 ? void 0 : _dashboard_summary.overallScore) !== null && _dashboard_summary_overallScore !== void 0 ? _dashboard_summary_overallScore : '-', cls: ((_dashboard_summary1 = dashboard.summary) === null || _dashboard_summary1 === void 0 ? void 0 : _dashboard_summary1.overallScore) >= 75 ? 'bad' : ((_dashboard_summary2 = dashboard.summary) === null || _dashboard_summary2 === void 0 ? void 0 : _dashboard_summary2.overallScore) >= 50 ? 'warn' : 'good', sub: "Risk level: ".concat(((_dashboard_summary3 = dashboard.summary) === null || _dashboard_summary3 === void 0 ? void 0 : _dashboard_summary3.riskLevel) || '-') }, { label: 'Deployment Gate', value: (_dashboard_summary_gateStatus = (_dashboard_summary4 = dashboard.summary) === null || _dashboard_summary4 === void 0 ? void 0 : _dashboard_summary4.gateStatus) !== null && _dashboard_summary_gateStatus !== void 0 ? _dashboard_summary_gateStatus : '-', cls: ((_dashboard_summary5 = dashboard.summary) === null || _dashboard_summary5 === void 0 ? void 0 : _dashboard_summary5.gateStatus) === 'Ready' ? 'good' : ((_dashboard_summary6 = dashboard.summary) === null || _dashboard_summary6 === void 0 ? void 0 : _dashboard_summary6.gateStatus) === 'Warning' ? 'warn' : 'bad', sub: ((_dashboard_gate = dashboard.gate) === null || _dashboard_gate === void 0 ? void 0 : _dashboard_gate.message) || '' }, { label: 'Open Risks', value: (_dashboard_summary_openRisks = (_dashboard_summary7 = dashboard.summary) === null || _dashboard_summary7 === void 0 ? void 0 : _dashboard_summary7.openRisks) !== null && _dashboard_summary_openRisks !== void 0 ? _dashboard_summary_openRisks : 0, cls: (((_dashboard_summary8 = dashboard.summary) === null || _dashboard_summary8 === void 0 ? void 0 : _dashboard_summary8.openRisks) || 0) > 5 ? 'bad' : (((_dashboard_summary9 = dashboard.summary) === null || _dashboard_summary9 === void 0 ? void 0 : _dashboard_summary9.openRisks) || 0) > 2 ? 'warn' : 'good', sub: "".concat(((_dashboard_summary10 = dashboard.summary) === null || _dashboard_summary10 === void 0 ? void 0 : _dashboard_summary10.totalRisks) || 0, " total risks") }, { label: 'Mitigation', value: "".concat((_dashboard_summary_mitigationCompletion = (_dashboard_summary11 = dashboard.summary) === null || _dashboard_summary11 === void 0 ? void 0 : _dashboard_summary11.mitigationCompletion) !== null && _dashboard_summary_mitigationCompletion !== void 0 ? _dashboard_summary_mitigationCompletion : 0, "%"), cls: (((_dashboard_summary12 = dashboard.summary) === null || _dashboard_summary12 === void 0 ? void 0 : _dashboard_summary12.mitigationCompletion) || 0) < 40 ? 'bad' : (((_dashboard_summary13 = dashboard.summary) === null || _dashboard_summary13 === void 0 ? void 0 : _dashboard_summary13.mitigationCompletion) || 0) < 70 ? 'warn' : 'good', sub: 'Average active-risk completion' } ]; }, [ dashboard ]); if (!dashboard) return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "empty-state", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { children: "Loading dashboard data..." }) }); return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "grid", style: { gridTemplateColumns: 'repeat(auto-fit, minmax(200px, 1fr))' }, children: panels.map((p)=>/*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "metric-card", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h3", { children: p.label }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "metric-value ".concat(p.cls), children: p.value }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "metric-sub", children: p.sub }) ] }, p.label)) }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "grid", style: { gridTemplateColumns: '1fr 1fr', marginTop: 18 }, children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "panel", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h2", { children: "Dimensions" }), (dashboard.dimensions || []).map((dim)=>/*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { style: { marginBottom: 12 }, children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { style: { display: 'flex', justifyContent: 'space-between', marginBottom: 4 }, children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { style: { fontSize: 13 }, children: dim.name }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("strong", { style: { fontSize: 13 }, children: dim.score }) ] }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "bar-wrap", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "bar-fill", style: { width: "".concat(Math.min(dim.score, 100), "%"), background: dim.score >= 50 ? 'var(--danger)' : dim.score >= 25 ? 'var(--warn)' : 'var(--accent)' } }) }) ] }, dim.name)) ] }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "panel", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h2", { children: "Lifecycle" }), (dashboard.lifecycle || []).map((phase)=>/*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { style: { marginBottom: 12 }, children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { style: { display: 'flex', justifyContent: 'space-between', marginBottom: 4 }, children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { style: { fontSize: 13 }, children: phase.name }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: "muted", style: { fontSize: 12 }, children: [ phase.openRisks, " open" ] }) ] }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "bar-wrap", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "bar-fill", style: { width: "".concat(Math.min(phase.riskScore || 0, 100), "%"), background: (phase.riskScore || 0) >= 50 ? 'var(--danger)' : (phase.riskScore || 0) >= 25 ? 'var(--warn)' : 'var(--accent)' } }) }) ] }, phase.name)) ] }) ] }) ] }); } function RisksTab(param) { let { project, dashboard, toast } = param; const [search, setSearch] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(''); const [sortKey, setSortKey] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('normalizedScore'); const [sortDir, setSortDir] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('desc'); const [page, setPage] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(0); const [selectedRisk, setSelectedRisk] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null); const [updating, setUpdating] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null); const risks = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{ if (!(dashboard === null || dashboard === void 0 ? void 0 : dashboard.topRisks)) return []; return sortData(dashboard.topRisks, sortKey, sortDir); }, [ dashboard, sortKey, sortDir ]); const filtered = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{ if (!search) return risks; const q = search.toLowerCase(); return risks.filter((r)=>(r.title || '').toLowerCase().includes(q) || (r.dimension || '').toLowerCase().includes(q) || (r.ownerDisplayName || '').toLowerCase().includes(q)); }, [ risks, search ]); const paged = filtered.slice(0, (page + 1) * PAGE_SIZE); const handleSort = (key)=>{ if (sortKey === key) setSortDir((d)=>d === 'asc' ? 'desc' : 'asc'); else { setSortKey(key); setSortDir('asc'); } }; const updateStatus = async (riskId, status)=>{ setUpdating(riskId); try { await _lib_api_client__WEBPACK_IMPORTED_MODULE_3__/* .api */ .FH.patch("/api/risks/".concat(riskId), { status }); toast.add("Risk status updated to ".concat(status)); setSelectedRisk(null); } catch (e) { toast.add(e.message, 'error'); } finally{ setUpdating(null); } }; if (!dashboard) return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "empty-state", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { children: "Loading..." }) }); return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(SearchInput, { value: search, onChange: setSearch, placeholder: "Search risks by title, dimension, owner..." }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "table-wrap", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("table", { className: "table", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("thead", { children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("tr", { children: [ { key: 'id', label: 'ID' }, { key: 'title', label: 'Risk' }, { key: 'dimension', label: 'Dimension' }, { key: 'lifecyclePhase', label: 'Phase' }, { key: 'normalizedScore', label: 'Score' }, { key: 'residualScore', label: 'Residual' }, { key: 'status', label: 'Status' }, { key: 'ownerDisplayName', label: 'Owner' } ].map((col)=>/*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("th", { className: "sortable", onClick: ()=>handleSort(col.key), children: [ col.label, " ", sortKey === col.key ? sortDir === 'asc' ? '▲' : '▼' : '' ] }, col.key)) }) }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("tbody", { children: paged.map((risk)=>{ var _risk_id, _risk_dimension, _risk_status; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("tr", { onClick: ()=>setSelectedRisk(risk), children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("td", { style: { fontFamily: 'monospace', fontSize: 12 }, children: (_risk_id = risk.id) === null || _risk_id === void 0 ? void 0 : _risk_id.slice(0, 8) }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("td", { children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("strong", { children: risk.title }) }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("td", { children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(Badge, { className: (_risk_dimension = risk.dimension) === null || _risk_dimension === void 0 ? void 0 : _risk_dimension.toLowerCase(), children: risk.dimension }) }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("td", { style: { fontSize: 12 }, children: risk.lifecyclePhase }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("td", { children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("strong", { children: risk.normalizedScore }) }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("td", { children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { style: { color: risk.residualScore >= 50 ? 'var(--danger)' : risk.residualScore >= 25 ? 'var(--warn)' : 'var(--accent)' }, children: risk.residualScore }) }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("td", { children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(Badge, { className: (_risk_status = risk.status) === null || _risk_status === void 0 ? void 0 : _risk_status.toLowerCase().replace(/\s+/g, '-'), children: risk.status }) }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("td", { children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "muted", children: risk.ownerDisplayName || '-' }) }) ] }, risk.id); }) }) ] }) }), filtered.length > paged.length && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { style: { textAlign: 'center', marginTop: 12 }, children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("button", { className: "button secondary small", onClick: ()=>setPage((p)=>p + 1), children: [ "Show more (", filtered.length - paged.length, " remaining)" ] }) }), !filtered.length && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "empty-state", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { children: "No risks match your search" }) }), selectedRisk && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "modal-overlay", onClick: ()=>setSelectedRisk(null), children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "modal", onClick: (e)=>e.stopPropagation(), children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h2", { children: selectedRisk.title }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { style: { display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 12, fontSize: 13 }, children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "muted", children: "Dimension" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("br", {}), selectedRisk.dimension ] }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "muted", children: "Phase" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("br", {}), selectedRisk.lifecyclePhase ] }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "muted", children: "Probability" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("br", {}), selectedRisk.probability ] }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "muted", children: "Impact" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("br", {}), selectedRisk.impact ] }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "muted", children: "Detectability" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("br", {}), selectedRisk.detectability ] }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "muted", children: "Score" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("br", {}), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("strong", { children: selectedRisk.normalizedScore }) ] }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "muted", children: "Residual" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("br", {}), selectedRisk.residualScore ] }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "muted", children: "Owner" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("br", {}), selectedRisk.ownerDisplayName || '-' ] }) ] }), selectedRisk.description && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { style: { marginTop: 12, fontSize: 13 }, children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "muted", children: "Description" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("br", {}), selectedRisk.description ] }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { style: { marginTop: 16 }, children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "muted", style: { fontSize: 12 }, children: "Update status:" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { style: { display: 'flex', gap: 6, marginTop: 6, flexWrap: 'wrap' }, children: [ 'OPEN', 'IN_MITIGATION', 'ACCEPTED', 'CLOSED' ].map((s)=>/*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { className: "button small ".concat(s === 'OPEN' ? 'secondary' : ''), onClick: ()=>updateStatus(selectedRisk.id, s), disabled: updating === selectedRisk.id, children: s.replace('_', ' ') }, s)) }) ] }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "modal-actions", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { className: "button secondary small", onClick: ()=>setSelectedRisk(null), children: "Close" }) }) ] }) }) ] }); } function MitigationsTab(param) { let { project, dashboard, toast } = param; const [search, setSearch] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(''); const [sortKey, setSortKey] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('progressPercent'); const [sortDir, setSortDir] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('asc'); const mitigations = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{ if (!(dashboard === null || dashboard === void 0 ? void 0 : dashboard.mitigations)) return []; return sortData(dashboard.mitigations, sortKey, sortDir); }, [ dashboard, sortKey, sortDir ]); const filtered = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{ if (!search) return mitigations; const q = search.toLowerCase(); return mitigations.filter((m)=>(m.title || '').toLowerCase().includes(q) || (m.riskTitle || '').toLowerCase().includes(q)); }, [ mitigations, search ]); const handleSort = (key)=>{ if (sortKey === key) setSortDir((d)=>d === 'asc' ? 'desc' : 'asc'); else { setSortKey(key); setSortDir('asc'); } }; if (!dashboard) return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "empty-state", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { children: "Loading..." }) }); return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(SearchInput, { value: search, onChange: setSearch, placeholder: "Search mitigations..." }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "table-wrap", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("table", { className: "table", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("thead", { children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("tr", { children: [ { key: 'title', label: 'Title' }, { key: 'riskTitle', label: 'Risk' }, { key: 'status', label: 'Status' }, { key: 'progressPercent', label: 'Progress' }, { key: 'effectivenessPercent', label: 'Effectiveness' }, { key: 'ownerDisplayName', label: 'Owner' } ].map((col)=>/*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("th", { className: "sortable", onClick: ()=>handleSort(col.key), children: [ col.label, " ", sortKey === col.key ? sortDir === 'asc' ? '▲' : '▼' : '' ] }, col.key)) }) }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("tbody", { children: filtered.slice(0, 50).map((m)=>{ var _m_status; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("tr", { children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("td", { children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("strong", { children: m.title }) }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("td", { children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "muted", children: m.riskTitle }) }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("td", { children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(Badge, { className: (_m_status = m.status) === null || _m_status === void 0 ? void 0 : _m_status.toLowerCase().replace(/\s+/g, '-'), children: m.status }) }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("td", { children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { style: { display: 'flex', alignItems: 'center', gap: 8 }, children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "bar-wrap", style: { flex: 1, maxWidth: 80 }, children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "bar-fill", style: { width: "".concat(m.progressPercent || 0, "%"), background: (m.progressPercent || 0) >= 80 ? 'var(--accent)' : (m.progressPercent || 0) >= 30 ? 'var(--warn)' : 'var(--danger)' } }) }), m.progressPercent || 0, "%" ] }) }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("td", { children: [ m.effectivenessPercent || 0, "%" ] }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("td", { children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "muted", children: m.ownerDisplayName || '-' }) }) ] }, m.id); }) }) ] }) }), !filtered.length && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "empty-state", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { children: "No mitigations found" }) }) ] }); } function GateTab(param) { let { project, dashboard } = param; var _dashboard_gate, _dashboard_summary; if (!dashboard) return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "empty-state", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { children: "Loading..." }) }); const criteria = ((_dashboard_gate = dashboard.gate) === null || _dashboard_gate === void 0 ? void 0 : _dashboard_gate.criteria) || []; const gateStatus = ((_dashboard_summary = dashboard.summary) === null || _dashboard_summary === void 0 ? void 0 : _dashboard_summary.gateStatus) || 'Unknown'; const gateCls = gateStatus === 'Ready' ? 'good' : gateStatus === 'Warning' ? 'warn' : 'bad'; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "dash-header", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h1", { children: "Deployment Gate" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { className: "muted", children: "Nine-criteria gate evaluation for AI deployment readiness" }) ] }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "dash-actions", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "metric-value ".concat(gateCls), style: { fontSize: 28 }, children: gateStatus }) }) ] }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "table-wrap", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("table", { className: "table", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("thead", { children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("tr", { children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("th", { children: "Criterion" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("th", { children: "Required" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("th", { children: "Actual" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("th", { children: "Status" }) ] }) }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("tbody", { children: criteria.map((c)=>{ var _c_status; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("tr", { children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("td", { children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("strong", { children: c.name }) }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("td", { children: c.required }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("td", { children: c.actual }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("td", { children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(Badge, { className: (_c_status = c.status) === null || _c_status === void 0 ? void 0 : _c_status.toLowerCase(), children: c.status }) }) ] }, c.name); }) }) ] }) }), !criteria.length && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "empty-state", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { children: "No gate criteria evaluated yet" }) }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { style: { marginTop: 16, display: 'flex', gap: 8 }, children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("a", { href: "/api/projects/".concat(project === null || project === void 0 ? void 0 : project.id, "/gate/evaluate"), className: "button secondary small", target: "_blank", children: "Evaluate (API)" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("a", { href: "/api/projects/".concat(project === null || project === void 0 ? void 0 : project.id, "/gate/history"), className: "button secondary small", target: "_blank", children: "History (API)" }) ] }) ] }); } function IntegrationsTab(param) { let { project, dashboard } = param; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "dash-header", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h1", { children: "Integrations" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { className: "muted", children: "Connect Trello, Jira, Asana, or Microsoft Planner" }) ] }) }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "grid", style: { gridTemplateColumns: 'repeat(auto-fit, minmax(240px, 1fr))' }, children: [ 'TRELLO', 'JIRA', 'ASANA', 'MICROSOFT_PLANNER' ].map((provider)=>/*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "panel", style: { textAlign: 'center' }, children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { style: { fontSize: 32, marginBottom: 8 }, children: provider === 'TRELLO' ? '⊞' : provider === 'JIRA' ? '◆' : provider === 'ASANA' ? '◇' : '▣' }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h3", { style: { margin: '0 0 4px' }, children: provider.replace('_', ' ') }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { className: "muted", style: { fontSize: 12, margin: '0 0 12px' }, children: "Project management sync" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { style: { display: 'flex', gap: 6, justifyContent: 'center' }, children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("a", { href: "/api/integration-providers", className: "button secondary small", children: "Configure" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("a", { href: "/api/integrations", className: "button secondary small", children: "Manage" }) ] }) ] }, provider)) }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { style: { marginTop: 12 }, children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("a", { href: "/api/integration-providers", className: "button secondary small", target: "_blank", children: "Integration providers (API)" }) }) ] }); } function DashboardPage() { const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)(); const [tab, setTab] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('Overview'); const [project, setProject] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null); const [dashboard, setDashboard] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null); const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true); const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null); const { toasts, add } = useToast(); (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{ const params = new URLSearchParams(window.location.search); const t = params.get('tab'); if (t && TABS.includes(t)) setTab(t); }, []); (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{ (async ()=>{ try { const workspaces = await _lib_api_client__WEBPACK_IMPORTED_MODULE_3__/* .api */ .FH.get('/api/workspaces'); const ws = workspaces === null || workspaces === void 0 ? void 0 : workspaces[0]; if (!ws) { setError('No workspace found'); setLoading(false); return; } const projects = await _lib_api_client__WEBPACK_IMPORTED_MODULE_3__/* .api */ .FH.get("/api/workspaces/".concat(ws.id, "/projects")); const proj = projects === null || projects === void 0 ? void 0 : projects[0]; if (!proj) { setError('No project found'); setLoading(false); return; } setProject(proj); const dash = await _lib_api_client__WEBPACK_IMPORTED_MODULE_3__/* .api */ .FH.get("/api/projects/".concat(proj.id, "/dashboard")); setDashboard(dash); setLoading(false); } catch (e) { setError(e.message); setLoading(false); } })(); }, []); if (loading) return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "shell-loading", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "spinner" }) }); if (error) return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "empty-state", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "empty-icon", children: "!" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { children: error }) ] }); return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "dash-header", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h1", { children: (project === null || project === void 0 ? void 0 : project.name) || 'Dashboard' }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { className: "muted", children: (project === null || project === void 0 ? void 0 : project.subtitle) || '' }) ] }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "dash-actions", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("a", { href: "/api/projects/".concat(project === null || project === void 0 ? void 0 : project.id, "/reports/executive.html"), className: "button secondary small", target: "_blank", children: "Report" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("a", { href: "/api/projects/".concat(project === null || project === void 0 ? void 0 : project.id, "/reports/risk-register.csv"), className: "button secondary small", target: "_blank", children: "CSV" }) ] }) ] }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "tabs", children: TABS.map((t)=>/*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { className: "tab ".concat(tab === t ? 'active' : ''), onClick: ()=>router.push("/dashboard?tab=".concat(t)), children: t }, t)) }), tab === 'Overview' && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(OverviewTab, { project: project, dashboard: dashboard }), tab === 'Risks' && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(RisksTab, { project: project, dashboard: dashboard, toast: { add } }), tab === 'Mitigations' && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(MitigationsTab, { project: project, dashboard: dashboard, toast: { add } }), tab === 'Gate' && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(GateTab, { project: project, dashboard: dashboard }), tab === 'Integrations' && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(IntegrationsTab, { project: project, dashboard: dashboard }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(ToastContainer, { toasts: toasts }) ] }); }  {"finalSource":true} mapbufferedMap ConcatSourceRawSourceO__webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ DashboardPage) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5155); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2115); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(63); /* harmony import */ var _lib_api_client__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6282); ReplaceSourceRawSource/* __next_internal_client_entry_do_not_use__ default auto */ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime"; import { useEffect, useState, useCallback, useMemo } from 'react'; import { useRouter } from 'next/navigation'; import { api } from '../../lib/api-client'; const TABS = [ 'Overview', 'Risks', 'Mitigations', 'Gate', 'Integrations' ]; const PAGE_SIZE = 20; function useToast() { const [toasts, setToasts] = useState([]); const add = useCallback(function(message) { let type = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 'success'; const id = Date.now() + Math.random(); setToasts((prev)=>[ ...prev, { id, message, type } ]); setTimeout(()=>setToasts((prev)=>prev.filter((t)=>t.id !== id)), 3000); }, []); return { toasts, add }; } function ToastContainer(param) { let { toasts } = param; if (!toasts.length) return null; return /*#__PURE__*/ _jsx("div", { className: "toast-container", children: toasts.map((t)=>/*#__PURE__*/ _jsx("div", { className: "toast ".concat(t.type), children: t.message }, t.id)) }); } function SearchInput(param) { let { value, onChange, placeholder } = param; return /*#__PURE__*/ _jsxs("div", { className: "search-wrap", children: [ /*#__PURE__*/ _jsx("span", { className: "search-icon", children: "⌕" }), /*#__PURE__*/ _jsx("input", { className: "input", value: value, onChange: (e)=>onChange(e.target.value), placeholder: placeholder || 'Search...' }) ] }); } function sortData(list, sortKey, sortDir) { if (!sortKey) return list; return [ ...list ].sort((a, b)=>{ const va = a[sortKey], vb = b[sortKey]; if (va == null) return 1; if (vb == null) return -1; const cmp = typeof va === 'number' ? va - vb : String(va).localeCompare(String(vb)); return sortDir === 'asc' ? cmp : -cmp; }); } function Badge(param) { let { children, className } = param; return /*#__PURE__*/ _jsx("span", { className: "badge ".concat(className || ''), children: children }); } function OverviewTab(param) { let { project, dashboard } = param; const panels = useMemo(()=>{ var _dashboard_summary, _dashboard_summary1, _dashboard_summary2, _dashboard_summary3, _dashboard_summary4, _dashboard_summary5, _dashboard_summary6, _dashboard_gate, _dashboard_summary7, _dashboard_summary8, _dashboard_summary9, _dashboard_summary10, _dashboard_summary11, _dashboard_summary12, _dashboard_summary13; if (!dashboard) return []; var _dashboard_summary_overallScore, _dashboard_summary_gateStatus, _dashboard_summary_openRisks, _dashboard_summary_mitigationCompletion; return [ { label: 'Overall Score', value: (_dashboard_summary_overallScore = (_dashboard_summary = dashboard.summary) === null || _dashboard_summary === void 0 ? void 0 : _dashboard_summary.overallScore) !== null && _dashboard_summary_overallScore !== void 0 ? _dashboard_summary_overallScore : '-', cls: ((_dashboard_summary1 = dashboard.summary) === null || _dashboard_summary1 === void 0 ? void 0 : _dashboard_summary1.overallScore) >= 75 ? 'bad' : ((_dashboard_summary2 = dashboard.summary) === null || _dashboard_summary2 === void 0 ? void 0 : _dashboard_summary2.overallScore) >= 50 ? 'warn' : 'good', sub: "Risk level: ".concat(((_dashboard_summary3 = dashboard.summary) === null || _dashboard_summary3 === void 0 ? void 0 : _dashboard_summary3.riskLevel) || '-') }, { label: 'Deployment Gate', value: (_dashboard_summary_gateStatus = (_dashboard_summary4 = dashboard.summary) === null || _dashboard_summary4 === void 0 ? void 0 : _dashboard_summary4.gateStatus) !== null && _dashboard_summary_gateStatus !== void 0 ? _dashboard_summary_gateStatus : '-', cls: ((_dashboard_summary5 = dashboard.summary) === null || _dashboard_summary5 === void 0 ? void 0 : _dashboard_summary5.gateStatus) === 'Ready' ? 'good' : ((_dashboard_summary6 = dashboard.summary) === null || _dashboard_summary6 === void 0 ? void 0 : _dashboard_summary6.gateStatus) === 'Warning' ? 'warn' : 'bad', sub: ((_dashboard_gate = dashboard.gate) === null || _dashboard_gate === void 0 ? void 0 : _dashboard_gate.message) || '' }, { label: 'Open Risks', value: (_dashboard_summary_openRisks = (_dashboard_summary7 = dashboard.summary) === null || _dashboard_summary7 === void 0 ? void 0 : _dashboard_summary7.openRisks) !== null && _dashboard_summary_openRisks !== void 0 ? _dashboard_summary_openRisks : 0, cls: (((_dashboard_summary8 = dashboard.summary) === null || _dashboard_summary8 === void 0 ? void 0 : _dashboard_summary8.openRisks) || 0) > 5 ? 'bad' : (((_dashboard_summary9 = dashboard.summary) === null || _dashboard_summary9 === void 0 ? void 0 : _dashboard_summary9.openRisks) || 0) > 2 ? 'warn' : 'good', sub: "".concat(((_dashboard_summary10 = dashboard.summary) === null || _dashboard_summary10 === void 0 ? void 0 : _dashboard_summary10.totalRisks) || 0, " total risks") }, { label: 'Mitigation', value: "".concat((_dashboard_summary_mitigationCompletion = (_dashboard_summary11 = dashboard.summary) === null || _dashboard_summary11 === void 0 ? void 0 : _dashboard_summary11.mitigationCompletion) !== null && _dashboard_summary_mitigationCompletion !== void 0 ? _dashboard_summary_mitigationCompletion : 0, "%"), cls: (((_dashboard_summary12 = dashboard.summary) === null || _dashboard_summary12 === void 0 ? void 0 : _dashboard_summary12.mitigationCompletion) || 0) < 40 ? 'bad' : (((_dashboard_summary13 = dashboard.summary) === null || _dashboard_summary13 === void 0 ? void 0 : _dashboard_summary13.mitigationCompletion) || 0) < 70 ? 'warn' : 'good', sub: 'Average active-risk completion' } ]; }, [ dashboard ]); if (!dashboard) return /*#__PURE__*/ _jsx("div", { className: "empty-state", children: /*#__PURE__*/ _jsx("p", { children: "Loading dashboard data..." }) }); return /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx("div", { className: "grid", style: { gridTemplateColumns: 'repeat(auto-fit, minmax(200px, 1fr))' }, children: panels.map((p)=>/*#__PURE__*/ _jsxs("div", { className: "metric-card", children: [ /*#__PURE__*/ _jsx("h3", { children: p.label }), /*#__PURE__*/ _jsx("div", { className: "metric-value ".concat(p.cls), children: p.value }), /*#__PURE__*/ _jsx("div", { className: "metric-sub", children: p.sub }) ] }, p.label)) }), /*#__PURE__*/ _jsxs("div", { className: "grid", style: { gridTemplateColumns: '1fr 1fr', marginTop: 18 }, children: [ /*#__PURE__*/ _jsxs("div", { className: "panel", children: [ /*#__PURE__*/ _jsx("h2", { children: "Dimensions" }), (dashboard.dimensions || []).map((dim)=>/*#__PURE__*/ _jsxs("div", { style: { marginBottom: 12 }, children: [ /*#__PURE__*/ _jsxs("div", { style: { display: 'flex', justifyContent: 'space-between', marginBottom: 4 }, children: [ /*#__PURE__*/ _jsx("span", { style: { fontSize: 13 }, children: dim.name }), /*#__PURE__*/ _jsx("strong", { style: { fontSize: 13 }, children: dim.score }) ] }), /*#__PURE__*/ _jsx("div", { className: "bar-wrap", children: /*#__PURE__*/ _jsx("div", { className: "bar-fill", style: { width: "".concat(Math.min(dim.score, 100), "%"), background: dim.score >= 50 ? 'var(--danger)' : dim.score >= 25 ? 'var(--warn)' : 'var(--accent)' } }) }) ] }, dim.name)) ] }), /*#__PURE__*/ _jsxs("div", { className: "panel", children: [ /*#__PURE__*/ _jsx("h2", { children: "Lifecycle" }), (dashboard.lifecycle || []).map((phase)=>/*#__PURE__*/ _jsxs("div", { style: { marginBottom: 12 }, children: [ /*#__PURE__*/ _jsxs("div", { style: { display: 'flex', justifyContent: 'space-between', marginBottom: 4 }, children: [ /*#__PURE__*/ _jsx("span", { style: { fontSize: 13 }, children: phase.name }), /*#__PURE__*/ _jsxs("span", { className: "muted", style: { fontSize: 12 }, children: [ phase.openRisks, " open" ] }) ] }), /*#__PURE__*/ _jsx("div", { className: "bar-wrap", children: /*#__PURE__*/ _jsx("div", { className: "bar-fill", style: { width: "".concat(Math.min(phase.riskScore || 0, 100), "%"), background: (phase.riskScore || 0) >= 50 ? 'var(--danger)' : (phase.riskScore || 0) >= 25 ? 'var(--warn)' : 'var(--accent)' } }) }) ] }, phase.name)) ] }) ] }) ] }); } function RisksTab(param) { let { project, dashboard, toast } = param; const [search, setSearch] = useState(''); const [sortKey, setSortKey] = useState('normalizedScore'); const [sortDir, setSortDir] = useState('desc'); const [page, setPage] = useState(0); const [selectedRisk, setSelectedRisk] = useState(null); const [updating, setUpdating] = useState(null); const risks = useMemo(()=>{ if (!(dashboard === null || dashboard === void 0 ? void 0 : dashboard.topRisks)) return []; return sortData(dashboard.topRisks, sortKey, sortDir); }, [ dashboard, sortKey, sortDir ]); const filtered = useMemo(()=>{ if (!search) return risks; const q = search.toLowerCase(); return risks.filter((r)=>(r.title || '').toLowerCase().includes(q) || (r.dimension || '').toLowerCase().includes(q) || (r.ownerDisplayName || '').toLowerCase().includes(q)); }, [ risks, search ]); const paged = filtered.slice(0, (page + 1) * PAGE_SIZE); const handleSort = (key)=>{ if (sortKey === key) setSortDir((d)=>d === 'asc' ? 'desc' : 'asc'); else { setSortKey(key); setSortDir('asc'); } }; const updateStatus = async (riskId, status)=>{ setUpdating(riskId); try { await api.patch("/api/risks/".concat(riskId), { status }); toast.add("Risk status updated to ".concat(status)); setSelectedRisk(null); } catch (e) { toast.add(e.message, 'error'); } finally{ setUpdating(null); } }; if (!dashboard) return /*#__PURE__*/ _jsx("div", { className: "empty-state", children: /*#__PURE__*/ _jsx("p", { children: "Loading..." }) }); return /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx(SearchInput, { value: search, onChange: setSearch, placeholder: "Search risks by title, dimension, owner..." }), /*#__PURE__*/ _jsx("div", { className: "table-wrap", children: /*#__PURE__*/ _jsxs("table", { className: "table", children: [ /*#__PURE__*/ _jsx("thead", { children: /*#__PURE__*/ _jsx("tr", { children: [ { key: 'id', label: 'ID' }, { key: 'title', label: 'Risk' }, { key: 'dimension', label: 'Dimension' }, { key: 'lifecyclePhase', label: 'Phase' }, { key: 'normalizedScore', label: 'Score' }, { key: 'residualScore', label: 'Residual' }, { key: 'status', label: 'Status' }, { key: 'ownerDisplayName', label: 'Owner' } ].map((col)=>/*#__PURE__*/ _jsxs("th", { className: "sortable", onClick: ()=>handleSort(col.key), children: [ col.label, " ", sortKey === col.key ? sortDir === 'asc' ? '▲' : '▼' : '' ] }, col.key)) }) }), /*#__PURE__*/ _jsx("tbody", { children: paged.map((risk)=>{ var _risk_id, _risk_dimension, _risk_status; return /*#__PURE__*/ _jsxs("tr", { onClick: ()=>setSelectedRisk(risk), children: [ /*#__PURE__*/ _jsx("td", { style: { fontFamily: 'monospace', fontSize: 12 }, children: (_risk_id = risk.id) === null || _risk_id === void 0 ? void 0 : _risk_id.slice(0, 8) }), /*#__PURE__*/ _jsx("td", { children: /*#__PURE__*/ _jsx("strong", { children: risk.title }) }), /*#__PURE__*/ _jsx("td", { children: /*#__PURE__*/ _jsx(Badge, { className: (_risk_dimension = risk.dimension) === null || _risk_dimension === void 0 ? void 0 : _risk_dimension.toLowerCase(), children: risk.dimension }) }), /*#__PURE__*/ _jsx("td", { style: { fontSize: 12 }, children: risk.lifecyclePhase }), /*#__PURE__*/ _jsx("td", { children: /*#__PURE__*/ _jsx("strong", { children: risk.normalizedScore }) }), /*#__PURE__*/ _jsx("td", { children: /*#__PURE__*/ _jsx("span", { style: { color: risk.residualScore >= 50 ? 'var(--danger)' : risk.residualScore >= 25 ? 'var(--warn)' : 'var(--accent)' }, children: risk.residualScore }) }), /*#__PURE__*/ _jsx("td", { children: /*#__PURE__*/ _jsx(Badge, { className: (_risk_status = risk.status) === null || _risk_status === void 0 ? void 0 : _risk_status.toLowerCase().replace(/\s+/g, '-'), children: risk.status }) }), /*#__PURE__*/ _jsx("td", { children: /*#__PURE__*/ _jsx("span", { className: "muted", children: risk.ownerDisplayName || '-' }) }) ] }, risk.id); }) }) ] }) }), filtered.length > paged.length && /*#__PURE__*/ _jsx("div", { style: { textAlign: 'center', marginTop: 12 }, children: /*#__PURE__*/ _jsxs("button", { className: "button secondary small", onClick: ()=>setPage((p)=>p + 1), children: [ "Show more (", filtered.length - paged.length, " remaining)" ] }) }), !filtered.length && /*#__PURE__*/ _jsx("div", { className: "empty-state", children: /*#__PURE__*/ _jsx("p", { children: "No risks match your search" }) }), selectedRisk && /*#__PURE__*/ _jsx("div", { className: "modal-overlay", onClick: ()=>setSelectedRisk(null), children: /*#__PURE__*/ _jsxs("div", { className: "modal", onClick: (e)=>e.stopPropagation(), children: [ /*#__PURE__*/ _jsx("h2", { children: selectedRisk.title }), /*#__PURE__*/ _jsxs("div", { style: { display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 12, fontSize: 13 }, children: [ /*#__PURE__*/ _jsxs("div", { children: [ /*#__PURE__*/ _jsx("span", { className: "muted", children: "Dimension" }), /*#__PURE__*/ _jsx("br", {}), selectedRisk.dimension ] }), /*#__PURE__*/ _jsxs("div", { children: [ /*#__PURE__*/ _jsx("span", { className: "muted", children: "Phase" }), /*#__PURE__*/ _jsx("br", {}), selectedRisk.lifecyclePhase ] }), /*#__PURE__*/ _jsxs("div", { children: [ /*#__PURE__*/ _jsx("span", { className: "muted", children: "Probability" }), /*#__PURE__*/ _jsx("br", {}), selectedRisk.probability ] }), /*#__PURE__*/ _jsxs("div", { children: [ /*#__PURE__*/ _jsx("span", { className: "muted", children: "Impact" }), /*#__PURE__*/ _jsx("br", {}), selectedRisk.impact ] }), /*#__PURE__*/ _jsxs("div", { children: [ /*#__PURE__*/ _jsx("span", { className: "muted", children: "Detectability" }), /*#__PURE__*/ _jsx("br", {}), selectedRisk.detectability ] }), /*#__PURE__*/ _jsxs("div", { children: [ /*#__PURE__*/ _jsx("span", { className: "muted", children: "Score" }), /*#__PURE__*/ _jsx("br", {}), /*#__PURE__*/ _jsx("strong", { children: selectedRisk.normalizedScore }) ] }), /*#__PURE__*/ _jsxs("div", { children: [ /*#__PURE__*/ _jsx("span", { className: "muted", children: "Residual" }), /*#__PURE__*/ _jsx("br", {}), selectedRisk.residualScore ] }), /*#__PURE__*/ _jsxs("div", { children: [ /*#__PURE__*/ _jsx("span", { className: "muted", children: "Owner" }), /*#__PURE__*/ _jsx("br", {}), selectedRisk.ownerDisplayName || '-' ] }) ] }), selectedRisk.description && /*#__PURE__*/ _jsxs("div", { style: { marginTop: 12, fontSize: 13 }, children: [ /*#__PURE__*/ _jsx("span", { className: "muted", children: "Description" }), /*#__PURE__*/ _jsx("br", {}), selectedRisk.description ] }), /*#__PURE__*/ _jsxs("div", { style: { marginTop: 16 }, children: [ /*#__PURE__*/ _jsx("span", { className: "muted", style: { fontSize: 12 }, children: "Update status:" }), /*#__PURE__*/ _jsx("div", { style: { display: 'flex', gap: 6, marginTop: 6, flexWrap: 'wrap' }, children: [ 'OPEN', 'IN_MITIGATION', 'ACCEPTED', 'CLOSED' ].map((s)=>/*#__PURE__*/ _jsx("button", { className: "button small ".concat(s === 'OPEN' ? 'secondary' : ''), onClick: ()=>updateStatus(selectedRisk.id, s), disabled: updating === selectedRisk.id, children: s.replace('_', ' ') }, s)) }) ] }), /*#__PURE__*/ _jsx("div", { className: "modal-actions", children: /*#__PURE__*/ _jsx("button", { className: "button secondary small", onClick: ()=>setSelectedRisk(null), children: "Close" }) }) ] }) }) ] }); } function MitigationsTab(param) { let { project, dashboard, toast } = param; const [search, setSearch] = useState(''); const [sortKey, setSortKey] = useState('progressPercent'); const [sortDir, setSortDir] = useState('asc'); const mitigations = useMemo(()=>{ if (!(dashboard === null || dashboard === void 0 ? void 0 : dashboard.mitigations)) return []; return sortData(dashboard.mitigations, sortKey, sortDir); }, [ dashboard, sortKey, sortDir ]); const filtered = useMemo(()=>{ if (!search) return mitigations; const q = search.toLowerCase(); return mitigations.filter((m)=>(m.title || '').toLowerCase().includes(q) || (m.riskTitle || '').toLowerCase().includes(q)); }, [ mitigations, search ]); const handleSort = (key)=>{ if (sortKey === key) setSortDir((d)=>d === 'asc' ? 'desc' : 'asc'); else { setSortKey(key); setSortDir('asc'); } }; if (!dashboard) return /*#__PURE__*/ _jsx("div", { className: "empty-state", children: /*#__PURE__*/ _jsx("p", { children: "Loading..." }) }); return /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx(SearchInput, { value: search, onChange: setSearch, placeholder: "Search mitigations..." }), /*#__PURE__*/ _jsx("div", { className: "table-wrap", children: /*#__PURE__*/ _jsxs("table", { className: "table", children: [ /*#__PURE__*/ _jsx("thead", { children: /*#__PURE__*/ _jsx("tr", { children: [ { key: 'title', label: 'Title' }, { key: 'riskTitle', label: 'Risk' }, { key: 'status', label: 'Status' }, { key: 'progressPercent', label: 'Progress' }, { key: 'effectivenessPercent', label: 'Effectiveness' }, { key: 'ownerDisplayName', label: 'Owner' } ].map((col)=>/*#__PURE__*/ _jsxs("th", { className: "sortable", onClick: ()=>handleSort(col.key), children: [ col.label, " ", sortKey === col.key ? sortDir === 'asc' ? '▲' : '▼' : '' ] }, col.key)) }) }), /*#__PURE__*/ _jsx("tbody", { children: filtered.slice(0, 50).map((m)=>{ var _m_status; return /*#__PURE__*/ _jsxs("tr", { children: [ /*#__PURE__*/ _jsx("td", { children: /*#__PURE__*/ _jsx("strong", { children: m.title }) }), /*#__PURE__*/ _jsx("td", { children: /*#__PURE__*/ _jsx("span", { className: "muted", children: m.riskTitle }) }), /*#__PURE__*/ _jsx("td", { children: /*#__PURE__*/ _jsx(Badge, { className: (_m_status = m.status) === null || _m_status === void 0 ? void 0 : _m_status.toLowerCase().replace(/\s+/g, '-'), children: m.status }) }), /*#__PURE__*/ _jsx("td", { children: /*#__PURE__*/ _jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: 8 }, children: [ /*#__PURE__*/ _jsx("div", { className: "bar-wrap", style: { flex: 1, maxWidth: 80 }, children: /*#__PURE__*/ _jsx("div", { className: "bar-fill", style: { width: "".concat(m.progressPercent || 0, "%"), background: (m.progressPercent || 0) >= 80 ? 'var(--accent)' : (m.progressPercent || 0) >= 30 ? 'var(--warn)' : 'var(--danger)' } }) }), m.progressPercent || 0, "%" ] }) }), /*#__PURE__*/ _jsxs("td", { children: [ m.effectivenessPercent || 0, "%" ] }), /*#__PURE__*/ _jsx("td", { children: /*#__PURE__*/ _jsx("span", { className: "muted", children: m.ownerDisplayName || '-' }) }) ] }, m.id); }) }) ] }) }), !filtered.length && /*#__PURE__*/ _jsx("div", { className: "empty-state", children: /*#__PURE__*/ _jsx("p", { children: "No mitigations found" }) }) ] }); } function GateTab(param) { let { project, dashboard } = param; var _dashboard_gate, _dashboard_summary; if (!dashboard) return /*#__PURE__*/ _jsx("div", { className: "empty-state", children: /*#__PURE__*/ _jsx("p", { children: "Loading..." }) }); const criteria = ((_dashboard_gate = dashboard.gate) === null || _dashboard_gate === void 0 ? void 0 : _dashboard_gate.criteria) || []; const gateStatus = ((_dashboard_summary = dashboard.summary) === null || _dashboard_summary === void 0 ? void 0 : _dashboard_summary.gateStatus) || 'Unknown'; const gateCls = gateStatus === 'Ready' ? 'good' : gateStatus === 'Warning' ? 'warn' : 'bad'; return /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs("div", { className: "dash-header", children: [ /*#__PURE__*/ _jsxs("div", { children: [ /*#__PURE__*/ _jsx("h1", { children: "Deployment Gate" }), /*#__PURE__*/ _jsx("p", { className: "muted", children: "Nine-criteria gate evaluation for AI deployment readiness" }) ] }), /*#__PURE__*/ _jsx("div", { className: "dash-actions", children: /*#__PURE__*/ _jsx("div", { className: "metric-value ".concat(gateCls), style: { fontSize: 28 }, children: gateStatus }) }) ] }), /*#__PURE__*/ _jsx("div", { className: "table-wrap", children: /*#__PURE__*/ _jsxs("table", { className: "table", children: [ /*#__PURE__*/ _jsx("thead", { children: /*#__PURE__*/ _jsxs("tr", { children: [ /*#__PURE__*/ _jsx("th", { children: "Criterion" }), /*#__PURE__*/ _jsx("th", { children: "Required" }), /*#__PURE__*/ _jsx("th", { children: "Actual" }), /*#__PURE__*/ _jsx("th", { children: "Status" }) ] }) }), /*#__PURE__*/ _jsx("tbody", { children: criteria.map((c)=>{ var _c_status; return /*#__PURE__*/ _jsxs("tr", { children: [ /*#__PURE__*/ _jsx("td", { children: /*#__PURE__*/ _jsx("strong", { children: c.name }) }), /*#__PURE__*/ _jsx("td", { children: c.required }), /*#__PURE__*/ _jsx("td", { children: c.actual }), /*#__PURE__*/ _jsx("td", { children: /*#__PURE__*/ _jsx(Badge, { className: (_c_status = c.status) === null || _c_status === void 0 ? void 0 : _c_status.toLowerCase(), children: c.status }) }) ] }, c.name); }) }) ] }) }), !criteria.length && /*#__PURE__*/ _jsx("div", { className: "empty-state", children: /*#__PURE__*/ _jsx("p", { children: "No gate criteria evaluated yet" }) }), /*#__PURE__*/ _jsxs("div", { style: { marginTop: 16, display: 'flex', gap: 8 }, children: [ /*#__PURE__*/ _jsx("a", { href: "/api/projects/".concat(project === null || project === void 0 ? void 0 : project.id, "/gate/evaluate"), className: "button secondary small", target: "_blank", children: "Evaluate (API)" }), /*#__PURE__*/ _jsx("a", { href: "/api/projects/".concat(project === null || project === void 0 ? void 0 : project.id, "/gate/history"), className: "button secondary small", target: "_blank", children: "History (API)" }) ] }) ] }); } function IntegrationsTab(param) { let { project, dashboard } = param; return /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx("div", { className: "dash-header", children: /*#__PURE__*/ _jsxs("div", { children: [ /*#__PURE__*/ _jsx("h1", { children: "Integrations" }), /*#__PURE__*/ _jsx("p", { className: "muted", children: "Connect Trello, Jira, Asana, or Microsoft Planner" }) ] }) }), /*#__PURE__*/ _jsx("div", { className: "grid", style: { gridTemplateColumns: 'repeat(auto-fit, minmax(240px, 1fr))' }, children: [ 'TRELLO', 'JIRA', 'ASANA', 'MICROSOFT_PLANNER' ].map((provider)=>/*#__PURE__*/ _jsxs("div", { className: "panel", style: { textAlign: 'center' }, children: [ /*#__PURE__*/ _jsx("div", { style: { fontSize: 32, marginBottom: 8 }, children: provider === 'TRELLO' ? '⊞' : provider === 'JIRA' ? '◆' : provider === 'ASANA' ? '◇' : '▣' }), /*#__PURE__*/ _jsx("h3", { style: { margin: '0 0 4px' }, children: provider.replace('_', ' ') }), /*#__PURE__*/ _jsx("p", { className: "muted", style: { fontSize: 12, margin: '0 0 12px' }, children: "Project management sync" }), /*#__PURE__*/ _jsxs("div", { style: { display: 'flex', gap: 6, justifyContent: 'center' }, children: [ /*#__PURE__*/ _jsx("a", { href: "/api/integration-providers", className: "button secondary small", children: "Configure" }), /*#__PURE__*/ _jsx("a", { href: "/api/integrations", className: "button secondary small", children: "Manage" }) ] }) ] }, provider)) }), /*#__PURE__*/ _jsx("div", { style: { marginTop: 12 }, children: /*#__PURE__*/ _jsx("a", { href: "/api/integration-providers", className: "button secondary small", target: "_blank", children: "Integration providers (API)" }) }) ] }); } export default function DashboardPage() { const router = useRouter(); const [tab, setTab] = useState('Overview'); const [project, setProject] = useState(null); const [dashboard, setDashboard] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const { toasts, add } = useToast(); useEffect(()=>{ const params = new URLSearchParams(window.location.search); const t = params.get('tab'); if (t && TABS.includes(t)) setTab(t); }, []); useEffect(()=>{ (async ()=>{ try { const workspaces = await api.get('/api/workspaces'); const ws = workspaces === null || workspaces === void 0 ? void 0 : workspaces[0]; if (!ws) { setError('No workspace found'); setLoading(false); return; } const projects = await api.get("/api/workspaces/".concat(ws.id, "/projects")); const proj = projects === null || projects === void 0 ? void 0 : projects[0]; if (!proj) { setError('No project found'); setLoading(false); return; } setProject(proj); const dash = await api.get("/api/projects/".concat(proj.id, "/dashboard")); setDashboard(dash); setLoading(false); } catch (e) { setError(e.message); setLoading(false); } })(); }, []); if (loading) return /*#__PURE__*/ _jsx("div", { className: "shell-loading", children: /*#__PURE__*/ _jsx("div", { className: "spinner" }) }); if (error) return /*#__PURE__*/ _jsxs("div", { className: "empty-state", children: [ /*#__PURE__*/ _jsx("div", { className: "empty-icon", children: "!" }), /*#__PURE__*/ _jsx("p", { children: error }) ] }); return /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs("div", { className: "dash-header", children: [ /*#__PURE__*/ _jsxs("div", { children: [ /*#__PURE__*/ _jsx("h1", { children: (project === null || project === void 0 ? void 0 : project.name) || 'Dashboard' }), /*#__PURE__*/ _jsx("p", { className: "muted", children: (project === null || project === void 0 ? void 0 : project.subtitle) || '' }) ] }), /*#__PURE__*/ _jsxs("div", { className: "dash-actions", children: [ /*#__PURE__*/ _jsx("a", { href: "/api/projects/".concat(project === null || project === void 0 ? void 0 : project.id, "/reports/executive.html"), className: "button secondary small", target: "_blank", children: "Report" }), /*#__PURE__*/ _jsx("a", { href: "/api/projects/".concat(project === null || project === void 0 ? void 0 : project.id, "/reports/risk-register.csv"), className: "button secondary small", target: "_blank", children: "CSV" }) ] }) ] }), /*#__PURE__*/ _jsx("div", { className: "tabs", children: TABS.map((t)=>/*#__PURE__*/ _jsx("button", { className: "tab ".concat(tab === t ? 'active' : ''), onClick: ()=>router.push("/dashboard?tab=".concat(t)), children: t }, t)) }), tab === 'Overview' && /*#__PURE__*/ _jsx(OverviewTab, { project: project, dashboard: dashboard }), tab === 'Risks' && /*#__PURE__*/ _jsx(RisksTab, { project: project, dashboard: dashboard, toast: { add } }), tab === 'Mitigations' && /*#__PURE__*/ _jsx(MitigationsTab, { project: project, dashboard: dashboard, toast: { add } }), tab === 'Gate' && /*#__PURE__*/ _jsx(GateTab, { project: project, dashboard: dashboard }), tab === 'Integrations' && /*#__PURE__*/ _jsx(IntegrationsTab, { project: project, dashboard: dashboard }), /*#__PURE__*/ _jsx(ToastContainer, { toasts: toasts }) ] }); } ?61146undefined148213undefined215258undefined260302undefined477484(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined507517(0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)undefined11291132(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined12291232(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined14681472(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined15631566(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined16921695(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined24042407(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined25982604(0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)undefined65556558(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined66356638(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined67416745(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined67476755react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragmentundefined68066809(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined70357039(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined71787181(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined73157318(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined75277530(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined77787782(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined80208024(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined81578160(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined83398343(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined85978601(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined90409043(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined94259428(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined98949897(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1004310046(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1074410748(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1088110884(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1106311067(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1132111325(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1176411767(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1215112155(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1287412877(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1302313026(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1388713894(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined1393513942(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined1399814005(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined1404414051(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined1410114108(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined1415314160(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined1418714193(0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)undefined1445414460(0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)undefined1514515147_lib_api_client__WEBPACK_IMPORTED_MODULE_3__/* .api */ .FHundefined1549915502(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1557915582(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1567015674(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1567615684react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragmentundefined1573515738(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1593915942(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1603416038(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1616116164(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1622916232(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1787617880(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1847218475(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1867618680(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1886418867(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1934819351(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1942919432(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1966019663(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1974119744(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2014820151(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2049420497(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2057520578(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2081620819(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2089720900(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2140521408(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2148621489(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2189921902(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2198021983(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2249822501(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2267122675(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2306823071(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2316423167(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2331223315(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2346223466(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2364223645(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2377823782(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2414624150(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2426324266(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2450624509(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2470524709(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2482224825(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2506125064(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2526525269(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2538225385(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2562725630(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2582825832(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2594525948(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2618526188(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2638126385(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2649826501(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2674526748(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2694826952(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2706527068(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2730427307(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2737427377(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2763727641(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2775427757(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2799627999(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2819928203(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2831628319(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2855528558(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2884528849(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2910629109(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2931929322(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2948829492(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2970329706(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined3005630059(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined3068530688(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined3124131244(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined3136331366(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined3181331820(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined3186131868(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined3192431931(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined3196531971(0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)undefined3223832244(0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)undefined3275932762(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined3283932842(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined3293032934(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined3293632944react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragmentundefined3299532998(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined3317833181(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined3327333277(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined3340033403(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined3346833471(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined3475134755(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined3534735350(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined3553435538(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined3565035653(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined3573135734(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined3595935962(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined3604036043(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined3633836341(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined3641936422(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined3681736820(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined3689836902(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined3734937352(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined3778837791(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined3876138765(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined3910439107(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined3918539188(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined3968339686(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined3977939782(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined4005040053(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined4013040133(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined4062140625(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined4062740635react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragmentundefined4068640690(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined4080540809(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined4089840901(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined4104541048(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined4132641329(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined4143941442(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined4179741800(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined4189241896(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined4201942022(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined4208742091(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined4219542198(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined4236042363(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined4252442527(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined4268642689(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined4292842931(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined4310243106(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined4321843221(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined4329943302(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined4352643529(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined4370243705(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined4387643879(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined4395743960(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined4452244525(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined4461844621(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined4475444758(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined4497444977(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined4533345336(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined4580745811(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined4581345821react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragmentundefined4587245875(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined4596845972(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined4605346056(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined4618546188(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined4644546448(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined4682146825(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined4706647069(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined4746547468(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined4775147754(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined4813848142(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined4848148484(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined4879848801(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined4921949222(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined4935149354(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined4962849642undefined4968949697(0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)undefined4972849735(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined4978449791(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined4983849845(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined4988849895(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined4993449941(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined4999450002(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined5017750185(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined5027350275_lib_api_client__WEBPACK_IMPORTED_MODULE_3__/* .api */ .FHundefined5060250604_lib_api_client__WEBPACK_IMPORTED_MODULE_3__/* .api */ .FHundefined5098550987_lib_api_client__WEBPACK_IMPORTED_MODULE_3__/* .api */ .FHundefined5128951292(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined5137151374(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined5147351477(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined5156851571(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined5169551698(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined5179751801(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined5180351811react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragmentundefined5186251866(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined5198151985(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined5207452077(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined5228352286(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined5257952583(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined5272352726(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined5313153134(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined5360553608(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined5370853711(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined5400854011(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined5416054163(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined5438354386(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined5460554608(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined5476054763(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined5489754900(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined__webpack_require____webpack_require__.r__webpack_exports____webpack_require__.d    (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1954],{63:(e,a,s)=>{"use strict";var t=s(7260);s.o(t,"useRouter")&&s.d(a,{useRouter:function(){return t.useRouter}}),s.o(t,"useSearchParams")&&s.d(a,{useSearchParams:function(){return t.useSearchParams}})},2354:(e,a,s)=>{"use strict";s.d(a,{default:()=>c});var t=s(5155),i=s(2115),n=s(63),r=s(6282);let l=[{label:"Overview",tab:"Overview",icon:"◇"},{label:"Risks",tab:"Risks",icon:"⚠"},{label:"Mitigations",tab:"Mitigations",icon:"●"},{label:"Gate",tab:"Gate",icon:"⊞"},{label:"Integrations",tab:"Integrations",icon:"⇆"}];function c(e){let{children:a}=e,[s,c]=(0,i.useState)(null),[o,d]=(0,i.useState)(!1),[u,b]=(0,i.useState)(!0),h=(0,n.useRouter)(),m=(0,n.useSearchParams)().get("tab")||"Overview";return((0,i.useEffect)(()=>{(0,r.Ht)().then(e=>{if(!e)return void h.replace("/login");c(e),b(!1)})},[h]),u)?(0,t.jsx)("div",{className:"shell-loading",children:(0,t.jsx)("div",{className:"spinner"})}):(0,t.jsxs)("div",{className:"app-shell",children:[(0,t.jsx)("button",{className:"sidebar-toggle",onClick:()=>d(!o),children:o?"✕":"☰"}),(0,t.jsxs)("aside",{className:"sidebar ".concat(o?"open":""),children:[(0,t.jsx)("div",{className:"sidebar-brand",children:"COSMIC"}),(0,t.jsxs)("div",{className:"sidebar-user",children:[(0,t.jsx)("div",{className:"sidebar-user-name",children:s.displayName}),(0,t.jsx)("div",{className:"sidebar-user-email",children:s.email})]}),(0,t.jsx)("nav",{className:"sidebar-nav",children:l.map(e=>{let a=m===e.tab;return(0,t.jsxs)("a",{href:"/dashboard?tab=".concat(e.tab),className:"sidebar-link ".concat(a?"active":""),onClick:a=>{a.preventDefault(),d(!1),h.push("/dashboard?tab=".concat(e.tab))},children:[(0,t.jsx)("span",{className:"sidebar-icon",children:e.icon}),e.label]},e.tab)})}),(0,t.jsx)("div",{className:"sidebar-footer",children:(0,t.jsx)("button",{className:"sidebar-logout",onClick:r.ri,children:"Sign out"})})]}),o&&(0,t.jsx)("div",{className:"sidebar-overlay",onClick:()=>d(!1)}),(0,t.jsx)("main",{className:"app-main",children:a})]})}},6282:(e,a,s)=>{"use strict";async function t(e,a,s){var t;let i={method:e,headers:{"Content-Type":"application/json"}};s&&(i.body=JSON.stringify(s));let n=await fetch("".concat("").concat(a),i),r=(null==(t=n.headers.get("content-type"))?void 0:t.includes("application/json"))?await n.json():await n.text();if(!n.ok)throw Error((null==r?void 0:r.error)||(null==r?void 0:r.message)||"Request failed (".concat(n.status,")"));return r}s.d(a,{FH:()=>i,Ht:()=>n,ri:()=>r});let i={get:e=>t("GET",e),post:(e,a)=>t("POST",e,a),put:(e,a)=>t("PUT",e,a),patch:(e,a)=>t("PATCH",e,a),del:e=>t("DELETE",e)};async function n(){try{let e=await i.get("/api/auth/session");return e.user||e.actor||null}catch(e){return null}}async function r(){await i.post("/api/auth/logout"),window.location.href="/"}},8724:(e,a,s)=>{Promise.resolve().then(s.bind(s,2354))}},e=>{e.O(0,[8441,1255,7358],()=>e(e.s=8724)),_N_E=e.O()}]);   !F(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5105],{63:(e,s,a)=>{"use strict";var l=a(7260);a.o(l,"useRouter")&&a.d(s,{useRouter:function(){return l.useRouter}}),a.o(l,"useSearchParams")&&a.d(s,{useSearchParams:function(){return l.useSearchParams}})},646:(e,s,a)=>{Promise.resolve().then(a.bind(a,4390))},4390:(e,s,a)=>{"use strict";a.r(s),a.d(s,{default:()=>v});var l=a(5155),t=a(2115),n=a(63),i=a(6282);let r=["Overview","Risks","Mitigations","Gate","Integrations"];function c(e){let{toasts:s}=e;return s.length?(0,l.jsx)("div",{className:"toast-container",children:s.map(e=>(0,l.jsx)("div",{className:"toast ".concat(e.type),children:e.message},e.id))}):null}function d(e){let{value:s,onChange:a,placeholder:t}=e;return(0,l.jsxs)("div",{className:"search-wrap",children:[(0,l.jsx)("span",{className:"search-icon",children:"⌕"}),(0,l.jsx)("input",{className:"input",value:s,onChange:e=>a(e.target.value),placeholder:t||"Search..."})]})}function o(e,s,a){return s?[...e].sort((e,l)=>{let t=e[s],n=l[s];if(null==t)return 1;if(null==n)return -1;let i="number"==typeof t?t-n:String(t).localeCompare(String(n));return"asc"===a?i:-i}):e}function m(e){let{children:s,className:a}=e;return(0,l.jsx)("span",{className:"badge ".concat(a||""),children:s})}function u(e){let{project:s,dashboard:a}=e,n=(0,t.useMemo)(()=>{var e,s,l,t,n,i,r,c,d,o,m,u,h,j,x,p,v,y,g;return a?[{label:"Overall Score",value:null!=(p=null==(e=a.summary)?void 0:e.overallScore)?p:"-",cls:(null==(s=a.summary)?void 0:s.overallScore)>=75?"bad":(null==(l=a.summary)?void 0:l.overallScore)>=50?"warn":"good",sub:"Risk level: ".concat((null==(t=a.summary)?void 0:t.riskLevel)||"-")},{label:"Deployment Gate",value:null!=(v=null==(n=a.summary)?void 0:n.gateStatus)?v:"-",cls:(null==(i=a.summary)?void 0:i.gateStatus)==="Ready"?"good":(null==(r=a.summary)?void 0:r.gateStatus)==="Warning"?"warn":"bad",sub:(null==(c=a.gate)?void 0:c.message)||""},{label:"Open Risks",value:null!=(y=null==(d=a.summary)?void 0:d.openRisks)?y:0,cls:((null==(o=a.summary)?void 0:o.openRisks)||0)>5?"bad":((null==(m=a.summary)?void 0:m.openRisks)||0)>2?"warn":"good",sub:"".concat((null==(u=a.summary)?void 0:u.totalRisks)||0," total risks")},{label:"Mitigation",value:"".concat(null!=(g=null==(h=a.summary)?void 0:h.mitigationCompletion)?g:0,"%"),cls:40>((null==(j=a.summary)?void 0:j.mitigationCompletion)||0)?"bad":70>((null==(x=a.summary)?void 0:x.mitigationCompletion)||0)?"warn":"good",sub:"Average active-risk completion"}]:[]},[a]);return a?(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("div",{className:"grid",style:{gridTemplateColumns:"repeat(auto-fit, minmax(200px, 1fr))"},children:n.map(e=>(0,l.jsxs)("div",{className:"metric-card",children:[(0,l.jsx)("h3",{children:e.label}),(0,l.jsx)("div",{className:"metric-value ".concat(e.cls),children:e.value}),(0,l.jsx)("div",{className:"metric-sub",children:e.sub})]},e.label))}),(0,l.jsxs)("div",{className:"grid",style:{gridTemplateColumns:"1fr 1fr",marginTop:18},children:[(0,l.jsxs)("div",{className:"panel",children:[(0,l.jsx)("h2",{children:"Dimensions"}),(a.dimensions||[]).map(e=>(0,l.jsxs)("div",{style:{marginBottom:12},children:[(0,l.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:4},children:[(0,l.jsx)("span",{style:{fontSize:13},children:e.name}),(0,l.jsx)("strong",{style:{fontSize:13},children:e.score})]}),(0,l.jsx)("div",{className:"bar-wrap",children:(0,l.jsx)("div",{className:"bar-fill",style:{width:"".concat(Math.min(e.score,100),"%"),background:e.score>=50?"var(--danger)":e.score>=25?"var(--warn)":"var(--accent)"}})})]},e.name))]}),(0,l.jsxs)("div",{className:"panel",children:[(0,l.jsx)("h2",{children:"Lifecycle"}),(a.lifecycle||[]).map(e=>(0,l.jsxs)("div",{style:{marginBottom:12},children:[(0,l.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:4},children:[(0,l.jsx)("span",{style:{fontSize:13},children:e.name}),(0,l.jsxs)("span",{className:"muted",style:{fontSize:12},children:[e.openRisks," open"]})]}),(0,l.jsx)("div",{className:"bar-wrap",children:(0,l.jsx)("div",{className:"bar-fill",style:{width:"".concat(Math.min(e.riskScore||0,100),"%"),background:(e.riskScore||0)>=50?"var(--danger)":(e.riskScore||0)>=25?"var(--warn)":"var(--accent)"}})})]},e.name))]})]})]}):(0,l.jsx)("div",{className:"empty-state",children:(0,l.jsx)("p",{children:"Loading dashboard data..."})})}function h(e){let{project:s,dashboard:a,toast:n}=e,[r,c]=(0,t.useState)(""),[u,h]=(0,t.useState)("normalizedScore"),[j,x]=(0,t.useState)("desc"),[p,v]=(0,t.useState)(0),[y,g]=(0,t.useState)(null),[b,N]=(0,t.useState)(null),f=(0,t.useMemo)(()=>(null==a?void 0:a.topRisks)?o(a.topRisks,u,j):[],[a,u,j]),k=(0,t.useMemo)(()=>{if(!r)return f;let e=r.toLowerCase();return f.filter(s=>(s.title||"").toLowerCase().includes(e)||(s.dimension||"").toLowerCase().includes(e)||(s.ownerDisplayName||"").toLowerCase().includes(e))},[f,r]),w=k.slice(0,(p+1)*20),S=async(e,s)=>{N(e);try{await i.FH.patch("/api/risks/".concat(e),{status:s}),n.add("Risk status updated to ".concat(s)),g(null)}catch(e){n.add(e.message,"error")}finally{N(null)}};return a?(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(d,{value:r,onChange:c,placeholder:"Search risks by title, dimension, owner..."}),(0,l.jsx)("div",{className:"table-wrap",children:(0,l.jsxs)("table",{className:"table",children:[(0,l.jsx)("thead",{children:(0,l.jsx)("tr",{children:[{key:"id",label:"ID"},{key:"title",label:"Risk"},{key:"dimension",label:"Dimension"},{key:"lifecyclePhase",label:"Phase"},{key:"normalizedScore",label:"Score"},{key:"residualScore",label:"Residual"},{key:"status",label:"Status"},{key:"ownerDisplayName",label:"Owner"}].map(e=>(0,l.jsxs)("th",{className:"sortable",onClick:()=>{var s;u===(s=e.key)?x(e=>"asc"===e?"desc":"asc"):(h(s),x("asc"))},children:[e.label," ",u===e.key?"asc"===j?"▲":"▼":""]},e.key))})}),(0,l.jsx)("tbody",{children:w.map(e=>{var s,a,t;return(0,l.jsxs)("tr",{onClick:()=>g(e),children:[(0,l.jsx)("td",{style:{fontFamily:"monospace",fontSize:12},children:null==(s=e.id)?void 0:s.slice(0,8)}),(0,l.jsx)("td",{children:(0,l.jsx)("strong",{children:e.title})}),(0,l.jsx)("td",{children:(0,l.jsx)(m,{className:null==(a=e.dimension)?void 0:a.toLowerCase(),children:e.dimension})}),(0,l.jsx)("td",{style:{fontSize:12},children:e.lifecyclePhase}),(0,l.jsx)("td",{children:(0,l.jsx)("strong",{children:e.normalizedScore})}),(0,l.jsx)("td",{children:(0,l.jsx)("span",{style:{color:e.residualScore>=50?"var(--danger)":e.residualScore>=25?"var(--warn)":"var(--accent)"},children:e.residualScore})}),(0,l.jsx)("td",{children:(0,l.jsx)(m,{className:null==(t=e.status)?void 0:t.toLowerCase().replace(/\s+/g,"-"),children:e.status})}),(0,l.jsx)("td",{children:(0,l.jsx)("span",{className:"muted",children:e.ownerDisplayName||"-"})})]},e.id)})})]})}),k.length>w.length&&(0,l.jsx)("div",{style:{textAlign:"center",marginTop:12},children:(0,l.jsxs)("button",{className:"button secondary small",onClick:()=>v(e=>e+1),children:["Show more (",k.length-w.length," remaining)"]})}),!k.length&&(0,l.jsx)("div",{className:"empty-state",children:(0,l.jsx)("p",{children:"No risks match your search"})}),y&&(0,l.jsx)("div",{className:"modal-overlay",onClick:()=>g(null),children:(0,l.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),children:[(0,l.jsx)("h2",{children:y.title}),(0,l.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:12,fontSize:13},children:[(0,l.jsxs)("div",{children:[(0,l.jsx)("span",{className:"muted",children:"Dimension"}),(0,l.jsx)("br",{}),y.dimension]}),(0,l.jsxs)("div",{children:[(0,l.jsx)("span",{className:"muted",children:"Phase"}),(0,l.jsx)("br",{}),y.lifecyclePhase]}),(0,l.jsxs)("div",{children:[(0,l.jsx)("span",{className:"muted",children:"Probability"}),(0,l.jsx)("br",{}),y.probability]}),(0,l.jsxs)("div",{children:[(0,l.jsx)("span",{className:"muted",children:"Impact"}),(0,l.jsx)("br",{}),y.impact]}),(0,l.jsxs)("div",{children:[(0,l.jsx)("span",{className:"muted",children:"Detectability"}),(0,l.jsx)("br",{}),y.detectability]}),(0,l.jsxs)("div",{children:[(0,l.jsx)("span",{className:"muted",children:"Score"}),(0,l.jsx)("br",{}),(0,l.jsx)("strong",{children:y.normalizedScore})]}),(0,l.jsxs)("div",{children:[(0,l.jsx)("span",{className:"muted",children:"Residual"}),(0,l.jsx)("br",{}),y.residualScore]}),(0,l.jsxs)("div",{children:[(0,l.jsx)("span",{className:"muted",children:"Owner"}),(0,l.jsx)("br",{}),y.ownerDisplayName||"-"]})]}),y.description&&(0,l.jsxs)("div",{style:{marginTop:12,fontSize:13},children:[(0,l.jsx)("span",{className:"muted",children:"Description"}),(0,l.jsx)("br",{}),y.description]}),(0,l.jsxs)("div",{style:{marginTop:16},children:[(0,l.jsx)("span",{className:"muted",style:{fontSize:12},children:"Update status:"}),(0,l.jsx)("div",{style:{display:"flex",gap:6,marginTop:6,flexWrap:"wrap"},children:["OPEN","IN_MITIGATION","ACCEPTED","CLOSED"].map(e=>(0,l.jsx)("button",{className:"button small ".concat("OPEN"===e?"secondary":""),onClick:()=>S(y.id,e),disabled:b===y.id,children:e.replace("_"," ")},e))})]}),(0,l.jsx)("div",{className:"modal-actions",children:(0,l.jsx)("button",{className:"button secondary small",onClick:()=>g(null),children:"Close"})})]})})]}):(0,l.jsx)("div",{className:"empty-state",children:(0,l.jsx)("p",{children:"Loading..."})})}function j(e){let{project:s,dashboard:a,toast:n}=e,[i,r]=(0,t.useState)(""),[c,u]=(0,t.useState)("progressPercent"),[h,j]=(0,t.useState)("asc"),x=(0,t.useMemo)(()=>(null==a?void 0:a.mitigations)?o(a.mitigations,c,h):[],[a,c,h]),p=(0,t.useMemo)(()=>{if(!i)return x;let e=i.toLowerCase();return x.filter(s=>(s.title||"").toLowerCase().includes(e)||(s.riskTitle||"").toLowerCase().includes(e))},[x,i]);return a?(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(d,{value:i,onChange:r,placeholder:"Search mitigations..."}),(0,l.jsx)("div",{className:"table-wrap",children:(0,l.jsxs)("table",{className:"table",children:[(0,l.jsx)("thead",{children:(0,l.jsx)("tr",{children:[{key:"title",label:"Title"},{key:"riskTitle",label:"Risk"},{key:"status",label:"Status"},{key:"progressPercent",label:"Progress"},{key:"effectivenessPercent",label:"Effectiveness"},{key:"ownerDisplayName",label:"Owner"}].map(e=>(0,l.jsxs)("th",{className:"sortable",onClick:()=>{var s;c===(s=e.key)?j(e=>"asc"===e?"desc":"asc"):(u(s),j("asc"))},children:[e.label," ",c===e.key?"asc"===h?"▲":"▼":""]},e.key))})}),(0,l.jsx)("tbody",{children:p.slice(0,50).map(e=>{var s;return(0,l.jsxs)("tr",{children:[(0,l.jsx)("td",{children:(0,l.jsx)("strong",{children:e.title})}),(0,l.jsx)("td",{children:(0,l.jsx)("span",{className:"muted",children:e.riskTitle})}),(0,l.jsx)("td",{children:(0,l.jsx)(m,{className:null==(s=e.status)?void 0:s.toLowerCase().replace(/\s+/g,"-"),children:e.status})}),(0,l.jsx)("td",{children:(0,l.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8},children:[(0,l.jsx)("div",{className:"bar-wrap",style:{flex:1,maxWidth:80},children:(0,l.jsx)("div",{className:"bar-fill",style:{width:"".concat(e.progressPercent||0,"%"),background:(e.progressPercent||0)>=80?"var(--accent)":(e.progressPercent||0)>=30?"var(--warn)":"var(--danger)"}})}),e.progressPercent||0,"%"]})}),(0,l.jsxs)("td",{children:[e.effectivenessPercent||0,"%"]}),(0,l.jsx)("td",{children:(0,l.jsx)("span",{className:"muted",children:e.ownerDisplayName||"-"})})]},e.id)})})]})}),!p.length&&(0,l.jsx)("div",{className:"empty-state",children:(0,l.jsx)("p",{children:"No mitigations found"})})]}):(0,l.jsx)("div",{className:"empty-state",children:(0,l.jsx)("p",{children:"Loading..."})})}function x(e){var s,a;let{project:t,dashboard:n}=e;if(!n)return(0,l.jsx)("div",{className:"empty-state",children:(0,l.jsx)("p",{children:"Loading..."})});let i=(null==(s=n.gate)?void 0:s.criteria)||[],r=(null==(a=n.summary)?void 0:a.gateStatus)||"Unknown",c="Ready"===r?"good":"Warning"===r?"warn":"bad";return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)("div",{className:"dash-header",children:[(0,l.jsxs)("div",{children:[(0,l.jsx)("h1",{children:"Deployment Gate"}),(0,l.jsx)("p",{className:"muted",children:"Nine-criteria gate evaluation for AI deployment readiness"})]}),(0,l.jsx)("div",{className:"dash-actions",children:(0,l.jsx)("div",{className:"metric-value ".concat(c),style:{fontSize:28},children:r})})]}),(0,l.jsx)("div",{className:"table-wrap",children:(0,l.jsxs)("table",{className:"table",children:[(0,l.jsx)("thead",{children:(0,l.jsxs)("tr",{children:[(0,l.jsx)("th",{children:"Criterion"}),(0,l.jsx)("th",{children:"Required"}),(0,l.jsx)("th",{children:"Actual"}),(0,l.jsx)("th",{children:"Status"})]})}),(0,l.jsx)("tbody",{children:i.map(e=>{var s;return(0,l.jsxs)("tr",{children:[(0,l.jsx)("td",{children:(0,l.jsx)("strong",{children:e.name})}),(0,l.jsx)("td",{children:e.required}),(0,l.jsx)("td",{children:e.actual}),(0,l.jsx)("td",{children:(0,l.jsx)(m,{className:null==(s=e.status)?void 0:s.toLowerCase(),children:e.status})})]},e.name)})})]})}),!i.length&&(0,l.jsx)("div",{className:"empty-state",children:(0,l.jsx)("p",{children:"No gate criteria evaluated yet"})}),(0,l.jsxs)("div",{style:{marginTop:16,display:"flex",gap:8},children:[(0,l.jsx)("a",{href:"/api/projects/".concat(null==t?void 0:t.id,"/gate/evaluate"),className:"button secondary small",target:"_blank",children:"Evaluate (API)"}),(0,l.jsx)("a",{href:"/api/projects/".concat(null==t?void 0:t.id,"/gate/history"),className:"button secondary small",target:"_blank",children:"History (API)"})]})]})}function p(e){let{project:s,dashboard:a}=e;return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("div",{className:"dash-header",children:(0,l.jsxs)("div",{children:[(0,l.jsx)("h1",{children:"Integrations"}),(0,l.jsx)("p",{className:"muted",children:"Connect Trello, Jira, Asana, or Microsoft Planner"})]})}),(0,l.jsx)("div",{className:"grid",style:{gridTemplateColumns:"repeat(auto-fit, minmax(240px, 1fr))"},children:["TRELLO","JIRA","ASANA","MICROSOFT_PLANNER"].map(e=>(0,l.jsxs)("div",{className:"panel",style:{textAlign:"center"},children:[(0,l.jsx)("div",{style:{fontSize:32,marginBottom:8},children:"TRELLO"===e?"⊞":"JIRA"===e?"◆":"ASANA"===e?"◇":"▣"}),(0,l.jsx)("h3",{style:{margin:"0 0 4px"},children:e.replace("_"," ")}),(0,l.jsx)("p",{className:"muted",style:{fontSize:12,margin:"0 0 12px"},children:"Project management sync"}),(0,l.jsxs)("div",{style:{display:"flex",gap:6,justifyContent:"center"},children:[(0,l.jsx)("a",{href:"/api/integration-providers",className:"button secondary small",children:"Configure"}),(0,l.jsx)("a",{href:"/api/integrations",className:"button secondary small",children:"Manage"})]})]},e))}),(0,l.jsx)("div",{style:{marginTop:12},children:(0,l.jsx)("a",{href:"/api/integration-providers",className:"button secondary small",target:"_blank",children:"Integration providers (API)"})})]})}function v(){let e=(0,n.useRouter)(),[s,a]=(0,t.useState)("Overview"),[d,o]=(0,t.useState)(null),[m,v]=(0,t.useState)(null),[y,g]=(0,t.useState)(!0),[b,N]=(0,t.useState)(null),{toasts:f,add:k}=function(){let[e,s]=(0,t.useState)([]);return{toasts:e,add:(0,t.useCallback)(function(e){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"success",l=Date.now()+Math.random();s(s=>[...s,{id:l,message:e,type:a}]),setTimeout(()=>s(e=>e.filter(e=>e.id!==l)),3e3)},[])}}();return((0,t.useEffect)(()=>{let e=new URLSearchParams(window.location.search).get("tab");e&&r.includes(e)&&a(e)},[]),(0,t.useEffect)(()=>{(async()=>{try{let e=await i.FH.get("/api/workspaces"),s=null==e?void 0:e[0];if(!s){N("No workspace found"),g(!1);return}let a=await i.FH.get("/api/workspaces/".concat(s.id,"/projects")),l=null==a?void 0:a[0];if(!l){N("No project found"),g(!1);return}o(l);let t=await i.FH.get("/api/projects/".concat(l.id,"/dashboard"));v(t),g(!1)}catch(e){N(e.message),g(!1)}})()},[]),y)?(0,l.jsx)("div",{className:"shell-loading",children:(0,l.jsx)("div",{className:"spinner"})}):b?(0,l.jsxs)("div",{className:"empty-state",children:[(0,l.jsx)("div",{className:"empty-icon",children:"!"}),(0,l.jsx)("p",{children:b})]}):(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)("div",{className:"dash-header",children:[(0,l.jsxs)("div",{children:[(0,l.jsx)("h1",{children:(null==d?void 0:d.name)||"Dashboard"}),(0,l.jsx)("p",{className:"muted",children:(null==d?void 0:d.subtitle)||""})]}),(0,l.jsxs)("div",{className:"dash-actions",children:[(0,l.jsx)("a",{href:"/api/projects/".concat(null==d?void 0:d.id,"/reports/executive.html"),className:"button secondary small",target:"_blank",children:"Report"}),(0,l.jsx)("a",{href:"/api/projects/".concat(null==d?void 0:d.id,"/reports/risk-register.csv"),className:"button secondary small",target:"_blank",children:"CSV"})]})]}),(0,l.jsx)("div",{className:"tabs",children:r.map(a=>(0,l.jsx)("button",{className:"tab ".concat(s===a?"active":""),onClick:()=>e.push("/dashboard?tab=".concat(a)),children:a},a))}),"Overview"===s&&(0,l.jsx)(u,{project:d,dashboard:m}),"Risks"===s&&(0,l.jsx)(h,{project:d,dashboard:m,toast:{add:k}}),"Mitigations"===s&&(0,l.jsx)(j,{project:d,dashboard:m,toast:{add:k}}),"Gate"===s&&(0,l.jsx)(x,{project:d,dashboard:m}),"Integrations"===s&&(0,l.jsx)(p,{project:d,dashboard:m}),(0,l.jsx)(c,{toasts:f})]})}},6282:(e,s,a)=>{"use strict";async function l(e,s,a){var l;let t={method:e,headers:{"Content-Type":"application/json"}};a&&(t.body=JSON.stringify(a));let n=await fetch("".concat("").concat(s),t),i=(null==(l=n.headers.get("content-type"))?void 0:l.includes("application/json"))?await n.json():await n.text();if(!n.ok)throw Error((null==i?void 0:i.error)||(null==i?void 0:i.message)||"Request failed (".concat(n.status,")"));return i}a.d(s,{FH:()=>t,Ht:()=>n,ri:()=>i});let t={get:e=>l("GET",e),post:(e,s)=>l("POST",e,s),put:(e,s)=>l("PUT",e,s),patch:(e,s)=>l("PATCH",e,s),del:e=>l("DELETE",e)};async function n(){try{let e=await t.get("/api/auth/session");return e.user||e.actor||null}catch(e){return null}}async function i(){await t.post("/api/auth/logout"),window.location.href="/"}}},e=>{e.O(0,[8441,1255,7358],()=>e(e.s=646)),_N_E=e.O()}]);   ܣ"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8441],{9248:(e,n,t)=>{var r,l=t(5704),a=t(5009),o=t(2115),u=t(7650);function i(e){var n="https://react.dev/errors/"+e;if(1I||(e.current=R[I],R[I]=null,I--)}function j(e,n){R[++I]=e.current,e.current=n}var V=U(null),H=U(null),Q=U(null),B=U(null);function W(e,n){switch(j(Q,n),j(H,e),j(V,null),n.nodeType){case 9:case 11:e=(e=n.documentElement)&&(e=e.namespaceURI)?sg(e):0;break;default:if(e=n.tagName,n=n.namespaceURI)e=sy(n=sg(n),e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}$(V),j(V,e)}function q(){$(V),$(H),$(Q)}function K(e){null!==e.memoizedState&&j(B,e);var n=V.current,t=sy(n,e.type);n!==t&&(j(H,e),j(V,t))}function Y(e){H.current===e&&($(V),$(H)),B.current===e&&($(B),s7._currentValue=A)}function X(e){if(void 0===nI)try{throw Error()}catch(e){var n=e.stack.trim().match(/\n( *(at )?)/);nI=n&&n[1]||"",nU=-1)":-1l||i[r]!==s[l]){var c="\n"+i[r].replace(" at new "," at ");return e.displayName&&c.includes("")&&(c=c.replace("",e.displayName)),c}while(1<=r&&0<=l);break}}}finally{G=!1,Error.prepareStackTrace=t}return(t=e?e.displayName||e.name:"")?X(t):""}function J(e){try{var n="",t=null;do n+=function(e,n){switch(e.tag){case 26:case 27:case 5:return X(e.type);case 16:return X("Lazy");case 13:return e.child!==n&&null!==n?X("Suspense Fallback"):X("Suspense");case 19:return X("SuspenseList");case 0:case 15:return Z(e.type,!1);case 11:return Z(e.type.render,!1);case 1:return Z(e.type,!0);case 31:return X("Activity");default:return""}}(e,t),t=e,e=e.return;while(e);return n}catch(e){return"\nError generating stack: "+e.message+"\n"+e.stack}}var ee=Object.prototype.hasOwnProperty,en=a.unstable_scheduleCallback,et=a.unstable_cancelCallback,er=a.unstable_shouldYield,el=a.unstable_requestPaint,ea=a.unstable_now,eo=a.unstable_getCurrentPriorityLevel,eu=a.unstable_ImmediatePriority,ei=a.unstable_UserBlockingPriority,es=a.unstable_NormalPriority,ec=a.unstable_LowPriority,ef=a.unstable_IdlePriority,ed=a.log,ep=a.unstable_setDisableYieldValue,em=null,eh=null;function eg(e){if("function"==typeof ed&&ep(e),eh&&"function"==typeof eh.setStrictMode)try{eh.setStrictMode(em,e)}catch(e){}}var ey=Math.clz32?Math.clz32:function(e){return 0==(e>>>=0)?32:31-(ev(e)/eb|0)|0},ev=Math.log,eb=Math.LN2,ek=256,ew=4194304;function eS(e){var n=42&e;if(0!==n)return n;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194048&e;case 4194304:case 8388608:case 0x1000000:case 0x2000000:return 0x3c00000&e;case 0x4000000:return 0x4000000;case 0x8000000:return 0x8000000;case 0x10000000:return 0x10000000;case 0x20000000:return 0x20000000;case 0x40000000:return 0;default:return e}}function ex(e,n,t){var r=e.pendingLanes;if(0===r)return 0;var l=0,a=e.suspendedLanes,o=e.pingedLanes;e=e.warmLanes;var u=0x7ffffff&r;return 0!==u?0!=(r=u&~a)?l=eS(r):0!=(o&=u)?l=eS(o):t||0!=(t=u&~e)&&(l=eS(t)):0!=(u=r&~a)?l=eS(u):0!==o?l=eS(o):t||0!=(t=r&~e)&&(l=eS(t)),0===l?0:0!==n&&n!==l&&0==(n&a)&&((a=l&-l)>=(t=n&-n)||32===a&&0!=(4194048&t))?n:l}function eE(e,n){return 0==(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&n)}function ez(){var e=ek;return 0==(4194048&(ek<<=1))&&(ek=256),e}function eC(){var e=ew;return 0==(0x3c00000&(ew<<=1))&&(ew=4194304),e}function eP(e){for(var n=[],t=0;31>t;t++)n.push(e);return n}function eN(e,n){e.pendingLanes|=n,0x10000000!==n&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function eL(e,n,t){e.pendingLanes|=n,e.suspendedLanes&=~n;var r=31-ey(n);e.entangledLanes|=n,e.entanglements[r]=0x40000000|e.entanglements[r]|4194090&t}function eT(e,n){var t=e.entangledLanes|=n;for(e=e.entanglements;t;){var r=31-ey(t),l=1<=tr),to=!1;function tu(e,n){switch(e){case"keyup":return -1!==tn.indexOf(n.keyCode);case"keydown":return 229!==n.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function ti(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var ts=!1,tc={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function tf(e){var n=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===n?!!tc[e.type]:"textarea"===n}function td(e,n,t,r){nw?nS?nS.push(r):nS=[r]:nw=r,0<(n=sr(n,"onChange")).length&&(t=new nQ("onChange","change",null,t,r),e.push({event:t,listeners:n}))}var tp=null,tm=null;function th(e){i8(e,0)}function tg(e){if(ne(eK(e)))return e}function ty(e,n){if("change"===e)return n}var tv=!1;if(nP){if(nP){var tb="oninput"in document;if(!tb){var tk=document.createElement("div");tk.setAttribute("oninput","return;"),tb="function"==typeof tk.oninput}r=tb}else r=!1;tv=r&&(!document.documentMode||9=n)return{node:r,offset:n-e};e=t}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=tL(r)}}function t_(e){e=null!=e&&null!=e.ownerDocument&&null!=e.ownerDocument.defaultView?e.ownerDocument.defaultView:window;for(var n=nn(e.document);n instanceof e.HTMLIFrameElement;){try{var t="string"==typeof n.contentWindow.location.href}catch(e){t=!1}if(t)e=n.contentWindow;else break;n=nn(e.document)}return n}function tF(e){var n=e&&e.nodeName&&e.nodeName.toLowerCase();return n&&("input"===n&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===n||"true"===e.contentEditable)}var tD=nP&&"documentMode"in document&&11>=document.documentMode,tO=null,tM=null,tA=null,tR=!1;function tI(e,n,t){var r=t.window===t?t.document:9===t.nodeType?t:t.ownerDocument;tR||null==tO||tO!==nn(r)||(r="selectionStart"in(r=tO)&&tF(r)?{start:r.selectionStart,end:r.selectionEnd}:{anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},tA&&tN(tA,r)||(tA=r,0<(r=sr(tM,"onSelect")).length&&(n=new nQ("onSelect","select",null,n,t),e.push({event:n,listeners:r}),n.target=tO)))}function tU(e,n){var t={};return t[e.toLowerCase()]=n.toLowerCase(),t["Webkit"+e]="webkit"+n,t["Moz"+e]="moz"+n,t}var t$={animationend:tU("Animation","AnimationEnd"),animationiteration:tU("Animation","AnimationIteration"),animationstart:tU("Animation","AnimationStart"),transitionrun:tU("Transition","TransitionRun"),transitionstart:tU("Transition","TransitionStart"),transitioncancel:tU("Transition","TransitionCancel"),transitionend:tU("Transition","TransitionEnd")},tj={},tV={};function tH(e){if(tj[e])return tj[e];if(!t$[e])return e;var n,t=t$[e];for(n in t)if(t.hasOwnProperty(n)&&n in tV)return tj[e]=t[n];return e}nP&&(tV=document.createElement("div").style,"AnimationEvent"in window||(delete t$.animationend.animation,delete t$.animationiteration.animation,delete t$.animationstart.animation),"TransitionEvent"in window||delete t$.transitionend.transition);var tQ=tH("animationend"),tB=tH("animationiteration"),tW=tH("animationstart"),tq=tH("transitionrun"),tK=tH("transitionstart"),tY=tH("transitioncancel"),tX=tH("transitionend"),tG=new Map,tZ="abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function tJ(e,n){tG.set(e,n),eJ(n,[e])}tZ.push("scrollEnd");var t0="function"==typeof reportError?reportError:function(e){if("object"==typeof window&&"function"==typeof window.ErrorEvent){var n=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:"object"==typeof e&&null!==e&&"string"==typeof e.message?String(e.message):String(e),error:e});if(!window.dispatchEvent(n))return}else if("object"==typeof l&&"function"==typeof l.emit)return void l.emit("uncaughtException",e);console.error(e)},t1=[],t2=0,t3=0;function t4(){for(var e=t2,n=t3=t2=0;n>=o,l-=o,rk=1<<32-ey(n)+l|t<h?(g=f,f=null):g=f.sibling;var y=p(l,f,u[h],i);if(null===y){null===f&&(f=g);break}e&&f&&null===y.alternate&&n(l,f),o=a(y,o,h),null===c?s=y:c.sibling=y,c=y,f=g}if(h===u.length)return t(l,f),rL&&rS(l,h),s;if(null===f){for(;hg?(y=h,h=null):y=h.sibling;var b=p(l,h,v.value,s);if(null===b){null===h&&(h=y);break}e&&h&&null===b.alternate&&n(l,h),o=a(b,o,g),null===f?c=b:f.sibling=b,f=b,h=y}if(v.done)return t(l,h),rL&&rS(l,g),c;if(null===h){for(;!v.done;g++,v=u.next())null!==(v=d(l,v.value,s))&&(o=a(v,o,g),null===f?c=v:f.sibling=v,f=v);return rL&&rS(l,g),c}for(h=r(h);!v.done;g++,v=u.next())null!==(v=m(h,l,g,v.value,s))&&(e&&null!==v.alternate&&h.delete(null===v.key?g:v.key),o=a(v,o,g),null===f?c=v:f.sibling=v,f=v);return e&&h.forEach(function(e){return n(l,e)}),rL&&rS(l,g),c}(s,c,f=b.call(f),h)}if("function"==typeof f.then)return u(s,c,ly(f),h);if(f.$$typeof===S)return u(s,c,rG(s,f),h);lb(s,f)}return"string"==typeof f&&""!==f||"number"==typeof f||"bigint"==typeof f?(f=""+f,null!==c&&6===c.tag?(t(s,c.sibling),(h=l(c,f)).return=s):(t(s,c),(h=ri(f,s.mode,h)).return=s),o(s=h)):t(s,c)}(u,s,c,f);return lh=null,h}catch(e){if(e===la||e===lu)throw e;var b=rt(29,e,null,u.mode);return b.lanes=f,b.return=u,b}finally{}}}var lw=lk(!0),lS=lk(!1),lx=!1;function lE(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function lz(e,n){e=e.updateQueue,n.updateQueue===e&&(n.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function lC(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function lP(e,n,t){var r=e.updateQueue;if(null===r)return null;if(r=r.shared,0!=(2&uM)){var l=r.pending;return null===l?n.next=n:(n.next=l.next,l.next=n),r.pending=n,n=t7(e),t9(e,null,t),n}return t8(e,r,n,t),t7(e)}function lN(e,n,t){if(null!==(n=n.updateQueue)&&(n=n.shared,0!=(4194048&t))){var r=n.lanes;r&=e.pendingLanes,t|=r,n.lanes=t,eT(e,t)}}function lL(e,n){var t=e.updateQueue,r=e.alternate;if(null!==r&&t===(r=r.updateQueue)){var l=null,a=null;if(null!==(t=t.firstBaseUpdate)){do{var o={lane:t.lane,tag:t.tag,payload:t.payload,callback:null,next:null};null===a?l=a=o:a=a.next=o,t=t.next}while(null!==t);null===a?l=a=n:a=a.next=n}else l=a=n;t={baseState:r.baseState,firstBaseUpdate:l,lastBaseUpdate:a,shared:r.shared,callbacks:r.callbacks},e.updateQueue=t;return}null===(e=t.lastBaseUpdate)?t.firstBaseUpdate=n:e.next=n,t.lastBaseUpdate=n}var lT=!1;function l_(){if(lT){var e=r9;if(null!==e)throw e}}function lF(e,n,t,r){lT=!1;var l=e.updateQueue;lx=!1;var a=l.firstBaseUpdate,o=l.lastBaseUpdate,u=l.shared.pending;if(null!==u){l.shared.pending=null;var i=u,s=i.next;i.next=null,null===o?a=s:o.next=s,o=i;var c=e.alternate;null!==c&&(u=(c=c.updateQueue).lastBaseUpdate)!==o&&(null===u?c.firstBaseUpdate=s:u.next=s,c.lastBaseUpdate=i)}if(null!==a){var f=l.baseState;for(o=0,c=s=i=null,u=a;;){var d=-0x20000001&u.lane,p=d!==u.lane;if(p?(uI&d)===d:(r&d)===d){0!==d&&d===r5&&(lT=!0),null!==c&&(c=c.next={lane:0,tag:u.tag,payload:u.payload,callback:null,next:null});e:{var h=e,g=u;switch(d=n,g.tag){case 1:if("function"==typeof(h=g.payload)){f=h.call(t,f,d);break e}f=h;break e;case 3:h.flags=-65537&h.flags|128;case 0:if(null==(d="function"==typeof(h=g.payload)?h.call(t,f,d):h))break e;f=m({},f,d);break e;case 2:lx=!0}}null!==(d=u.callback)&&(e.flags|=64,p&&(e.flags|=8192),null===(p=l.callbacks)?l.callbacks=[d]:p.push(d))}else p={lane:d,tag:u.tag,payload:u.payload,callback:u.callback,next:null},null===c?(s=c=p,i=f):c=c.next=p,o|=d;if(null===(u=u.next))if(null===(u=l.shared.pending))break;else u=(p=u).next,p.next=null,l.lastBaseUpdate=p,l.shared.pending=null}null===c&&(i=f),l.baseState=i,l.firstBaseUpdate=s,l.lastBaseUpdate=c,null===a&&(l.shared.lanes=0),uW|=o,e.lanes=o,e.memoizedState=f}}function lD(e,n){if("function"!=typeof e)throw Error(i(191,e));e.call(n)}function lO(e,n){var t=e.callbacks;if(null!==t)for(e.callbacks=null,e=0;ea?a:8;var o=O.T,u={};O.T=u,a9(e,!1,n,t);try{var i=l(),s=O.S;if(null!==s&&s(u,i),null!==i&&"object"==typeof i&&"function"==typeof i.then){var c,f,d=(c=[],f={status:"pending",value:null,reason:null,then:function(e){c.push(e)}},i.then(function(){f.status="fulfilled",f.value=r;for(var e=0;e title"))),sd(a,r,t),a[eR]=e,eX(a),r=a;break e;case"link":var o=s1("link","href",l).get(r+(t.href||""));if(o){for(var u=0;u<\/script>",a=a.removeChild(a.firstChild);break;case"select":a="string"==typeof r.is?o.createElement("select",{is:r.is}):o.createElement("select"),r.multiple?a.multiple=!0:r.size&&(a.size=r.size);break;default:a="string"==typeof r.is?o.createElement(l,{is:r.is}):o.createElement(l)}}a[eR]=n,a[eI]=r;e:for(o=n.child;null!==o;){if(5===o.tag||6===o.tag)a.appendChild(o.stateNode);else if(4!==o.tag&&27!==o.tag&&null!==o.child){o.child.return=o,o=o.child;continue}if(o===n)break;for(;null===o.sibling;){if(null===o.return||o.return===n)break e;o=o.return}o.sibling.return=o.return,o=o.sibling}switch(n.stateNode=a,sd(a,l,r),l){case"button":case"input":case"select":case"textarea":r=!!r.autoFocus;break;case"img":r=!0;break;default:r=!1}r&&oK(n)}}return oJ(n),oY(n,n.type,null===e?null:e.memoizedProps,n.pendingProps,t),null;case 6:if(e&&null!=n.stateNode)e.memoizedProps!==r&&oK(n);else{if("string"!=typeof r&&null===n.stateNode)throw Error(i(166));if(e=Q.current,rA(n)){if(e=n.stateNode,t=n.memoizedProps,r=null,null!==(l=rP))switch(l.tag){case 27:case 5:r=l.memoizedProps}e[eR]=n,(e=!!(e.nodeValue===t||null!==r&&!0===r.suppressHydrationWarning||ss(e.nodeValue,t)))||rD(n,!0)}else(e=sh(e).createTextNode(r))[eR]=n,n.stateNode=e}return oJ(n),null;case 31:if(t=n.memoizedState,null===e||null!==e.memoizedState){if(r=rA(n),null!==t){if(null===e){if(!r)throw Error(i(318));if(!(e=null!==(e=n.memoizedState)?e.dehydrated:null))throw Error(i(557));e[eR]=n}else rR(),0==(128&n.flags)&&(n.memoizedState=null),n.flags|=4;oJ(n),e=!1}else t=rI(),null!==e&&null!==e.memoizedState&&(e.memoizedState.hydrationErrors=t),e=!0;if(!e){if(256&n.flags)return lW(n),n;return lW(n),null}if(0!=(128&n.flags))throw Error(i(558))}return oJ(n),null;case 13:if(r=n.memoizedState,null===e||null!==e.memoizedState&&null!==e.memoizedState.dehydrated){if(l=rA(n),null!==r&&null!==r.dehydrated){if(null===e){if(!l)throw Error(i(318));if(!(l=null!==(l=n.memoizedState)?l.dehydrated:null))throw Error(i(317));l[eR]=n}else rR(),0==(128&n.flags)&&(n.memoizedState=null),n.flags|=4;oJ(n),l=!1}else l=rI(),null!==e&&null!==e.memoizedState&&(e.memoizedState.hydrationErrors=l),l=!0;if(!l){if(256&n.flags)return lW(n),n;return lW(n),null}}if(lW(n),0!=(128&n.flags))return n.lanes=t,n;return t=null!==r,e=null!==e&&null!==e.memoizedState,t&&(r=n.child,l=null,null!==r.alternate&&null!==r.alternate.memoizedState&&null!==r.alternate.memoizedState.cachePool&&(l=r.alternate.memoizedState.cachePool.pool),a=null,null!==r.memoizedState&&null!==r.memoizedState.cachePool&&(a=r.memoizedState.cachePool.pool),a!==l&&(r.flags|=2048)),t!==e&&t&&(n.child.flags|=8192),oG(n,n.updateQueue),oJ(n),null;case 4:return q(),null===e&&i7(n.stateNode.containerInfo),oJ(n),null;case 10:return rQ(n.type),oJ(n),null;case 19:if($(lq),null===(r=n.memoizedState))return oJ(n),null;if(l=0!=(128&n.flags),null===(a=r.rendering))if(l)oZ(r,!1);else{if(0!==uB||null!==e&&0!=(128&e.flags))for(e=n.child;null!==e;){if(null!==(a=lK(e))){for(n.flags|=128,oZ(r,!1),n.updateQueue=e=a.updateQueue,oG(n,e),n.subtreeFlags=0,e=t,t=n.child;null!==t;)ra(t,e),t=t.sibling;return j(lq,1&lq.current|2),rL&&rS(n,r.treeForkCount),n.child}e=e.sibling}null!==r.tail&&ea()>u1&&(n.flags|=128,l=!0,oZ(r,!1),n.lanes=4194304)}else{if(!l)if(null!==(e=lK(a))){if(n.flags|=128,l=!0,n.updateQueue=e=e.updateQueue,oG(n,e),oZ(r,!0),null===r.tail&&"hidden"===r.tailMode&&!a.alternate&&!rL)return oJ(n),null}else 2*ea()-r.renderingStartTime>u1&&0x20000000!==t&&(n.flags|=128,l=!0,oZ(r,!1),n.lanes=4194304);r.isBackwards?(a.sibling=n.child,n.child=a):(null!==(e=r.last)?e.sibling=a:n.child=a,r.last=a)}if(null!==r.tail)return e=r.tail,r.rendering=e,r.tail=e.sibling,r.renderingStartTime=ea(),e.sibling=null,t=lq.current,j(lq,l?1&t|2:1&t),rL&&rS(n,r.treeForkCount),e;return oJ(n),null;case 22:case 23:return lW(n),lU(),r=null!==n.memoizedState,null!==e?null!==e.memoizedState!==r&&(n.flags|=8192):r&&(n.flags|=8192),r?0!=(0x20000000&t)&&0==(128&n.flags)&&(oJ(n),6&n.subtreeFlags&&(n.flags|=8192)):oJ(n),null!==(t=n.updateQueue)&&oG(n,t.retryQueue),t=null,null!==e&&null!==e.memoizedState&&null!==e.memoizedState.cachePool&&(t=e.memoizedState.cachePool.pool),r=null,null!==n.memoizedState&&null!==n.memoizedState.cachePool&&(r=n.memoizedState.cachePool.pool),r!==t&&(n.flags|=2048),null!==e&&$(ln),null;case 24:return t=null,null!==e&&(t=e.memoizedState.cache),n.memoizedState.cache!==t&&(n.flags|=2048),rQ(r2),oJ(n),null;case 25:case 30:return null}throw Error(i(156,n.tag))}(n.alternate,n,uQ);if(null!==t){uR=t;return}if(null!==(n=n.sibling)){uR=n;return}uR=n=e}while(null!==n);0===uB&&(uB=5)}function iE(e,n){do{var t=function(e,n){switch(rz(n),n.tag){case 1:return 65536&(e=n.flags)?(n.flags=-65537&e|128,n):null;case 3:return rQ(r2),q(),0!=(65536&(e=n.flags))&&0==(128&e)?(n.flags=-65537&e|128,n):null;case 26:case 27:case 5:return Y(n),null;case 31:if(null!==n.memoizedState){if(lW(n),null===n.alternate)throw Error(i(340));rR()}return 65536&(e=n.flags)?(n.flags=-65537&e|128,n):null;case 13:if(lW(n),null!==(e=n.memoizedState)&&null!==e.dehydrated){if(null===n.alternate)throw Error(i(340));rR()}return 65536&(e=n.flags)?(n.flags=-65537&e|128,n):null;case 19:return $(lq),null;case 4:return q(),null;case 10:return rQ(n.type),null;case 22:case 23:return lW(n),lU(),null!==e&&$(ln),65536&(e=n.flags)?(n.flags=-65537&e|128,n):null;case 24:return rQ(r2),null;default:return null}}(e.alternate,e);if(null!==t){t.flags&=32767,uR=t;return}if(null!==(t=e.return)&&(t.flags|=32768,t.subtreeFlags=0,t.deletions=null),!n&&null!==(e=e.sibling)){uR=e;return}uR=e=t}while(null!==e);uB=6,uR=null}function iz(e,n,t,r,l,a,o,u,s){e.cancelPendingCommit=null;do iT();while(0!==u4);if(0!=(6&uM))throw Error(i(327));if(null!==n){if(n===e.current)throw Error(i(177));if(!function(e,n,t,r,l,a){var o=e.pendingLanes;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=t,e.entangledLanes&=t,e.errorRecoveryDisabledLanes&=t,e.shellSuspendCounter=0;var u=e.entanglements,i=e.expirationTimes,s=e.hiddenUpdates;for(t=o&~t;0g&&(o=g,g=h,h=o);var y=tT(u,h),v=tT(u,g);if(y&&v&&(1!==p.rangeCount||p.anchorNode!==y.node||p.anchorOffset!==y.offset||p.focusNode!==v.node||p.focusOffset!==v.offset)){var b=f.createRange();b.setStart(y.node,y.offset),p.removeAllRanges(),h>g?(p.addRange(b),p.extend(v.node,v.offset)):(b.setEnd(v.node,v.offset),p.addRange(b))}}}}for(f=[],p=u;p=p.parentNode;)1===p.nodeType&&f.push({element:p,left:p.scrollLeft,top:p.scrollTop});for("function"==typeof u.focus&&u.focus(),u=0;ut?32:t,O.T=null,t=u7,u7=null;var a=u8,o=u5;if(u4=0,u6=u8=null,u5=0,0!=(6&uM))throw Error(i(331));var u=uM;if(uM|=4,u_(a.current),uE(a,a.current,o,t),uM=u,iW(0,!1),eh&&"function"==typeof eh.onPostCommitFiberRoot)try{eh.onPostCommitFiberRoot(em,a)}catch(e){}return!0}finally{M.p=l,O.T=r,iL(e,n)}}function iF(e,n,t){n=rd(t,n),n=og(e.stateNode,n,2),null!==(e=lP(e,n,2))&&(eN(e,2),iB(e))}function iD(e,n,t){if(3===e.tag)iF(e,e,t);else for(;null!==n;){if(3===n.tag){iF(n,e,t);break}if(1===n.tag){var r=n.stateNode;if("function"==typeof n.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===u3||!u3.has(r))){e=rd(t,e),null!==(r=lP(n,t=oy(2),2))&&(ov(t,r,n,e),eN(r,2),iB(r));break}}n=n.return}}function iO(e,n,t){var r=e.pingCache;if(null===r){r=e.pingCache=new uO;var l=new Set;r.set(n,l)}else void 0===(l=r.get(n))&&(l=new Set,r.set(n,l));l.has(t)||(uH=!0,l.add(t),e=iM.bind(null,e,n,t),n.then(e,e))}function iM(e,n,t){var r=e.pingCache;null!==r&&r.delete(n),e.pingedLanes|=e.suspendedLanes&t,e.warmLanes&=~t,uA===e&&(uI&t)===t&&(4===uB||3===uB&&(0x3c00000&uI)===uI&&300>ea()-u0?0==(2&uM)&&ip(e,0):uK|=t,uX===uI&&(uX=0)),iB(e)}function iA(e,n){0===n&&(n=eC()),null!==(e=t5(e,n))&&(eN(e,n),iB(e))}function iR(e){var n=e.memoizedState,t=0;null!==n&&(t=n.retryLane),iA(e,t)}function iI(e,n){var t=0;switch(e.tag){case 31:case 13:var r=e.stateNode,l=e.memoizedState;null!==l&&(t=l.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(i(314))}null!==r&&r.delete(n),iA(e,t)}var iU=null,i$=null,ij=!1,iV=!1,iH=!1,iQ=0;function iB(e){e!==i$&&null===e.next&&(null===i$?iU=i$=e:i$=i$.next=e),iV=!0,ij||(ij=!0,sx(function(){0!=(6&uM)?en(eu,iq):iK()}))}function iW(e,n){if(!iH&&iV){iH=!0;do for(var t=!1,r=iU;null!==r;){if(!n)if(0!==e){var l=r.pendingLanes;if(0===l)var a=0;else{var o=r.suspendedLanes,u=r.pingedLanes;a=0xc000095&(a=(1<<31-ey(42|e)+1)-1&(l&~(o&~u)))?0xc000095&a|1:a?2|a:0}0!==a&&(t=!0,iG(r,a))}else a=uI,0==(3&(a=ex(r,r===uA?a:0,null!==r.cancelPendingCommit||-1!==r.timeoutHandle)))||eE(r,a)||(t=!0,iG(r,a));r=r.next}while(t);iH=!1}}function iq(){iK()}function iK(){iV=ij=!1;var e,n=0;0===iQ||((e=window.event)&&"popstate"===e.type?e===sb||(sb=e,0):(sb=null,1))||(n=iQ);for(var t=ea(),r=null,l=iU;null!==l;){var a=l.next,o=iY(l,t);0===o?(l.next=null,null===r?iU=a:r.next=a,null===a&&(i$=r)):(r=l,(0!==n||0!=(3&o))&&(iV=!0)),l=a}0!==u4&&5!==u4||iW(n,!1),0!==iQ&&(iQ=0)}function iY(e,n){for(var t=e.suspendedLanes,r=e.pingedLanes,l=e.expirationTimes,a=-0x3c00001&e.pendingLanes;0 title"):null)}function s3(e){return"stylesheet"!==e.type||0!=(3&e.state.loading)}var s4=null;function s8(){if(this.count--,0===this.count){if(this.stylesheets)s5(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var s6=null;function s5(e,n){e.stylesheets=null,null!==e.unsuspend&&(e.count++,s6=new Map,n.forEach(s9,e),s6=null,s8.call(e))}function s9(e,n){if(!(4&n.state.loading)){var t=s6.get(e);if(t)var r=t.get(null);else{t=new Map,s6.set(e,t);for(var l=e.querySelectorAll("link[data-precedence],style[data-precedence]"),a=0;a{"use strict";function r(e){let t=5381;for(let r=0;r>>0}function n(e){return r(e).toString(36).slice(0,5)}Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{djb2Hash:function(){return r},hexHash:function(){return n}})},307:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"createRenderParamsFromClient",{enumerable:!0,get:function(){return n}});let n=r(7370).createRenderParamsFromClient;("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},396:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{setCacheBustingSearchParam:function(){return l},setCacheBustingSearchParamWithHash:function(){return a}});let n=r(3485),u=r(2486);async function o(e){var t,r;return"function"==typeof(null==(r=globalThis.crypto)||null==(t=r.subtle)?void 0:t.digest)?(0,n.computeCacheBustingSearchParam)(e[u.NEXT_ROUTER_PREFETCH_HEADER],e[u.NEXT_ROUTER_SEGMENT_PREFETCH_HEADER],e[u.NEXT_ROUTER_STATE_TREE_HEADER],e[u.NEXT_URL]):(0,n.computeLegacyCacheBustingSearchParam)(e[u.NEXT_ROUTER_PREFETCH_HEADER],e[u.NEXT_ROUTER_SEGMENT_PREFETCH_HEADER],e[u.NEXT_ROUTER_STATE_TREE_HEADER],e[u.NEXT_URL])}let l=async(e,t)=>{a(e,await o(t))},a=(e,t)=>{let r=e.search,n=(r.startsWith("?")?r.slice(1):r).split("&").filter(e=>e&&!e.startsWith(""+u.NEXT_RSC_UNION_QUERY+"="));t.length>0?n.push(u.NEXT_RSC_UNION_QUERY+"="+t):n.push(""+u.NEXT_RSC_UNION_QUERY),e.search=n.length?"?"+n.join("&"):""};("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},531:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{RedirectBoundary:function(){return f},RedirectErrorBoundary:function(){return s}});let n=r(9417),u=r(5155),o=n._(r(2115)),l=r(7260),a=r(6542),i=r(6437);function c(e){let{redirect:t,reset:r,redirectType:n}=e,u=(0,l.useRouter)();return(0,o.useEffect)(()=>{o.default.startTransition(()=>{n===i.RedirectType.push?u.push(t,{}):u.replace(t,{}),r()})},[t,n,r,u]),null}class s extends o.default.Component{static getDerivedStateFromError(e){if((0,i.isRedirectError)(e))return{redirect:(0,a.getURLFromRedirectError)(e),redirectType:(0,a.getRedirectTypeFromError)(e)};throw e}render(){let{redirect:e,redirectType:t}=this.state;return null!==e&&null!==t?(0,u.jsx)(c,{redirect:e,redirectType:t,reset:()=>this.setState({redirect:null})}):this.props.children}constructor(e){super(e),this.state={redirect:null,redirectType:null}}}function f(e){let{children:t}=e,r=(0,l.useRouter)();return(0,u.jsx)(s,{router:r,children:t})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},535:()=>{"trimStart"in String.prototype||(String.prototype.trimStart=String.prototype.trimLeft),"trimEnd"in String.prototype||(String.prototype.trimEnd=String.prototype.trimRight),"description"in Symbol.prototype||Object.defineProperty(Symbol.prototype,"description",{configurable:!0,get:function(){var e=/\((.*)\)/.exec(this.toString());return e?e[1]:void 0}}),Array.prototype.flat||(Array.prototype.flat=function(e,t){return t=this.concat.apply([],this),e>1&&t.some(Array.isArray)?t.flat(e-1):t},Array.prototype.flatMap=function(e,t){return this.map(e,t).flat()}),Promise.prototype.finally||(Promise.prototype.finally=function(e){if("function"!=typeof e)return this.then(e,e);var t=this.constructor||Promise;return this.then(function(r){return t.resolve(e()).then(function(){return r})},function(r){return t.resolve(e()).then(function(){throw r})})}),Object.fromEntries||(Object.fromEntries=function(e){return Array.from(e).reduce(function(e,t){return e[t[0]]=t[1],e},{})}),Array.prototype.at||(Array.prototype.at=function(e){var t=Math.trunc(e)||0;if(t<0&&(t+=this.length),!(t<0||t>=this.length))return this[t]}),Object.hasOwn||(Object.hasOwn=function(e,t){if(null==e)throw TypeError("Cannot convert undefined or null to object");return Object.prototype.hasOwnProperty.call(Object(e),t)}),"canParse"in URL||(URL.canParse=function(e,t){try{return new URL(e,t),!0}catch(e){return!1}})},543:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{fillCacheWithNewSubTreeData:function(){return i},fillCacheWithNewSubTreeDataButOnlyLoading:function(){return c}});let n=r(4201),u=r(637),o=r(9190),l=r(5360);function a(e,t,r,a,i,c){let{segmentPath:s,seedData:f,tree:d,head:p}=a,h=t,_=r;for(let t=0;t{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"IconMark",{enumerable:!0,get:function(){return n}}),r(5155);let n=()=>null},637:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"fillLazyItemsTillLeafWithHead",{enumerable:!0,get:function(){return function e(t,r,o,l,a,i,c){if(0===Object.keys(l[1]).length){r.head=i;return}for(let s in l[1]){let f,d=l[1][s],p=d[0],h=(0,n.createRouterCacheKey)(p),_=null!==a&&void 0!==a[2][s]?a[2][s]:null;if(o){let n=o.parallelRoutes.get(s);if(n){let o,l=(null==c?void 0:c.kind)==="auto"&&c.status===u.PrefetchCacheEntryStatus.reusable,a=new Map(n),f=a.get(h);o=null!==_?{lazyData:null,rsc:_[1],prefetchRsc:null,head:null,prefetchHead:null,loading:_[3],parallelRoutes:new Map(null==f?void 0:f.parallelRoutes),navigatedAt:t}:l&&f?{lazyData:f.lazyData,rsc:f.rsc,prefetchRsc:f.prefetchRsc,head:f.head,prefetchHead:f.prefetchHead,parallelRoutes:new Map(f.parallelRoutes),loading:f.loading}:{lazyData:null,rsc:null,prefetchRsc:null,head:null,prefetchHead:null,parallelRoutes:new Map(null==f?void 0:f.parallelRoutes),loading:null,navigatedAt:t},a.set(h,o),e(t,o,f,d,_||null,i,c),r.parallelRoutes.set(s,a);continue}}if(null!==_){let e=_[1],r=_[3];f={lazyData:null,rsc:e,prefetchRsc:null,head:null,prefetchHead:null,parallelRoutes:new Map,loading:r,navigatedAt:t}}else f={lazyData:null,rsc:null,prefetchRsc:null,head:null,prefetchHead:null,parallelRoutes:new Map,loading:null,navigatedAt:t};let y=r.parallelRoutes.get(s);y?y.set(h,f):r.parallelRoutes.set(s,new Map([[h,f]])),e(t,f,void 0,d,_,i,c)}}}});let n=r(9190),u=r(6871);("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},836:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"findHeadInCache",{enumerable:!0,get:function(){return o}});let n=r(5360),u=r(9190);function o(e,t){return function e(t,r,o,l){if(0===Object.keys(r).length)return[t,o,l];let a=Object.keys(r).filter(e=>"children"!==e);for(let l of("children"in r&&a.unshift("children"),a)){let[a,i]=r[l];if(a===n.DEFAULT_SEGMENT_KEY)continue;let c=t.parallelRoutes.get(l);if(!c)continue;let s=(0,u.createRouterCacheKey)(a),f=(0,u.createRouterCacheKey)(a,!0),d=c.get(s);if(!d)continue;let p=e(d,i,o+"/"+s,o+"/"+f);if(p)return p}return null}(e,t,"","")}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},895:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"applyRouterStatePatchToTree",{enumerable:!0,get:function(){return function e(t,r,n,i){let c,[s,f,d,p,h]=r;if(1===t.length){let e=a(r,n);return(0,l.addRefreshMarkerToActiveParallelSegments)(e,i),e}let[_,y]=t;if(!(0,o.matchSegment)(_,s))return null;if(2===t.length)c=a(f[y],n);else if(null===(c=e((0,u.getNextFlightSegmentPath)(t),f[y],n,i)))return null;let b=[t[0],{...f,[y]:c},d,p];return h&&(b[4]=!0),(0,l.addRefreshMarkerToActiveParallelSegments)(b,i),b}}});let n=r(5360),u=r(6378),o=r(7460),l=r(3597);function a(e,t){let[r,u]=e,[l,i]=t;if(l===n.DEFAULT_SEGMENT_KEY&&r!==n.DEFAULT_SEGMENT_KEY)return e;if((0,o.matchSegment)(r,l)){let t={};for(let e in u)void 0!==i[e]?t[e]=a(u[e],i[e]):t[e]=u[e];for(let e in i)t[e]||(t[e]=i[e]);let n=[r,t];return e[2]&&(n[2]=e[2]),e[3]&&(n[3]=e[3]),e[4]&&(n[4]=e[4]),n}return t}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},1099:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"RedirectStatusCode",{enumerable:!0,get:function(){return r}});var r=function(e){return e[e.SeeOther=303]="SeeOther",e[e.TemporaryRedirect=307]="TemporaryRedirect",e[e.PermanentRedirect=308]="PermanentRedirect",e}({});("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},1126:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"handleMutable",{enumerable:!0,get:function(){return o}});let n=r(6343);function u(e){return void 0!==e}function o(e,t){var r,o;let l=null==(r=t.shouldScroll)||r,a=e.nextUrl;if(u(t.patchedTree)){let r=(0,n.computeChangedPath)(e.tree,t.patchedTree);r?a=r:a||(a=e.canonicalUrl)}return{canonicalUrl:u(t.canonicalUrl)?t.canonicalUrl===e.canonicalUrl?e.canonicalUrl:t.canonicalUrl:e.canonicalUrl,pushRef:{pendingPush:u(t.pendingPush)?t.pendingPush:e.pushRef.pendingPush,mpaNavigation:u(t.mpaNavigation)?t.mpaNavigation:e.pushRef.mpaNavigation,preserveCustomHistoryState:u(t.preserveCustomHistoryState)?t.preserveCustomHistoryState:e.pushRef.preserveCustomHistoryState},focusAndScrollRef:{apply:!!l&&(!!u(null==t?void 0:t.scrollableSegments)||e.focusAndScrollRef.apply),onlyHashChange:t.onlyHashChange||!1,hashFragment:l?t.hashFragment&&""!==t.hashFragment?decodeURIComponent(t.hashFragment.slice(1)):e.focusAndScrollRef.hashFragment:null,segmentPaths:l?null!=(o=null==t?void 0:t.scrollableSegments)?o:e.focusAndScrollRef.segmentPaths:[]},cache:t.cache?t.cache:e.cache,prefetchCache:t.prefetchCache?t.prefetchCache:e.prefetchCache,tree:u(t.patchedTree)?t.patchedTree:e.tree,nextUrl:a}}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},1209:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"callServer",{enumerable:!0,get:function(){return l}});let n=r(2115),u=r(6871),o=r(6248);async function l(e,t){return new Promise((r,l)=>{(0,n.startTransition)(()=>{(0,o.dispatchAppRouterAction)({type:u.ACTION_SERVER_ACTION,actionId:e,actionArgs:t,resolve:r,reject:l})})})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},1239:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"normalizePathTrailingSlash",{enumerable:!0,get:function(){return o}});let n=r(7700),u=r(5240),o=e=>{if(!e.startsWith("/"))return e;let{pathname:t,query:r,hash:o}=(0,u.parsePath)(e);return""+(0,n.removeTrailingSlash)(t)+r+o};("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},1281:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"clearCacheNodeDataForSegmentPath",{enumerable:!0,get:function(){return function e(t,r,o){let l=o.length<=2,[a,i]=o,c=(0,u.createRouterCacheKey)(i),s=r.parallelRoutes.get(a),f=t.parallelRoutes.get(a);f&&f!==s||(f=new Map(s),t.parallelRoutes.set(a,f));let d=null==s?void 0:s.get(c),p=f.get(c);if(l){p&&p.lazyData&&p!==d||f.set(c,{lazyData:null,rsc:null,prefetchRsc:null,head:null,prefetchHead:null,parallelRoutes:new Map,loading:null,navigatedAt:-1});return}if(!p||!d){p||f.set(c,{lazyData:null,rsc:null,prefetchRsc:null,head:null,prefetchHead:null,parallelRoutes:new Map,loading:null,navigatedAt:-1});return}return p===d&&(p={lazyData:p.lazyData,rsc:p.rsc,prefetchRsc:p.prefetchRsc,head:p.head,prefetchHead:p.prefetchHead,parallelRoutes:new Map(p.parallelRoutes),loading:p.loading},f.set(c,p)),e(p,d,(0,n.getNextFlightSegmentPath)(o))}}});let n=r(6378),u=r(9190);("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},1426:(e,t,r)=>{"use strict";var n=r(5704),u=Symbol.for("react.transitional.element"),o=Symbol.for("react.portal"),l=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),c=Symbol.for("react.consumer"),s=Symbol.for("react.context"),f=Symbol.for("react.forward_ref"),d=Symbol.for("react.suspense"),p=Symbol.for("react.memo"),h=Symbol.for("react.lazy"),_=Symbol.iterator,y={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},b=Object.assign,v={};function g(e,t,r){this.props=e,this.context=t,this.refs=v,this.updater=r||y}function m(){}function R(e,t,r){this.props=e,this.context=t,this.refs=v,this.updater=r||y}g.prototype.isReactComponent={},g.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},g.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},m.prototype=g.prototype;var E=R.prototype=new m;E.constructor=R,b(E,g.prototype),E.isPureReactComponent=!0;var O=Array.isArray;function P(){}var j={H:null,A:null,T:null,S:null},T=Object.prototype.hasOwnProperty;function S(e,t,r){var n=r.ref;return{$$typeof:u,type:e,key:t,ref:void 0!==n?n:null,props:r}}function M(e){return"object"==typeof e&&null!==e&&e.$$typeof===u}var w=/\/+/g;function A(e,t){var r,n;return"object"==typeof e&&null!==e&&null!=e.key?(r=""+e.key,n={"=":"=0",":":"=2"},"$"+r.replace(/[=:]/g,function(e){return n[e]})):t.toString(36)}function C(e,t,r){if(null==e)return e;var n=[],l=0;return!function e(t,r,n,l,a){var i,c,s,f=typeof t;("undefined"===f||"boolean"===f)&&(t=null);var d=!1;if(null===t)d=!0;else switch(f){case"bigint":case"string":case"number":d=!0;break;case"object":switch(t.$$typeof){case u:case o:d=!0;break;case h:return e((d=t._init)(t._payload),r,n,l,a)}}if(d)return a=a(t),d=""===l?"."+A(t,0):l,O(a)?(n="",null!=d&&(n=d.replace(w,"$&/")+"/"),e(a,r,n,"",function(e){return e})):null!=a&&(M(a)&&(i=a,c=n+(null==a.key||t&&t.key===a.key?"":(""+a.key).replace(w,"$&/")+"/")+d,a=S(i.type,c,i.props)),r.push(a)),1;d=0;var p=""===l?".":l+":";if(O(t))for(var y=0;y{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"useUntrackedPathname",{enumerable:!0,get:function(){return o}});let n=r(2115),u=r(3865);function o(){return(0,n.useContext)(u.PathnameContext)}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},1489:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{handleHardNavError:function(){return u},useNavFailureHandler:function(){return o}}),r(2115);let n=r(9658);function u(e){return!!e&&!!window.next.__pendingUrl&&(0,n.createHrefFromUrl)(new URL(window.location.href))!==(0,n.createHrefFromUrl)(window.next.__pendingUrl)&&(console.error("Error occurred during navigation, falling back to hard navigation",e),window.location.href=window.next.__pendingUrl.toString(),!0)}function o(){}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},1666:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),r(8110);let n=r(3663),u=r(1923);(0,n.appBootstrap)(()=>{let{hydrate:e}=r(9781);r(7297),r(9766),e(u)}),("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},1755:(e,t,r)=>{"use strict";function n(e){return e}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"removeBasePath",{enumerable:!0,get:function(){return n}}),r(2929),("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},1807:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{createMutableActionQueue:function(){return _},dispatchNavigateAction:function(){return v},dispatchTraverseAction:function(){return g},getCurrentAppRouterState:function(){return y},publicAppRouterInstance:function(){return m}});let n=r(6871),u=r(8451),o=r(2115),l=r(4089);r(6048);let a=r(6248),i=r(6058),c=r(7297),s=r(3933),f=r(3499);function d(e,t){null!==e.pending&&(e.pending=e.pending.next,null!==e.pending?p({actionQueue:e,action:e.pending,setState:t}):e.needsRefresh&&(e.needsRefresh=!1,e.dispatch({type:n.ACTION_REFRESH,origin:window.location.origin},t)))}async function p(e){let{actionQueue:t,action:r,setState:n}=e,u=t.state;t.pending=r;let o=r.payload,a=t.action(u,o);function i(e){r.discarded||(t.state=e,d(t,n),r.resolve(e))}(0,l.isThenable)(a)?a.then(i,e=>{d(t,n),r.reject(e)}):i(a)}let h=null;function _(e,t){let r={state:e,dispatch:(e,t)=>(function(e,t,r){let u={resolve:r,reject:()=>{}};if(t.type!==n.ACTION_RESTORE){let e=new Promise((e,t)=>{u={resolve:e,reject:t}});(0,o.startTransition)(()=>{r(e)})}let l={payload:t,next:null,resolve:u.resolve,reject:u.reject};null===e.pending?(e.last=l,p({actionQueue:e,action:l,setState:r})):t.type===n.ACTION_NAVIGATE||t.type===n.ACTION_RESTORE?(e.pending.discarded=!0,l.next=e.pending.next,e.pending.payload.type===n.ACTION_SERVER_ACTION&&(e.needsRefresh=!0),p({actionQueue:e,action:l,setState:r})):(null!==e.last&&(e.last.next=l),e.last=l)})(r,e,t),action:async(e,t)=>(0,u.reducer)(e,t),pending:null,last:null,onRouterTransitionStart:null!==t&&"function"==typeof t.onRouterTransitionStart?t.onRouterTransitionStart:null};if(null!==h)throw Object.defineProperty(Error("Internal Next.js Error: createMutableActionQueue was called more than once"),"__NEXT_ERROR_CODE",{value:"E624",enumerable:!1,configurable:!0});return h=r,r}function y(){return null!==h?h.state:null}function b(){return null!==h?h.onRouterTransitionStart:null}function v(e,t,r,u){let o=new URL((0,i.addBasePath)(e),location.href);(0,f.setLinkForCurrentNavigation)(u);let l=b();null!==l&&l(e,t),(0,a.dispatchAppRouterAction)({type:n.ACTION_NAVIGATE,url:o,isExternalUrl:(0,c.isExternalURL)(o),locationSearch:location.search,shouldScroll:r,navigateType:t,allowAliasing:!0})}function g(e,t){let r=b();null!==r&&r(e,"traverse"),(0,a.dispatchAppRouterAction)({type:n.ACTION_RESTORE,url:new URL(e),tree:t})}let m={back:()=>window.history.back(),forward:()=>window.history.forward(),prefetch:(e,t)=>{let r=function(){if(null===h)throw Object.defineProperty(Error("Internal Next.js error: Router action dispatched before initialization."),"__NEXT_ERROR_CODE",{value:"E668",enumerable:!1,configurable:!0});return h}(),u=(0,c.createPrefetchURL)(e);if(null!==u){var o;(0,s.prefetchReducer)(r.state,{type:n.ACTION_PREFETCH,url:u,kind:null!=(o=null==t?void 0:t.kind)?o:n.PrefetchKind.FULL})}},replace:(e,t)=>{(0,o.startTransition)(()=>{var r;v(e,"replace",null==(r=null==t?void 0:t.scroll)||r,null)})},push:(e,t)=>{(0,o.startTransition)(()=>{var r;v(e,"push",null==(r=null==t?void 0:t.scroll)||r,null)})},refresh:()=>{(0,o.startTransition)(()=>{(0,a.dispatchAppRouterAction)({type:n.ACTION_REFRESH,origin:window.location.origin})})},hmrRefresh:()=>{throw Object.defineProperty(Error("hmrRefresh can only be used in development mode. Please use refresh instead."),"__NEXT_ERROR_CODE",{value:"E485",enumerable:!1,configurable:!0})}};window.next&&(window.next.router=m),("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},1923:(e,t,r)=>{"use strict";e.exports=r(9393)},1959:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"ClientPageRoot",{enumerable:!0,get:function(){return u}});let n=r(5155);function u(e){let{Component:t,searchParams:u,params:o,promises:l}=e;{let{createRenderSearchParamsFromClient:e}=r(5878),l=e(u),{createRenderParamsFromClient:a}=r(307),i=a(o);return(0,n.jsx)(t,{params:i,searchParams:l})}}r(8302),("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},2018:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"pathHasPrefix",{enumerable:!0,get:function(){return u}});let n=r(5240);function u(e,t){if("string"!=typeof e)return!1;let{pathname:r}=(0,n.parsePath)(e);return r===t||r.startsWith(t+"/")}},2073:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"HeadManagerContext",{enumerable:!0,get:function(){return n}});let n=r(8140)._(r(2115)).default.createContext({})},2103:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{ServerInsertedHTMLContext:function(){return u},useServerInsertedHTML:function(){return o}});let n=r(9417)._(r(2115)),u=n.default.createContext(null);function o(e){let t=(0,n.useContext)(u);t&&t(e)}},2115:(e,t,r)=>{"use strict";e.exports=r(1426)},2244:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"serverActionReducer",{enumerable:!0,get:function(){return A}});let n=r(1209),u=r(5153),o=r(2486),l=r(2845),a=r(7197),i=r(6871),c=r(4259),s=r(9658),f=r(5737),d=r(895),p=r(4707),h=r(1126),_=r(637),y=r(7297),b=r(8915),v=r(7332),g=r(3597),m=r(6378),R=r(6542),E=r(6437),O=r(3571),P=r(1755),j=r(2929),T=r(7519);r(6048);let S=a.createFromFetch;async function M(e,t,r){let i,s,f,d,{actionId:p,actionArgs:h}=r,_=(0,a.createTemporaryReferenceSet)(),y=(0,T.extractInfoFromServerReferenceId)(p),b="use-cache"===y.type?(0,T.omitUnusedArgs)(h,y):h,v=await (0,a.encodeReply)(b,{temporaryReferences:_}),g=await fetch(e.canonicalUrl,{method:"POST",headers:{Accept:o.RSC_CONTENT_TYPE_HEADER,[o.ACTION_HEADER]:p,[o.NEXT_ROUTER_STATE_TREE_HEADER]:(0,m.prepareFlightRouterStateForRequest)(e.tree),...{},...t?{[o.NEXT_URL]:t}:{}},body:v});if("1"===g.headers.get(o.NEXT_ACTION_NOT_FOUND_HEADER))throw Object.defineProperty(new l.UnrecognizedActionError('Server Action "'+p+'" was not found on the server. \nRead more: https://nextjs.org/docs/messages/failed-to-find-server-action'),"__NEXT_ERROR_CODE",{value:"E715",enumerable:!1,configurable:!0});let R=g.headers.get("x-action-redirect"),[O,P]=(null==R?void 0:R.split(";"))||[];switch(P){case"push":i=E.RedirectType.push;break;case"replace":i=E.RedirectType.replace;break;default:i=void 0}let j=!!g.headers.get(o.NEXT_IS_PRERENDER_HEADER);try{let e=JSON.parse(g.headers.get("x-action-revalidated")||"[[],0,0]");s={paths:e[0]||[],tag:!!e[1],cookie:e[2]}}catch(e){s=w}let M=O?(0,c.assignLocation)(O,new URL(e.canonicalUrl,window.location.href)):void 0,A=g.headers.get("content-type"),C=!!(A&&A.startsWith(o.RSC_CONTENT_TYPE_HEADER));if(!C&&!M)throw Object.defineProperty(Error(g.status>=400&&"text/plain"===A?await g.text():"An unexpected response was received from the server."),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});if(C){let e=await S(Promise.resolve(g),{callServer:n.callServer,findSourceMapURL:u.findSourceMapURL,temporaryReferences:_});f=M?void 0:e.a,d=(0,m.normalizeFlightData)(e.f)}else f=void 0,d=void 0;return{actionResult:f,actionFlightData:d,redirectLocation:M,redirectType:i,revalidatedParts:s,isPrerender:j}}let w={paths:[],tag:!1,cookie:!1};function A(e,t){let{resolve:r,reject:n}=t,u={},o=e.tree;u.preserveCustomHistoryState=!1;let l=e.nextUrl&&(0,b.hasInterceptionRouteInCurrentTree)(e.tree)?e.nextUrl:null,a=Date.now();return M(e,l,t).then(async c=>{let b,{actionResult:m,actionFlightData:T,redirectLocation:S,redirectType:M,isPrerender:w,revalidatedParts:A}=c;if(S&&(M===E.RedirectType.replace?(e.pushRef.pendingPush=!1,u.pendingPush=!1):(e.pushRef.pendingPush=!0,u.pendingPush=!0),u.canonicalUrl=b=(0,s.createHrefFromUrl)(S,!1)),!T)return(r(m),S)?(0,f.handleExternalUrl)(e,u,S.href,e.pushRef.pendingPush):e;if("string"==typeof T)return r(m),(0,f.handleExternalUrl)(e,u,T,e.pushRef.pendingPush);let C=A.paths.length>0||A.tag||A.cookie;for(let n of T){let{tree:i,seedData:c,head:s,isRootRender:h}=n;if(!h)return console.log("SERVER ACTION APPLY FAILED"),r(m),e;let R=(0,d.applyRouterStatePatchToTree)([""],o,i,b||e.canonicalUrl);if(null===R)return r(m),(0,v.handleSegmentMismatch)(e,t,i);if((0,p.isNavigatingToNewRootLayout)(o,R))return r(m),(0,f.handleExternalUrl)(e,u,b||e.canonicalUrl,e.pushRef.pendingPush);if(null!==c){let t=c[1],r=(0,y.createEmptyCacheNode)();r.rsc=t,r.prefetchRsc=null,r.loading=c[3],(0,_.fillLazyItemsTillLeafWithHead)(a,r,void 0,i,c,s,void 0),u.cache=r,u.prefetchCache=new Map,C&&await (0,g.refreshInactiveParallelSegments)({navigatedAt:a,state:e,updatedTree:R,updatedCache:r,includeNextUrl:!!l,canonicalUrl:u.canonicalUrl||e.canonicalUrl})}u.patchedTree=R,o=R}return S&&b?(C||((0,O.createSeededPrefetchCacheEntry)({url:S,data:{flightData:T,canonicalUrl:void 0,couldBeIntercepted:!1,prerendered:!1,postponed:!1,staleTime:-1},tree:e.tree,prefetchCache:e.prefetchCache,nextUrl:e.nextUrl,kind:w?i.PrefetchKind.FULL:i.PrefetchKind.AUTO}),u.prefetchCache=e.prefetchCache),n((0,R.getRedirectError)((0,j.hasBasePath)(b)?(0,P.removeBasePath)(b):b,M||E.RedirectType.push))):r(m),(0,h.handleMutable)(e,u)},t=>(n(t),e))}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},2444:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{default:function(){return u},getProperError:function(){return o}});let n=r(6486);function u(e){return"object"==typeof e&&null!==e&&"name"in e&&"message"in e}function o(e){return u(e)?e:Object.defineProperty(Error((0,n.isPlainObject)(e)?function(e){let t=new WeakSet;return JSON.stringify(e,(e,r)=>{if("object"==typeof r&&null!==r){if(t.has(r))return"[Circular]";t.add(r)}return r})}(e):e+""),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0})}},2486:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{ACTION_HEADER:function(){return n},FLIGHT_HEADERS:function(){return f},NEXT_ACTION_NOT_FOUND_HEADER:function(){return v},NEXT_DID_POSTPONE_HEADER:function(){return h},NEXT_HMR_REFRESH_HASH_COOKIE:function(){return i},NEXT_HMR_REFRESH_HEADER:function(){return a},NEXT_IS_PRERENDER_HEADER:function(){return b},NEXT_REWRITTEN_PATH_HEADER:function(){return _},NEXT_REWRITTEN_QUERY_HEADER:function(){return y},NEXT_ROUTER_PREFETCH_HEADER:function(){return o},NEXT_ROUTER_SEGMENT_PREFETCH_HEADER:function(){return l},NEXT_ROUTER_STALE_TIME_HEADER:function(){return p},NEXT_ROUTER_STATE_TREE_HEADER:function(){return u},NEXT_RSC_UNION_QUERY:function(){return d},NEXT_URL:function(){return c},RSC_CONTENT_TYPE_HEADER:function(){return s},RSC_HEADER:function(){return r}});let r="rsc",n="next-action",u="next-router-state-tree",o="next-router-prefetch",l="next-router-segment-prefetch",a="next-hmr-refresh",i="__next_hmr_refresh_hash__",c="next-url",s="text/x-component",f=[r,u,o,a,l],d="_rsc",p="x-nextjs-stale-time",h="x-nextjs-postponed",_="x-nextjs-rewritten-path",y="x-nextjs-rewritten-query",b="x-nextjs-prerender",v="x-nextjs-action-not-found";("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},2542:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"notFound",{enumerable:!0,get:function(){return u}});let n=""+r(7099).HTTP_ERROR_FALLBACK_ERROR_CODE+";404";function u(){let e=Object.defineProperty(Error(n),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});throw e.digest=n,e}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},2592:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"createInitialRouterState",{enumerable:!0,get:function(){return s}});let n=r(9658),u=r(637),o=r(6343),l=r(3571),a=r(6871),i=r(3597),c=r(6378);function s(e){var t,r;let{navigatedAt:s,initialFlightData:f,initialCanonicalUrlParts:d,initialParallelRoutes:p,location:h,couldBeIntercepted:_,postponed:y,prerendered:b}=e,v=d.join("/"),g=(0,c.getFlightDataPartsFromPath)(f[0]),{tree:m,seedData:R,head:E}=g,O={lazyData:null,rsc:null==R?void 0:R[1],prefetchRsc:null,head:null,prefetchHead:null,parallelRoutes:p,loading:null!=(t=null==R?void 0:R[3])?t:null,navigatedAt:s},P=h?(0,n.createHrefFromUrl)(h):v;(0,i.addRefreshMarkerToActiveParallelSegments)(m,P);let j=new Map;(null===p||0===p.size)&&(0,u.fillLazyItemsTillLeafWithHead)(s,O,void 0,m,R,E,void 0);let T={tree:m,cache:O,prefetchCache:j,pushRef:{pendingPush:!1,mpaNavigation:!1,preserveCustomHistoryState:!0},focusAndScrollRef:{apply:!1,onlyHashChange:!1,hashFragment:null,segmentPaths:[]},canonicalUrl:P,nextUrl:null!=(r=(0,o.extractPathFromFlightRouterState)(m)||(null==h?void 0:h.pathname))?r:null};if(h){let e=new URL(""+h.pathname+h.search,h.origin);(0,l.createSeededPrefetchCacheEntry)({url:e,data:{flightData:[g],canonicalUrl:void 0,couldBeIntercepted:!!_,prerendered:b,postponed:y,staleTime:b&&1?l.STATIC_STALETIME_MS:-1},tree:T.tree,prefetchCache:T.prefetchCache,nextUrl:T.nextUrl,kind:b?a.PrefetchKind.FULL:a.PrefetchKind.AUTO})}return T}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},2669:(e,t,r)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(e){console.error(e)}}(),e.exports=r(9248)},2753:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{createFetch:function(){return y},createFromNextReadableStream:function(){return b},fetchServerResponse:function(){return _}});let n=r(7197),u=r(2486),o=r(1209),l=r(5153),a=r(6871),i=r(6378),c=r(3201),s=r(396),f=r(3223),d=n.createFromReadableStream;function p(e){return{flightData:(0,f.urlToUrlWithoutFlightMarker)(new URL(e,location.origin)).toString(),canonicalUrl:void 0,couldBeIntercepted:!1,prerendered:!1,postponed:!1,staleTime:-1}}let h=new AbortController;async function _(e,t){let{flightRouterState:r,nextUrl:n,prefetchKind:o}=t,l={[u.RSC_HEADER]:"1",[u.NEXT_ROUTER_STATE_TREE_HEADER]:(0,i.prepareFlightRouterStateForRequest)(r,t.isHmrRefresh)};o===a.PrefetchKind.AUTO&&(l[u.NEXT_ROUTER_PREFETCH_HEADER]="1"),n&&(l[u.NEXT_URL]=n);try{var s;let t=o?o===a.PrefetchKind.TEMPORARY?"high":"low":"auto",r=await y(e,l,t,h.signal),n=(0,f.urlToUrlWithoutFlightMarker)(new URL(r.url)),d=r.redirected?n:void 0,_=r.headers.get("content-type")||"",v=!!(null==(s=r.headers.get("vary"))?void 0:s.includes(u.NEXT_URL)),g=!!r.headers.get(u.NEXT_DID_POSTPONE_HEADER),m=r.headers.get(u.NEXT_ROUTER_STALE_TIME_HEADER),R=null!==m?1e3*parseInt(m,10):-1;if(!_.startsWith(u.RSC_CONTENT_TYPE_HEADER)||!r.ok||!r.body)return e.hash&&(n.hash=e.hash),p(n.toString());let E=g?function(e){let t=e.getReader();return new ReadableStream({async pull(e){for(;;){let{done:r,value:n}=await t.read();if(!r){e.enqueue(n);continue}return}}})}(r.body):r.body,O=await b(E);if((0,c.getAppBuildId)()!==O.b)return p(r.url);return{flightData:(0,i.normalizeFlightData)(O.f),canonicalUrl:d,couldBeIntercepted:v,prerendered:O.S,postponed:g,staleTime:R}}catch(t){return h.signal.aborted||console.error("Failed to fetch RSC payload for "+e+". Falling back to browser navigation.",t),{flightData:e.toString(),canonicalUrl:void 0,couldBeIntercepted:!1,prerendered:!1,postponed:!1,staleTime:-1}}}async function y(e,t,r,n){let o=new URL(e);await (0,s.setCacheBustingSearchParam)(o,t);let l=await fetch(o,{credentials:"same-origin",headers:t,priority:r||void 0,signal:n}),a=l.redirected,i=new URL(l.url,o);return i.searchParams.delete(u.NEXT_RSC_UNION_QUERY),{url:i.href,redirected:a,ok:l.ok,headers:l.headers,body:l.body,status:l.status}}function b(e){return d(e,{callServer:o.callServer,findSourceMapURL:l.findSourceMapURL})}window.addEventListener("pagehide",()=>{h.abort()}),window.addEventListener("pageshow",()=>{h=new AbortController}),("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},2845:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{UnrecognizedActionError:function(){return r},unstable_isUnrecognizedActionError:function(){return n}});class r extends Error{constructor(...e){super(...e),this.name="UnrecognizedActionError"}}function n(e){return!!(e&&"object"==typeof e&&e instanceof r)}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},2929:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"hasBasePath",{enumerable:!0,get:function(){return u}});let n=r(2018);function u(e){return(0,n.pathHasPrefix)(e,"")}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},3201:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{getAppBuildId:function(){return u},setAppBuildId:function(){return n}});let r="";function n(e){r=e}function u(){return r}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},3223:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{doesStaticSegmentAppearInURL:function(){return c},getCacheKeyForDynamicParam:function(){return s},getParamValueFromCacheKey:function(){return d},getRenderedPathname:function(){return a},getRenderedSearch:function(){return l},parseDynamicParamFromURLPart:function(){return i},urlToUrlWithoutFlightMarker:function(){return f}});let n=r(5360),u=r(4425),o=r(2486);function l(e){let t=e.headers.get(o.NEXT_REWRITTEN_QUERY_HEADER);return null!==t?""===t?"":"?"+t:f(new URL(e.url)).search}function a(e){let t=e.headers.get(o.NEXT_REWRITTEN_PATH_HEADER);return null!=t?t:f(new URL(e.url)).pathname}function i(e,t,r){switch(e){case"c":case"ci":return rencodeURIComponent(e)):[];case"oc":return rencodeURIComponent(e)):null;case"d":case"di":if(r>=t.length)return"";return encodeURIComponent(t[r]);default:return""}}function c(e){return!(e===u.ROOT_SEGMENT_REQUEST_KEY||e.startsWith(n.PAGE_SEGMENT_KEY)||"("===e[0]&&e.endsWith(")"))&&e!==n.DEFAULT_SEGMENT_KEY&&"/_not-found"!==e}function s(e,t){return"string"==typeof e?(0,n.addSearchParamsIfPageSegment)(e,Object.fromEntries(new URLSearchParams(t))):null===e?"":e.join("/")}function f(e){let t=new URL(e);return t.searchParams.delete(o.NEXT_RSC_UNION_QUERY),t}function d(e,t){return"c"===t||"oc"===t?e.split("/"):e}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},3443:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"AppRouterAnnouncer",{enumerable:!0,get:function(){return l}});let n=r(2115),u=r(7650),o="next-route-announcer";function l(e){let{tree:t}=e,[r,l]=(0,n.useState)(null);(0,n.useEffect)(()=>(l(function(){var e;let t=document.getElementsByName(o)[0];if(null==t||null==(e=t.shadowRoot)?void 0:e.childNodes[0])return t.shadowRoot.childNodes[0];{let e=document.createElement(o);e.style.cssText="position:absolute";let t=document.createElement("div");return t.ariaLive="assertive",t.id="__next-route-announcer__",t.role="alert",t.style.cssText="position:absolute;border:0;height:1px;margin:-1px;padding:0;width:1px;clip:rect(0 0 0 0);overflow:hidden;white-space:nowrap;word-wrap:normal",e.attachShadow({mode:"open"}).appendChild(t),document.body.appendChild(e),t}}()),()=>{let e=document.getElementsByTagName(o)[0];(null==e?void 0:e.isConnected)&&document.body.removeChild(e)}),[]);let[a,i]=(0,n.useState)(""),c=(0,n.useRef)(void 0);return(0,n.useEffect)(()=>{let e="";if(document.title)e=document.title;else{let t=document.querySelector("h1");t&&(e=t.innerText||t.textContent||"")}void 0!==c.current&&c.current!==e&&i(e),c.current=e},[t]),r?(0,u.createPortal)(a,r):null}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},3463:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"reportGlobalError",{enumerable:!0,get:function(){return r}});let r="function"==typeof reportError?reportError:e=>{globalThis.console.error(e)};("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},3480:(e,t,r)=>{"use strict";function n(){throw Object.defineProperty(Error("`forbidden()` is experimental and only allowed to be enabled when `experimental.authInterrupts` is enabled."),"__NEXT_ERROR_CODE",{value:"E488",enumerable:!1,configurable:!0})}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"forbidden",{enumerable:!0,get:function(){return n}}),r(7099).HTTP_ERROR_FALLBACK_ERROR_CODE,("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},3485:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{computeCacheBustingSearchParam:function(){return i},computeLegacyCacheBustingSearchParam:function(){return c}});let n=r(75),u=new TextEncoder;function o(e){return void 0===e?"0":Array.isArray(e)?e.join(","):e}function l(e,t,r,n){return(void 0===e||"0"===e)&&void 0===t&&void 0===r&&void 0===n?null:[null!=e?e:"0",o(t),o(r),o(n)].join(",")}async function a(e){var t=new Uint8Array(await globalThis.crypto.subtle.digest("SHA-256",u.encode(e))).subarray(0,12);let r="";for(let e=0;e{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{IDLE_LINK_STATUS:function(){return s},PENDING_LINK_STATUS:function(){return c},mountFormInstance:function(){return g},mountLinkInstance:function(){return v},onLinkVisibilityChanged:function(){return R},onNavigationIntent:function(){return E},pingVisibleLinks:function(){return P},setLinkForCurrentNavigation:function(){return f},unmountLinkForCurrentNavigation:function(){return d},unmountPrefetchableInstance:function(){return m}}),r(1807);let n=r(7297),u=r(6048),o=r(2115),l=r(6871),a=r(8302),i=null,c={pending:!0},s={pending:!1};function f(e){(0,o.startTransition)(()=>{null==i||i.setOptimisticLinkStatus(s),null==e||e.setOptimisticLinkStatus(c),i=e})}function d(e){i===e&&(i=null)}let p="function"==typeof WeakMap?new WeakMap:new Map,h=new Set,_="function"==typeof IntersectionObserver?new IntersectionObserver(function(e){for(let t of e){let e=t.intersectionRatio>0;R(t.target,e)}},{rootMargin:"200px"}):null;function y(e,t){void 0!==p.get(e)&&m(e),p.set(e,t),null!==_&&_.observe(e)}function b(e){try{return(0,n.createPrefetchURL)(e)}catch(t){return("function"==typeof reportError?reportError:console.error)("Cannot prefetch '"+e+"' because it cannot be converted to a URL."),null}}function v(e,t,r,n,u,o){if(u){let u=b(t);if(null!==u){let t={router:r,fetchStrategy:n,isVisible:!1,prefetchTask:null,prefetchHref:u.href,setOptimisticLinkStatus:o};return y(e,t),t}}return{router:r,fetchStrategy:n,isVisible:!1,prefetchTask:null,prefetchHref:null,setOptimisticLinkStatus:o}}function g(e,t,r,n){let u=b(t);null!==u&&y(e,{router:r,fetchStrategy:n,isVisible:!1,prefetchTask:null,prefetchHref:u.href,setOptimisticLinkStatus:null})}function m(e){let t=p.get(e);if(void 0!==t){p.delete(e),h.delete(t);let r=t.prefetchTask;null!==r&&(0,u.cancelPrefetchTask)(r)}null!==_&&_.unobserve(e)}function R(e,t){let r=p.get(e);void 0!==r&&(r.isVisible=t,t?h.add(r):h.delete(r),O(r,u.PrefetchPriority.Default))}function E(e,t){let r=p.get(e);void 0!==r&&void 0!==r&&O(r,u.PrefetchPriority.Intent)}function O(e,t){var r;let n=e.prefetchTask;if(!e.isVisible){null!==n&&(0,u.cancelPrefetchTask)(n);return}r=e,(async()=>{let e;switch(r.fetchStrategy){case u.FetchStrategy.PPR:e=l.PrefetchKind.AUTO;break;case u.FetchStrategy.Full:e=l.PrefetchKind.FULL;break;case u.FetchStrategy.PPRRuntime:throw Object.defineProperty(new a.InvariantError("FetchStrategy.PPRRuntime should never be used when `experimental.clientSegmentCache` is disabled"),"__NEXT_ERROR_CODE",{value:"E772",enumerable:!1,configurable:!0});default:r.fetchStrategy,e=void 0}return r.router.prefetch(r.prefetchHref,{kind:e})})().catch(e=>{})}function P(e,t){for(let r of h){let n=r.prefetchTask;if(null!==n&&!(0,u.isPrefetchTaskDirty)(n,e,t))continue;null!==n&&(0,u.cancelPrefetchTask)(n);let o=(0,u.createCacheKey)(r.prefetchHref,e);r.prefetchTask=(0,u.schedulePrefetchTask)(o,t,r.fetchStrategy,u.PrefetchPriority.Default,null)}}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},3571:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{DYNAMIC_STALETIME_MS:function(){return d},STATIC_STALETIME_MS:function(){return p},createSeededPrefetchCacheEntry:function(){return c},getOrCreatePrefetchCacheEntry:function(){return i},prunePrefetchCache:function(){return f}});let n=r(2753),u=r(6871),o=r(3933);function l(e,t,r){let n=e.pathname;return(t&&(n+=e.search),r)?""+r+"%"+n:n}function a(e,t,r){return l(e,t===u.PrefetchKind.FULL,r)}function i(e){let{url:t,nextUrl:r,tree:n,prefetchCache:o,kind:a,allowAliasing:i=!0}=e,c=function(e,t,r,n,o){for(let a of(void 0===t&&(t=u.PrefetchKind.TEMPORARY),[r,null])){let r=l(e,!0,a),i=l(e,!1,a),c=e.search?r:i,s=n.get(c);if(s&&o){if(s.url.pathname===e.pathname&&s.url.search!==e.search)return{...s,aliased:!0};return s}let f=n.get(i);if(o&&e.search&&t!==u.PrefetchKind.FULL&&f&&!f.key.includes("%"))return{...f,aliased:!0}}if(t!==u.PrefetchKind.FULL&&o){for(let t of n.values())if(t.url.pathname===e.pathname&&!t.key.includes("%"))return{...t,aliased:!0}}}(t,a,r,o,i);return c?(c.status=h(c),c.kind!==u.PrefetchKind.FULL&&a===u.PrefetchKind.FULL&&c.data.then(e=>{if(!(Array.isArray(e.flightData)&&e.flightData.some(e=>e.isRootRender&&null!==e.seedData)))return s({tree:n,url:t,nextUrl:r,prefetchCache:o,kind:null!=a?a:u.PrefetchKind.TEMPORARY})}),a&&c.kind===u.PrefetchKind.TEMPORARY&&(c.kind=a),c):s({tree:n,url:t,nextUrl:r,prefetchCache:o,kind:a||u.PrefetchKind.TEMPORARY})}function c(e){let{nextUrl:t,tree:r,prefetchCache:n,url:o,data:l,kind:i}=e,c=l.couldBeIntercepted?a(o,i,t):a(o,i),s={treeAtTimeOfPrefetch:r,data:Promise.resolve(l),kind:i,prefetchTime:Date.now(),lastUsedTime:Date.now(),staleTime:l.staleTime,key:c,status:u.PrefetchCacheEntryStatus.fresh,url:o};return n.set(c,s),s}function s(e){let{url:t,kind:r,tree:l,nextUrl:i,prefetchCache:c}=e,s=a(t,r),f=o.prefetchQueue.enqueue(()=>(0,n.fetchServerResponse)(t,{flightRouterState:l,nextUrl:i,prefetchKind:r}).then(e=>{let r;if(e.couldBeIntercepted&&(r=function(e){let{url:t,nextUrl:r,prefetchCache:n,existingCacheKey:u}=e,o=n.get(u);if(!o)return;let l=a(t,o.kind,r);return n.set(l,{...o,key:l}),n.delete(u),l}({url:t,existingCacheKey:s,nextUrl:i,prefetchCache:c})),e.prerendered){let t=c.get(null!=r?r:s);t&&(t.kind=u.PrefetchKind.FULL,-1!==e.staleTime&&(t.staleTime=e.staleTime))}return e})),d={treeAtTimeOfPrefetch:l,data:f,kind:r,prefetchTime:Date.now(),lastUsedTime:null,staleTime:-1,key:s,status:u.PrefetchCacheEntryStatus.fresh,url:t};return c.set(s,d),d}function f(e){for(let[t,r]of e)h(r)===u.PrefetchCacheEntryStatus.expired&&e.delete(t)}let d=1e3*Number("0"),p=1e3*Number("300");function h(e){let{kind:t,prefetchTime:r,lastUsedTime:n}=e;return Date.now()<(null!=n?n:r)+d?n?u.PrefetchCacheEntryStatus.reusable:u.PrefetchCacheEntryStatus.fresh:t===u.PrefetchKind.AUTO&&Date.now(){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{addRefreshMarkerToActiveParallelSegments:function(){return function e(t,r){let[n,u,,l]=t;for(let a in n.includes(o.PAGE_SEGMENT_KEY)&&"refresh"!==l&&(t[2]=r,t[3]="refresh"),u)e(u[a],r)}},refreshInactiveParallelSegments:function(){return l}});let n=r(7609),u=r(2753),o=r(5360);async function l(e){let t=new Set;await a({...e,rootTree:e.updatedTree,fetchedSegments:t})}async function a(e){let{navigatedAt:t,state:r,updatedTree:o,updatedCache:l,includeNextUrl:i,fetchedSegments:c,rootTree:s=o,canonicalUrl:f}=e,[,d,p,h]=o,_=[];if(p&&p!==f&&"refresh"===h&&!c.has(p)){c.add(p);let e=(0,u.fetchServerResponse)(new URL(p,location.origin),{flightRouterState:[s[0],s[1],s[2],"refetch"],nextUrl:i?r.nextUrl:null}).then(e=>{let{flightData:r}=e;if("string"!=typeof r)for(let e of r)(0,n.applyFlightData)(t,l,l,e)});_.push(e)}for(let e in d){let n=a({navigatedAt:t,state:r,updatedTree:d[e],updatedCache:l,includeNextUrl:i,fetchedSegments:c,rootTree:s,canonicalUrl:f});_.push(n)}await Promise.all(_)}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},3663:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"appBootstrap",{enumerable:!0,get:function(){return u}});let n=r(4681);function u(e){var t,r;t=self.__next_s,r=()=>{e()},t&&t.length?t.reduce((e,t)=>{let[r,u]=t;return e.then(()=>new Promise((e,t)=>{let o=document.createElement("script");u&&(0,n.setAttributesFromProps)(o,u),r?(o.src=r,o.onload=()=>e(),o.onerror=t):u&&(o.innerHTML=u.children,setTimeout(e)),document.head.appendChild(o)}))},Promise.resolve()).catch(e=>{console.error(e)}).then(()=>{r()}):r()}window.next={version:"15.5.20",appDir:!0},("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},3789:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{isRecoverableError:function(){return i},onRecoverableError:function(){return c}});let n=r(8140),u=r(4553),o=n._(r(2444)),l=r(3463),a=new WeakSet;function i(e){return a.has(e)}let c=e=>{let t=(0,o.default)(e)&&"cause"in e?e.cause:e;(0,u.isBailoutToCSRError)(t)||(0,l.reportGlobalError)(t)};("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},3860:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"unstable_rethrow",{enumerable:!0,get:function(){return n}});let n=r(7858).unstable_rethrow;("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},3865:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{PathParamsContext:function(){return l},PathnameContext:function(){return o},SearchParamsContext:function(){return u}});let n=r(2115),u=(0,n.createContext)(null),o=(0,n.createContext)(null),l=(0,n.createContext)(null)},3879:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"addPathPrefix",{enumerable:!0,get:function(){return u}});let n=r(5240);function u(e,t){if(!e.startsWith("/")||!t)return e;let{pathname:r,query:u,hash:o}=(0,n.parsePath)(e);return""+t+r+u+o}},3886:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"HTTPAccessFallbackBoundary",{enumerable:!0,get:function(){return s}});let n=r(9417),u=r(5155),o=n._(r(2115)),l=r(1486),a=r(7099);r(4781);let i=r(6752);class c extends o.default.Component{componentDidCatch(){}static getDerivedStateFromError(e){if((0,a.isHTTPAccessFallbackError)(e))return{triggeredStatus:(0,a.getAccessFallbackHTTPStatus)(e)};throw e}static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPathname&&t.triggeredStatus?{triggeredStatus:void 0,previousPathname:e.pathname}:{triggeredStatus:t.triggeredStatus,previousPathname:e.pathname}}render(){let{notFound:e,forbidden:t,unauthorized:r,children:n}=this.props,{triggeredStatus:o}=this.state,l={[a.HTTPAccessErrorStatus.NOT_FOUND]:e,[a.HTTPAccessErrorStatus.FORBIDDEN]:t,[a.HTTPAccessErrorStatus.UNAUTHORIZED]:r};if(o){let i=o===a.HTTPAccessErrorStatus.NOT_FOUND&&e,c=o===a.HTTPAccessErrorStatus.FORBIDDEN&&t,s=o===a.HTTPAccessErrorStatus.UNAUTHORIZED&&r;return i||c||s?(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)("meta",{name:"robots",content:"noindex"}),!1,l[o]]}):n}return n}constructor(e){super(e),this.state={triggeredStatus:void 0,previousPathname:e.pathname}}}function s(e){let{notFound:t,forbidden:r,unauthorized:n,children:a}=e,s=(0,l.useUntrackedPathname)(),f=(0,o.useContext)(i.MissingSlotContext);return t||r||n?(0,u.jsx)(c,{pathname:s,notFound:t,forbidden:r,unauthorized:n,missingSlots:f,children:a}):(0,u.jsx)(u.Fragment,{children:a})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},3913:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{HTML_LIMITED_BOT_UA_RE:function(){return n.HTML_LIMITED_BOT_UA_RE},HTML_LIMITED_BOT_UA_RE_STRING:function(){return o},getBotType:function(){return i},isBot:function(){return a}});let n=r(4029),u=/Googlebot(?!-)|Googlebot$/i,o=n.HTML_LIMITED_BOT_UA_RE.source;function l(e){return n.HTML_LIMITED_BOT_UA_RE.test(e)}function a(e){return u.test(e)||l(e)}function i(e){return u.test(e)?"dom":l(e)?"html":void 0}},3933:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{prefetchQueue:function(){return o},prefetchReducer:function(){return l}});let n=r(9889),u=r(3571),o=new n.PromiseQueue(5),l=function(e,t){(0,u.prunePrefetchCache)(e.prefetchCache);let{url:r}=t;return(0,u.getOrCreatePrefetchCacheEntry)({url:r,nextUrl:e.nextUrl,prefetchCache:e.prefetchCache,kind:t.kind,tree:e.tree,allowAliasing:!0}),e};("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},3965:e=>{!function(){var t={229:function(e){var t,r,n,u=e.exports={};function o(){throw Error("setTimeout has not been defined")}function l(){throw Error("clearTimeout has not been defined")}try{t="function"==typeof setTimeout?setTimeout:o}catch(e){t=o}try{r="function"==typeof clearTimeout?clearTimeout:l}catch(e){r=l}function a(e){if(t===setTimeout)return setTimeout(e,0);if((t===o||!t)&&setTimeout)return t=setTimeout,setTimeout(e,0);try{return t(e,0)}catch(r){try{return t.call(null,e,0)}catch(r){return t.call(this,e,0)}}}var i=[],c=!1,s=-1;function f(){c&&n&&(c=!1,n.length?i=n.concat(i):s=-1,i.length&&d())}function d(){if(!c){var e=a(f);c=!0;for(var t=i.length;t;){for(n=i,i=[];++s1)for(var r=1;r{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{describeHasCheckingStringProperty:function(){return u},describeStringPropertyAccess:function(){return n},wellKnownProperties:function(){return o}});let r=/^[A-Za-z_$][A-Za-z0-9_$]*$/;function n(e,t){return r.test(t)?"`"+e+"."+t+"`":"`"+e+"["+JSON.stringify(t)+"]`"}function u(e,t){let r=JSON.stringify(t);return"`Reflect.has("+e+", "+r+")`, `"+r+" in "+e+"`, or similar"}let o=new Set(["hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toString","valueOf","toLocaleString","then","catch","finally","status","displayName","_debugInfo","toJSON","$$typeof","__esModule"])},4029:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"HTML_LIMITED_BOT_UA_RE",{enumerable:!0,get:function(){return r}});let r=/[\w-]+-Google|Google-[\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight/i},4061:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{normalizeAppPath:function(){return o},normalizeRscURL:function(){return l}});let n=r(6196),u=r(5360);function o(e){return(0,n.ensureLeadingSlash)(e.split("/").reduce((e,t,r,n)=>!t||(0,u.isGroupSegment)(t)||"@"===t[0]||("page"===t||"route"===t)&&r===n.length-1?e:e+"/"+t,""))}function l(e){return e.replace(/\.rsc($|\?)/,"$1")}},4089:(e,t)=>{"use strict";function r(e){return null!==e&&"object"==typeof e&&"then"in e&&"function"==typeof e.then}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"isThenable",{enumerable:!0,get:function(){return r}})},4170:(e,t,r)=>{"use strict";function n(e,t){if(void 0===t&&(t={}),t.onlyHashChange)return void e();let r=document.documentElement;r.dataset.scrollBehavior;let n=r.style.scrollBehavior;r.style.scrollBehavior="auto",t.dontForceLayout||r.getClientRects(),e(),r.style.scrollBehavior=n}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"disableSmoothScrollDuringRouteTransition",{enumerable:!0,get:function(){return n}}),r(4781)},4201:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"invalidateCacheByRouterState",{enumerable:!0,get:function(){return u}});let n=r(9190);function u(e,t,r){for(let u in r[1]){let o=r[1][u][0],l=(0,n.createRouterCacheKey)(o),a=t.parallelRoutes.get(u);if(a){let t=new Map(a);t.delete(l),e.parallelRoutes.set(u,t)}}}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},4259:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"assignLocation",{enumerable:!0,get:function(){return u}});let n=r(6058);function u(e,t){if(e.startsWith(".")){let r=t.origin+t.pathname;return new URL((r.endsWith("/")?r:r+"/")+e)}return new URL((0,n.addBasePath)(e),t.href)}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},4425:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{ROOT_SEGMENT_CACHE_KEY:function(){return o},ROOT_SEGMENT_REQUEST_KEY:function(){return u},appendSegmentCacheKeyPart:function(){return c},appendSegmentRequestKeyPart:function(){return a},convertSegmentPathToStaticExportFilename:function(){return d},createSegmentCacheKeyPart:function(){return i},createSegmentRequestKeyPart:function(){return l}});let n=r(5360),u="",o="";function l(e){if("string"==typeof e)return e.startsWith(n.PAGE_SEGMENT_KEY)?n.PAGE_SEGMENT_KEY:"/_not-found"===e?"_not-found":f(e);let t=e[0],r=e[2];return"$"+r+"$"+f(t)}function a(e,t,r){return e+"/"+("children"===t?r:"@"+f(t)+"/"+r)}function i(e,t){return"string"==typeof t?e:e+"$"+f(t[1])}function c(e,t,r){return e+"/"+("children"===t?r:"@"+f(t)+"/"+r)}let s=/^[a-zA-Z0-9\-_@]+$/;function f(e){return s.test(e)?e:"!"+btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function d(e){return"__next"+e.replace(/\//g,".")+".txt"}},4431:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{MetadataBoundary:function(){return o},OutletBoundary:function(){return a},RootLayoutBoundary:function(){return i},ViewportBoundary:function(){return l}});let n=r(8440),u={[n.METADATA_BOUNDARY_NAME]:function(e){let{children:t}=e;return t},[n.VIEWPORT_BOUNDARY_NAME]:function(e){let{children:t}=e;return t},[n.OUTLET_BOUNDARY_NAME]:function(e){let{children:t}=e;return t},[n.ROOT_LAYOUT_BOUNDARY_NAME]:function(e){let{children:t}=e;return t}},o=u[n.METADATA_BOUNDARY_NAME.slice(0)],l=u[n.VIEWPORT_BOUNDARY_NAME.slice(0)],a=u[n.OUTLET_BOUNDARY_NAME.slice(0)],i=u[n.ROOT_LAYOUT_BOUNDARY_NAME.slice(0)]},4553:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{BailoutToCSRError:function(){return n},isBailoutToCSRError:function(){return u}});let r="BAILOUT_TO_CLIENT_SIDE_RENDERING";class n extends Error{constructor(e){super("Bail out to client-side rendering: "+e),this.reason=e,this.digest=r}}function u(e){return"object"==typeof e&&null!==e&&"digest"in e&&e.digest===r}},4681:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"setAttributesFromProps",{enumerable:!0,get:function(){return o}});let r={acceptCharset:"accept-charset",className:"class",htmlFor:"for",httpEquiv:"http-equiv",noModule:"noModule"},n=["onLoad","onReady","dangerouslySetInnerHTML","children","onError","strategy","stylesheets"];function u(e){return["async","defer","noModule"].includes(e)}function o(e,t){for(let[o,l]of Object.entries(t)){if(!t.hasOwnProperty(o)||n.includes(o)||void 0===l)continue;let a=r[o]||o.toLowerCase();"SCRIPT"===e.tagName&&u(a)?e[a]=!!l:e.setAttribute(a,String(l)),(!1===l||"SCRIPT"===e.tagName&&u(a)&&(!l||"false"===l))&&(e.setAttribute(a,""),e.removeAttribute(a))}}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},4707:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"isNavigatingToNewRootLayout",{enumerable:!0,get:function(){return function e(t,r){let n=t[0],u=r[0];if(Array.isArray(n)&&Array.isArray(u)){if(n[0]!==u[0]||n[2]!==u[2])return!0}else if(n!==u)return!0;if(t[4])return!r[4];if(r[4])return!0;let o=Object.values(t[1])[0],l=Object.values(r[1])[0];return!o||!l||e(o,l)}}}),("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},4781:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"warnOnce",{enumerable:!0,get:function(){return r}});let r=e=>{}},4869:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"createRenderSearchParamsFromClient",{enumerable:!0,get:function(){return o}});let n=r(3982),u=new WeakMap;function o(e){let t=u.get(e);if(t)return t;let r=Promise.resolve(e);return u.set(e,r),Object.keys(e).forEach(t=>{n.wellKnownProperties.has(t)||(r[t]=e[t])}),r}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},5009:(e,t,r)=>{"use strict";e.exports=r(7362)},5153:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"findSourceMapURL",{enumerable:!0,get:function(){return r}});let r=void 0;("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},5155:(e,t,r)=>{"use strict";e.exports=r(6897)},5240:(e,t)=>{"use strict";function r(e){let t=e.indexOf("#"),r=e.indexOf("?"),n=r>-1&&(t<0||r-1?{pathname:e.substring(0,n?r:t),query:n?e.substring(r,t>-1?t:void 0):"",hash:t>-1?e.slice(t):""}:{pathname:e,query:"",hash:""}}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"parsePath",{enumerable:!0,get:function(){return r}})},5278:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"AsyncMetadataOutlet",{enumerable:!0,get:function(){return l}});let n=r(5155),u=r(2115);function o(e){let{promise:t}=e,{error:r,digest:n}=(0,u.use)(t);if(r)throw n&&(r.digest=n),r;return null}function l(e){let{promise:t}=e;return(0,n.jsx)(u.Suspense,{fallback:null,children:(0,n.jsx)(o,{promise:t})})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},5345:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"hmrRefreshReducer",{enumerable:!0,get:function(){return n}}),r(2753),r(9658),r(895),r(4707),r(5737),r(1126),r(7609),r(7297),r(7332),r(8915);let n=function(e,t){return e};("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},5360:(e,t)=>{"use strict";function r(e){return"("===e[0]&&e.endsWith(")")}function n(e){return e.startsWith("@")&&"@children"!==e}function u(e,t){if(e.includes(o)){let e=JSON.stringify(t);return"{}"!==e?o+"?"+e:o}return e}Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{DEFAULT_SEGMENT_KEY:function(){return l},PAGE_SEGMENT_KEY:function(){return o},addSearchParamsIfPageSegment:function(){return u},isGroupSegment:function(){return r},isParallelRouteSegment:function(){return n}});let o="__PAGE__",l="__DEFAULT__"},5439:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{ReadonlyURLSearchParams:function(){return s},RedirectType:function(){return u.RedirectType},forbidden:function(){return l.forbidden},notFound:function(){return o.notFound},permanentRedirect:function(){return n.permanentRedirect},redirect:function(){return n.redirect},unauthorized:function(){return a.unauthorized},unstable_isUnrecognizedActionError:function(){return f},unstable_rethrow:function(){return i.unstable_rethrow}});let n=r(6542),u=r(6437),o=r(2542),l=r(3480),a=r(6640),i=r(3860);class c extends Error{constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams")}}class s extends URLSearchParams{append(){throw new c}delete(){throw new c}set(){throw new c}sort(){throw new c}}function f(){throw Object.defineProperty(Error("`unstable_isUnrecognizedActionError` can only be used on the client."),"__NEXT_ERROR_CODE",{value:"E776",enumerable:!1,configurable:!0})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},5444:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{onCaughtError:function(){return s},onUncaughtError:function(){return f}});let n=r(8140),u=r(5829),o=r(4553),l=r(3463),a=r(8785),i=n._(r(7150)),c={decorateDevError:e=>e,handleClientError:()=>{},originConsoleError:console.error.bind(console)};function s(e,t){var r;let n,l=null==(r=t.errorBoundary)?void 0:r.constructor;if(n=n||l===a.ErrorBoundaryHandler&&t.errorBoundary.props.errorComponent===i.default)return f(e);(0,o.isBailoutToCSRError)(e)||(0,u.isNextRouterError)(e)||c.originConsoleError(e)}function f(e){(0,o.isBailoutToCSRError)(e)||(0,u.isNextRouterError)(e)||(0,l.reportGlobalError)(e)}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},5597:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"invalidateCacheBelowFlightSegmentPath",{enumerable:!0,get:function(){return function e(t,r,o){let l=o.length<=2,[a,i]=o,c=(0,n.createRouterCacheKey)(i),s=r.parallelRoutes.get(a);if(!s)return;let f=t.parallelRoutes.get(a);if(f&&f!==s||(f=new Map(s),t.parallelRoutes.set(a,f)),l)return void f.delete(c);let d=s.get(c),p=f.get(c);p&&d&&(p===d&&(p={lazyData:p.lazyData,rsc:p.rsc,prefetchRsc:p.prefetchRsc,head:p.head,prefetchHead:p.prefetchHead,parallelRoutes:new Map(p.parallelRoutes)},f.set(c,p)),e(p,d,(0,u.getNextFlightSegmentPath)(o)))}}});let n=r(9190),u=r(6378);("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},5704:(e,t,r)=>{"use strict";var n,u;e.exports=(null==(n=r.g.process)?void 0:n.env)&&"object"==typeof(null==(u=r.g.process)?void 0:u.env)?r.g.process:r(3965)},5737:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{generateSegmentsFromPatch:function(){return m},handleExternalUrl:function(){return g},navigateReducer:function(){return function e(t,r){let{url:R,isExternalUrl:E,navigateType:O,shouldScroll:P,allowAliasing:j}=r,T={},{hash:S}=R,M=(0,u.createHrefFromUrl)(R),w="push"===O;if((0,y.prunePrefetchCache)(t.prefetchCache),T.preserveCustomHistoryState=!1,T.pendingPush=w,E)return g(t,T,R.toString(),w);if(document.getElementById("__next-page-redirect"))return g(t,T,M,w);let A=(0,y.getOrCreatePrefetchCacheEntry)({url:R,nextUrl:t.nextUrl,tree:t.tree,prefetchCache:t.prefetchCache,allowAliasing:j}),{treeAtTimeOfPrefetch:C,data:x}=A;return d.prefetchQueue.bump(x),x.then(d=>{let{flightData:y,canonicalUrl:E,postponed:O}=d,j=Date.now(),x=!1;if(A.lastUsedTime||(A.lastUsedTime=j,x=!0),A.aliased){let n=new URL(R.href);E&&(n.pathname=E.pathname);let u=(0,v.handleAliasedPrefetchEntry)(j,t,y,n,T);return!1===u?e(t,{...r,allowAliasing:!1}):u}if("string"==typeof y)return g(t,T,y,w);let N=E?(0,u.createHrefFromUrl)(E):M;if(S&&t.canonicalUrl.split("#",1)[0]===N.split("#",1)[0])return T.onlyHashChange=!0,T.canonicalUrl=N,T.shouldScroll=P,T.hashFragment=S,T.scrollableSegments=[],(0,s.handleMutable)(t,T);let U=t.tree,D=t.cache,L=[];for(let e of y){let{pathToSegment:r,seedData:u,head:s,isHeadPartial:d,isRootRender:y}=e,v=e.tree,E=["",...r],P=(0,l.applyRouterStatePatchToTree)(E,U,v,M);if(null===P&&(P=(0,l.applyRouterStatePatchToTree)(E,C,v,M)),null!==P){if(u&&y&&O){let e=(0,_.startPPRNavigation)(j,D,U,v,u,s,d,!1,L);if(null!==e){if(null===e.route)return g(t,T,M,w);P=e.route;let r=e.node;null!==r&&(T.cache=r);let u=e.dynamicRequestTree;if(null!==u){let r=(0,n.fetchServerResponse)(new URL(N,R.origin),{flightRouterState:u,nextUrl:t.nextUrl});(0,_.listenForDynamicRequest)(e,r)}}else P=v}else{if((0,i.isNavigatingToNewRootLayout)(U,P))return g(t,T,M,w);let n=(0,p.createEmptyCacheNode)(),u=!1;for(let t of(A.status!==c.PrefetchCacheEntryStatus.stale||x?u=(0,f.applyFlightData)(j,D,n,e,A):(u=function(e,t,r,n){let u=!1;for(let o of(e.rsc=t.rsc,e.prefetchRsc=t.prefetchRsc,e.loading=t.loading,e.parallelRoutes=new Map(t.parallelRoutes),m(n).map(e=>[...r,...e])))(0,b.clearCacheNodeDataForSegmentPath)(e,t,o),u=!0;return u}(n,D,r,v),A.lastUsedTime=j),(0,a.shouldHardNavigate)(E,U)?(n.rsc=D.rsc,n.prefetchRsc=D.prefetchRsc,(0,o.invalidateCacheBelowFlightSegmentPath)(n,D,r),T.cache=n):u&&(T.cache=n,D=n),m(v))){let e=[...r,...t];e[e.length-1]!==h.DEFAULT_SEGMENT_KEY&&L.push(e)}}U=P}}return T.patchedTree=U,T.canonicalUrl=N,T.scrollableSegments=L,T.hashFragment=S,T.shouldScroll=P,(0,s.handleMutable)(t,T)},()=>t)}}});let n=r(2753),u=r(9658),o=r(5597),l=r(895),a=r(8130),i=r(4707),c=r(6871),s=r(1126),f=r(7609),d=r(3933),p=r(7297),h=r(5360),_=r(7317),y=r(3571),b=r(1281),v=r(9473);function g(e,t,r,n){return t.mpaNavigation=!0,t.canonicalUrl=r,t.pendingPush=n,t.scrollableSegments=void 0,(0,s.handleMutable)(e,t)}function m(e){let t=[],[r,n]=e;if(0===Object.keys(n).length)return[[r]];for(let[e,u]of Object.entries(n))for(let n of m(u))""===r?t.push([e,...n]):t.push([r,e,...n]);return t}r(6048),("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},5829:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"isNextRouterError",{enumerable:!0,get:function(){return o}});let n=r(7099),u=r(6437);function o(e){return(0,u.isRedirectError)(e)||(0,n.isHTTPAccessFallbackError)(e)}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},5860:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"HandleISRError",{enumerable:!0,get:function(){return n}});let r=void 0;function n(e){let{error:t}=e;if(r){let e=r.getStore();if((null==e?void 0:e.isRevalidate)||(null==e?void 0:e.isStaticGeneration))throw console.error(t),t}return null}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},5878:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"createRenderSearchParamsFromClient",{enumerable:!0,get:function(){return n}});let n=r(4869).createRenderSearchParamsFromClient;("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},5903:(e,t,r)=>{"use strict";function n(e,t){if(!Object.prototype.hasOwnProperty.call(e,t))throw TypeError("attempted to use private field on non-instance");return e}r.r(t),r.d(t,{_:()=>n})},6001:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),r(535),("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},6048:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{FetchStrategy:function(){return h},NavigationResultTag:function(){return d},PrefetchPriority:function(){return p},cancelPrefetchTask:function(){return i},createCacheKey:function(){return f},getCurrentCacheVersion:function(){return l},isPrefetchTaskDirty:function(){return s},navigate:function(){return u},prefetch:function(){return n},reschedulePrefetchTask:function(){return c},revalidateEntireCache:function(){return o},schedulePrefetchTask:function(){return a}});let r=()=>{throw Object.defineProperty(Error("Segment Cache experiment is not enabled. This is a bug in Next.js."),"__NEXT_ERROR_CODE",{value:"E654",enumerable:!1,configurable:!0})},n=r,u=r,o=r,l=r,a=r,i=r,c=r,s=r,f=r;var d=function(e){return e[e.MPA=0]="MPA",e[e.Success=1]="Success",e[e.NoOp=2]="NoOp",e[e.Async=3]="Async",e}({}),p=function(e){return e[e.Intent=2]="Intent",e[e.Default=1]="Default",e[e.Background=0]="Background",e}({}),h=function(e){return e[e.LoadingBoundary=0]="LoadingBoundary",e[e.PPR=1]="PPR",e[e.PPRRuntime=2]="PPRRuntime",e[e.Full=3]="Full",e}({});("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},6058:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"addBasePath",{enumerable:!0,get:function(){return o}});let n=r(3879),u=r(1239);function o(e,t){return(0,u.normalizePathTrailingSlash)((0,n.addPathPrefix)(e,""))}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},6196:(e,t)=>{"use strict";function r(e){return e.startsWith("/")?e:"/"+e}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"ensureLeadingSlash",{enumerable:!0,get:function(){return r}})},6248:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{dispatchAppRouterAction:function(){return l},useActionQueue:function(){return a}});let n=r(9417)._(r(2115)),u=r(4089),o=null;function l(e){if(null===o)throw Object.defineProperty(Error("Internal Next.js error: Router action dispatched before initialization."),"__NEXT_ERROR_CODE",{value:"E668",enumerable:!1,configurable:!0});o(e)}function a(e){let[t,r]=n.default.useState(e.state);return o=t=>e.dispatch(t,r),(0,u.isThenable)(t)?(0,n.use)(t):t}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},6343:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{computeChangedPath:function(){return c},extractPathFromFlightRouterState:function(){return i},getSelectedParams:function(){return function e(t,r){for(let n of(void 0===r&&(r={}),Object.values(t[1]))){let t=n[0],o=Array.isArray(t),l=o?t[1]:t;!l||l.startsWith(u.PAGE_SEGMENT_KEY)||(o&&("c"===t[2]||"oc"===t[2])?r[t[0]]=t[1].split("/"):o&&(r[t[0]]=t[1]),r=e(n,r))}return r}}});let n=r(7630),u=r(5360),o=r(7460),l=e=>"string"==typeof e?"children"===e?"":e:e[1];function a(e){return e.reduce((e,t)=>{let r;return""===(t="/"===(r=t)[0]?r.slice(1):r)||(0,u.isGroupSegment)(t)?e:e+"/"+t},"")||"/"}function i(e){var t;let r=Array.isArray(e[0])?e[0][1]:e[0];if(r===u.DEFAULT_SEGMENT_KEY||n.INTERCEPTION_ROUTE_MARKERS.some(e=>r.startsWith(e)))return;if(r.startsWith(u.PAGE_SEGMENT_KEY))return"";let o=[l(r)],c=null!=(t=e[1])?t:{},s=c.children?i(c.children):void 0;if(void 0!==s)o.push(s);else for(let[e,t]of Object.entries(c)){if("children"===e)continue;let r=i(t);void 0!==r&&o.push(r)}return a(o)}function c(e,t){let r=function e(t,r){let[u,a]=t,[c,s]=r,f=l(u),d=l(c);if(n.INTERCEPTION_ROUTE_MARKERS.some(e=>f.startsWith(e)||d.startsWith(e)))return"";if(!(0,o.matchSegment)(u,c)){var p;return null!=(p=i(r))?p:""}for(let t in a)if(s[t]){let r=e(a[t],s[t]);if(null!==r)return l(c)+"/"+r}return null}(e,t);return null==r||"/"===r?r:a(r.split("/"))}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},6378:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{getFlightDataPartsFromPath:function(){return u},getNextFlightSegmentPath:function(){return o},normalizeFlightData:function(){return l},prepareFlightRouterStateForRequest:function(){return a}});let n=r(5360);function u(e){var t;let[r,n,u,o]=e.slice(-4),l=e.slice(0,-4);return{pathToSegment:l.slice(0,-1),segmentPath:l,segment:null!=(t=l[l.length-1])?t:"",tree:r,seedData:n,head:u,isHeadPartial:o,isRootRender:4===e.length}}function o(e){return e.slice(2)}function l(e){return"string"==typeof e?e:e.map(e=>u(e))}function a(e,t){return t?encodeURIComponent(JSON.stringify(e)):encodeURIComponent(JSON.stringify(function e(t){var r,u;let[o,l,a,i,c,s]=t,f="string"==typeof(r=o)&&r.startsWith(n.PAGE_SEGMENT_KEY+"?")?n.PAGE_SEGMENT_KEY:r,d={};for(let[t,r]of Object.entries(l))d[t]=e(r);let p=[f,d,null,(u=i)&&"refresh"!==u?i:null];return void 0!==c&&(p[4]=c),void 0!==s&&(p[5]=s),p}(e)))}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},6381:(e,t)=>{"use strict";function r(e){return Array.isArray(e)?e[1]:e}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"getSegmentValue",{enumerable:!0,get:function(){return r}}),("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},6437:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{REDIRECT_ERROR_CODE:function(){return u},RedirectType:function(){return o},isRedirectError:function(){return l}});let n=r(1099),u="NEXT_REDIRECT";var o=function(e){return e.push="push",e.replace="replace",e}({});function l(e){if("object"!=typeof e||null===e||!("digest"in e)||"string"!=typeof e.digest)return!1;let t=e.digest.split(";"),[r,o]=t,l=t.slice(2,-2).join(";"),a=Number(t.at(-2));return r===u&&("replace"===o||"push"===o)&&"string"==typeof l&&!isNaN(a)&&a in n.RedirectStatusCode}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},6486:(e,t)=>{"use strict";function r(e){return Object.prototype.toString.call(e)}function n(e){if("[object Object]"!==r(e))return!1;let t=Object.getPrototypeOf(e);return null===t||t.hasOwnProperty("isPrototypeOf")}Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{getObjectClassLabel:function(){return r},isPlainObject:function(){return n}})},6542:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{getRedirectError:function(){return l},getRedirectStatusCodeFromError:function(){return f},getRedirectTypeFromError:function(){return s},getURLFromRedirectError:function(){return c},permanentRedirect:function(){return i},redirect:function(){return a}});let n=r(1099),u=r(6437),o=void 0;function l(e,t,r){void 0===r&&(r=n.RedirectStatusCode.TemporaryRedirect);let o=Object.defineProperty(Error(u.REDIRECT_ERROR_CODE),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return o.digest=u.REDIRECT_ERROR_CODE+";"+t+";"+e+";"+r+";",o}function a(e,t){var r;throw null!=t||(t=(null==o||null==(r=o.getStore())?void 0:r.isAction)?u.RedirectType.push:u.RedirectType.replace),l(e,t,n.RedirectStatusCode.TemporaryRedirect)}function i(e,t){throw void 0===t&&(t=u.RedirectType.replace),l(e,t,n.RedirectStatusCode.PermanentRedirect)}function c(e){return(0,u.isRedirectError)(e)?e.digest.split(";").slice(2,-2).join(";"):null}function s(e){if(!(0,u.isRedirectError)(e))throw Object.defineProperty(Error("Not a redirect error"),"__NEXT_ERROR_CODE",{value:"E260",enumerable:!1,configurable:!0});return e.digest.split(";",2)[1]}function f(e){if(!(0,u.isRedirectError)(e))throw Object.defineProperty(Error("Not a redirect error"),"__NEXT_ERROR_CODE",{value:"E260",enumerable:!1,configurable:!0});return Number(e.digest.split(";").at(-2))}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},6640:(e,t,r)=>{"use strict";function n(){throw Object.defineProperty(Error("`unauthorized()` is experimental and only allowed to be used when `experimental.authInterrupts` is enabled."),"__NEXT_ERROR_CODE",{value:"E411",enumerable:!1,configurable:!0})}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"unauthorized",{enumerable:!0,get:function(){return n}}),r(7099).HTTP_ERROR_FALLBACK_ERROR_CODE,("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},6752:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{AppRouterContext:function(){return u},GlobalLayoutRouterContext:function(){return l},LayoutRouterContext:function(){return o},MissingSlotContext:function(){return i},TemplateContext:function(){return a}});let n=r(8140)._(r(2115)),u=n.default.createContext(null),o=n.default.createContext(null),l=n.default.createContext(null),a=n.default.createContext(null),i=n.default.createContext(new Set)},6798:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"serverPatchReducer",{enumerable:!0,get:function(){return s}});let n=r(9658),u=r(895),o=r(4707),l=r(5737),a=r(7609),i=r(1126),c=r(7297);function s(e,t){let{serverResponse:{flightData:r,canonicalUrl:s},navigatedAt:f}=t,d={};if(d.preserveCustomHistoryState=!1,"string"==typeof r)return(0,l.handleExternalUrl)(e,d,r,e.pushRef.pendingPush);let p=e.tree,h=e.cache;for(let t of r){let{segmentPath:r,tree:i}=t,_=(0,u.applyRouterStatePatchToTree)(["",...r],p,i,e.canonicalUrl);if(null===_)return e;if((0,o.isNavigatingToNewRootLayout)(p,_))return(0,l.handleExternalUrl)(e,d,e.canonicalUrl,e.pushRef.pendingPush);let y=s?(0,n.createHrefFromUrl)(s):void 0;y&&(d.canonicalUrl=y);let b=(0,c.createEmptyCacheNode)();(0,a.applyFlightData)(f,h,b,t),d.patchedTree=_,d.cache=b,h=b,p=_}return(0,i.handleMutable)(e,d)}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},6871:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{ACTION_HMR_REFRESH:function(){return a},ACTION_NAVIGATE:function(){return n},ACTION_PREFETCH:function(){return l},ACTION_REFRESH:function(){return r},ACTION_RESTORE:function(){return u},ACTION_SERVER_ACTION:function(){return i},ACTION_SERVER_PATCH:function(){return o},PrefetchCacheEntryStatus:function(){return s},PrefetchKind:function(){return c}});let r="refresh",n="navigate",u="restore",o="server-patch",l="prefetch",a="hmr-refresh",i="server-action";var c=function(e){return e.AUTO="auto",e.FULL="full",e.TEMPORARY="temporary",e}({}),s=function(e){return e.fresh="fresh",e.reusable="reusable",e.expired="expired",e.stale="stale",e}({});("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},6897:(e,t)=>{"use strict";var r=Symbol.for("react.transitional.element");function n(e,t,n){var u=null;if(void 0!==n&&(u=""+n),void 0!==t.key&&(u=""+t.key),"key"in t)for(var o in n={},t)"key"!==o&&(n[o]=t[o]);else n=t;return{$$typeof:r,type:e,key:u,ref:void 0!==(t=n.ref)?t:null,props:n}}t.Fragment=Symbol.for("react.fragment"),t.jsx=n,t.jsxs=n},7099:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{HTTPAccessErrorStatus:function(){return r},HTTP_ERROR_FALLBACK_ERROR_CODE:function(){return u},getAccessFallbackErrorTypeByStatus:function(){return a},getAccessFallbackHTTPStatus:function(){return l},isHTTPAccessFallbackError:function(){return o}});let r={NOT_FOUND:404,FORBIDDEN:403,UNAUTHORIZED:401},n=new Set(Object.values(r)),u="NEXT_HTTP_ERROR_FALLBACK";function o(e){if("object"!=typeof e||null===e||!("digest"in e)||"string"!=typeof e.digest)return!1;let[t,r]=e.digest.split(";");return t===u&&n.has(Number(r))}function l(e){return Number(e.digest.split(";")[1])}function a(e){switch(e){case 401:return"unauthorized";case 403:return"forbidden";case 404:return"not-found";default:return}}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},7150:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return l}});let n=r(5155),u=r(5860),o={error:{fontFamily:'system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"',height:"100vh",textAlign:"center",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center"},text:{fontSize:"14px",fontWeight:400,lineHeight:"28px",margin:"0 8px"}},l=function(e){let{error:t}=e,r=null==t?void 0:t.digest;return(0,n.jsxs)("html",{id:"__next_error__",children:[(0,n.jsx)("head",{}),(0,n.jsxs)("body",{children:[(0,n.jsx)(u.HandleISRError,{error:t}),(0,n.jsx)("div",{style:o.error,children:(0,n.jsxs)("div",{children:[(0,n.jsxs)("h2",{style:o.text,children:["Application error: a ",r?"server":"client","-side exception has occurred while loading ",window.location.hostname," (see the"," ",r?"server logs":"browser console"," for more information)."]}),r?(0,n.jsx)("p",{style:o.text,children:"Digest: "+r}):null]})})]})]})};("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},7197:(e,t,r)=>{"use strict";e.exports=r(9062)},7260:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{ReadonlyURLSearchParams:function(){return i.ReadonlyURLSearchParams},RedirectType:function(){return i.RedirectType},ServerInsertedHTMLContext:function(){return c.ServerInsertedHTMLContext},forbidden:function(){return i.forbidden},notFound:function(){return i.notFound},permanentRedirect:function(){return i.permanentRedirect},redirect:function(){return i.redirect},unauthorized:function(){return i.unauthorized},unstable_isUnrecognizedActionError:function(){return s.unstable_isUnrecognizedActionError},unstable_rethrow:function(){return i.unstable_rethrow},useParams:function(){return _},usePathname:function(){return p},useRouter:function(){return h},useSearchParams:function(){return d},useSelectedLayoutSegment:function(){return b},useSelectedLayoutSegments:function(){return y},useServerInsertedHTML:function(){return c.useServerInsertedHTML}});let n=r(2115),u=r(6752),o=r(3865),l=r(6381),a=r(5360),i=r(5439),c=r(2103),s=r(2845),f=void 0;function d(){let e=(0,n.useContext)(o.SearchParamsContext);return(0,n.useMemo)(()=>e?new i.ReadonlyURLSearchParams(e):null,[e])}function p(){return null==f||f("usePathname()"),(0,n.useContext)(o.PathnameContext)}function h(){let e=(0,n.useContext)(u.AppRouterContext);if(null===e)throw Object.defineProperty(Error("invariant expected app router to be mounted"),"__NEXT_ERROR_CODE",{value:"E238",enumerable:!1,configurable:!0});return e}function _(){return null==f||f("useParams()"),(0,n.useContext)(o.PathParamsContext)}function y(e){void 0===e&&(e="children"),null==f||f("useSelectedLayoutSegments()");let t=(0,n.useContext)(u.LayoutRouterContext);return t?function e(t,r,n,u){let o;if(void 0===n&&(n=!0),void 0===u&&(u=[]),n)o=t[1][r];else{var i;let e=t[1];o=null!=(i=e.children)?i:Object.values(e)[0]}if(!o)return u;let c=o[0],s=(0,l.getSegmentValue)(c);return!s||s.startsWith(a.PAGE_SEGMENT_KEY)?u:(u.push(s),e(o,r,!1,u))}(t.parentTree,e):null}function b(e){void 0===e&&(e="children"),null==f||f("useSelectedLayoutSegment()");let t=y(e);if(!t||0===t.length)return null;let r="children"===e?t[0]:t[t.length-1];return r===a.DEFAULT_SEGMENT_KEY?null:r}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},7278:(e,t)=>{"use strict";function r(e){return e.split("/").map(e=>encodeURIComponent(e)).join("/")}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"encodeURIPath",{enumerable:!0,get:function(){return r}})},7297:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{createEmptyCacheNode:function(){return x},createPrefetchURL:function(){return A},default:function(){return L},isExternalURL:function(){return w}});let n=r(8140),u=r(9417),o=r(5155),l=u._(r(2115)),a=r(6752),i=r(6871),c=r(9658),s=r(3865),f=r(6248),d=r(3913),p=r(6058),h=r(3443),_=r(531),y=r(836),b=r(8359),v=r(1755),g=r(2929),m=r(6343),R=r(1489),E=r(1807),O=r(6542),P=r(6437);r(3499);let j=n._(r(8890)),T=n._(r(7150)),S=r(4431),M={};function w(e){return e.origin!==window.location.origin}function A(e){let t;if((0,d.isBot)(window.navigator.userAgent))return null;try{t=new URL((0,p.addBasePath)(e),window.location.href)}catch(t){throw Object.defineProperty(Error("Cannot prefetch '"+e+"' because it cannot be converted to a URL."),"__NEXT_ERROR_CODE",{value:"E234",enumerable:!1,configurable:!0})}return w(t)?null:t}function C(e){let{appRouterState:t}=e;return(0,l.useInsertionEffect)(()=>{let{tree:e,pushRef:r,canonicalUrl:n}=t,u={...r.preserveCustomHistoryState?window.history.state:{},__NA:!0,__PRIVATE_NEXTJS_INTERNALS_TREE:e};r.pendingPush&&(0,c.createHrefFromUrl)(new URL(window.location.href))!==n?(r.pendingPush=!1,window.history.pushState(u,"",n)):window.history.replaceState(u,"",n)},[t]),(0,l.useEffect)(()=>{},[t.nextUrl,t.tree]),null}function x(){return{lazyData:null,rsc:null,prefetchRsc:null,head:null,prefetchHead:null,parallelRoutes:new Map,loading:null,navigatedAt:-1}}function N(e){null==e&&(e={});let t=window.history.state,r=null==t?void 0:t.__NA;r&&(e.__NA=r);let n=null==t?void 0:t.__PRIVATE_NEXTJS_INTERNALS_TREE;return n&&(e.__PRIVATE_NEXTJS_INTERNALS_TREE=n),e}function U(e){let{headCacheNode:t}=e,r=null!==t?t.head:null,n=null!==t?t.prefetchHead:null,u=null!==n?n:r;return(0,l.useDeferredValue)(r,u)}function D(e){let t,{actionQueue:r,assetPrefix:n,globalError:u}=e,c=(0,f.useActionQueue)(r),{canonicalUrl:d}=c,{searchParams:p,pathname:R}=(0,l.useMemo)(()=>{let e=new URL(d,window.location.href);return{searchParams:e.searchParams,pathname:(0,g.hasBasePath)(e.pathname)?(0,v.removeBasePath)(e.pathname):e.pathname}},[d]);(0,l.useEffect)(()=>{function e(e){var t;e.persisted&&(null==(t=window.history.state)?void 0:t.__PRIVATE_NEXTJS_INTERNALS_TREE)&&(M.pendingMpaPath=void 0,(0,f.dispatchAppRouterAction)({type:i.ACTION_RESTORE,url:new URL(window.location.href),tree:window.history.state.__PRIVATE_NEXTJS_INTERNALS_TREE}))}return window.addEventListener("pageshow",e),()=>{window.removeEventListener("pageshow",e)}},[]),(0,l.useEffect)(()=>{function e(e){let t="reason"in e?e.reason:e.error;if((0,P.isRedirectError)(t)){e.preventDefault();let r=(0,O.getURLFromRedirectError)(t);(0,O.getRedirectTypeFromError)(t)===P.RedirectType.push?E.publicAppRouterInstance.push(r,{}):E.publicAppRouterInstance.replace(r,{})}}return window.addEventListener("error",e),window.addEventListener("unhandledrejection",e),()=>{window.removeEventListener("error",e),window.removeEventListener("unhandledrejection",e)}},[]);let{pushRef:T}=c;if(T.mpaNavigation){if(M.pendingMpaPath!==d){let e=window.location;T.pendingPush?e.assign(d):e.replace(d),M.pendingMpaPath=d}throw b.unresolvedThenable}(0,l.useEffect)(()=>{let e=window.history.pushState.bind(window.history),t=window.history.replaceState.bind(window.history),r=e=>{var t;let r=window.location.href,n=null==(t=window.history.state)?void 0:t.__PRIVATE_NEXTJS_INTERNALS_TREE;(0,l.startTransition)(()=>{(0,f.dispatchAppRouterAction)({type:i.ACTION_RESTORE,url:new URL(null!=e?e:r,r),tree:n})})};window.history.pushState=function(t,n,u){return(null==t?void 0:t.__NA)||(null==t?void 0:t._N)||(t=N(t),u&&r(u)),e(t,n,u)},window.history.replaceState=function(e,n,u){return(null==e?void 0:e.__NA)||(null==e?void 0:e._N)||(e=N(e),u&&r(u)),t(e,n,u)};let n=e=>{if(e.state){if(!e.state.__NA)return void window.location.reload();(0,l.startTransition)(()=>{(0,E.dispatchTraverseAction)(window.location.href,e.state.__PRIVATE_NEXTJS_INTERNALS_TREE)})}};return window.addEventListener("popstate",n),()=>{window.history.pushState=e,window.history.replaceState=t,window.removeEventListener("popstate",n)}},[]);let{cache:w,tree:A,nextUrl:x,focusAndScrollRef:D}=c,L=(0,l.useMemo)(()=>(0,y.findHeadInCache)(w,A[1]),[w,A]),I=(0,l.useMemo)(()=>(0,m.getSelectedParams)(A),[A]),k=(0,l.useMemo)(()=>({parentTree:A,parentCacheNode:w,parentSegmentPath:null,url:d}),[A,w,d]),H=(0,l.useMemo)(()=>({tree:A,focusAndScrollRef:D,nextUrl:x}),[A,D,x]);if(null!==L){let[e,r,n]=L;t=(0,o.jsx)(U,{headCacheNode:e},r)}else t=null;let B=(0,o.jsxs)(_.RedirectBoundary,{children:[t,(0,o.jsx)(S.RootLayoutBoundary,{children:w.rsc}),(0,o.jsx)(h.AppRouterAnnouncer,{tree:A})]});return B=(0,o.jsx)(j.default,{errorComponent:u[0],errorStyles:u[1],children:B}),(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(C,{appRouterState:c}),(0,o.jsx)(F,{}),(0,o.jsx)(s.PathParamsContext.Provider,{value:I,children:(0,o.jsx)(s.PathnameContext.Provider,{value:R,children:(0,o.jsx)(s.SearchParamsContext.Provider,{value:p,children:(0,o.jsx)(a.GlobalLayoutRouterContext.Provider,{value:H,children:(0,o.jsx)(a.AppRouterContext.Provider,{value:E.publicAppRouterInstance,children:(0,o.jsx)(a.LayoutRouterContext.Provider,{value:k,children:B})})})})})})]})}function L(e){let{actionQueue:t,globalErrorState:r,assetPrefix:n}=e;(0,R.useNavFailureHandler)();let u=(0,o.jsx)(D,{actionQueue:t,assetPrefix:n,globalError:r});return(0,o.jsx)(j.default,{errorComponent:T.default,children:u})}let I=new Set,k=new Set;function F(){let[,e]=l.default.useState(0),t=I.size;return(0,l.useEffect)(()=>{let r=()=>e(e=>e+1);return k.add(r),t!==I.size&&r(),()=>{k.delete(r)}},[t,e]),[...I].map((e,t)=>(0,o.jsx)("link",{rel:"stylesheet",href:""+e,precedence:"next"},t))}globalThis._N_E_STYLE_LOAD=function(e){let t=I.size;return I.add(e),I.size!==t&&k.forEach(e=>e()),Promise.resolve()},("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},7317:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{abortTask:function(){return h},listenForDynamicRequest:function(){return p},startPPRNavigation:function(){return c},updateCacheNodeOnPopstateRestoration:function(){return function e(t,r){let n=r[1],u=t.parallelRoutes,l=new Map(u);for(let t in n){let r=n[t],a=r[0],i=(0,o.createRouterCacheKey)(a),c=u.get(t);if(void 0!==c){let n=c.get(i);if(void 0!==n){let u=e(n,r),o=new Map(c);o.set(i,u),l.set(t,o)}}}let a=t.rsc,i=b(a)&&"pending"===a.status;return{lazyData:null,rsc:a,head:t.head,prefetchHead:i?t.prefetchHead:[null,null],prefetchRsc:i?t.prefetchRsc:null,loading:t.loading,parallelRoutes:l,navigatedAt:t.navigatedAt}}}});let n=r(5360),u=r(7460),o=r(9190),l=r(4707),a=r(3571),i={route:null,node:null,dynamicRequestTree:null,children:null};function c(e,t,r,l,a,c,d,p,h){return function e(t,r,l,a,c,d,p,h,_,y,b){let v=l[1],g=a[1],m=null!==d?d[2]:null;c||!0===a[4]&&(c=!0);let R=r.parallelRoutes,E=new Map(R),O={},P=null,j=!1,T={};for(let r in g){let l,a=g[r],f=v[r],d=R.get(r),S=null!==m?m[r]:null,M=a[0],w=y.concat([r,M]),A=(0,o.createRouterCacheKey)(M),C=void 0!==f?f[0]:void 0,x=void 0!==d?d.get(A):void 0;if(null!==(l=M===n.DEFAULT_SEGMENT_KEY?void 0!==f?{route:f,node:null,dynamicRequestTree:null,children:null}:s(t,f,a,x,c,void 0!==S?S:null,p,h,w,b):_&&0===Object.keys(a[1]).length?s(t,f,a,x,c,void 0!==S?S:null,p,h,w,b):void 0!==f&&void 0!==C&&(0,u.matchSegment)(M,C)&&void 0!==x&&void 0!==f?e(t,x,f,a,c,S,p,h,_,w,b):s(t,f,a,x,c,void 0!==S?S:null,p,h,w,b))){if(null===l.route)return i;null===P&&(P=new Map),P.set(r,l);let e=l.node;if(null!==e){let t=new Map(d);t.set(A,e),E.set(r,t)}let t=l.route;O[r]=t;let n=l.dynamicRequestTree;null!==n?(j=!0,T[r]=n):T[r]=t}else O[r]=a,T[r]=a}if(null===P)return null;let S={lazyData:null,rsc:r.rsc,prefetchRsc:r.prefetchRsc,head:r.head,prefetchHead:r.prefetchHead,loading:r.loading,parallelRoutes:E,navigatedAt:t};return{route:f(a,O),node:S,dynamicRequestTree:j?f(a,T):null,children:P}}(e,t,r,l,!1,a,c,d,p,[],h)}function s(e,t,r,n,u,c,s,p,h,_){return!u&&(void 0===t||(0,l.isNavigatingToNewRootLayout)(t,r))?i:function e(t,r,n,u,l,i,c,s){let p,h,_,y,b=r[1],v=0===Object.keys(b).length;if(void 0!==n&&n.navigatedAt+a.DYNAMIC_STALETIME_MS>t)p=n.rsc,h=n.loading,_=n.head,y=n.navigatedAt;else if(null===u)return d(t,r,null,l,i,c,s);else if(p=u[1],h=u[3],_=v?l:null,y=t,u[4]||i&&v)return d(t,r,u,l,i,c,s);let g=null!==u?u[2]:null,m=new Map,R=void 0!==n?n.parallelRoutes:null,E=new Map(R),O={},P=!1;if(v)s.push(c);else for(let r in b){let n=b[r],u=null!==g?g[r]:null,a=null!==R?R.get(r):void 0,f=n[0],d=c.concat([r,f]),p=(0,o.createRouterCacheKey)(f),h=e(t,n,void 0!==a?a.get(p):void 0,u,l,i,d,s);m.set(r,h);let _=h.dynamicRequestTree;null!==_?(P=!0,O[r]=_):O[r]=n;let y=h.node;if(null!==y){let e=new Map;e.set(p,y),E.set(r,e)}}return{route:r,node:{lazyData:null,rsc:p,prefetchRsc:null,head:_,prefetchHead:null,loading:h,parallelRoutes:E,navigatedAt:y},dynamicRequestTree:P?f(r,O):null,children:m}}(e,r,n,c,s,p,h,_)}function f(e,t){let r=[e[0],t];return 2 in e&&(r[2]=e[2]),3 in e&&(r[3]=e[3]),4 in e&&(r[4]=e[4]),r}function d(e,t,r,n,u,l,a){let i=f(t,t[1]);return i[3]="refetch",{route:t,node:function e(t,r,n,u,l,a,i){let c=r[1],s=null!==n?n[2]:null,f=new Map;for(let r in c){let n=c[r],d=null!==s?s[r]:null,p=n[0],h=a.concat([r,p]),_=(0,o.createRouterCacheKey)(p),y=e(t,n,void 0===d?null:d,u,l,h,i),b=new Map;b.set(_,y),f.set(r,b)}let d=0===f.size;d&&i.push(a);let p=null!==n?n[1]:null,h=null!==n?n[3]:null;return{lazyData:null,parallelRoutes:f,prefetchRsc:void 0!==p?p:null,prefetchHead:d?u:[null,null],loading:void 0!==h?h:null,rsc:v(),head:d?v():null,navigatedAt:t}}(e,t,r,n,u,l,a),dynamicRequestTree:i,children:null}}function p(e,t){t.then(t=>{let{flightData:r}=t;if("string"!=typeof r){for(let t of r){let{segmentPath:r,tree:n,seedData:l,head:a}=t;l&&function(e,t,r,n,l){let a=e;for(let e=0;e{h(e,t)})}function h(e,t){let r=e.node;if(null===r)return;let n=e.children;if(null===n)_(e.route,r,t);else for(let e of n.values())h(e,t);e.dynamicRequestTree=null}function _(e,t,r){let n=e[1],u=t.parallelRoutes;for(let e in n){let t=n[e],l=u.get(e);if(void 0===l)continue;let a=t[0],i=(0,o.createRouterCacheKey)(a),c=l.get(i);void 0!==c&&_(t,c,r)}let l=t.rsc;b(l)&&(null===r?l.resolve(null):l.reject(r));let a=t.head;b(a)&&a.resolve(null)}let y=Symbol();function b(e){return e&&e.tag===y}function v(){let e,t,r=new Promise((r,n)=>{e=r,t=n});return r.status="pending",r.resolve=t=>{"pending"===r.status&&(r.status="fulfilled",r.value=t,e(t))},r.reject=e=>{"pending"===r.status&&(r.status="rejected",r.reason=e,t(e))},r.tag=y,r}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},7332:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"handleSegmentMismatch",{enumerable:!0,get:function(){return u}});let n=r(5737);function u(e,t,r){return(0,n.handleExternalUrl)(e,{},e.canonicalUrl,!0)}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},7362:(e,t)=>{"use strict";function r(e,t){var r=e.length;for(e.push(t);0>>1,u=e[n];if(0>>1;no(i,r))co(s,i)?(e[n]=s,e[c]=r,n=c):(e[n]=i,e[a]=r,n=a);else if(co(s,r))e[n]=s,e[c]=r,n=c;else break}}return t}function o(e,t){var r=e.sortIndex-t.sortIndex;return 0!==r?r:e.id-t.id}if(t.unstable_now=void 0,"object"==typeof performance&&"function"==typeof performance.now){var l,a=performance;t.unstable_now=function(){return a.now()}}else{var i=Date,c=i.now();t.unstable_now=function(){return i.now()-c}}var s=[],f=[],d=1,p=null,h=3,_=!1,y=!1,b=!1,v=!1,g="function"==typeof setTimeout?setTimeout:null,m="function"==typeof clearTimeout?clearTimeout:null,R="undefined"!=typeof setImmediate?setImmediate:null;function E(e){for(var t=n(f);null!==t;){if(null===t.callback)u(f);else if(t.startTime<=e)u(f),t.sortIndex=t.expirationTime,r(s,t);else break;t=n(f)}}function O(e){if(b=!1,E(e),!y)if(null!==n(s))y=!0,P||(P=!0,l());else{var t=n(f);null!==t&&x(O,t.startTime-e)}}var P=!1,j=-1,T=5,S=-1;function M(){return!!v||!(t.unstable_now()-Se&&M());){var a=p.callback;if("function"==typeof a){p.callback=null,h=p.priorityLevel;var i=a(p.expirationTime<=e);if(e=t.unstable_now(),"function"==typeof i){p.callback=i,E(e),r=!0;break t}p===n(s)&&u(s),E(e)}else u(s);p=n(s)}if(null!==p)r=!0;else{var c=n(f);null!==c&&x(O,c.startTime-e),r=!1}}break e}finally{p=null,h=o,_=!1}}}finally{r?l():P=!1}}}if("function"==typeof R)l=function(){R(w)};else if("undefined"!=typeof MessageChannel){var A=new MessageChannel,C=A.port2;A.port1.onmessage=w,l=function(){C.postMessage(null)}}else l=function(){g(w,0)};function x(e,r){j=g(function(){e(t.unstable_now())},r)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_forceFrameRate=function(e){0>e||125a?(e.sortIndex=o,r(f,e),null===n(s)&&e===n(f)&&(b?(m(j),j=-1):b=!0,x(O,o-a))):(e.sortIndex=i,r(s,e),y||_||(y=!0,P||(P=!0,l()))),e},t.unstable_shouldYield=M,t.unstable_wrapCallback=function(e){var t=h;return function(){var r=h;h=t;try{return e.apply(this,arguments)}finally{h=r}}}},7370:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"createRenderParamsFromClient",{enumerable:!0,get:function(){return o}});let n=r(3982),u=new WeakMap;function o(e){let t=u.get(e);if(t)return t;let r=Promise.resolve(e);return u.set(e,r),Object.keys(e).forEach(t=>{n.wellKnownProperties.has(t)||(r[t]=e[t])}),r}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},7460:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"matchSegment",{enumerable:!0,get:function(){return r}});let r=(e,t)=>"string"==typeof e?"string"==typeof t&&e===t:"string"!=typeof t&&e[0]===t[0]&&e[1]===t[1];("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},7519:(e,t)=>{"use strict";function r(e){let t=parseInt(e.slice(0,2),16),r=t>>1&63,n=Array(6);for(let e=0;e<6;e++){let t=r>>5-e&1;n[e]=1===t}return{type:1==(t>>7&1)?"use-cache":"server-action",usedArgs:n,hasRestArgs:1==(1&t)}}function n(e,t){let r=Array(e.length);for(let n=0;n=6&&t.hasRestArgs)&&(r[n]=e[n]);return r}Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{extractInfoFromServerReferenceId:function(){return r},omitUnusedArgs:function(){return n}})},7609:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"applyFlightData",{enumerable:!0,get:function(){return o}});let n=r(637),u=r(543);function o(e,t,r,o,l){let{tree:a,seedData:i,head:c,isRootRender:s}=o;if(null===i)return!1;if(s){let u=i[1];r.loading=i[3],r.rsc=u,r.prefetchRsc=null,(0,n.fillLazyItemsTillLeafWithHead)(e,r,t,a,i,c,l)}else r.rsc=t.rsc,r.prefetchRsc=t.prefetchRsc,r.parallelRoutes=new Map(t.parallelRoutes),r.loading=t.loading,(0,u.fillCacheWithNewSubTreeData)(e,r,t,o,l);return!0}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},7630:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{INTERCEPTION_ROUTE_MARKERS:function(){return u},extractInterceptionRouteInformation:function(){return l},isInterceptionRouteAppPath:function(){return o}});let n=r(4061),u=["(..)(..)","(.)","(..)","(...)"];function o(e){return void 0!==e.split("/").find(e=>u.find(t=>e.startsWith(t)))}function l(e){let t,r,o;for(let n of e.split("/"))if(r=u.find(e=>n.startsWith(e))){[t,o]=e.split(r,2);break}if(!t||!r||!o)throw Object.defineProperty(Error("Invalid interception route: "+e+". Must be in the format //(..|...|..)(..)/"),"__NEXT_ERROR_CODE",{value:"E269",enumerable:!1,configurable:!0});switch(t=(0,n.normalizeAppPath)(t),r){case"(.)":o="/"===t?"/"+o:t+"/"+o;break;case"(..)":if("/"===t)throw Object.defineProperty(Error("Invalid interception route: "+e+". Cannot use (..) marker at the root level, use (.) instead."),"__NEXT_ERROR_CODE",{value:"E207",enumerable:!1,configurable:!0});o=t.split("/").slice(0,-1).concat(o).join("/");break;case"(...)":o="/"+o;break;case"(..)(..)":let l=t.split("/");if(l.length<=2)throw Object.defineProperty(Error("Invalid interception route: "+e+". Cannot use (..)(..) marker at the root level or one level up."),"__NEXT_ERROR_CODE",{value:"E486",enumerable:!1,configurable:!0});o=l.slice(0,-2).concat(o).join("/");break;default:throw Object.defineProperty(Error("Invariant: unexpected marker"),"__NEXT_ERROR_CODE",{value:"E112",enumerable:!1,configurable:!0})}return{interceptingRoute:t,interceptedRoute:o}}},7650:(e,t,r)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(e){console.error(e)}}(),e.exports=r(8730)},7700:(e,t)=>{"use strict";function r(e){return e.replace(/\/$/,"")||"/"}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"removeTrailingSlash",{enumerable:!0,get:function(){return r}})},7759:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{GracefulDegradeBoundary:function(){return o},default:function(){return l}});let n=r(5155),u=r(2115);class o extends u.Component{static getDerivedStateFromError(e){return{hasError:!0}}componentDidMount(){let e=this.htmlRef.current;this.state.hasError&&e&&Object.entries(this.htmlAttributes).forEach(t=>{let[r,n]=t;e.setAttribute(r,n)})}render(){let{hasError:e}=this.state;return(this.rootHtml||(this.rootHtml=document.documentElement.innerHTML,this.htmlAttributes=function(e){let t={};for(let r=0;r{"use strict";r.r(t),r.d(t,{_:()=>u});var n=0;function u(e){return"__private_"+n+++"_"+e}},7854:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"restoreReducer",{enumerable:!0,get:function(){return o}});let n=r(9658),u=r(6343);function o(e,t){var r;let{url:o,tree:l}=t,a=(0,n.createHrefFromUrl)(o),i=l||e.tree,c=e.cache;return{canonicalUrl:a,pushRef:{pendingPush:!1,mpaNavigation:!1,preserveCustomHistoryState:!0},focusAndScrollRef:e.focusAndScrollRef,cache:c,prefetchCache:e.prefetchCache,tree:i,nextUrl:null!=(r=(0,u.extractPathFromFlightRouterState)(i))?r:o.pathname}}r(7317),("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},7858:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"unstable_rethrow",{enumerable:!0,get:function(){return function e(t){if((0,u.isNextRouterError)(t)||(0,n.isBailoutToCSRError)(t))throw t;t instanceof Error&&"cause"in t&&e(t.cause)}}});let n=r(4553),u=r(5829);("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},7989:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"ClientSegmentRoot",{enumerable:!0,get:function(){return u}});let n=r(5155);function u(e){let{Component:t,slots:u,params:o,promise:l}=e;{let{createRenderParamsFromClient:e}=r(307),l=e(o);return(0,n.jsx)(t,{...u,params:l})}}r(8302),("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},8110:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),r(8301);let n=r(7278);{let e=r.u;r.u=function(){for(var t=arguments.length,r=Array(t),u=0;u{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"shouldHardNavigate",{enumerable:!0,get:function(){return function e(t,r){let[o,l]=r,[a,i]=t;return(0,u.matchSegment)(a,o)?!(t.length<=2)&&e((0,n.getNextFlightSegmentPath)(t),l[i]):!!Array.isArray(a)}}});let n=r(6378),u=r(7460);("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},8140:(e,t,r)=>{"use strict";function n(e){return e&&e.__esModule?e:{default:e}}r.r(t),r.d(t,{_:()=>n})},8301:(e,t)=>{"use strict";function r(){return""}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"getDeploymentIdQueryOrEmptyString",{enumerable:!0,get:function(){return r}})},8302:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"InvariantError",{enumerable:!0,get:function(){return r}});class r extends Error{constructor(e,t){super("Invariant: "+(e.endsWith(".")?e:e+".")+" This is a bug in Next.js.",t),this.name="InvariantError"}}},8359:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"unresolvedThenable",{enumerable:!0,get:function(){return r}});let r={then:()=>{}};("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},8440:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{METADATA_BOUNDARY_NAME:function(){return r},OUTLET_BOUNDARY_NAME:function(){return u},ROOT_LAYOUT_BOUNDARY_NAME:function(){return o},VIEWPORT_BOUNDARY_NAME:function(){return n}});let r="__next_metadata_boundary__",n="__next_viewport_boundary__",u="__next_outlet_boundary__",o="__next_root_layout_boundary__"},8451:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"reducer",{enumerable:!0,get:function(){return f}});let n=r(6871),u=r(5737),o=r(6798),l=r(7854),a=r(8719),i=r(3933),c=r(5345),s=r(2244),f=function(e,t){switch(t.type){case n.ACTION_NAVIGATE:return(0,u.navigateReducer)(e,t);case n.ACTION_SERVER_PATCH:return(0,o.serverPatchReducer)(e,t);case n.ACTION_RESTORE:return(0,l.restoreReducer)(e,t);case n.ACTION_REFRESH:return(0,a.refreshReducer)(e,t);case n.ACTION_HMR_REFRESH:return(0,c.hmrRefreshReducer)(e,t);case n.ACTION_PREFETCH:return(0,i.prefetchReducer)(e,t);case n.ACTION_SERVER_ACTION:return(0,s.serverActionReducer)(e,t);default:throw Object.defineProperty(Error("Unknown action"),"__NEXT_ERROR_CODE",{value:"E295",enumerable:!1,configurable:!0})}};("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},8719:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"refreshReducer",{enumerable:!0,get:function(){return h}});let n=r(2753),u=r(9658),o=r(895),l=r(4707),a=r(5737),i=r(1126),c=r(637),s=r(7297),f=r(7332),d=r(8915),p=r(3597);function h(e,t){let{origin:r}=t,h={},_=e.canonicalUrl,y=e.tree;h.preserveCustomHistoryState=!1;let b=(0,s.createEmptyCacheNode)(),v=(0,d.hasInterceptionRouteInCurrentTree)(e.tree);b.lazyData=(0,n.fetchServerResponse)(new URL(_,r),{flightRouterState:[y[0],y[1],y[2],"refetch"],nextUrl:v?e.nextUrl:null});let g=Date.now();return b.lazyData.then(async r=>{let{flightData:n,canonicalUrl:s}=r;if("string"==typeof n)return(0,a.handleExternalUrl)(e,h,n,e.pushRef.pendingPush);for(let r of(b.lazyData=null,n)){let{tree:n,seedData:i,head:d,isRootRender:m}=r;if(!m)return console.log("REFRESH FAILED"),e;let R=(0,o.applyRouterStatePatchToTree)([""],y,n,e.canonicalUrl);if(null===R)return(0,f.handleSegmentMismatch)(e,t,n);if((0,l.isNavigatingToNewRootLayout)(y,R))return(0,a.handleExternalUrl)(e,h,_,e.pushRef.pendingPush);let E=s?(0,u.createHrefFromUrl)(s):void 0;if(s&&(h.canonicalUrl=E),null!==i){let e=i[1],t=i[3];b.rsc=e,b.prefetchRsc=null,b.loading=t,(0,c.fillLazyItemsTillLeafWithHead)(g,b,void 0,n,i,d,void 0),h.prefetchCache=new Map}await (0,p.refreshInactiveParallelSegments)({navigatedAt:g,state:e,updatedTree:R,updatedCache:b,includeNextUrl:v,canonicalUrl:h.canonicalUrl||e.canonicalUrl}),h.cache=b,h.patchedTree=R,y=R}return(0,i.handleMutable)(e,h)},()=>e)}r(6048),("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},8730:(e,t,r)=>{"use strict";var n=r(2115);function u(e){var t="https://react.dev/errors/"+e;if(1{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{ErrorBoundary:function(){return f},ErrorBoundaryHandler:function(){return s}});let n=r(8140),u=r(5155),o=n._(r(2115)),l=r(1486),a=r(5829);r(1489);let i=r(5860),c=(0,r(3913).isBot)(window.navigator.userAgent);class s extends o.default.Component{static getDerivedStateFromError(e){if((0,a.isNextRouterError)(e))throw e;return{error:e}}static getDerivedStateFromProps(e,t){let{error:r}=t;return e.pathname!==t.previousPathname&&t.error?{error:null,previousPathname:e.pathname}:{error:t.error,previousPathname:e.pathname}}render(){return this.state.error&&!c?(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(i.HandleISRError,{error:this.state.error}),this.props.errorStyles,this.props.errorScripts,(0,u.jsx)(this.props.errorComponent,{error:this.state.error,reset:this.reset})]}):this.props.children}constructor(e){super(e),this.reset=()=>{this.setState({error:null})},this.state={error:null,previousPathname:this.props.pathname}}}function f(e){let{errorComponent:t,errorStyles:r,errorScripts:n,children:o}=e,a=(0,l.useUntrackedPathname)();return t?(0,u.jsx)(s,{pathname:a,errorComponent:t,errorStyles:r,errorScripts:n,children:o}):(0,u.jsx)(u.Fragment,{children:o})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},8890:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return i}});let n=r(8140),u=r(5155);r(2115);let o=n._(r(7759)),l=r(8785),a=(0,r(3913).isBot)(window.navigator.userAgent);function i(e){let{children:t,errorComponent:r,errorStyles:n,errorScripts:i}=e;return a?(0,u.jsx)(o.default,{children:t}):(0,u.jsx)(l.ErrorBoundary,{errorComponent:r,errorStyles:n,errorScripts:i,children:t})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},8915:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"hasInterceptionRouteInCurrentTree",{enumerable:!0,get:function(){return function e(t){let[r,u]=t;if(Array.isArray(r)&&("di"===r[2]||"ci"===r[2])||"string"==typeof r&&(0,n.isInterceptionRouteAppPath)(r))return!0;if(u){for(let t in u)if(e(u[t]))return!0}return!1}}});let n=r(7630);("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},8924:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return a}});let n=r(9417),u=r(5155),o=n._(r(2115)),l=r(6752);function a(){let e=(0,o.useContext)(l.TemplateContext);return(0,u.jsx)(u.Fragment,{children:e})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},9062:(e,t,r)=>{"use strict";var n=r(7650),u={stream:!0},o=Object.prototype.hasOwnProperty,l=new Map;function a(e){var t=r(e);return"function"!=typeof t.then||"fulfilled"===t.status?null:(t.then(function(e){t.status="fulfilled",t.value=e},function(e){t.status="rejected",t.reason=e}),t)}function i(){}function c(e){for(var t=e[1],n=[],u=0;uf||35===f||114===f||120===f?(d=f,f=3,s++):(d=0,f=3);continue;case 2:44===(b=i[s++])?f=4:h=h<<4|(96i.length&&(b=-1)}var v=i.byteOffset+s;if(-1{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"createRouterCacheKey",{enumerable:!0,get:function(){return u}});let n=r(5360);function u(e,t){return(void 0===t&&(t=!1),Array.isArray(e))?e[0]+"|"+e[1]+"|"+e[2]:t&&e.startsWith(n.PAGE_SEGMENT_KEY)?n.PAGE_SEGMENT_KEY:e}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},9417:(e,t,r)=>{"use strict";function n(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(n=function(e){return e?r:t})(e)}function u(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=n(t);if(r&&r.has(e))return r.get(e);var u={__proto__:null},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in e)if("default"!==l&&Object.prototype.hasOwnProperty.call(e,l)){var a=o?Object.getOwnPropertyDescriptor(e,l):null;a&&(a.get||a.set)?Object.defineProperty(u,l,a):u[l]=e[l]}return u.default=e,r&&r.set(e,u),u}r.r(t),r.d(t,{_:()=>u})},9473:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{addSearchParamsToPageSegments:function(){return d},handleAliasedPrefetchEntry:function(){return f}});let n=r(5360),u=r(7297),o=r(895),l=r(9658),a=r(9190),i=r(543),c=r(1126),s=r(5737);function f(e,t,r,f,p){let h,_=t.tree,y=t.cache,b=(0,l.createHrefFromUrl)(f),v=[];if("string"==typeof r)return!1;for(let t of r){if(!function e(t){if(!t)return!1;let r=t[2];if(t[3])return!0;for(let t in r)if(e(r[t]))return!0;return!1}(t.seedData))continue;let r=t.tree;r=d(r,Object.fromEntries(f.searchParams));let{seedData:l,isRootRender:c,pathToSegment:p}=t,g=["",...p];r=d(r,Object.fromEntries(f.searchParams));let m=(0,o.applyRouterStatePatchToTree)(g,_,r,b),R=(0,u.createEmptyCacheNode)();if(c&&l){let t=l[1];R.loading=l[3],R.rsc=t,function e(t,r,u,o,l){if(0!==Object.keys(o[1]).length)for(let i in o[1]){let c,s=o[1][i],f=s[0],d=(0,a.createRouterCacheKey)(f),p=null!==l&&void 0!==l[2][i]?l[2][i]:null;if(null!==p){let e=p[1],r=p[3];c={lazyData:null,rsc:f.includes(n.PAGE_SEGMENT_KEY)?null:e,prefetchRsc:null,head:null,prefetchHead:null,parallelRoutes:new Map,loading:r,navigatedAt:t}}else c={lazyData:null,rsc:null,prefetchRsc:null,head:null,prefetchHead:null,parallelRoutes:new Map,loading:null,navigatedAt:-1};let h=r.parallelRoutes.get(i);h?h.set(d,c):r.parallelRoutes.set(i,new Map([[d,c]])),e(t,c,u,s,p)}}(e,R,y,r,l)}else R.rsc=y.rsc,R.prefetchRsc=y.prefetchRsc,R.loading=y.loading,R.parallelRoutes=new Map(y.parallelRoutes),(0,i.fillCacheWithNewSubTreeDataButOnlyLoading)(e,R,y,t);for(let e of(m&&(_=m,y=R,h=!0),(0,s.generateSegmentsFromPatch)(r))){let r=[...t.pathToSegment,...e];r[r.length-1]!==n.DEFAULT_SEGMENT_KEY&&v.push(r)}}return!!h&&(p.patchedTree=_,p.cache=y,p.canonicalUrl=b,p.hashFragment=f.hash,p.scrollableSegments=v,(0,c.handleMutable)(t,p))}function d(e,t){let[r,u,...o]=e;if(r.includes(n.PAGE_SEGMENT_KEY))return[(0,n.addSearchParamsIfPageSegment)(r,t),u,...o];let l={};for(let[e,r]of Object.entries(u))l[e]=d(r,t);return[r,l,...o]}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},9658:(e,t)=>{"use strict";function r(e,t){return void 0===t&&(t=!0),e.pathname+e.search+(t?e.hash:"")}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"createHrefFromUrl",{enumerable:!0,get:function(){return r}}),("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},9684:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"useRouterBFCache",{enumerable:!0,get:function(){return u}});let n=r(2115);function u(e,t){let[r,u]=(0,n.useState)(()=>({tree:e,stateKey:t,next:null}));if(r.tree===e)return r;let o={tree:e,stateKey:t,next:null},l=1,a=r,i=o;for(;null!==a&&l<1;){if(a.stateKey===t){i.next=a.next;break}{l++;let e={tree:a.tree,stateKey:a.stateKey,next:null};i.next=e,i=e}a=a.next}return u(o),o}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},9766:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return M}});let n=r(8140),u=r(9417),o=r(5155),l=r(6871),a=u._(r(2115)),i=n._(r(7650)),c=r(6752),s=r(2753),f=r(8359),d=r(8785),p=r(7460),h=r(4170),_=r(531),y=r(3886),b=r(9190),v=r(8915),g=r(6248),m=r(9684);r(4061);let R=i.default.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,E=["bottom","height","left","right","top","width","x","y"];function O(e,t){let r=e.getBoundingClientRect();return r.top>=0&&r.top<=t}class P extends a.default.Component{componentDidMount(){this.handlePotentialScroll()}componentDidUpdate(){this.props.focusAndScrollRef.apply&&this.handlePotentialScroll()}render(){return this.props.children}constructor(...e){super(...e),this.handlePotentialScroll=()=>{let{focusAndScrollRef:e,segmentPath:t}=this.props;if(e.apply){if(0!==e.segmentPaths.length&&!e.segmentPaths.some(e=>t.every((t,r)=>(0,p.matchSegment)(t,e[r]))))return;let r=null,n=e.hashFragment;if(n&&(r=function(e){var t;return"top"===e?document.body:null!=(t=document.getElementById(e))?t:document.getElementsByName(e)[0]}(n)),r||(r=(0,R.findDOMNode)(this)),!(r instanceof Element))return;for(;!(r instanceof HTMLElement)||function(e){if(["sticky","fixed"].includes(getComputedStyle(e).position))return!0;let t=e.getBoundingClientRect();return E.every(e=>0===t[e])}(r);){if(null===r.nextElementSibling)return;r=r.nextElementSibling}e.apply=!1,e.hashFragment=null,e.segmentPaths=[],(0,h.disableSmoothScrollDuringRouteTransition)(()=>{if(n)return void r.scrollIntoView();let e=document.documentElement,t=e.clientHeight;!O(r,t)&&(e.scrollTop=0,O(r,t)||r.scrollIntoView())},{dontForceLayout:!0,onlyHashChange:e.onlyHashChange}),e.onlyHashChange=!1,r.focus()}}}}function j(e){let{segmentPath:t,children:r}=e,n=(0,a.useContext)(c.GlobalLayoutRouterContext);if(!n)throw Object.defineProperty(Error("invariant global layout router not mounted"),"__NEXT_ERROR_CODE",{value:"E473",enumerable:!1,configurable:!0});return(0,o.jsx)(P,{segmentPath:t,focusAndScrollRef:n.focusAndScrollRef,children:r})}function T(e){let{tree:t,segmentPath:r,cacheNode:n,url:u}=e,i=(0,a.useContext)(c.GlobalLayoutRouterContext);if(!i)throw Object.defineProperty(Error("invariant global layout router not mounted"),"__NEXT_ERROR_CODE",{value:"E473",enumerable:!1,configurable:!0});let{tree:d}=i,h=null!==n.prefetchRsc?n.prefetchRsc:n.rsc,_=(0,a.useDeferredValue)(n.rsc,h),y="object"==typeof _&&null!==_&&"function"==typeof _.then?(0,a.use)(_):_;if(!y){let e=n.lazyData;if(null===e){let t=function e(t,r){if(t){let[n,u]=t,o=2===t.length;if((0,p.matchSegment)(r[0],n)&&r[1].hasOwnProperty(u)){if(o){let t=e(void 0,r[1][u]);return[r[0],{...r[1],[u]:[t[0],t[1],t[2],"refetch"]}]}return[r[0],{...r[1],[u]:e(t.slice(2),r[1][u])}]}}return r}(["",...r],d),o=(0,v.hasInterceptionRouteInCurrentTree)(d),c=Date.now();n.lazyData=e=(0,s.fetchServerResponse)(new URL(u,location.origin),{flightRouterState:t,nextUrl:o?i.nextUrl:null}).then(e=>((0,a.startTransition)(()=>{(0,g.dispatchAppRouterAction)({type:l.ACTION_SERVER_PATCH,previousTree:d,serverResponse:e,navigatedAt:c})}),e)),(0,a.use)(e)}(0,a.use)(f.unresolvedThenable)}return(0,o.jsx)(c.LayoutRouterContext.Provider,{value:{parentTree:t,parentCacheNode:n,parentSegmentPath:r,url:u},children:y})}function S(e){let t,{loading:r,children:n}=e;if(t="object"==typeof r&&null!==r&&"function"==typeof r.then?(0,a.use)(r):r){let e=t[0],r=t[1],u=t[2];return(0,o.jsx)(a.Suspense,{fallback:(0,o.jsxs)(o.Fragment,{children:[r,u,e]}),children:n})}return(0,o.jsx)(o.Fragment,{children:n})}function M(e){let{parallelRouterKey:t,error:r,errorStyles:n,errorScripts:u,templateStyles:l,templateScripts:i,template:s,notFound:f,forbidden:p,unauthorized:h,segmentViewBoundaries:v}=e,g=(0,a.useContext)(c.LayoutRouterContext);if(!g)throw Object.defineProperty(Error("invariant expected layout router to be mounted"),"__NEXT_ERROR_CODE",{value:"E56",enumerable:!1,configurable:!0});let{parentTree:R,parentCacheNode:E,parentSegmentPath:O,url:P}=g,M=E.parallelRoutes,w=M.get(t);w||(w=new Map,M.set(t,w));let A=R[0],C=null===O?[t]:O.concat([A,t]),x=R[1][t],N=x[0],U=(0,b.createRouterCacheKey)(N,!0),D=(0,m.useRouterBFCache)(x,U),L=[];do{let e=D.tree,t=D.stateKey,a=e[0],v=(0,b.createRouterCacheKey)(a),g=w.get(v);if(void 0===g){let e={lazyData:null,rsc:null,prefetchRsc:null,head:null,prefetchHead:null,parallelRoutes:new Map,loading:null,navigatedAt:-1};g=e,w.set(v,e)}let m=E.loading,R=(0,o.jsxs)(c.TemplateContext.Provider,{value:(0,o.jsxs)(j,{segmentPath:C,children:[(0,o.jsx)(d.ErrorBoundary,{errorComponent:r,errorStyles:n,errorScripts:u,children:(0,o.jsx)(S,{loading:m,children:(0,o.jsx)(y.HTTPAccessFallbackBoundary,{notFound:f,forbidden:p,unauthorized:h,children:(0,o.jsxs)(_.RedirectBoundary,{children:[(0,o.jsx)(T,{url:P,tree:e,cacheNode:g,segmentPath:C}),null]})})})}),null]}),children:[l,i,s]},t);L.push(R),D=D.next}while(null!==D);return L}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},9781:(e,t,r)=>{"use strict";let n,u;Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"hydrate",{enumerable:!0,get:function(){return U}});let o=r(8140),l=r(9417),a=r(5155);r(6001);let i=o._(r(2669)),c=l._(r(2115)),s=r(7197),f=r(2073),d=r(3789),p=r(5444),h=r(1209),_=r(5153),y=r(1807),b=o._(r(7297)),v=r(2592);r(6752);let g=r(3201),m=s.createFromReadableStream,R=document,E=new TextEncoder,O=!1,P=!1,j=null;function T(e){if(0===e[0])n=[];else if(1===e[0]){if(!n)throw Object.defineProperty(Error("Unexpected server data: missing bootstrap script."),"__NEXT_ERROR_CODE",{value:"E18",enumerable:!1,configurable:!0});u?u.enqueue(E.encode(e[1])):n.push(e[1])}else if(2===e[0])j=e[1];else if(3===e[0]){if(!n)throw Object.defineProperty(Error("Unexpected server data: missing bootstrap script."),"__NEXT_ERROR_CODE",{value:"E18",enumerable:!1,configurable:!0});let r=atob(e[1]),o=new Uint8Array(r.length);for(var t=0;t{e.enqueue("string"==typeof t?E.encode(t):t)}),O&&!P)&&(null===e.desiredSize||e.desiredSize<0?e.error(Object.defineProperty(Error("The connection to the page was unexpectedly closed, possibly due to the stop button being clicked, loss of Wi-Fi, or an unstable internet connection."),"__NEXT_ERROR_CODE",{value:"E117",enumerable:!1,configurable:!0})):e.close(),P=!0,n=void 0),u=e}}),{callServer:h.callServer,findSourceMapURL:_.findSourceMapURL});function A(e){let{pendingActionQueue:t}=e,r=(0,c.use)(w),n=(0,c.use)(t);return(0,a.jsx)(b.default,{actionQueue:n,globalErrorState:r.G,assetPrefix:r.p})}let C=c.default.StrictMode;function x(e){let{children:t}=e;return t}let N={onDefaultTransitionIndicator:function(){return()=>{}},onRecoverableError:d.onRecoverableError,onCaughtError:p.onCaughtError,onUncaughtError:p.onUncaughtError};function U(e){let t=new Promise((t,r)=>{w.then(r=>{(0,g.setAppBuildId)(r.b);let n=Date.now();t((0,y.createMutableActionQueue)((0,v.createInitialRouterState)({navigatedAt:n,initialFlightData:r.f,initialCanonicalUrlParts:r.c,initialParallelRoutes:new Map,location:window.location,couldBeIntercepted:r.i,postponed:r.s,prerendered:r.S}),e))},e=>r(e))}),r=(0,a.jsx)(C,{children:(0,a.jsx)(f.HeadManagerContext.Provider,{value:{appDir:!0},children:(0,a.jsx)(x,{children:(0,a.jsx)(A,{pendingActionQueue:t})})})});"__next_error__"===document.documentElement.id?i.default.createRoot(R,N).render(r):c.default.startTransition(()=>{i.default.hydrateRoot(R,r,{...N,formState:j})})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},9889:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"PromiseQueue",{enumerable:!0,get:function(){return c}});let n=r(5903),u=r(7797);var o=u._("_maxConcurrency"),l=u._("_runningCount"),a=u._("_queue"),i=u._("_processNext");class c{enqueue(e){let t,r,u=new Promise((e,n)=>{t=e,r=n}),o=async()=>{try{n._(this,l)[l]++;let r=await e();t(r)}catch(e){r(e)}finally{n._(this,l)[l]--,n._(this,i)[i]()}};return n._(this,a)[a].push({promiseFn:u,task:o}),n._(this,i)[i](),u}bump(e){let t=n._(this,a)[a].findIndex(t=>t.promiseFn===e);if(t>-1){let e=n._(this,a)[a].splice(t,1)[0];n._(this,a)[a].unshift(e),n._(this,i)[i](!0)}}constructor(e=5){Object.defineProperty(this,i,{value:s}),Object.defineProperty(this,o,{writable:!0,value:void 0}),Object.defineProperty(this,l,{writable:!0,value:void 0}),Object.defineProperty(this,a,{writable:!0,value:void 0}),n._(this,o)[o]=e,n._(this,l)[l]=0,n._(this,a)[a]=[]}}function s(e){if(void 0===e&&(e=!1),(n._(this,l)[l]0){var t;null==(t=n._(this,a)[a].shift())||t.task()}}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)}}]);                   L(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5105],{63:(e,s,a)=>{"use strict";var t=a(7260);a.o(t,"useRouter")&&a.d(s,{useRouter:function(){return t.useRouter}}),a.o(t,"useSearchParams")&&a.d(s,{useSearchParams:function(){return t.useSearchParams}})},646:(e,s,a)=>{Promise.resolve().then(a.bind(a,3399))},3399:(e,s,a)=>{"use strict";a.r(s),a.d(s,{default:()=>g});var t=a(5155),l=a(2115),n=a(63),r=a(6282);class i extends l.Component{static getDerivedStateFromError(e){return{error:e}}render(){if(this.state.error){let{fallback:e}=this.props;return e?"function"==typeof e?e(this.state.error):e:(0,t.jsxs)("div",{className:"empty-state",children:[(0,t.jsx)("div",{className:"empty-icon",children:"!"}),(0,t.jsxs)("p",{children:["Something went wrong in ",this.props.name||"this section","."]}),(0,t.jsx)("p",{className:"muted",style:{fontSize:12,marginTop:4},children:this.state.error.message}),(0,t.jsx)("button",{className:"button secondary small",style:{marginTop:12},onClick:()=>{var e,s;this.setState({error:null}),null==(e=(s=this.props).onRetry)||e.call(s)},children:"Retry"})]})}return this.props.children}constructor(e){super(e),this.state={error:null}}}let c=["Overview","Risks","Mitigations","Gate","Integrations"];function d(e){let{toasts:s}=e;return s.length?(0,t.jsx)("div",{className:"toast-container",children:s.map(e=>(0,t.jsx)("div",{className:"toast ".concat(e.type),children:e.message},e.id))}):null}function o(e){let{value:s,onChange:a,placeholder:l}=e;return(0,t.jsxs)("div",{className:"search-wrap",children:[(0,t.jsx)("span",{className:"search-icon",children:"⌕"}),(0,t.jsx)("input",{className:"input",value:s,onChange:e=>a(e.target.value),placeholder:l||"Search..."})]})}function m(e,s,a){return s?[...e].sort((e,t)=>{let l=e[s],n=t[s];if(null==l)return 1;if(null==n)return -1;let r="number"==typeof l?l-n:String(l).localeCompare(String(n));return"asc"===a?r:-r}):e}function u(e){let{children:s,className:a}=e;return(0,t.jsx)("span",{className:"badge ".concat(a||""),children:s})}function h(e){let{project:s,dashboard:a}=e,n=(0,l.useMemo)(()=>{var e,s,t,l,n,r,i,c,d,o,m,u,h,j,x,p,v,g,y;return a?[{label:"Overall Score",value:null!=(p=null==(e=a.summary)?void 0:e.overallScore)?p:"-",cls:(null==(s=a.summary)?void 0:s.overallScore)>=75?"bad":(null==(t=a.summary)?void 0:t.overallScore)>=50?"warn":"good",sub:"Risk level: ".concat((null==(l=a.summary)?void 0:l.riskLevel)||"-")},{label:"Deployment Gate",value:null!=(v=null==(n=a.summary)?void 0:n.gateStatus)?v:"-",cls:(null==(r=a.summary)?void 0:r.gateStatus)==="Ready"?"good":(null==(i=a.summary)?void 0:i.gateStatus)==="Warning"?"warn":"bad",sub:(null==(c=a.gate)?void 0:c.message)||""},{label:"Open Risks",value:null!=(g=null==(d=a.summary)?void 0:d.openRisks)?g:0,cls:((null==(o=a.summary)?void 0:o.openRisks)||0)>5?"bad":((null==(m=a.summary)?void 0:m.openRisks)||0)>2?"warn":"good",sub:"".concat((null==(u=a.summary)?void 0:u.totalRisks)||0," total risks")},{label:"Mitigation",value:"".concat(null!=(y=null==(h=a.summary)?void 0:h.mitigationCompletion)?y:0,"%"),cls:40>((null==(j=a.summary)?void 0:j.mitigationCompletion)||0)?"bad":70>((null==(x=a.summary)?void 0:x.mitigationCompletion)||0)?"warn":"good",sub:"Average active-risk completion"}]:[]},[a]);return a?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{className:"grid",style:{gridTemplateColumns:"repeat(auto-fit, minmax(200px, 1fr))"},children:n.map(e=>(0,t.jsxs)("div",{className:"metric-card",children:[(0,t.jsx)("h3",{children:e.label}),(0,t.jsx)("div",{className:"metric-value ".concat(e.cls),children:e.value}),(0,t.jsx)("div",{className:"metric-sub",children:e.sub})]},e.label))}),(0,t.jsxs)("div",{className:"grid",style:{gridTemplateColumns:"1fr 1fr",marginTop:18},children:[(0,t.jsxs)("div",{className:"panel",children:[(0,t.jsx)("h2",{children:"Dimensions"}),(a.dimensions||[]).map(e=>(0,t.jsxs)("div",{style:{marginBottom:12},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:4},children:[(0,t.jsx)("span",{style:{fontSize:13},children:e.name}),(0,t.jsx)("strong",{style:{fontSize:13},children:e.score})]}),(0,t.jsx)("div",{className:"bar-wrap",children:(0,t.jsx)("div",{className:"bar-fill",style:{width:"".concat(Math.min(e.score,100),"%"),background:e.score>=50?"var(--danger)":e.score>=25?"var(--warn)":"var(--accent)"}})})]},e.name))]}),(0,t.jsxs)("div",{className:"panel",children:[(0,t.jsx)("h2",{children:"Lifecycle"}),(a.lifecycle||[]).map(e=>(0,t.jsxs)("div",{style:{marginBottom:12},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:4},children:[(0,t.jsx)("span",{style:{fontSize:13},children:e.name}),(0,t.jsxs)("span",{className:"muted",style:{fontSize:12},children:[e.openRisks," open"]})]}),(0,t.jsx)("div",{className:"bar-wrap",children:(0,t.jsx)("div",{className:"bar-fill",style:{width:"".concat(Math.min(e.riskScore||0,100),"%"),background:(e.riskScore||0)>=50?"var(--danger)":(e.riskScore||0)>=25?"var(--warn)":"var(--accent)"}})})]},e.name))]})]})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading dashboard data..."})})}function j(e){let{project:s,dashboard:a,toast:n}=e,[i,c]=(0,l.useState)(""),[d,h]=(0,l.useState)("normalizedScore"),[j,x]=(0,l.useState)("desc"),[p,v]=(0,l.useState)(0),[g,y]=(0,l.useState)(null),[b,N]=(0,l.useState)(null),f=(0,l.useMemo)(()=>(null==a?void 0:a.topRisks)?m(a.topRisks,d,j):[],[a,d,j]),k=(0,l.useMemo)(()=>{if(!i)return f;let e=i.toLowerCase();return f.filter(s=>(s.title||"").toLowerCase().includes(e)||(s.dimension||"").toLowerCase().includes(e)||(s.ownerDisplayName||"").toLowerCase().includes(e))},[f,i]),w=k.slice(0,(p+1)*20),S=async(e,s)=>{N(e);try{await r.FH.patch("/api/risks/".concat(e),{status:s}),n.add("Risk status updated to ".concat(s)),y(null)}catch(e){n.add(e.message,"error")}finally{N(null)}};return a?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o,{value:i,onChange:c,placeholder:"Search risks by title, dimension, owner..."}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsx)("tr",{children:[{key:"id",label:"ID"},{key:"title",label:"Risk"},{key:"dimension",label:"Dimension"},{key:"lifecyclePhase",label:"Phase"},{key:"normalizedScore",label:"Score"},{key:"residualScore",label:"Residual"},{key:"status",label:"Status"},{key:"ownerDisplayName",label:"Owner"}].map(e=>(0,t.jsxs)("th",{className:"sortable",onClick:()=>{var s;d===(s=e.key)?x(e=>"asc"===e?"desc":"asc"):(h(s),x("asc"))},children:[e.label," ",d===e.key?"asc"===j?"▲":"▼":""]},e.key))})}),(0,t.jsx)("tbody",{children:w.map(e=>{var s,a,l;return(0,t.jsxs)("tr",{onClick:()=>y(e),children:[(0,t.jsx)("td",{style:{fontFamily:"monospace",fontSize:12},children:null==(s=e.id)?void 0:s.slice(0,8)}),(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.title})}),(0,t.jsx)("td",{children:(0,t.jsx)(u,{className:null==(a=e.dimension)?void 0:a.toLowerCase(),children:e.dimension})}),(0,t.jsx)("td",{style:{fontSize:12},children:e.lifecyclePhase}),(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.normalizedScore})}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{style:{color:e.residualScore>=50?"var(--danger)":e.residualScore>=25?"var(--warn)":"var(--accent)"},children:e.residualScore})}),(0,t.jsx)("td",{children:(0,t.jsx)(u,{className:null==(l=e.status)?void 0:l.toLowerCase().replace(/\s+/g,"-"),children:e.status})}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{className:"muted",children:e.ownerDisplayName||"-"})})]},e.id)})})]})}),k.length>w.length&&(0,t.jsx)("div",{style:{textAlign:"center",marginTop:12},children:(0,t.jsxs)("button",{className:"button secondary small",onClick:()=>v(e=>e+1),children:["Show more (",k.length-w.length," remaining)"]})}),!k.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No risks match your search"})}),g&&(0,t.jsx)("div",{className:"modal-overlay",onClick:()=>y(null),children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),children:[(0,t.jsx)("h2",{children:g.title}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:12,fontSize:13},children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Dimension"}),(0,t.jsx)("br",{}),g.dimension]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Phase"}),(0,t.jsx)("br",{}),g.lifecyclePhase]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Probability"}),(0,t.jsx)("br",{}),g.probability]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Impact"}),(0,t.jsx)("br",{}),g.impact]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Detectability"}),(0,t.jsx)("br",{}),g.detectability]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Score"}),(0,t.jsx)("br",{}),(0,t.jsx)("strong",{children:g.normalizedScore})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Residual"}),(0,t.jsx)("br",{}),g.residualScore]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Owner"}),(0,t.jsx)("br",{}),g.ownerDisplayName||"-"]})]}),g.description&&(0,t.jsxs)("div",{style:{marginTop:12,fontSize:13},children:[(0,t.jsx)("span",{className:"muted",children:"Description"}),(0,t.jsx)("br",{}),g.description]}),(0,t.jsxs)("div",{style:{marginTop:16},children:[(0,t.jsx)("span",{className:"muted",style:{fontSize:12},children:"Update status:"}),(0,t.jsx)("div",{style:{display:"flex",gap:6,marginTop:6,flexWrap:"wrap"},children:["OPEN","IN_MITIGATION","ACCEPTED","CLOSED"].map(e=>(0,t.jsx)("button",{className:"button small ".concat("OPEN"===e?"secondary":""),onClick:()=>S(g.id,e),disabled:b===g.id,children:e.replace("_"," ")},e))})]}),(0,t.jsx)("div",{className:"modal-actions",children:(0,t.jsx)("button",{className:"button secondary small",onClick:()=>y(null),children:"Close"})})]})})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading..."})})}function x(e){let{project:s,dashboard:a,toast:n}=e,[r,i]=(0,l.useState)(""),[c,d]=(0,l.useState)("progressPercent"),[h,j]=(0,l.useState)("asc"),x=(0,l.useMemo)(()=>(null==a?void 0:a.mitigations)?m(a.mitigations,c,h):[],[a,c,h]),p=(0,l.useMemo)(()=>{if(!r)return x;let e=r.toLowerCase();return x.filter(s=>(s.title||"").toLowerCase().includes(e)||(s.riskTitle||"").toLowerCase().includes(e))},[x,r]);return a?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o,{value:r,onChange:i,placeholder:"Search mitigations..."}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsx)("tr",{children:[{key:"title",label:"Title"},{key:"riskTitle",label:"Risk"},{key:"status",label:"Status"},{key:"progressPercent",label:"Progress"},{key:"effectivenessPercent",label:"Effectiveness"},{key:"ownerDisplayName",label:"Owner"}].map(e=>(0,t.jsxs)("th",{className:"sortable",onClick:()=>{var s;c===(s=e.key)?j(e=>"asc"===e?"desc":"asc"):(d(s),j("asc"))},children:[e.label," ",c===e.key?"asc"===h?"▲":"▼":""]},e.key))})}),(0,t.jsx)("tbody",{children:p.slice(0,50).map(e=>{var s;return(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.title})}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{className:"muted",children:e.riskTitle})}),(0,t.jsx)("td",{children:(0,t.jsx)(u,{className:null==(s=e.status)?void 0:s.toLowerCase().replace(/\s+/g,"-"),children:e.status})}),(0,t.jsx)("td",{children:(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8},children:[(0,t.jsx)("div",{className:"bar-wrap",style:{flex:1,maxWidth:80},children:(0,t.jsx)("div",{className:"bar-fill",style:{width:"".concat(e.progressPercent||0,"%"),background:(e.progressPercent||0)>=80?"var(--accent)":(e.progressPercent||0)>=30?"var(--warn)":"var(--danger)"}})}),e.progressPercent||0,"%"]})}),(0,t.jsxs)("td",{children:[e.effectivenessPercent||0,"%"]}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{className:"muted",children:e.ownerDisplayName||"-"})})]},e.id)})})]})}),!p.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No mitigations found"})})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading..."})})}function p(e){var s,a;let{project:l,dashboard:n}=e;if(!n)return(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading..."})});let r=(null==(s=n.gate)?void 0:s.criteria)||[],i=(null==(a=n.summary)?void 0:a.gateStatus)||"Unknown",c="Ready"===i?"good":"Warning"===i?"warn":"bad";return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{children:"Deployment Gate"}),(0,t.jsx)("p",{className:"muted",children:"Nine-criteria gate evaluation for AI deployment readiness"})]}),(0,t.jsx)("div",{className:"dash-actions",children:(0,t.jsx)("div",{className:"metric-value ".concat(c),style:{fontSize:28},children:i})})]}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsxs)("tr",{children:[(0,t.jsx)("th",{children:"Criterion"}),(0,t.jsx)("th",{children:"Required"}),(0,t.jsx)("th",{children:"Actual"}),(0,t.jsx)("th",{children:"Status"})]})}),(0,t.jsx)("tbody",{children:r.map(e=>{var s;return(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.name})}),(0,t.jsx)("td",{children:e.required}),(0,t.jsx)("td",{children:e.actual}),(0,t.jsx)("td",{children:(0,t.jsx)(u,{className:null==(s=e.status)?void 0:s.toLowerCase(),children:e.status})})]},e.name)})})]})}),!r.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No gate criteria evaluated yet"})}),(0,t.jsxs)("div",{style:{marginTop:16,display:"flex",gap:8},children:[(0,t.jsx)("a",{href:"/api/projects/".concat(null==l?void 0:l.id,"/gate/evaluate"),className:"button secondary small",target:"_blank",children:"Evaluate (API)"}),(0,t.jsx)("a",{href:"/api/projects/".concat(null==l?void 0:l.id,"/gate/history"),className:"button secondary small",target:"_blank",children:"History (API)"})]})]})}function v(e){let{project:s,dashboard:a}=e;return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{className:"dash-header",children:(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{children:"Integrations"}),(0,t.jsx)("p",{className:"muted",children:"Connect Trello, Jira, Asana, or Microsoft Planner"})]})}),(0,t.jsx)("div",{className:"grid",style:{gridTemplateColumns:"repeat(auto-fit, minmax(240px, 1fr))"},children:["TRELLO","JIRA","ASANA","MICROSOFT_PLANNER"].map(e=>(0,t.jsxs)("div",{className:"panel",style:{textAlign:"center"},children:[(0,t.jsx)("div",{style:{fontSize:32,marginBottom:8},children:"TRELLO"===e?"⊞":"JIRA"===e?"◆":"ASANA"===e?"◇":"▣"}),(0,t.jsx)("h3",{style:{margin:"0 0 4px"},children:e.replace("_"," ")}),(0,t.jsx)("p",{className:"muted",style:{fontSize:12,margin:"0 0 12px"},children:"Project management sync"}),(0,t.jsxs)("div",{style:{display:"flex",gap:6,justifyContent:"center"},children:[(0,t.jsx)("a",{href:"/api/integration-providers",className:"button secondary small",children:"Configure"}),(0,t.jsx)("a",{href:"/api/integrations",className:"button secondary small",children:"Manage"})]})]},e))}),(0,t.jsx)("div",{style:{marginTop:12},children:(0,t.jsx)("a",{href:"/api/integration-providers",className:"button secondary small",target:"_blank",children:"Integration providers (API)"})})]})}function g(){let e=(0,n.useRouter)(),[s,a]=(0,l.useState)("Overview"),[o,m]=(0,l.useState)(null),[u,g]=(0,l.useState)(null),[y,b]=(0,l.useState)(!0),[N,f]=(0,l.useState)(null),[k,w]=(0,l.useState)(0),{toasts:S,add:C}=function(){let[e,s]=(0,l.useState)([]);return{toasts:e,add:(0,l.useCallback)(function(e){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"success",t=Date.now()+Math.random();s(s=>[...s,{id:t,message:e,type:a}]),setTimeout(()=>s(e=>e.filter(e=>e.id!==t)),3e3)},[])}}();(0,l.useEffect)(()=>{let e=new URLSearchParams(window.location.search).get("tab");e&&c.includes(e)&&a(e)},[]);let R=(0,l.useCallback)(async()=>{b(!0),f(null);try{var e,s,a;let t=await r.FH.get("/api/auth/session");if(!(null==t?void 0:t.authenticated)){f("Not authenticated."),b(!1);return}let l=null==(e=t.memberships)?void 0:e[0];if(!l){f("No organization membership found."),b(!1);return}let n=l.organizationId,i=null==(s=(await r.FH.get("/api/workspaces?organizationId=".concat(n))).workspaces)?void 0:s[0];if(!i){f("No workspace found — create one to get started."),b(!1);return}let c=null==(a=(await r.FH.get("/api/workspaces/".concat(i.id,"/projects"))).projects)?void 0:a[0];if(!c){f("No project found — create a project to get started."),b(!1);return}m(c);let d=await r.FH.get("/api/projects/".concat(c.id,"/dashboard"));g(d.dashboard),b(!1)}catch(e){f(e.message||"Failed to load dashboard data"),b(!1)}},[]);return((0,l.useEffect)(()=>{R()},[R,k]),y&&"Integrations"!==s)?(0,t.jsx)("div",{className:"shell-loading",children:(0,t.jsx)("div",{className:"spinner"})}):N&&"Integrations"!==s?(0,t.jsxs)("div",{className:"empty-state",children:[(0,t.jsx)("div",{className:"empty-icon",children:"!"}),(0,t.jsx)("p",{children:N}),(0,t.jsx)("button",{className:"button secondary small",style:{marginTop:12},onClick:()=>w(e=>e+1),children:"Retry"})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{children:(null==o?void 0:o.name)||"Dashboard"}),(0,t.jsx)("p",{className:"muted",children:(null==o?void 0:o.subtitle)||""})]}),(0,t.jsxs)("div",{className:"dash-actions",children:[(0,t.jsx)("a",{href:"/api/projects/".concat(null==o?void 0:o.id,"/reports/executive.html"),className:"button secondary small",target:"_blank",children:"Report"}),(0,t.jsx)("a",{href:"/api/projects/".concat(null==o?void 0:o.id,"/reports/risk-register.csv"),className:"button secondary small",target:"_blank",children:"CSV"})]})]}),(0,t.jsx)("div",{className:"tabs",children:c.map(a=>(0,t.jsx)("button",{className:"tab ".concat(s===a?"active":""),onClick:()=>e.push("/dashboard?tab=".concat(a)),children:a},a))}),"Overview"===s&&(0,t.jsx)(i,{name:"Overview",children:(0,t.jsx)(h,{project:o,dashboard:u})},"overview"),"Risks"===s&&(0,t.jsx)(i,{name:"Risks",children:(0,t.jsx)(j,{project:o,dashboard:u,toast:{add:C}})},"risks"),"Mitigations"===s&&(0,t.jsx)(i,{name:"Mitigations",children:(0,t.jsx)(x,{project:o,dashboard:u,toast:{add:C}})},"mitigations"),"Gate"===s&&(0,t.jsx)(i,{name:"Gate",children:(0,t.jsx)(p,{project:o,dashboard:u})},"gate"),"Integrations"===s&&(0,t.jsx)(i,{name:"Integrations",children:(0,t.jsx)(v,{project:o,dashboard:u})},"integrations"),(0,t.jsx)(d,{toasts:S})]})}},6282:(e,s,a)=>{"use strict";async function t(e,s,a){var t;let l={method:e,headers:{"Content-Type":"application/json"}};a&&(l.body=JSON.stringify(a));let n=await fetch("".concat("").concat(s),l),r=(null==(t=n.headers.get("content-type"))?void 0:t.includes("application/json"))?await n.json():await n.text();if(!n.ok)throw Error((null==r?void 0:r.error)||(null==r?void 0:r.message)||"Request failed (".concat(n.status,")"));return r}a.d(s,{FH:()=>l,Ht:()=>n,ri:()=>r});let l={get:e=>t("GET",e),post:(e,s)=>t("POST",e,s),put:(e,s)=>t("PUT",e,s),patch:(e,s)=>t("PATCH",e,s),del:e=>t("DELETE",e)};async function n(){try{let e=await l.get("/api/auth/session");return e.user||e.actor||null}catch(e){return null}}async function r(){await l.post("/api/auth/logout"),window.location.href="/"}}},e=>{e.O(0,[8441,1255,7358],()=>e(e.s=646)),_N_E=e.O()}]);           HL(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5105],{63:(e,s,a)=>{"use strict";var t=a(7260);a.o(t,"useRouter")&&a.d(s,{useRouter:function(){return t.useRouter}}),a.o(t,"useSearchParams")&&a.d(s,{useSearchParams:function(){return t.useSearchParams}})},646:(e,s,a)=>{Promise.resolve().then(a.bind(a,3399))},3399:(e,s,a)=>{"use strict";a.r(s),a.d(s,{default:()=>g});var t=a(5155),l=a(2115),n=a(63),r=a(6282);class i extends l.Component{static getDerivedStateFromError(e){return{error:e}}render(){if(this.state.error){let{fallback:e}=this.props;return e?"function"==typeof e?e(this.state.error):e:(0,t.jsxs)("div",{className:"empty-state",children:[(0,t.jsx)("div",{className:"empty-icon",children:"!"}),(0,t.jsxs)("p",{children:["Something went wrong in ",this.props.name||"this section","."]}),(0,t.jsx)("p",{className:"muted",style:{fontSize:12,marginTop:4},children:this.state.error.message}),(0,t.jsx)("button",{className:"button secondary small",style:{marginTop:12},onClick:()=>{var e,s;this.setState({error:null}),null==(e=(s=this.props).onRetry)||e.call(s)},children:"Retry"})]})}return this.props.children}constructor(e){super(e),this.state={error:null}}}let c=["Overview","Risks","Mitigations","Gate","Integrations"];function d(e){let{toasts:s}=e;return s.length?(0,t.jsx)("div",{className:"toast-container",children:s.map(e=>(0,t.jsx)("div",{className:"toast ".concat(e.type),children:e.message},e.id))}):null}function o(e){let{value:s,onChange:a,placeholder:l}=e;return(0,t.jsxs)("div",{className:"search-wrap",children:[(0,t.jsx)("span",{className:"search-icon",children:"⌕"}),(0,t.jsx)("input",{className:"input",value:s,onChange:e=>a(e.target.value),placeholder:l||"Search..."})]})}function m(e,s,a){return s?[...e].sort((e,t)=>{let l=e[s],n=t[s];if(null==l)return 1;if(null==n)return -1;let r="number"==typeof l?l-n:String(l).localeCompare(String(n));return"asc"===a?r:-r}):e}function u(e){let{children:s,className:a}=e;return(0,t.jsx)("span",{className:"badge ".concat(a||""),children:s})}function h(e){let{project:s,dashboard:a}=e,n=(0,l.useMemo)(()=>{var e,s,t,l,n,r,i,c,d,o,m,u,h,j,x,p,v,g,y;return a?[{label:"Overall Score",value:null!=(p=null==(e=a.summary)?void 0:e.overallScore)?p:"-",cls:(null==(s=a.summary)?void 0:s.overallScore)>=75?"bad":(null==(t=a.summary)?void 0:t.overallScore)>=50?"warn":"good",sub:"Risk level: ".concat((null==(l=a.summary)?void 0:l.riskLevel)||"-")},{label:"Deployment Gate",value:null!=(v=null==(n=a.summary)?void 0:n.gateStatus)?v:"-",cls:(null==(r=a.summary)?void 0:r.gateStatus)==="Ready"?"good":(null==(i=a.summary)?void 0:i.gateStatus)==="Warning"?"warn":"bad",sub:(null==(c=a.gate)?void 0:c.message)||""},{label:"Open Risks",value:null!=(g=null==(d=a.summary)?void 0:d.openRisks)?g:0,cls:((null==(o=a.summary)?void 0:o.openRisks)||0)>5?"bad":((null==(m=a.summary)?void 0:m.openRisks)||0)>2?"warn":"good",sub:"".concat((null==(u=a.summary)?void 0:u.totalRisks)||0," total risks")},{label:"Mitigation",value:"".concat(null!=(y=null==(h=a.summary)?void 0:h.mitigationCompletion)?y:0,"%"),cls:40>((null==(j=a.summary)?void 0:j.mitigationCompletion)||0)?"bad":70>((null==(x=a.summary)?void 0:x.mitigationCompletion)||0)?"warn":"good",sub:"Average active-risk completion"}]:[]},[a]);return a?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{className:"grid",style:{gridTemplateColumns:"repeat(auto-fit, minmax(200px, 1fr))"},children:n.map(e=>(0,t.jsxs)("div",{className:"metric-card",children:[(0,t.jsx)("h3",{children:e.label}),(0,t.jsx)("div",{className:"metric-value ".concat(e.cls),children:e.value}),(0,t.jsx)("div",{className:"metric-sub",children:e.sub})]},e.label))}),(0,t.jsxs)("div",{className:"grid",style:{gridTemplateColumns:"1fr 1fr",marginTop:18},children:[(0,t.jsxs)("div",{className:"panel",children:[(0,t.jsx)("h2",{children:"Dimensions"}),(a.dimensions||[]).map(e=>(0,t.jsxs)("div",{style:{marginBottom:12},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:4},children:[(0,t.jsx)("span",{style:{fontSize:13},children:e.name}),(0,t.jsx)("strong",{style:{fontSize:13},children:e.score})]}),(0,t.jsx)("div",{className:"bar-wrap",children:(0,t.jsx)("div",{className:"bar-fill",style:{width:"".concat(Math.min(e.score,100),"%"),background:e.score>=50?"var(--danger)":e.score>=25?"var(--warn)":"var(--accent)"}})})]},e.name))]}),(0,t.jsxs)("div",{className:"panel",children:[(0,t.jsx)("h2",{children:"Lifecycle"}),(a.lifecycle||[]).map(e=>(0,t.jsxs)("div",{style:{marginBottom:12},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:4},children:[(0,t.jsx)("span",{style:{fontSize:13},children:e.name}),(0,t.jsxs)("span",{className:"muted",style:{fontSize:12},children:[e.openRisks," open"]})]}),(0,t.jsx)("div",{className:"bar-wrap",children:(0,t.jsx)("div",{className:"bar-fill",style:{width:"".concat(Math.min(e.riskScore||0,100),"%"),background:(e.riskScore||0)>=50?"var(--danger)":(e.riskScore||0)>=25?"var(--warn)":"var(--accent)"}})})]},e.name))]})]})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading dashboard data..."})})}function j(e){let{project:s,dashboard:a,toast:n}=e,[i,c]=(0,l.useState)(""),[d,h]=(0,l.useState)("normalizedScore"),[j,x]=(0,l.useState)("desc"),[p,v]=(0,l.useState)(0),[g,y]=(0,l.useState)(null),[b,N]=(0,l.useState)(null),f=(0,l.useMemo)(()=>(null==a?void 0:a.topRisks)?m(a.topRisks,d,j):[],[a,d,j]),k=(0,l.useMemo)(()=>{if(!i)return f;let e=i.toLowerCase();return f.filter(s=>(s.title||"").toLowerCase().includes(e)||(s.dimension||"").toLowerCase().includes(e)||(s.ownerDisplayName||"").toLowerCase().includes(e))},[f,i]),S=k.slice(0,(p+1)*20),w=async(e,s)=>{N(e);try{await r.FH.patch("/api/risks/".concat(e),{status:s}),n.add("Risk status updated to ".concat(s)),y(null)}catch(e){n.add(e.message,"error")}finally{N(null)}};return a?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o,{value:i,onChange:c,placeholder:"Search risks by title, dimension, owner..."}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsx)("tr",{children:[{key:"id",label:"ID"},{key:"title",label:"Risk"},{key:"dimension",label:"Dimension"},{key:"lifecyclePhase",label:"Phase"},{key:"normalizedScore",label:"Score"},{key:"residualScore",label:"Residual"},{key:"status",label:"Status"},{key:"ownerDisplayName",label:"Owner"}].map(e=>(0,t.jsxs)("th",{className:"sortable",onClick:()=>{var s;d===(s=e.key)?x(e=>"asc"===e?"desc":"asc"):(h(s),x("asc"))},children:[e.label," ",d===e.key?"asc"===j?"▲":"▼":""]},e.key))})}),(0,t.jsx)("tbody",{children:S.map(e=>{var s,a,l;return(0,t.jsxs)("tr",{onClick:()=>y(e),children:[(0,t.jsx)("td",{style:{fontFamily:"monospace",fontSize:12},children:null==(s=e.id)?void 0:s.slice(0,8)}),(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.title})}),(0,t.jsx)("td",{children:(0,t.jsx)(u,{className:null==(a=e.dimension)?void 0:a.toLowerCase(),children:e.dimension})}),(0,t.jsx)("td",{style:{fontSize:12},children:e.lifecyclePhase}),(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.normalizedScore})}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{style:{color:e.residualScore>=50?"var(--danger)":e.residualScore>=25?"var(--warn)":"var(--accent)"},children:e.residualScore})}),(0,t.jsx)("td",{children:(0,t.jsx)(u,{className:null==(l=e.status)?void 0:l.toLowerCase().replace(/\s+/g,"-"),children:e.status})}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{className:"muted",children:e.ownerDisplayName||"-"})})]},e.id)})})]})}),k.length>S.length&&(0,t.jsx)("div",{style:{textAlign:"center",marginTop:12},children:(0,t.jsxs)("button",{className:"button secondary small",onClick:()=>v(e=>e+1),children:["Show more (",k.length-S.length," remaining)"]})}),!k.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No risks match your search"})}),g&&(0,t.jsx)("div",{className:"modal-overlay",onClick:()=>y(null),children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),children:[(0,t.jsx)("h2",{children:g.title}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:12,fontSize:13},children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Dimension"}),(0,t.jsx)("br",{}),g.dimension]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Phase"}),(0,t.jsx)("br",{}),g.lifecyclePhase]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Probability"}),(0,t.jsx)("br",{}),g.probability]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Impact"}),(0,t.jsx)("br",{}),g.impact]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Detectability"}),(0,t.jsx)("br",{}),g.detectability]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Score"}),(0,t.jsx)("br",{}),(0,t.jsx)("strong",{children:g.normalizedScore})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Residual"}),(0,t.jsx)("br",{}),g.residualScore]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Owner"}),(0,t.jsx)("br",{}),g.ownerDisplayName||"-"]})]}),g.description&&(0,t.jsxs)("div",{style:{marginTop:12,fontSize:13},children:[(0,t.jsx)("span",{className:"muted",children:"Description"}),(0,t.jsx)("br",{}),g.description]}),(0,t.jsxs)("div",{style:{marginTop:16},children:[(0,t.jsx)("span",{className:"muted",style:{fontSize:12},children:"Update status:"}),(0,t.jsx)("div",{style:{display:"flex",gap:6,marginTop:6,flexWrap:"wrap"},children:["OPEN","IN_MITIGATION","ACCEPTED","CLOSED"].map(e=>(0,t.jsx)("button",{className:"button small ".concat("OPEN"===e?"secondary":""),onClick:()=>w(g.id,e),disabled:b===g.id,children:e.replace("_"," ")},e))})]}),(0,t.jsx)("div",{className:"modal-actions",children:(0,t.jsx)("button",{className:"button secondary small",onClick:()=>y(null),children:"Close"})})]})})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading..."})})}function x(e){let{project:s,dashboard:a,toast:n}=e,[r,i]=(0,l.useState)(""),[c,d]=(0,l.useState)("progressPercent"),[h,j]=(0,l.useState)("asc"),x=(0,l.useMemo)(()=>(null==a?void 0:a.mitigations)?m(a.mitigations,c,h):[],[a,c,h]),p=(0,l.useMemo)(()=>{if(!r)return x;let e=r.toLowerCase();return x.filter(s=>(s.title||"").toLowerCase().includes(e)||(s.riskTitle||"").toLowerCase().includes(e))},[x,r]);return a?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o,{value:r,onChange:i,placeholder:"Search mitigations..."}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsx)("tr",{children:[{key:"title",label:"Title"},{key:"riskTitle",label:"Risk"},{key:"status",label:"Status"},{key:"progressPercent",label:"Progress"},{key:"effectivenessPercent",label:"Effectiveness"},{key:"ownerDisplayName",label:"Owner"}].map(e=>(0,t.jsxs)("th",{className:"sortable",onClick:()=>{var s;c===(s=e.key)?j(e=>"asc"===e?"desc":"asc"):(d(s),j("asc"))},children:[e.label," ",c===e.key?"asc"===h?"▲":"▼":""]},e.key))})}),(0,t.jsx)("tbody",{children:p.slice(0,50).map(e=>{var s;return(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.title})}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{className:"muted",children:e.riskTitle})}),(0,t.jsx)("td",{children:(0,t.jsx)(u,{className:null==(s=e.status)?void 0:s.toLowerCase().replace(/\s+/g,"-"),children:e.status})}),(0,t.jsx)("td",{children:(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8},children:[(0,t.jsx)("div",{className:"bar-wrap",style:{flex:1,maxWidth:80},children:(0,t.jsx)("div",{className:"bar-fill",style:{width:"".concat(e.progressPercent||0,"%"),background:(e.progressPercent||0)>=80?"var(--accent)":(e.progressPercent||0)>=30?"var(--warn)":"var(--danger)"}})}),e.progressPercent||0,"%"]})}),(0,t.jsxs)("td",{children:[e.effectivenessPercent||0,"%"]}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{className:"muted",children:e.ownerDisplayName||"-"})})]},e.id)})})]})}),!p.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No mitigations found"})})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading..."})})}function p(e){var s,a;let{project:l,dashboard:n}=e;if(!n)return(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading..."})});let r=(null==(s=n.gate)?void 0:s.criteria)||[],i=(null==(a=n.summary)?void 0:a.gateStatus)||"Unknown",c="Ready"===i?"good":"Warning"===i?"warn":"bad";return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{children:"Deployment Gate"}),(0,t.jsx)("p",{className:"muted",children:"Nine-criteria gate evaluation for AI deployment readiness"})]}),(0,t.jsx)("div",{className:"dash-actions",children:(0,t.jsx)("div",{className:"metric-value ".concat(c),style:{fontSize:28},children:i})})]}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsxs)("tr",{children:[(0,t.jsx)("th",{children:"Criterion"}),(0,t.jsx)("th",{children:"Required"}),(0,t.jsx)("th",{children:"Actual"}),(0,t.jsx)("th",{children:"Status"})]})}),(0,t.jsx)("tbody",{children:r.map(e=>{var s;return(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.name})}),(0,t.jsx)("td",{children:e.required}),(0,t.jsx)("td",{children:e.actual}),(0,t.jsx)("td",{children:(0,t.jsx)(u,{className:null==(s=e.status)?void 0:s.toLowerCase(),children:e.status})})]},e.name)})})]})}),!r.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No gate criteria evaluated yet"})}),(0,t.jsxs)("div",{style:{marginTop:16,display:"flex",gap:8},children:[(0,t.jsx)("a",{href:"/api/projects/".concat(null==l?void 0:l.id,"/gate/evaluate"),className:"button secondary small",target:"_blank",children:"Evaluate (API)"}),(0,t.jsx)("a",{href:"/api/projects/".concat(null==l?void 0:l.id,"/gate/history"),className:"button secondary small",target:"_blank",children:"History (API)"})]})]})}function v(e){let{project:s,dashboard:a}=e;return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{className:"dash-header",children:(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{children:"Integrations"}),(0,t.jsx)("p",{className:"muted",children:"Connect Trello, Jira, Asana, or Microsoft Planner"})]})}),(0,t.jsx)("div",{className:"grid",style:{gridTemplateColumns:"repeat(auto-fit, minmax(240px, 1fr))"},children:["TRELLO","JIRA","ASANA","MICROSOFT_PLANNER"].map(e=>(0,t.jsxs)("div",{className:"panel",style:{textAlign:"center"},children:[(0,t.jsx)("div",{style:{fontSize:32,marginBottom:8},children:"TRELLO"===e?"⊞":"JIRA"===e?"◆":"ASANA"===e?"◇":"▣"}),(0,t.jsx)("h3",{style:{margin:"0 0 4px"},children:e.replace("_"," ")}),(0,t.jsx)("p",{className:"muted",style:{fontSize:12,margin:"0 0 12px"},children:"Project management sync"}),(0,t.jsxs)("div",{style:{display:"flex",gap:6,justifyContent:"center"},children:[(0,t.jsx)("a",{href:"/api/integration-providers",className:"button secondary small",children:"Configure"}),(0,t.jsx)("a",{href:"/api/integrations",className:"button secondary small",children:"Manage"})]})]},e))}),(0,t.jsx)("div",{style:{marginTop:12},children:(0,t.jsx)("a",{href:"/api/integration-providers",className:"button secondary small",target:"_blank",children:"Integration providers (API)"})})]})}function g(){let e=(0,n.useRouter)(),s=(0,n.useSearchParams)(),a=c.includes(s.get("tab"))?s.get("tab"):"Overview",[o,m]=(0,l.useState)(null),[u,g]=(0,l.useState)(null),[y,b]=(0,l.useState)(!0),[N,f]=(0,l.useState)(null),[k,S]=(0,l.useState)(0),{toasts:w,add:C}=function(){let[e,s]=(0,l.useState)([]);return{toasts:e,add:(0,l.useCallback)(function(e){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"success",t=Date.now()+Math.random();s(s=>[...s,{id:t,message:e,type:a}]),setTimeout(()=>s(e=>e.filter(e=>e.id!==t)),3e3)},[])}}(),R=(0,l.useCallback)(async()=>{b(!0),f(null);try{var e,s,a;let t=await r.FH.get("/api/auth/session");if(!(null==t?void 0:t.authenticated)){f("Not authenticated."),b(!1);return}let l=null==(e=t.memberships)?void 0:e[0];if(!l){f("No organization membership found."),b(!1);return}let n=l.organizationId,i=null==(s=(await r.FH.get("/api/workspaces?organizationId=".concat(n))).workspaces)?void 0:s[0];if(!i){f("No workspace found — create one to get started."),b(!1);return}let c=null==(a=(await r.FH.get("/api/workspaces/".concat(i.id,"/projects"))).projects)?void 0:a[0];if(!c){f("No project found — create a project to get started."),b(!1);return}m(c);let d=await r.FH.get("/api/projects/".concat(c.id,"/dashboard"));g(d.dashboard),b(!1)}catch(e){f(e.message||"Failed to load dashboard data"),b(!1)}},[]);return((0,l.useEffect)(()=>{R()},[R,k]),y&&"Integrations"!==a)?(0,t.jsx)("div",{className:"shell-loading",children:(0,t.jsx)("div",{className:"spinner"})}):N&&"Integrations"!==a?(0,t.jsxs)("div",{className:"empty-state",children:[(0,t.jsx)("div",{className:"empty-icon",children:"!"}),(0,t.jsx)("p",{children:N}),(0,t.jsx)("button",{className:"button secondary small",style:{marginTop:12},onClick:()=>S(e=>e+1),children:"Retry"})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{children:(null==o?void 0:o.name)||"Dashboard"}),(0,t.jsx)("p",{className:"muted",children:(null==o?void 0:o.subtitle)||""})]}),(0,t.jsxs)("div",{className:"dash-actions",children:[(0,t.jsx)("a",{href:"/api/projects/".concat(null==o?void 0:o.id,"/reports/executive.html"),className:"button secondary small",target:"_blank",children:"Report"}),(0,t.jsx)("a",{href:"/api/projects/".concat(null==o?void 0:o.id,"/reports/risk-register.csv"),className:"button secondary small",target:"_blank",children:"CSV"})]})]}),(0,t.jsx)("div",{className:"tabs",children:c.map(s=>(0,t.jsx)("button",{className:"tab ".concat(a===s?"active":""),onClick:()=>e.push("/dashboard?tab=".concat(s)),children:s},s))}),"Overview"===a&&(0,t.jsx)(i,{name:"Overview",children:(0,t.jsx)(h,{project:o,dashboard:u})},"overview"),"Risks"===a&&(0,t.jsx)(i,{name:"Risks",children:(0,t.jsx)(j,{project:o,dashboard:u,toast:{add:C}})},"risks"),"Mitigations"===a&&(0,t.jsx)(i,{name:"Mitigations",children:(0,t.jsx)(x,{project:o,dashboard:u,toast:{add:C}})},"mitigations"),"Gate"===a&&(0,t.jsx)(i,{name:"Gate",children:(0,t.jsx)(p,{project:o,dashboard:u})},"gate"),"Integrations"===a&&(0,t.jsx)(i,{name:"Integrations",children:(0,t.jsx)(v,{project:o,dashboard:u})},"integrations"),(0,t.jsx)(d,{toasts:w})]})}},6282:(e,s,a)=>{"use strict";async function t(e,s,a){var t;let l={method:e,headers:{"Content-Type":"application/json"}};a&&(l.body=JSON.stringify(a));let n=await fetch("".concat("").concat(s),l),r=(null==(t=n.headers.get("content-type"))?void 0:t.includes("application/json"))?await n.json():await n.text();if(!n.ok)throw Error((null==r?void 0:r.error)||(null==r?void 0:r.message)||"Request failed (".concat(n.status,")"));return r}a.d(s,{FH:()=>l,Ht:()=>n,ri:()=>r});let l={get:e=>t("GET",e),post:(e,s)=>t("POST",e,s),put:(e,s)=>t("PUT",e,s),patch:(e,s)=>t("PATCH",e,s),del:e=>t("DELETE",e)};async function n(){try{let e=await l.get("/api/auth/session");return e.user||e.actor||null}catch(e){return null}}async function r(){await l.post("/api/auth/logout"),window.location.href="/"}}},e=>{e.O(0,[8441,1255,7358],()=>e(e.s=646)),_N_E=e.O()}]);                           [K(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5105],{63:(e,s,a)=>{"use strict";var t=a(7260);a.o(t,"useRouter")&&a.d(s,{useRouter:function(){return t.useRouter}}),a.o(t,"useSearchParams")&&a.d(s,{useSearchParams:function(){return t.useSearchParams}})},646:(e,s,a)=>{Promise.resolve().then(a.bind(a,3399))},3399:(e,s,a)=>{"use strict";a.r(s),a.d(s,{default:()=>g});var t=a(5155),l=a(2115),n=a(63),r=a(6282);class i extends l.Component{static getDerivedStateFromError(e){return{error:e}}render(){if(this.state.error){let{fallback:e}=this.props;return e?"function"==typeof e?e(this.state.error):e:(0,t.jsxs)("div",{className:"empty-state",children:[(0,t.jsx)("div",{className:"empty-icon",children:"!"}),(0,t.jsxs)("p",{children:["Something went wrong in ",this.props.name||"this section","."]}),(0,t.jsx)("p",{className:"muted",style:{fontSize:12,marginTop:4},children:this.state.error.message}),(0,t.jsx)("button",{className:"button secondary small",style:{marginTop:12},onClick:()=>{var e,s;this.setState({error:null}),null==(e=(s=this.props).onRetry)||e.call(s)},children:"Retry"})]})}return this.props.children}constructor(e){super(e),this.state={error:null}}}let c=["Overview","Risks","Mitigations","Gate","Integrations"];function d(e){let{toasts:s}=e;return s.length?(0,t.jsx)("div",{className:"toast-container",children:s.map(e=>(0,t.jsx)("div",{className:"toast ".concat(e.type),children:e.message},e.id))}):null}function o(e){let{value:s,onChange:a,placeholder:l}=e;return(0,t.jsxs)("div",{className:"search-wrap",children:[(0,t.jsx)("span",{className:"search-icon",children:"⌕"}),(0,t.jsx)("input",{className:"input",value:s,onChange:e=>a(e.target.value),placeholder:l||"Search..."})]})}function m(e,s,a){return s?[...e].sort((e,t)=>{let l=e[s],n=t[s];if(null==l)return 1;if(null==n)return -1;let r="number"==typeof l?l-n:String(l).localeCompare(String(n));return"asc"===a?r:-r}):e}function u(e){let{children:s,className:a}=e;return(0,t.jsx)("span",{className:"badge ".concat(a||""),children:s})}function h(e){let{project:s,dashboard:a}=e,n=(0,l.useMemo)(()=>{var e,s,t,l,n,r,i,c,d,o,m,u,h,j,x,p,v,g,y;return a?[{label:"Overall Score",value:null!=(p=null==(e=a.summary)?void 0:e.overallScore)?p:"-",cls:(null==(s=a.summary)?void 0:s.overallScore)>=75?"bad":(null==(t=a.summary)?void 0:t.overallScore)>=50?"warn":"good",sub:"Risk level: ".concat((null==(l=a.summary)?void 0:l.riskLevel)||"-")},{label:"Deployment Gate",value:null!=(v=null==(n=a.summary)?void 0:n.gateStatus)?v:"-",cls:(null==(r=a.summary)?void 0:r.gateStatus)==="Ready"?"good":(null==(i=a.summary)?void 0:i.gateStatus)==="Warning"?"warn":"bad",sub:(null==(c=a.gate)?void 0:c.message)||""},{label:"Open Risks",value:null!=(g=null==(d=a.summary)?void 0:d.openRisks)?g:0,cls:((null==(o=a.summary)?void 0:o.openRisks)||0)>5?"bad":((null==(m=a.summary)?void 0:m.openRisks)||0)>2?"warn":"good",sub:"".concat((null==(u=a.summary)?void 0:u.totalRisks)||0," total risks")},{label:"Mitigation",value:"".concat(null!=(y=null==(h=a.summary)?void 0:h.mitigationCompletion)?y:0,"%"),cls:40>((null==(j=a.summary)?void 0:j.mitigationCompletion)||0)?"bad":70>((null==(x=a.summary)?void 0:x.mitigationCompletion)||0)?"warn":"good",sub:"Average active-risk completion"}]:[]},[a]);return a?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{className:"grid",style:{gridTemplateColumns:"repeat(auto-fit, minmax(200px, 1fr))"},children:n.map(e=>(0,t.jsxs)("div",{className:"metric-card",children:[(0,t.jsx)("h3",{children:e.label}),(0,t.jsx)("div",{className:"metric-value ".concat(e.cls),children:e.value}),(0,t.jsx)("div",{className:"metric-sub",children:e.sub})]},e.label))}),(0,t.jsxs)("div",{className:"grid",style:{gridTemplateColumns:"1fr 1fr",marginTop:18},children:[(0,t.jsxs)("div",{className:"panel",children:[(0,t.jsx)("h2",{children:"Dimensions"}),(a.dimensions||[]).map(e=>(0,t.jsxs)("div",{style:{marginBottom:12},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:4},children:[(0,t.jsx)("span",{style:{fontSize:13},children:e.name}),(0,t.jsx)("strong",{style:{fontSize:13},children:e.score})]}),(0,t.jsx)("div",{className:"bar-wrap",children:(0,t.jsx)("div",{className:"bar-fill",style:{width:"".concat(Math.min(e.score,100),"%"),background:e.score>=50?"var(--danger)":e.score>=25?"var(--warn)":"var(--accent)"}})})]},e.name))]}),(0,t.jsxs)("div",{className:"panel",children:[(0,t.jsx)("h2",{children:"Lifecycle"}),(a.lifecycle||[]).map(e=>(0,t.jsxs)("div",{style:{marginBottom:12},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:4},children:[(0,t.jsx)("span",{style:{fontSize:13},children:e.name}),(0,t.jsxs)("span",{className:"muted",style:{fontSize:12},children:[e.openRisks," open"]})]}),(0,t.jsx)("div",{className:"bar-wrap",children:(0,t.jsx)("div",{className:"bar-fill",style:{width:"".concat(Math.min(e.riskScore||0,100),"%"),background:(e.riskScore||0)>=50?"var(--danger)":(e.riskScore||0)>=25?"var(--warn)":"var(--accent)"}})})]},e.name))]})]})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading dashboard data..."})})}function j(e){let{project:s,dashboard:a,toast:n}=e,[i,c]=(0,l.useState)(""),[d,h]=(0,l.useState)("normalizedScore"),[j,x]=(0,l.useState)("desc"),[p,v]=(0,l.useState)(0),[g,y]=(0,l.useState)(null),[b,N]=(0,l.useState)(null),f=(0,l.useMemo)(()=>(null==a?void 0:a.topRisks)?m(a.topRisks,d,j):[],[a,d,j]),k=(0,l.useMemo)(()=>{if(!i)return f;let e=i.toLowerCase();return f.filter(s=>(s.title||"").toLowerCase().includes(e)||(s.dimension||"").toLowerCase().includes(e)||(s.ownerDisplayName||"").toLowerCase().includes(e))},[f,i]),S=k.slice(0,(p+1)*20),w=async(e,s)=>{N(e);try{await r.FH.patch("/api/risks/".concat(e),{status:s}),n.add("Risk status updated to ".concat(s)),y(null)}catch(e){n.add(e.message,"error")}finally{N(null)}};return a?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o,{value:i,onChange:c,placeholder:"Search risks by title, dimension, owner..."}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsx)("tr",{children:[{key:"id",label:"ID"},{key:"title",label:"Risk"},{key:"dimension",label:"Dimension"},{key:"lifecyclePhase",label:"Phase"},{key:"normalizedScore",label:"Score"},{key:"residualScore",label:"Residual"},{key:"status",label:"Status"},{key:"ownerDisplayName",label:"Owner"}].map(e=>(0,t.jsxs)("th",{className:"sortable",onClick:()=>{var s;d===(s=e.key)?x(e=>"asc"===e?"desc":"asc"):(h(s),x("asc"))},children:[e.label," ",d===e.key?"asc"===j?"▲":"▼":""]},e.key))})}),(0,t.jsx)("tbody",{children:S.map(e=>{var s,a,l;return(0,t.jsxs)("tr",{onClick:()=>y(e),children:[(0,t.jsx)("td",{style:{fontFamily:"monospace",fontSize:12},children:null==(s=e.id)?void 0:s.slice(0,8)}),(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.title})}),(0,t.jsx)("td",{children:(0,t.jsx)(u,{className:null==(a=e.dimension)?void 0:a.toLowerCase(),children:e.dimension})}),(0,t.jsx)("td",{style:{fontSize:12},children:e.lifecyclePhase}),(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.normalizedScore})}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{style:{color:e.residualScore>=50?"var(--danger)":e.residualScore>=25?"var(--warn)":"var(--accent)"},children:e.residualScore})}),(0,t.jsx)("td",{children:(0,t.jsx)(u,{className:null==(l=e.status)?void 0:l.toLowerCase().replace(/\s+/g,"-"),children:e.status})}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{className:"muted",children:e.ownerDisplayName||"-"})})]},e.id)})})]})}),k.length>S.length&&(0,t.jsx)("div",{style:{textAlign:"center",marginTop:12},children:(0,t.jsxs)("button",{className:"button secondary small",onClick:()=>v(e=>e+1),children:["Show more (",k.length-S.length," remaining)"]})}),!k.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No risks match your search"})}),g&&(0,t.jsx)("div",{className:"modal-overlay",onClick:()=>y(null),children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),children:[(0,t.jsx)("h2",{children:g.title}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:12,fontSize:13},children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Dimension"}),(0,t.jsx)("br",{}),g.dimension]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Phase"}),(0,t.jsx)("br",{}),g.lifecyclePhase]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Probability"}),(0,t.jsx)("br",{}),g.probability]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Impact"}),(0,t.jsx)("br",{}),g.impact]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Detectability"}),(0,t.jsx)("br",{}),g.detectability]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Score"}),(0,t.jsx)("br",{}),(0,t.jsx)("strong",{children:g.normalizedScore})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Residual"}),(0,t.jsx)("br",{}),g.residualScore]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Owner"}),(0,t.jsx)("br",{}),g.ownerDisplayName||"-"]})]}),g.description&&(0,t.jsxs)("div",{style:{marginTop:12,fontSize:13},children:[(0,t.jsx)("span",{className:"muted",children:"Description"}),(0,t.jsx)("br",{}),g.description]}),(0,t.jsxs)("div",{style:{marginTop:16},children:[(0,t.jsx)("span",{className:"muted",style:{fontSize:12},children:"Update status:"}),(0,t.jsx)("div",{style:{display:"flex",gap:6,marginTop:6,flexWrap:"wrap"},children:["OPEN","IN_MITIGATION","ACCEPTED","CLOSED"].map(e=>(0,t.jsx)("button",{className:"button small ".concat("OPEN"===e?"secondary":""),onClick:()=>w(g.id,e),disabled:b===g.id,children:e.replace("_"," ")},e))})]}),(0,t.jsx)("div",{className:"modal-actions",children:(0,t.jsx)("button",{className:"button secondary small",onClick:()=>y(null),children:"Close"})})]})})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading..."})})}function x(e){let{project:s,dashboard:a,toast:n}=e,[r,i]=(0,l.useState)(""),[c,d]=(0,l.useState)("progressPercent"),[h,j]=(0,l.useState)("asc"),x=(0,l.useMemo)(()=>(null==a?void 0:a.mitigations)?m(a.mitigations,c,h):[],[a,c,h]),p=(0,l.useMemo)(()=>{if(!r)return x;let e=r.toLowerCase();return x.filter(s=>(s.title||"").toLowerCase().includes(e)||(s.riskTitle||"").toLowerCase().includes(e))},[x,r]);return a?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o,{value:r,onChange:i,placeholder:"Search mitigations..."}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsx)("tr",{children:[{key:"title",label:"Title"},{key:"riskTitle",label:"Risk"},{key:"status",label:"Status"},{key:"progressPercent",label:"Progress"},{key:"effectivenessPercent",label:"Effectiveness"},{key:"ownerDisplayName",label:"Owner"}].map(e=>(0,t.jsxs)("th",{className:"sortable",onClick:()=>{var s;c===(s=e.key)?j(e=>"asc"===e?"desc":"asc"):(d(s),j("asc"))},children:[e.label," ",c===e.key?"asc"===h?"▲":"▼":""]},e.key))})}),(0,t.jsx)("tbody",{children:p.slice(0,50).map(e=>{var s;return(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.title})}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{className:"muted",children:e.riskTitle})}),(0,t.jsx)("td",{children:(0,t.jsx)(u,{className:null==(s=e.status)?void 0:s.toLowerCase().replace(/\s+/g,"-"),children:e.status})}),(0,t.jsx)("td",{children:(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8},children:[(0,t.jsx)("div",{className:"bar-wrap",style:{flex:1,maxWidth:80},children:(0,t.jsx)("div",{className:"bar-fill",style:{width:"".concat(e.progressPercent||0,"%"),background:(e.progressPercent||0)>=80?"var(--accent)":(e.progressPercent||0)>=30?"var(--warn)":"var(--danger)"}})}),e.progressPercent||0,"%"]})}),(0,t.jsxs)("td",{children:[e.effectivenessPercent||0,"%"]}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{className:"muted",children:e.ownerDisplayName||"-"})})]},e.id)})})]})}),!p.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No mitigations found"})})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading..."})})}function p(e){var s,a;let{project:l,dashboard:n}=e;if(!n)return(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading..."})});let r=(null==(s=n.gate)?void 0:s.criteria)||[],i=(null==(a=n.summary)?void 0:a.gateStatus)||"Unknown",c="Ready"===i?"good":"Warning"===i?"warn":"bad";return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{children:"Deployment Gate"}),(0,t.jsx)("p",{className:"muted",children:"Nine-criteria gate evaluation for AI deployment readiness"})]}),(0,t.jsx)("div",{className:"dash-actions",children:(0,t.jsx)("div",{className:"metric-value ".concat(c),style:{fontSize:28},children:i})})]}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsxs)("tr",{children:[(0,t.jsx)("th",{children:"Criterion"}),(0,t.jsx)("th",{children:"Required"}),(0,t.jsx)("th",{children:"Actual"}),(0,t.jsx)("th",{children:"Status"})]})}),(0,t.jsx)("tbody",{children:r.map(e=>{var s;return(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.name})}),(0,t.jsx)("td",{children:e.required}),(0,t.jsx)("td",{children:e.actual}),(0,t.jsx)("td",{children:(0,t.jsx)(u,{className:null==(s=e.status)?void 0:s.toLowerCase(),children:e.status})})]},e.name)})})]})}),!r.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No gate criteria evaluated yet"})}),(0,t.jsxs)("div",{style:{marginTop:16,display:"flex",gap:8},children:[(0,t.jsx)("a",{href:"/api/projects/".concat(null==l?void 0:l.id,"/gate/evaluate"),className:"button secondary small",target:"_blank",children:"Evaluate (API)"}),(0,t.jsx)("a",{href:"/api/projects/".concat(null==l?void 0:l.id,"/gate/history"),className:"button secondary small",target:"_blank",children:"History (API)"})]})]})}function v(e){let{project:s,dashboard:a}=e;return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{className:"dash-header",children:(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{children:"Integrations"}),(0,t.jsx)("p",{className:"muted",children:"Connect Trello, Jira, Asana, or Microsoft Planner"})]})}),(0,t.jsx)("div",{className:"grid",style:{gridTemplateColumns:"repeat(auto-fit, minmax(240px, 1fr))"},children:["TRELLO","JIRA","ASANA","MICROSOFT_PLANNER"].map(e=>(0,t.jsxs)("div",{className:"panel",style:{textAlign:"center"},children:[(0,t.jsx)("div",{style:{fontSize:32,marginBottom:8},children:"TRELLO"===e?"⊞":"JIRA"===e?"◆":"ASANA"===e?"◇":"▣"}),(0,t.jsx)("h3",{style:{margin:"0 0 4px"},children:e.replace("_"," ")}),(0,t.jsx)("p",{className:"muted",style:{fontSize:12,margin:"0 0 12px"},children:"Project management sync"}),(0,t.jsxs)("div",{style:{display:"flex",gap:6,justifyContent:"center"},children:[(0,t.jsx)("a",{href:"/api/integration-providers",className:"button secondary small",children:"Configure"}),(0,t.jsx)("a",{href:"/api/integrations",className:"button secondary small",children:"Manage"})]})]},e))}),(0,t.jsx)("div",{style:{marginTop:12},children:(0,t.jsx)("a",{href:"/api/integration-providers",className:"button secondary small",target:"_blank",children:"Integration providers (API)"})})]})}function g(){let e=(0,n.useRouter)(),[s,a]=(0,l.useState)("Overview"),[o,m]=(0,l.useState)(null),[u,g]=(0,l.useState)(null),[y,b]=(0,l.useState)(!0),[N,f]=(0,l.useState)(null),[k,S]=(0,l.useState)(0),{toasts:w,add:C}=function(){let[e,s]=(0,l.useState)([]);return{toasts:e,add:(0,l.useCallback)(function(e){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"success",t=Date.now()+Math.random();s(s=>[...s,{id:t,message:e,type:a}]),setTimeout(()=>s(e=>e.filter(e=>e.id!==t)),3e3)},[])}}();(0,l.useEffect)(()=>{let e=new URLSearchParams(window.location.search).get("tab");e&&c.includes(e)&&a(e)},[]);let R=(0,l.useCallback)(async()=>{b(!0),f(null);try{let e=await r.FH.get("/api/workspaces"),s=null==e?void 0:e[0];if(!s){f("No workspace found — create one to get started."),b(!1);return}let a=await r.FH.get("/api/workspaces/".concat(s.id,"/projects")),t=null==a?void 0:a[0];if(!t){f("No project found — create a project to get started."),b(!1);return}m(t);let l=await r.FH.get("/api/projects/".concat(t.id,"/dashboard"));g(l),b(!1)}catch(e){f(e.message||"Failed to load dashboard data"),b(!1)}},[]);return((0,l.useEffect)(()=>{R()},[R,k]),y&&"Integrations"!==s)?(0,t.jsx)("div",{className:"shell-loading",children:(0,t.jsx)("div",{className:"spinner"})}):N&&"Integrations"!==s?(0,t.jsxs)("div",{className:"empty-state",children:[(0,t.jsx)("div",{className:"empty-icon",children:"!"}),(0,t.jsx)("p",{children:N}),(0,t.jsx)("button",{className:"button secondary small",style:{marginTop:12},onClick:()=>S(e=>e+1),children:"Retry"})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{children:(null==o?void 0:o.name)||"Dashboard"}),(0,t.jsx)("p",{className:"muted",children:(null==o?void 0:o.subtitle)||""})]}),(0,t.jsxs)("div",{className:"dash-actions",children:[(0,t.jsx)("a",{href:"/api/projects/".concat(null==o?void 0:o.id,"/reports/executive.html"),className:"button secondary small",target:"_blank",children:"Report"}),(0,t.jsx)("a",{href:"/api/projects/".concat(null==o?void 0:o.id,"/reports/risk-register.csv"),className:"button secondary small",target:"_blank",children:"CSV"})]})]}),(0,t.jsx)("div",{className:"tabs",children:c.map(a=>(0,t.jsx)("button",{className:"tab ".concat(s===a?"active":""),onClick:()=>e.push("/dashboard?tab=".concat(a)),children:a},a))}),"Overview"===s&&(0,t.jsx)(i,{name:"Overview",children:(0,t.jsx)(h,{project:o,dashboard:u})},"overview"),"Risks"===s&&(0,t.jsx)(i,{name:"Risks",children:(0,t.jsx)(j,{project:o,dashboard:u,toast:{add:C}})},"risks"),"Mitigations"===s&&(0,t.jsx)(i,{name:"Mitigations",children:(0,t.jsx)(x,{project:o,dashboard:u,toast:{add:C}})},"mitigations"),"Gate"===s&&(0,t.jsx)(i,{name:"Gate",children:(0,t.jsx)(p,{project:o,dashboard:u})},"gate"),"Integrations"===s&&(0,t.jsx)(i,{name:"Integrations",children:(0,t.jsx)(v,{project:o,dashboard:u})},"integrations"),(0,t.jsx)(d,{toasts:w})]})}},6282:(e,s,a)=>{"use strict";async function t(e,s,a){var t;let l={method:e,headers:{"Content-Type":"application/json"}};a&&(l.body=JSON.stringify(a));let n=await fetch("".concat("").concat(s),l),r=(null==(t=n.headers.get("content-type"))?void 0:t.includes("application/json"))?await n.json():await n.text();if(!n.ok)throw Error((null==r?void 0:r.error)||(null==r?void 0:r.message)||"Request failed (".concat(n.status,")"));return r}a.d(s,{FH:()=>l,Ht:()=>n,ri:()=>r});let l={get:e=>t("GET",e),post:(e,s)=>t("POST",e,s),put:(e,s)=>t("PUT",e,s),patch:(e,s)=>t("PATCH",e,s),del:e=>t("DELETE",e)};async function n(){try{let e=await l.get("/api/auth/session");return e.user||e.actor||null}catch(e){return null}}async function r(){await l.post("/api/auth/logout"),window.location.href="/"}}},e=>{e.O(0,[8441,1255,7358],()=>e(e.s=646)),_N_E=e.O()}]);   (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5105],{63:(e,s,a)=>{"use strict";var t=a(7260);a.o(t,"useRouter")&&a.d(s,{useRouter:function(){return t.useRouter}}),a.o(t,"useSearchParams")&&a.d(s,{useSearchParams:function(){return t.useSearchParams}})},646:(e,s,a)=>{Promise.resolve().then(a.bind(a,3399))},3399:(e,s,a)=>{"use strict";a.r(s),a.d(s,{default:()=>E});var t=a(5155),l=a(2115),n=a(63),i=a(6282);class r extends l.Component{static getDerivedStateFromError(e){return{error:e}}render(){if(this.state.error){let{fallback:e}=this.props;return e?"function"==typeof e?e(this.state.error):e:(0,t.jsxs)("div",{className:"empty-state",children:[(0,t.jsx)("div",{className:"empty-icon",children:"!"}),(0,t.jsxs)("p",{children:["Something went wrong in ",this.props.name||"this section","."]}),(0,t.jsx)("p",{className:"muted",style:{fontSize:12,marginTop:4},children:this.state.error.message}),(0,t.jsx)("button",{className:"button secondary small",style:{marginTop:12},onClick:()=>{var e,s;this.setState({error:null}),null==(e=(s=this.props).onRetry)||e.call(s)},children:"Retry"})]})}return this.props.children}constructor(e){super(e),this.state={error:null}}}let c=["Overview","Risks","Mitigations","Gate","Integrations","Audit"],d=["Technical","Governance","Legal","Ethical","Operational"],o=["Design","Development","Testing","Deployment"],u=["OPEN","IN_MITIGATION","ACCEPTED","CLOSED"],m=["NOT_STARTED","IN_PROGRESS","DONE","REJECTED"];function h(e){let{toasts:s}=e;return s.length?(0,t.jsx)("div",{className:"toast-container",children:s.map(e=>(0,t.jsx)("div",{className:"toast ".concat(e.type),children:e.message},e.id))}):null}function j(e){let{value:s,onChange:a,placeholder:l}=e;return(0,t.jsxs)("div",{className:"search-wrap",children:[(0,t.jsx)("span",{className:"search-icon",children:"⌕"}),(0,t.jsx)("input",{className:"input",value:s,onChange:e=>a(e.target.value),placeholder:l||"Search..."})]})}function x(e,s,a){return s?[...e].sort((e,t)=>{let l=e[s],n=t[s];if(null==l)return 1;if(null==n)return -1;let i="number"==typeof l?l-n:String(l).localeCompare(String(n));return"asc"===a?i:-i}):e}function p(e){let{children:s,className:a}=e;return(0,t.jsx)("span",{className:"badge ".concat(a||""),children:s})}function v(e){let{label:s,children:a}=e;return(0,t.jsxs)("div",{style:{marginBottom:10},children:[(0,t.jsx)("label",{style:{display:"block",fontSize:12,color:"var(--muted)",marginBottom:3},children:s}),a]})}function g(e){let{value:s,onChange:a,type:l="text",min:n,max:i,style:r}=e;return(0,t.jsx)("input",{className:"input",type:l,value:s,onChange:e=>a(e.target.value),min:n,max:i,style:{width:"100%",...r}})}function y(e){let{value:s,onChange:a,options:l}=e;return(0,t.jsxs)("select",{className:"input",value:s,onChange:e=>a(e.target.value),style:{width:"100%"},children:[(0,t.jsx)("option",{value:"",children:"— Select —"}),(l||[]).map(e=>{let s="object"==typeof e?e.value:e,a="object"==typeof e?e.label:e;return(0,t.jsx)("option",{value:s,children:a},s)})]})}function b(e){let{label:s,onConfirm:a,onCancel:l,deleting:n}=e;return(0,t.jsx)("div",{className:"modal-overlay",onClick:l,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:380},children:[(0,t.jsxs)("h3",{children:["Delete ",s,"?"]}),(0,t.jsx)("p",{style:{fontSize:13,color:"var(--muted)"},children:"This cannot be undone."}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:l,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff"},onClick:a,disabled:n,children:n?"Deleting...":"Delete"})]})]})})}function N(e){let{project:s,dashboard:a}=e,n=(0,l.useMemo)(()=>{var e,s,t,l,n,i,r,c,d,o,u,m,h,j,x,p,v,g,y;return a?[{label:"Overall Score",value:null!=(p=null==(e=a.summary)?void 0:e.overallScore)?p:"-",cls:(null==(s=a.summary)?void 0:s.overallScore)>=75?"bad":(null==(t=a.summary)?void 0:t.overallScore)>=50?"warn":"good",sub:"Risk level: ".concat((null==(l=a.summary)?void 0:l.riskLevel)||"-")},{label:"Deployment Gate",value:null!=(v=null==(n=a.summary)?void 0:n.gateStatus)?v:"-",cls:(null==(i=a.summary)?void 0:i.gateStatus)==="Ready"?"good":(null==(r=a.summary)?void 0:r.gateStatus)==="Warning"?"warn":"bad",sub:(null==(c=a.gate)?void 0:c.message)||""},{label:"Open Risks",value:null!=(g=null==(d=a.summary)?void 0:d.openRisks)?g:0,cls:((null==(o=a.summary)?void 0:o.openRisks)||0)>5?"bad":((null==(u=a.summary)?void 0:u.openRisks)||0)>2?"warn":"good",sub:"".concat((null==(m=a.summary)?void 0:m.totalRisks)||0," total risks")},{label:"Mitigation",value:"".concat(null!=(y=null==(h=a.summary)?void 0:h.mitigationCompletion)?y:0,"%"),cls:40>((null==(j=a.summary)?void 0:j.mitigationCompletion)||0)?"bad":70>((null==(x=a.summary)?void 0:x.mitigationCompletion)||0)?"warn":"good",sub:"Average active-risk completion"}]:[]},[a]);return a?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{className:"grid",style:{gridTemplateColumns:"repeat(auto-fit, minmax(200px, 1fr))"},children:n.map(e=>(0,t.jsxs)("div",{className:"metric-card",children:[(0,t.jsx)("h3",{children:e.label}),(0,t.jsx)("div",{className:"metric-value ".concat(e.cls),children:e.value}),(0,t.jsx)("div",{className:"metric-sub",children:e.sub})]},e.label))}),(0,t.jsxs)("div",{className:"grid",style:{gridTemplateColumns:"1fr 1fr",marginTop:18},children:[(0,t.jsxs)("div",{className:"panel",children:[(0,t.jsx)("h2",{children:"Dimensions"}),(a.dimensions||[]).map(e=>(0,t.jsxs)("div",{style:{marginBottom:12},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:4},children:[(0,t.jsx)("span",{style:{fontSize:13},children:e.name}),(0,t.jsx)("strong",{style:{fontSize:13},children:e.score})]}),(0,t.jsx)("div",{className:"bar-wrap",children:(0,t.jsx)("div",{className:"bar-fill",style:{width:"".concat(Math.min(e.score,100),"%"),background:e.score>=50?"var(--danger)":e.score>=25?"var(--warn)":"var(--accent)"}})})]},e.name))]}),(0,t.jsxs)("div",{className:"panel",children:[(0,t.jsx)("h2",{children:"Lifecycle"}),(a.lifecycle||[]).map(e=>(0,t.jsxs)("div",{style:{marginBottom:12},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:4},children:[(0,t.jsx)("span",{style:{fontSize:13},children:e.name}),(0,t.jsxs)("span",{className:"muted",style:{fontSize:12},children:[e.openRisks," open"]})]}),(0,t.jsx)("div",{className:"bar-wrap",children:(0,t.jsx)("div",{className:"bar-fill",style:{width:"".concat(Math.min(e.riskScore||0,100),"%"),background:(e.riskScore||0)>=50?"var(--danger)":(e.riskScore||0)>=25?"var(--warn)":"var(--accent)"}})})]},e.name))]})]})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading dashboard data..."})})}function f(e){let{project:s,onClose:a,onSaved:n,toast:r}=e,[c,u]=(0,l.useState)(!1),[m,h]=(0,l.useState)({title:"",description:"",dimension:"",domain:"",lifecyclePhase:"",probability:50,impact:50,detectability:50,ownerDisplayName:""}),j=e=>s=>h(a=>({...a,[e]:s})),x=async()=>{if(!m.title.trim())return void r.add("Title is required","error");if(!m.dimension)return void r.add("Dimension is required","error");u(!0);try{await i.FH.post("/api/projects/".concat(s.id,"/risks"),m),r.add("Risk created"),n()}catch(e){r.add(e.message||"Failed to create risk","error")}finally{u(!1)}};return(0,t.jsx)("div",{className:"modal-overlay",onClick:a,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:500},children:[(0,t.jsx)("h2",{children:"New Risk"}),(0,t.jsx)(v,{label:"Title *",children:(0,t.jsx)(g,{value:m.title,onChange:j("title")})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:m.description,onChange:e=>j("description")(e.target.value),rows:3,style:{width:"100%",resize:"vertical"}})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Dimension *",children:(0,t.jsx)(y,{value:m.dimension,onChange:j("dimension"),options:d})}),(0,t.jsx)(v,{label:"Domain",children:(0,t.jsx)(g,{value:m.domain,onChange:j("domain")})})]}),(0,t.jsx)(v,{label:"Lifecycle Phase",children:(0,t.jsx)(y,{value:m.lifecyclePhase,onChange:j("lifecyclePhase"),options:o})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Probability",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:m.probability,onChange:j("probability")})}),(0,t.jsx)(v,{label:"Impact",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:m.impact,onChange:j("impact")})}),(0,t.jsx)(v,{label:"Detectability",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:m.detectability,onChange:j("detectability")})})]}),(0,t.jsx)(v,{label:"Owner",children:(0,t.jsx)(g,{value:m.ownerDisplayName,onChange:j("ownerDisplayName")})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:a,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:x,disabled:c,children:c?"Saving...":"Create Risk"})]})]})})}function C(e){let{project:s,dashboard:a,toast:n,onRefresh:r}=e,[c,m]=(0,l.useState)(""),[h,N]=(0,l.useState)("normalizedScore"),[C,k]=(0,l.useState)("desc"),[S,w]=(0,l.useState)(0),[P,D]=(0,l.useState)(null),[T,R]=(0,l.useState)(!1),[A,I]=(0,l.useState)(!1),[E,F]=(0,l.useState)({}),[O,L]=(0,l.useState)(null),[z,M]=(0,l.useState)(null),[H,_]=(0,l.useState)(!1),W=(0,l.useMemo)(()=>(null==a?void 0:a.topRisks)?x(a.topRisks,h,C):[],[a,h,C]),G=(0,l.useMemo)(()=>{if(!c)return W;let e=c.toLowerCase();return W.filter(s=>(s.title||"").toLowerCase().includes(e)||(s.dimension||"").toLowerCase().includes(e)||(s.ownerDisplayName||"").toLowerCase().includes(e))},[W,c]),q=G.slice(0,(S+1)*20),B=async(e,s)=>{L(e);try{await i.FH.patch("/api/risks/".concat(e),{status:s}),n.add("Risk status updated to ".concat(s)),D(null),r()}catch(e){n.add(e.message,"error")}finally{L(null)}},J=async()=>{if(!E.title.trim())return void n.add("Title is required","error");L("edit");try{await i.FH.patch("/api/risks/".concat(P.id),E),n.add("Risk updated"),D(null),r()}catch(e){n.add(e.message||"Failed to update","error")}finally{L(null)}},U=async()=>{_(!0);try{await i.FH.del("/api/risks/".concat(z.id)),n.add("Risk deleted"),M(null),D(null),r()}catch(e){n.add(e.message||"Failed to delete","error")}finally{_(!1)}};return a?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{style:{display:"flex",gap:8,marginBottom:12},children:[(0,t.jsx)(j,{value:c,onChange:m,placeholder:"Search risks by title, dimension, owner..."}),(0,t.jsx)("button",{className:"button small",onClick:()=>R(!0),children:"+ New Risk"})]}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsx)("tr",{children:[{key:"id",label:"ID"},{key:"title",label:"Risk"},{key:"dimension",label:"Dimension"},{key:"lifecyclePhase",label:"Phase"},{key:"normalizedScore",label:"Score"},{key:"residualScore",label:"Residual"},{key:"status",label:"Status"},{key:"ownerDisplayName",label:"Owner"}].map(e=>(0,t.jsxs)("th",{className:"sortable",onClick:()=>{var s;h===(s=e.key)?k(e=>"asc"===e?"desc":"asc"):(N(s),k("asc"))},children:[e.label," ",h===e.key?"asc"===C?"▲":"▼":""]},e.key))})}),(0,t.jsx)("tbody",{children:q.map(e=>{var s,a,l;return(0,t.jsxs)("tr",{onClick:()=>{var s,a,t;D(e),F({title:e.title||"",description:e.description||"",dimension:e.dimension||"",domain:e.domain||"",lifecyclePhase:e.lifecyclePhase||"",probability:null!=(s=e.probability)?s:50,impact:null!=(a=e.impact)?a:50,detectability:null!=(t=e.detectability)?t:50,ownerDisplayName:e.ownerDisplayName||""}),I(!1),M(null)},children:[(0,t.jsx)("td",{style:{fontFamily:"monospace",fontSize:12},children:null==(s=e.id)?void 0:s.slice(0,8)}),(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.title})}),(0,t.jsx)("td",{children:(0,t.jsx)(p,{className:null==(a=e.dimension)?void 0:a.toLowerCase(),children:e.dimension})}),(0,t.jsx)("td",{style:{fontSize:12},children:e.lifecyclePhase}),(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.normalizedScore})}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{style:{color:e.residualScore>=50?"var(--danger)":e.residualScore>=25?"var(--warn)":"var(--accent)"},children:e.residualScore})}),(0,t.jsx)("td",{children:(0,t.jsx)(p,{className:null==(l=e.status)?void 0:l.toLowerCase().replace(/\s+/g,"-"),children:e.status})}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{className:"muted",children:e.ownerDisplayName||"-"})})]},e.id)})})]})}),G.length>q.length&&(0,t.jsx)("div",{style:{textAlign:"center",marginTop:12},children:(0,t.jsxs)("button",{className:"button secondary small",onClick:()=>w(e=>e+1),children:["Show more (",G.length-q.length," remaining)"]})}),!G.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No risks match your search"})}),T&&(0,t.jsx)(f,{project:s,onClose:()=>R(!1),onSaved:()=>{R(!1),r()},toast:n}),P&&!z&&(0,t.jsx)("div",{className:"modal-overlay",onClick:()=>D(null),children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:520},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"},children:[(0,t.jsx)("h2",{style:{margin:0},children:P.title}),(0,t.jsx)("button",{className:"button secondary small",onClick:()=>I(!A),children:A?"View":"Edit"})]}),A?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{style:{marginTop:12},children:[(0,t.jsx)(v,{label:"Title *",children:(0,t.jsx)(g,{value:E.title,onChange:e=>F(s=>({...s,title:e}))})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:E.description,onChange:e=>F(s=>({...s,description:e.target.value})),rows:2,style:{width:"100%",resize:"vertical"}})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Dimension",children:(0,t.jsx)(y,{value:E.dimension,onChange:e=>F(s=>({...s,dimension:e})),options:d})}),(0,t.jsx)(v,{label:"Domain",children:(0,t.jsx)(g,{value:E.domain,onChange:e=>F(s=>({...s,domain:e}))})})]}),(0,t.jsx)(v,{label:"Lifecycle Phase",children:(0,t.jsx)(y,{value:E.lifecyclePhase,onChange:e=>F(s=>({...s,lifecyclePhase:e})),options:o})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Probability",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:E.probability,onChange:e=>F(s=>({...s,probability:Number(e)}))})}),(0,t.jsx)(v,{label:"Impact",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:E.impact,onChange:e=>F(s=>({...s,impact:Number(e)}))})}),(0,t.jsx)(v,{label:"Detectability",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:E.detectability,onChange:e=>F(s=>({...s,detectability:Number(e)}))})})]}),(0,t.jsx)(v,{label:"Owner",children:(0,t.jsx)(g,{value:E.ownerDisplayName,onChange:e=>F(s=>({...s,ownerDisplayName:e}))})})]}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:()=>D(null),children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:J,disabled:"edit"===O,children:"edit"===O?"Saving...":"Save Changes"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff",marginLeft:"auto"},onClick:()=>M(P),children:"Delete"})]})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:12,fontSize:13,marginTop:12},children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Dimension"}),(0,t.jsx)("br",{}),P.dimension]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Phase"}),(0,t.jsx)("br",{}),P.lifecyclePhase]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Probability"}),(0,t.jsx)("br",{}),P.probability]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Impact"}),(0,t.jsx)("br",{}),P.impact]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Detectability"}),(0,t.jsx)("br",{}),P.detectability]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Score"}),(0,t.jsx)("br",{}),(0,t.jsx)("strong",{children:P.normalizedScore})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Residual"}),(0,t.jsx)("br",{}),P.residualScore]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Owner"}),(0,t.jsx)("br",{}),P.ownerDisplayName||"-"]})]}),P.description&&(0,t.jsxs)("div",{style:{marginTop:12,fontSize:13},children:[(0,t.jsx)("span",{className:"muted",children:"Description"}),(0,t.jsx)("br",{}),P.description]}),(0,t.jsxs)("div",{style:{marginTop:16},children:[(0,t.jsx)("span",{className:"muted",style:{fontSize:12},children:"Update status:"}),(0,t.jsx)("div",{style:{display:"flex",gap:6,marginTop:6,flexWrap:"wrap"},children:u.map(e=>(0,t.jsx)("button",{className:"button small ".concat("OPEN"===e?"secondary":""),onClick:()=>B(P.id,e),disabled:O===P.id,children:e.replace("_"," ")},e))})]}),(0,t.jsx)("div",{className:"modal-actions",children:(0,t.jsx)("button",{className:"button secondary small",onClick:()=>D(null),children:"Close"})})]})]})}),z&&(0,t.jsx)(b,{label:"this risk",onConfirm:U,onCancel:()=>M(null),deleting:H})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading..."})})}function k(e){let{project:s,risks:a,onClose:n,onSaved:r,toast:c}=e,[d,o]=(0,l.useState)(!1),[u,h]=(0,l.useState)({riskId:"",title:"",description:"",status:"NOT_STARTED",progressPercent:0,effectivenessPercent:0,dueDate:"",ownerDisplayName:""}),j=e=>s=>h(a=>({...a,[e]:s})),x=async()=>{if(!u.title.trim())return void c.add("Title is required","error");if(!u.riskId)return void c.add("Please select a risk","error");o(!0);try{let e={...u,progressPercent:Number(u.progressPercent),effectivenessPercent:Number(u.effectivenessPercent)};e.dueDate?e.dueDate=new Date(e.dueDate).toISOString():delete e.dueDate,await i.FH.post("/api/risks/".concat(u.riskId,"/mitigations"),e),c.add("Mitigation created"),r()}catch(e){c.add(e.message||"Failed to create mitigation","error")}finally{o(!1)}};return(0,t.jsx)("div",{className:"modal-overlay",onClick:n,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:500},children:[(0,t.jsx)("h2",{children:"New Mitigation"}),(0,t.jsx)(v,{label:"Risk *",children:(0,t.jsx)(y,{value:u.riskId,onChange:j("riskId"),options:(a||[]).map(e=>({value:e.id,label:e.title}))})}),(0,t.jsx)(v,{label:"Title *",children:(0,t.jsx)(g,{value:u.title,onChange:j("title")})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:u.description,onChange:e=>j("description")(e.target.value),rows:2,style:{width:"100%",resize:"vertical"}})}),(0,t.jsx)(v,{label:"Status",children:(0,t.jsx)(y,{value:u.status,onChange:j("status"),options:m})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Progress %",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:u.progressPercent,onChange:j("progressPercent")})}),(0,t.jsx)(v,{label:"Effectiveness %",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:u.effectivenessPercent,onChange:j("effectivenessPercent")})})]}),(0,t.jsx)(v,{label:"Due Date",children:(0,t.jsx)(g,{type:"date",value:u.dueDate,onChange:j("dueDate")})}),(0,t.jsx)(v,{label:"Owner",children:(0,t.jsx)(g,{value:u.ownerDisplayName,onChange:j("ownerDisplayName")})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:n,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:x,disabled:d,children:d?"Saving...":"Create Mitigation"})]})]})})}function S(e){let{project:s,dashboard:a,toast:n,onRefresh:r}=e,[c,d]=(0,l.useState)(""),[o,u]=(0,l.useState)("progressPercent"),[h,N]=(0,l.useState)("asc"),[f,C]=(0,l.useState)(!1),[S,w]=(0,l.useState)(null),[P,D]=(0,l.useState)(!1),[T,R]=(0,l.useState)({}),[A,I]=(0,l.useState)(null),[E,F]=(0,l.useState)(null),[O,L]=(0,l.useState)(!1),z=(0,l.useMemo)(()=>(null==a?void 0:a.mitigations)?x(a.mitigations,o,h):[],[a,o,h]),M=(0,l.useMemo)(()=>(null==a?void 0:a.topRisks)?a.topRisks:[],[a]),H=(0,l.useMemo)(()=>{if(!c)return z;let e=c.toLowerCase();return z.filter(s=>(s.title||"").toLowerCase().includes(e)||(s.riskTitle||"").toLowerCase().includes(e))},[z,c]),_=async()=>{if(!T.title.trim())return void n.add("Title is required","error");I("edit");try{let e={...T,progressPercent:Number(T.progressPercent),effectivenessPercent:Number(T.effectivenessPercent)};e.dueDate?e.dueDate=new Date(e.dueDate).toISOString():e.dueDate=null,await i.FH.patch("/api/mitigations/".concat(S.id),e),n.add("Mitigation updated"),w(null),r()}catch(e){n.add(e.message||"Failed to update","error")}finally{I(null)}},W=async()=>{L(!0);try{await i.FH.del("/api/mitigations/".concat(E.id)),n.add("Mitigation deleted"),F(null),w(null),r()}catch(e){n.add(e.message||"Failed to delete","error")}finally{L(!1)}};return a?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{style:{display:"flex",gap:8,marginBottom:12},children:[(0,t.jsx)(j,{value:c,onChange:d,placeholder:"Search mitigations..."}),(0,t.jsx)("button",{className:"button small",onClick:()=>C(!0),children:"+ New Mitigation"})]}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsx)("tr",{children:[{key:"title",label:"Title"},{key:"riskTitle",label:"Risk"},{key:"status",label:"Status"},{key:"progressPercent",label:"Progress"},{key:"effectivenessPercent",label:"Effectiveness"},{key:"ownerDisplayName",label:"Owner"}].map(e=>(0,t.jsxs)("th",{className:"sortable",onClick:()=>{var s;o===(s=e.key)?N(e=>"asc"===e?"desc":"asc"):(u(s),N("asc"))},children:[e.label," ",o===e.key?"asc"===h?"▲":"▼":""]},e.key))})}),(0,t.jsx)("tbody",{children:H.slice(0,50).map(e=>{var s;return(0,t.jsxs)("tr",{onClick:()=>{var s,a;w(e),R({title:e.title||"",description:e.description||"",status:e.status||"NOT_STARTED",progressPercent:null!=(s=e.progressPercent)?s:0,effectivenessPercent:null!=(a=e.effectivenessPercent)?a:0,dueDate:e.dueDate?e.dueDate.slice(0,10):"",ownerDisplayName:e.ownerDisplayName||""}),D(!0),F(null)},style:{cursor:"pointer"},children:[(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.title})}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{className:"muted",children:e.riskTitle})}),(0,t.jsx)("td",{children:(0,t.jsx)(p,{className:null==(s=e.status)?void 0:s.toLowerCase().replace(/\s+/g,"-"),children:e.status})}),(0,t.jsx)("td",{children:(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8},children:[(0,t.jsx)("div",{className:"bar-wrap",style:{flex:1,maxWidth:80},children:(0,t.jsx)("div",{className:"bar-fill",style:{width:"".concat(e.progressPercent||0,"%"),background:(e.progressPercent||0)>=80?"var(--accent)":(e.progressPercent||0)>=30?"var(--warn)":"var(--danger)"}})}),e.progressPercent||0,"%"]})}),(0,t.jsxs)("td",{children:[e.effectivenessPercent||0,"%"]}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{className:"muted",children:e.ownerDisplayName||"-"})})]},e.id)})})]})}),!H.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No mitigations found"})}),f&&(0,t.jsx)(k,{project:s,risks:M,onClose:()=>C(!1),onSaved:()=>{C(!1),r()},toast:n}),S&&!E&&(0,t.jsx)("div",{className:"modal-overlay",onClick:()=>w(null),children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:500},children:[(0,t.jsx)("h2",{style:{margin:0},children:P?"Edit Mitigation":S.title}),(0,t.jsxs)("div",{style:{marginTop:12},children:[(0,t.jsx)(v,{label:"Title *",children:(0,t.jsx)(g,{value:T.title,onChange:e=>R(s=>({...s,title:e}))})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:T.description,onChange:e=>R(s=>({...s,description:e.target.value})),rows:2,style:{width:"100%",resize:"vertical"}})}),(0,t.jsx)(v,{label:"Status",children:(0,t.jsx)(y,{value:T.status,onChange:e=>R(s=>({...s,status:e})),options:m})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Progress %",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:T.progressPercent,onChange:e=>R(s=>({...s,progressPercent:Number(e)}))})}),(0,t.jsx)(v,{label:"Effectiveness %",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:T.effectivenessPercent,onChange:e=>R(s=>({...s,effectivenessPercent:Number(e)}))})})]}),(0,t.jsx)(v,{label:"Due Date",children:(0,t.jsx)(g,{type:"date",value:T.dueDate,onChange:e=>R(s=>({...s,dueDate:e}))})}),(0,t.jsx)(v,{label:"Owner",children:(0,t.jsx)(g,{value:T.ownerDisplayName,onChange:e=>R(s=>({...s,ownerDisplayName:e}))})})]}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:()=>w(null),children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:_,disabled:"edit"===A,children:"edit"===A?"Saving...":"Save Changes"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff",marginLeft:"auto"},onClick:()=>F(S),children:"Delete"})]})]})}),E&&(0,t.jsx)(b,{label:"this mitigation",onConfirm:W,onCancel:()=>F(null),deleting:O})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading..."})})}function w(e){var s,a,n;let{project:r,dashboard:c,toast:d,onRefresh:o}=e,[u,m]=(0,l.useState)(!1),[h,j]=(0,l.useState)(!1),[x,b]=(0,l.useState)({decision:"APPROVED",reviewerName:"",reason:""}),[N,f]=(0,l.useState)(!1),C=(null==c||null==(s=c.gate)?void 0:s.criteria)||[],k=(null==c||null==(a=c.summary)?void 0:a.gateStatus)||"Unknown",S=null==c||null==(n=c.gate)?void 0:n.id,w="Ready"===k?"good":"Warning"===k?"warn":"bad",P=async()=>{m(!0);try{await i.FH.post("/api/projects/".concat(r.id,"/gate/evaluate"),{}),d.add("Gate evaluated"),o()}catch(e){d.add(e.message||"Evaluation failed","error")}finally{m(!1)}},D=async()=>{if(!x.reviewerName.trim())return void d.add("Reviewer name is required","error");f(!0);try{await i.FH.post("/api/gates/".concat(S,"/decisions"),x),d.add("Decision submitted"),j(!1),o()}catch(e){d.add(e.message||"Failed to submit decision","error")}finally{f(!1)}};return c?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{children:"Deployment Gate"}),(0,t.jsx)("p",{className:"muted",children:"Gate evaluation for AI deployment readiness"})]}),(0,t.jsx)("div",{className:"dash-actions",children:(0,t.jsx)("div",{className:"metric-value ".concat(w),style:{fontSize:28},children:k})})]}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsxs)("tr",{children:[(0,t.jsx)("th",{children:"Criterion"}),(0,t.jsx)("th",{children:"Required"}),(0,t.jsx)("th",{children:"Actual"}),(0,t.jsx)("th",{children:"Status"})]})}),(0,t.jsx)("tbody",{children:C.map(e=>{var s;return(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.name})}),(0,t.jsx)("td",{children:e.required}),(0,t.jsx)("td",{children:e.actual}),(0,t.jsx)("td",{children:(0,t.jsx)(p,{className:null==(s=e.status)?void 0:s.toLowerCase(),children:e.status})})]},e.name)})})]})}),!C.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No gate criteria evaluated yet"})}),(0,t.jsxs)("div",{style:{marginTop:16,display:"flex",gap:8,flexWrap:"wrap"},children:[(0,t.jsx)("button",{className:"button small",onClick:P,disabled:u,children:u?"Evaluating...":"Evaluate Gate"}),S&&(0,t.jsx)("button",{className:"button secondary small",onClick:()=>j(!0),children:"Add Decision"}),(0,t.jsx)("a",{href:"/api/projects/".concat(null==r?void 0:r.id,"/gate/history"),className:"button secondary small",target:"_blank",children:"History (API)"})]}),h&&(0,t.jsx)("div",{className:"modal-overlay",onClick:()=>j(!1),children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:400},children:[(0,t.jsx)("h2",{children:"Gate Decision"}),(0,t.jsx)(v,{label:"Decision",children:(0,t.jsx)(y,{value:x.decision,onChange:e=>b(s=>({...s,decision:e})),options:["APPROVED","REJECTED","ACCEPTED","NEEDS_CHANGES"]})}),(0,t.jsx)(v,{label:"Reviewer Name *",children:(0,t.jsx)(g,{value:x.reviewerName,onChange:e=>b(s=>({...s,reviewerName:e}))})}),(0,t.jsx)(v,{label:"Reason",children:(0,t.jsx)("textarea",{className:"input",value:x.reason,onChange:e=>b(s=>({...s,reason:e.target.value})),rows:3,style:{width:"100%",resize:"vertical"}})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:()=>j(!1),children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:D,disabled:N,children:N?"Saving...":"Submit Decision"})]})]})})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading..."})})}function P(e){var s;let{project:a,dashboard:n,onClose:r,onSaved:c,toast:d}=e,[o,u]=(0,l.useState)(!1),[m,h]=(0,l.useState)({provider:"TRELLO",workspaceName:"",baseUrl:"",authMode:"API_KEY"}),j=e=>s=>h(a=>({...a,[e]:s})),x=(null==n||null==(s=n.gate)?void 0:s.workspaceId)||(null==a?void 0:a.workspaceId),p=async()=>{if(!m.workspaceName.trim())return void d.add("Workspace name is required","error");u(!0);try{await i.FH.post("/api/workspaces/".concat(x,"/integrations"),m),d.add("Integration created"),c()}catch(e){d.add(e.message||"Failed to create integration","error")}finally{u(!1)}};return(0,t.jsx)("div",{className:"modal-overlay",onClick:r,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:450},children:[(0,t.jsx)("h2",{children:"New Integration"}),(0,t.jsx)(v,{label:"Provider",children:(0,t.jsx)(y,{value:m.provider,onChange:j("provider"),options:["TRELLO","JIRA","ASANA","MICROSOFT_PLANNER"]})}),(0,t.jsx)(v,{label:"Workspace Name *",children:(0,t.jsx)(g,{value:m.workspaceName,onChange:j("workspaceName")})}),(0,t.jsx)(v,{label:"Base URL",children:(0,t.jsx)(g,{value:m.baseUrl,onChange:j("baseUrl")})}),(0,t.jsx)(v,{label:"Auth Mode",children:(0,t.jsx)(y,{value:m.authMode,onChange:j("authMode"),options:["API_KEY","OAUTH","BASIC"]})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:r,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:p,disabled:o,children:o?"Saving...":"Create Integration"})]})]})})}function D(e){let{project:s,dashboard:a,toast:n,onRefresh:i}=e,[r,c]=(0,l.useState)(!1),d=(null==a?void 0:a.integrations)||[];return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{children:"Integrations"}),(0,t.jsx)("p",{className:"muted",children:"Connect Trello, Jira, Asana, or Microsoft Planner"})]}),(0,t.jsx)("div",{className:"dash-actions",children:(0,t.jsx)("button",{className:"button small",onClick:()=>c(!0),children:"+ New Integration"})})]}),(0,t.jsx)("div",{className:"grid",style:{gridTemplateColumns:"repeat(auto-fit, minmax(240px, 1fr))"},children:["TRELLO","JIRA","ASANA","MICROSOFT_PLANNER"].map(e=>{let s=d.find(s=>s.provider===e);return(0,t.jsxs)("div",{className:"panel",style:{textAlign:"center"},children:[(0,t.jsx)("div",{style:{fontSize:32,marginBottom:8},children:"TRELLO"===e?"⊞":"JIRA"===e?"◆":"ASANA"===e?"◇":"▣"}),(0,t.jsx)("h3",{style:{margin:"0 0 4px"},children:e.replace("_"," ")}),(0,t.jsx)("p",{className:"muted",style:{fontSize:12,margin:"0 0 12px"},children:s?s.workspaceName:"Not configured"}),(0,t.jsx)("div",{style:{display:"flex",gap:6,justifyContent:"center"},children:s?(0,t.jsx)("a",{href:"/api/integrations/".concat(s.id),className:"button secondary small",target:"_blank",children:"Manage"}):(0,t.jsx)("button",{className:"button secondary small",onClick:()=>c(!0),children:"Configure"})})]},e)})}),r&&(0,t.jsx)(P,{project:s,dashboard:a,onClose:()=>c(!1),onSaved:()=>{c(!1),i()},toast:n}),!d.length&&(0,t.jsx)("div",{style:{marginTop:12},children:(0,t.jsx)("a",{href:"/api/integration-providers",className:"button secondary small",target:"_blank",children:"Integration providers (API)"})})]})}function T(e){let{project:s,toast:a}=e,[n,r]=(0,l.useState)([]),[c,d]=(0,l.useState)(!0),[o,u]=(0,l.useState)(null),m=(0,l.useCallback)(async()=>{if(s){d(!0),u(null);try{let e=await i.FH.get("/api/projects/".concat(s.id,"/audit"));r(e.auditEvents||[])}catch(e){u(e.message||"Failed to load audit log")}finally{d(!1)}}},[s]);return((0,l.useEffect)(()=>{m()},[m]),c)?(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading audit log..."})}):o?(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:o})}):n.length?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{children:"Audit Log"}),(0,t.jsx)("p",{className:"muted",children:"Project activity history"})]}),(0,t.jsx)("div",{className:"dash-actions",children:(0,t.jsx)("button",{className:"button secondary small",onClick:m,children:"Refresh"})})]}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsxs)("tr",{children:[(0,t.jsx)("th",{children:"Date"}),(0,t.jsx)("th",{children:"Action"}),(0,t.jsx)("th",{children:"Entity"}),(0,t.jsx)("th",{children:"Actor"}),(0,t.jsx)("th",{children:"Details"})]})}),(0,t.jsx)("tbody",{children:n.map(e=>{var s,a;return(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{style:{fontSize:12,whiteSpace:"nowrap"},children:new Date(e.createdAt).toLocaleString()}),(0,t.jsx)("td",{children:(0,t.jsx)(p,{className:null==(s=e.action)?void 0:s.toLowerCase().replace(/\s+/g,"-"),children:e.action})}),(0,t.jsxs)("td",{style:{fontSize:12},children:[e.entityType," ",(0,t.jsxs)("span",{className:"muted",children:["(",null==(a=e.entityId)?void 0:a.slice(0,8),")"]})]}),(0,t.jsx)("td",{style:{fontSize:12},children:e.actorUserId||"system"}),(0,t.jsx)("td",{style:{fontSize:12,maxWidth:300,overflow:"hidden",textOverflow:"ellipsis"},children:e.afterJson?JSON.stringify(e.afterJson).slice(0,80):"-"})]},e.id)})})]})})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No audit events recorded yet"})})}function R(e){let{project:s,onClose:a,onSaved:n,toast:r}=e,[c,d]=(0,l.useState)(!1),[o,u]=(0,l.useState)({name:(null==s?void 0:s.name)||"",description:(null==s?void 0:s.description)||"",subtitle:(null==s?void 0:s.subtitle)||"",status:(null==s?void 0:s.status)||"Active"}),m=async()=>{if(!o.name.trim())return void r.add("Project name is required","error");d(!0);try{await i.FH.patch("/api/projects/".concat(s.id),o),r.add("Project updated"),n()}catch(e){r.add(e.message||"Failed to update project","error")}finally{d(!1)}};return(0,t.jsx)("div",{className:"modal-overlay",onClick:a,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:450},children:[(0,t.jsx)("h2",{children:"Project Settings"}),(0,t.jsx)(v,{label:"Name *",children:(0,t.jsx)(g,{value:o.name,onChange:e=>u(s=>({...s,name:e}))})}),(0,t.jsx)(v,{label:"Subtitle",children:(0,t.jsx)(g,{value:o.subtitle,onChange:e=>u(s=>({...s,subtitle:e}))})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:o.description,onChange:e=>u(s=>({...s,description:e.target.value})),rows:3,style:{width:"100%",resize:"vertical"}})}),(0,t.jsx)(v,{label:"Status",children:(0,t.jsx)(y,{value:o.status,onChange:e=>u(s=>({...s,status:e})),options:["Active","Archived","On Hold"]})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:a,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:m,disabled:c,children:c?"Saving...":"Save Changes"})]})]})})}function A(e){let{workspaceId:s,onClose:a,onSaved:n,toast:r}=e,[c,d]=(0,l.useState)(!1),[o,u]=(0,l.useState)({name:"",description:"",projectType:"AI-Enabler"}),m=async()=>{if(!o.name.trim())return void r.add("Project name is required","error");d(!0);try{await i.FH.post("/api/workspaces/".concat(s,"/projects"),o),r.add("Project created"),n()}catch(e){r.add(e.message||"Failed to create project","error")}finally{d(!1)}};return(0,t.jsx)("div",{className:"modal-overlay",onClick:a,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:450},children:[(0,t.jsx)("h2",{children:"New Project"}),(0,t.jsx)(v,{label:"Name *",children:(0,t.jsx)(g,{value:o.name,onChange:e=>u(s=>({...s,name:e}))})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:o.description,onChange:e=>u(s=>({...s,description:e.target.value})),rows:3,style:{width:"100%",resize:"vertical"}})}),(0,t.jsx)(v,{label:"Project Type",children:(0,t.jsx)(y,{value:o.projectType,onChange:e=>u(s=>({...s,projectType:e})),options:["AI-Enabler","GENERATIVE_AI","ML-Pipeline","Automation"]})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:a,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:m,disabled:c,children:c?"Saving...":"Create Project"})]})]})})}function I(e){let{projects:s,workspaceId:a,currentProjectId:n,onClose:r,onSwitch:c,onSaved:d,toast:o}=e,[u,m]=(0,l.useState)(null),[h,j]=(0,l.useState)(null),[x,v]=(0,l.useState)(!1),g=async()=>{m(!0);try{await i.FH.del("/api/projects/".concat(h.id)),o.add('Project "'.concat(h.name,'" deleted')),j(null),d()}catch(e){o.add(e.message||"Failed to delete project","error")}finally{m(!1)}};return(0,t.jsxs)("div",{className:"modal-overlay",onClick:r,children:[(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:700,maxHeight:"80vh",overflow:"auto"},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"},children:[(0,t.jsx)("h2",{style:{margin:0},children:"All Projects"}),(0,t.jsx)("button",{className:"button small",onClick:()=>v(!0),children:"+ New Project"})]}),(0,t.jsxs)("p",{className:"muted",style:{fontSize:12,marginTop:4},children:[s.length," project(s) in workspace"]}),(0,t.jsx)("div",{className:"table-wrap",style:{marginTop:12},children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsxs)("tr",{children:[(0,t.jsx)("th",{children:"Name"}),(0,t.jsx)("th",{children:"Status"}),(0,t.jsx)("th",{children:"Type"}),(0,t.jsx)("th",{children:"Created"}),(0,t.jsx)("th",{})]})}),(0,t.jsx)("tbody",{children:[...s].sort((e,s)=>new Date(s.createdAt)-new Date(e.createdAt)).map(e=>{var s;return(0,t.jsxs)("tr",{style:{background:e.id===n?"var(--surface-alt)":""},children:[(0,t.jsxs)("td",{children:[(0,t.jsx)("strong",{children:e.name}),e.id===n?(0,t.jsx)("span",{className:"muted",style:{fontSize:11,marginLeft:6},children:"(current)"}):""]}),(0,t.jsx)("td",{children:(0,t.jsx)(p,{className:null==(s=e.status)?void 0:s.toLowerCase(),children:e.status})}),(0,t.jsx)("td",{style:{fontSize:12},children:e.projectType}),(0,t.jsx)("td",{style:{fontSize:12},children:new Date(e.createdAt).toLocaleDateString()}),(0,t.jsxs)("td",{style:{textAlign:"right",whiteSpace:"nowrap"},children:[e.id!==n&&(0,t.jsx)("button",{className:"button secondary small",style:{marginRight:6},onClick:()=>{c(e.id),r()},children:"Open"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff"},onClick:()=>j(e),disabled:u===e.id,children:"✕"})]})]},e.id)})})]})}),!s.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No projects yet"})}),(0,t.jsx)("div",{className:"modal-actions",children:(0,t.jsx)("button",{className:"button secondary small",onClick:r,children:"Close"})})]}),h&&(0,t.jsx)("div",{className:"modal-overlay",onClick:()=>j(null),children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:380},children:[(0,t.jsxs)("h3",{children:['Delete "',h.name,'"?']}),(0,t.jsx)("p",{style:{fontSize:13,color:"var(--muted)"},children:"This permanently deletes the project and all its risks, mitigations, and data."}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:()=>j(null),children:"Cancel"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff"},onClick:g,disabled:u,children:u?"Deleting...":"Delete Project"})]})]})}),x&&(0,t.jsx)(A,{workspaceId:a,onClose:()=>v(!1),onSaved:()=>{v(!1),d()},toast:o})]})}function E(){let e=(0,n.useRouter)(),s=(0,n.useSearchParams)(),a=c.includes(s.get("tab"))?s.get("tab"):"Overview",[d,o]=(0,l.useState)(null),[u,m]=(0,l.useState)([]),[j,x]=(0,l.useState)(s.get("projectId")||null),[p,v]=(0,l.useState)(null),[g,y]=(0,l.useState)(!0),[b,f]=(0,l.useState)(null),[k,P]=(0,l.useState)(0),[A,E]=(0,l.useState)(!1),[F,O]=(0,l.useState)(!1),[L,z]=(0,l.useState)(null),{toasts:M,add:H}=function(){let[e,s]=(0,l.useState)([]);return{toasts:e,add:(0,l.useCallback)(function(e){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"success",t=Date.now()+Math.random();s(s=>[...s,{id:t,message:e,type:a}]),setTimeout(()=>s(e=>e.filter(e=>e.id!==t)),3e3)},[])}}(),_=(0,l.useCallback)(()=>P(e=>e+1),[]),W=(0,l.useCallback)(async e=>{y(!0),f(null);try{var s,a;let t=await i.FH.get("/api/auth/session");if(!(null==t?void 0:t.authenticated)){f("Not authenticated."),y(!1);return}let l=null==(s=t.memberships)?void 0:s[0];if(!l){f("No organization membership found."),y(!1);return}let n=l.organizationId,r=null==(a=(await i.FH.get("/api/workspaces?organizationId=".concat(n))).workspaces)?void 0:a[0];if(!r){f("No workspace found — create one to get started."),y(!1);return}z(r.id);let c=(await i.FH.get("/api/workspaces/".concat(r.id,"/projects"))).projects||[];if(!c.length){f("No project found — create a project to get started."),y(!1);return}m(c);let d=e?c.find(s=>s.id===e):c[0];if(!d){f("Project not found."),y(!1);return}o(d),e||x(d.id);let u=await i.FH.get("/api/projects/".concat(d.id,"/dashboard"));v(u.dashboard),y(!1)}catch(e){f(e.message||"Failed to load dashboard data"),y(!1)}},[]);(0,l.useEffect)(()=>{W(j)},[W,k,j]);let G=s=>{x(s),e.push("/dashboard?tab=".concat(a,"&projectId=").concat(s))};return g&&"Integrations"!==a?(0,t.jsx)("div",{className:"shell-loading",children:(0,t.jsx)("div",{className:"spinner"})}):b&&"Integrations"!==a?(0,t.jsxs)("div",{className:"empty-state",children:[(0,t.jsx)("div",{className:"empty-icon",children:"!"}),(0,t.jsx)("p",{children:b}),(0,t.jsx)("button",{className:"button secondary small",style:{marginTop:12},onClick:()=>P(e=>e+1),children:"Retry"})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsx)("div",{style:{display:"flex",alignItems:"center",gap:10},children:(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6},children:[(0,t.jsx)("select",{className:"input",value:(null==d?void 0:d.id)||"",onChange:e=>G(e.target.value),style:{fontSize:16,fontWeight:700,width:"auto",minWidth:200,border:"none",background:"transparent",cursor:"pointer"},children:u.map(e=>(0,t.jsxs)("option",{value:e.id,children:[e.name," ","Active"!==e.status?"(".concat(e.status,")"):""]},e.id))}),(0,t.jsx)("button",{className:"button secondary small",style:{fontSize:14,padding:"2px 8px"},onClick:()=>E(!0),title:"Project settings",children:"⚙"}),(0,t.jsx)("button",{className:"button secondary small",onClick:()=>O(!0),children:"Projects"})]}),(0,t.jsx)("p",{className:"muted",style:{margin:0},children:(null==d?void 0:d.subtitle)||(null==d?void 0:d.description)||""})]})}),(0,t.jsxs)("div",{className:"dash-actions",children:[(0,t.jsx)("a",{href:"/api/projects/".concat(null==d?void 0:d.id,"/reports/executive.html"),className:"button secondary small",target:"_blank",children:"Report"}),(0,t.jsx)("a",{href:"/api/projects/".concat(null==d?void 0:d.id,"/reports/risk-register.csv"),className:"button secondary small",target:"_blank",children:"CSV"})]})]}),(0,t.jsx)("div",{className:"tabs",children:c.map(s=>(0,t.jsx)("button",{className:"tab ".concat(a===s?"active":""),onClick:()=>e.push("/dashboard?tab=".concat(s).concat(d?"&projectId=".concat(d.id):"")),children:s},s))}),"Overview"===a&&(0,t.jsx)(r,{name:"Overview",children:(0,t.jsx)(N,{project:d,dashboard:p})},"overview"),"Risks"===a&&(0,t.jsx)(r,{name:"Risks",children:(0,t.jsx)(C,{project:d,dashboard:p,toast:{add:H},onRefresh:_})},"risks"),"Mitigations"===a&&(0,t.jsx)(r,{name:"Mitigations",children:(0,t.jsx)(S,{project:d,dashboard:p,toast:{add:H},onRefresh:_})},"mitigations"),"Gate"===a&&(0,t.jsx)(r,{name:"Gate",children:(0,t.jsx)(w,{project:d,dashboard:p,toast:{add:H},onRefresh:_})},"gate"),"Integrations"===a&&(0,t.jsx)(r,{name:"Integrations",children:(0,t.jsx)(D,{project:d,dashboard:p,toast:{add:H},onRefresh:_})},"integrations"),"Audit"===a&&(0,t.jsx)(r,{name:"Audit",children:(0,t.jsx)(T,{project:d,toast:{add:H}})},"audit"),A&&(0,t.jsx)(R,{project:d,onClose:()=>E(!1),onSaved:()=>{E(!1),_()},toast:{add:H}}),F&&(0,t.jsx)(I,{projects:u,workspaceId:L,currentProjectId:null==d?void 0:d.id,onClose:()=>O(!1),onSwitch:G,onSaved:()=>{O(!1),_()},toast:{add:H}}),(0,t.jsx)(h,{toasts:M})]})}},6282:(e,s,a)=>{"use strict";async function t(e,s,a){var t;let l={method:e,headers:{"Content-Type":"application/json"}};a&&(l.body=JSON.stringify(a));let n=await fetch("".concat("").concat(s),l),i=(null==(t=n.headers.get("content-type"))?void 0:t.includes("application/json"))?await n.json():await n.text();if(!n.ok)throw Error((null==i?void 0:i.error)||(null==i?void 0:i.message)||"Request failed (".concat(n.status,")"));return i}a.d(s,{FH:()=>l,Ht:()=>n,ri:()=>i});let l={get:e=>t("GET",e),post:(e,s)=>t("POST",e,s),put:(e,s)=>t("PUT",e,s),patch:(e,s)=>t("PATCH",e,s),del:e=>t("DELETE",e)};async function n(){try{let e=await l.get("/api/auth/session");return e.user||e.actor||null}catch(e){return null}}async function i(){await l.post("/api/auth/logout"),window.location.href="/"}}},e=>{e.O(0,[8441,1255,7358],()=>e(e.s=646)),_N_E=e.O()}]);           (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5105],{63:(e,s,a)=>{"use strict";var t=a(7260);a.o(t,"useRouter")&&a.d(s,{useRouter:function(){return t.useRouter}}),a.o(t,"useSearchParams")&&a.d(s,{useSearchParams:function(){return t.useSearchParams}})},646:(e,s,a)=>{Promise.resolve().then(a.bind(a,3399))},3399:(e,s,a)=>{"use strict";a.r(s),a.d(s,{default:()=>F});var t=a(5155),l=a(2115),n=a(63),i=a(6282);class r extends l.Component{static getDerivedStateFromError(e){return{error:e}}render(){if(this.state.error){let{fallback:e}=this.props;return e?"function"==typeof e?e(this.state.error):e:(0,t.jsxs)("div",{className:"empty-state",children:[(0,t.jsx)("div",{className:"empty-icon",children:"!"}),(0,t.jsxs)("p",{children:["Something went wrong in ",this.props.name||"this section","."]}),(0,t.jsx)("p",{className:"muted",style:{fontSize:12,marginTop:4},children:this.state.error.message}),(0,t.jsx)("button",{className:"button secondary small",style:{marginTop:12},onClick:()=>{var e,s;this.setState({error:null}),null==(e=(s=this.props).onRetry)||e.call(s)},children:"Retry"})]})}return this.props.children}constructor(e){super(e),this.state={error:null}}}let c=["Overview","Projects","Risks","Mitigations","Gate","Integrations","Audit"],d=["Technical","Governance","Legal","Ethical","Operational"],o=["Design","Development","Testing","Deployment"],u=["OPEN","IN_MITIGATION","ACCEPTED","CLOSED"],m=["NOT_STARTED","IN_PROGRESS","DONE","REJECTED"];function h(e){let{toasts:s}=e;return s.length?(0,t.jsx)("div",{className:"toast-container",children:s.map(e=>(0,t.jsx)("div",{className:"toast ".concat(e.type),children:e.message},e.id))}):null}function j(e){let{value:s,onChange:a,placeholder:l}=e;return(0,t.jsxs)("div",{className:"search-wrap",children:[(0,t.jsx)("span",{className:"search-icon",children:"⌕"}),(0,t.jsx)("input",{className:"input",value:s,onChange:e=>a(e.target.value),placeholder:l||"Search..."})]})}function x(e,s,a){return s?[...e].sort((e,t)=>{let l=e[s],n=t[s];if(null==l)return 1;if(null==n)return -1;let i="number"==typeof l?l-n:String(l).localeCompare(String(n));return"asc"===a?i:-i}):e}function p(e){let{children:s,className:a}=e;return(0,t.jsx)("span",{className:"badge ".concat(a||""),children:s})}function v(e){let{label:s,children:a}=e;return(0,t.jsxs)("div",{style:{marginBottom:10},children:[(0,t.jsx)("label",{style:{display:"block",fontSize:12,color:"var(--muted)",marginBottom:3},children:s}),a]})}function g(e){let{value:s,onChange:a,type:l="text",min:n,max:i,style:r}=e;return(0,t.jsx)("input",{className:"input",type:l,value:s,onChange:e=>a(e.target.value),min:n,max:i,style:{width:"100%",...r}})}function y(e){let{value:s,onChange:a,options:l}=e;return(0,t.jsxs)("select",{className:"input",value:s,onChange:e=>a(e.target.value),style:{width:"100%"},children:[(0,t.jsx)("option",{value:"",children:"— Select —"}),(l||[]).map(e=>{let s="object"==typeof e?e.value:e,a="object"==typeof e?e.label:e;return(0,t.jsx)("option",{value:s,children:a},s)})]})}function b(e){let{label:s,onConfirm:a,onCancel:l,deleting:n}=e;return(0,t.jsx)("div",{className:"modal-overlay",onClick:l,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:380},children:[(0,t.jsxs)("h3",{children:["Delete ",s,"?"]}),(0,t.jsx)("p",{style:{fontSize:13,color:"var(--muted)"},children:"This cannot be undone."}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:l,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff"},onClick:a,disabled:n,children:n?"Deleting...":"Delete"})]})]})})}function N(e){let{project:s,dashboard:a}=e,n=(0,l.useMemo)(()=>{var e,s,t,l,n,i,r,c,d,o,u,m,h,j,x,p,v,g,y;return a?[{label:"Overall Score",value:null!=(p=null==(e=a.summary)?void 0:e.overallScore)?p:"-",cls:(null==(s=a.summary)?void 0:s.overallScore)>=75?"bad":(null==(t=a.summary)?void 0:t.overallScore)>=50?"warn":"good",sub:"Risk level: ".concat((null==(l=a.summary)?void 0:l.riskLevel)||"-")},{label:"Deployment Gate",value:null!=(v=null==(n=a.summary)?void 0:n.gateStatus)?v:"-",cls:(null==(i=a.summary)?void 0:i.gateStatus)==="Ready"?"good":(null==(r=a.summary)?void 0:r.gateStatus)==="Warning"?"warn":"bad",sub:(null==(c=a.gate)?void 0:c.message)||""},{label:"Open Risks",value:null!=(g=null==(d=a.summary)?void 0:d.openRisks)?g:0,cls:((null==(o=a.summary)?void 0:o.openRisks)||0)>5?"bad":((null==(u=a.summary)?void 0:u.openRisks)||0)>2?"warn":"good",sub:"".concat((null==(m=a.summary)?void 0:m.totalRisks)||0," total risks")},{label:"Mitigation",value:"".concat(null!=(y=null==(h=a.summary)?void 0:h.mitigationCompletion)?y:0,"%"),cls:40>((null==(j=a.summary)?void 0:j.mitigationCompletion)||0)?"bad":70>((null==(x=a.summary)?void 0:x.mitigationCompletion)||0)?"warn":"good",sub:"Average active-risk completion"}]:[]},[a]);return a?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{className:"grid",style:{gridTemplateColumns:"repeat(auto-fit, minmax(200px, 1fr))"},children:n.map(e=>(0,t.jsxs)("div",{className:"metric-card",children:[(0,t.jsx)("h3",{children:e.label}),(0,t.jsx)("div",{className:"metric-value ".concat(e.cls),children:e.value}),(0,t.jsx)("div",{className:"metric-sub",children:e.sub})]},e.label))}),(0,t.jsxs)("div",{className:"grid",style:{gridTemplateColumns:"1fr 1fr",marginTop:18},children:[(0,t.jsxs)("div",{className:"panel",children:[(0,t.jsx)("h2",{children:"Dimensions"}),(a.dimensions||[]).map(e=>(0,t.jsxs)("div",{style:{marginBottom:12},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:4},children:[(0,t.jsx)("span",{style:{fontSize:13},children:e.name}),(0,t.jsx)("strong",{style:{fontSize:13},children:e.score})]}),(0,t.jsx)("div",{className:"bar-wrap",children:(0,t.jsx)("div",{className:"bar-fill",style:{width:"".concat(Math.min(e.score,100),"%"),background:e.score>=50?"var(--danger)":e.score>=25?"var(--warn)":"var(--accent)"}})})]},e.name))]}),(0,t.jsxs)("div",{className:"panel",children:[(0,t.jsx)("h2",{children:"Lifecycle"}),(a.lifecycle||[]).map(e=>(0,t.jsxs)("div",{style:{marginBottom:12},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:4},children:[(0,t.jsx)("span",{style:{fontSize:13},children:e.name}),(0,t.jsxs)("span",{className:"muted",style:{fontSize:12},children:[e.openRisks," open"]})]}),(0,t.jsx)("div",{className:"bar-wrap",children:(0,t.jsx)("div",{className:"bar-fill",style:{width:"".concat(Math.min(e.riskScore||0,100),"%"),background:(e.riskScore||0)>=50?"var(--danger)":(e.riskScore||0)>=25?"var(--warn)":"var(--accent)"}})})]},e.name))]})]})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading dashboard data..."})})}function f(e){let{project:s,onClose:a,onSaved:n,toast:r}=e,[c,u]=(0,l.useState)(!1),[m,h]=(0,l.useState)({title:"",description:"",dimension:"",domain:"",lifecyclePhase:"",probability:50,impact:50,detectability:50,ownerDisplayName:""}),j=e=>s=>h(a=>({...a,[e]:s})),x=async()=>{if(!m.title.trim())return void r.add("Title is required","error");if(!m.dimension)return void r.add("Dimension is required","error");u(!0);try{await i.FH.post("/api/projects/".concat(s.id,"/risks"),m),r.add("Risk created"),n()}catch(e){r.add(e.message||"Failed to create risk","error")}finally{u(!1)}};return(0,t.jsx)("div",{className:"modal-overlay",onClick:a,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:500},children:[(0,t.jsx)("h2",{children:"New Risk"}),(0,t.jsx)(v,{label:"Title *",children:(0,t.jsx)(g,{value:m.title,onChange:j("title")})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:m.description,onChange:e=>j("description")(e.target.value),rows:3,style:{width:"100%",resize:"vertical"}})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Dimension *",children:(0,t.jsx)(y,{value:m.dimension,onChange:j("dimension"),options:d})}),(0,t.jsx)(v,{label:"Domain",children:(0,t.jsx)(g,{value:m.domain,onChange:j("domain")})})]}),(0,t.jsx)(v,{label:"Lifecycle Phase",children:(0,t.jsx)(y,{value:m.lifecyclePhase,onChange:j("lifecyclePhase"),options:o})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Probability",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:m.probability,onChange:j("probability")})}),(0,t.jsx)(v,{label:"Impact",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:m.impact,onChange:j("impact")})}),(0,t.jsx)(v,{label:"Detectability",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:m.detectability,onChange:j("detectability")})})]}),(0,t.jsx)(v,{label:"Owner",children:(0,t.jsx)(g,{value:m.ownerDisplayName,onChange:j("ownerDisplayName")})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:a,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:x,disabled:c,children:c?"Saving...":"Create Risk"})]})]})})}function C(e){let{project:s,dashboard:a,toast:n,onRefresh:r}=e,[c,m]=(0,l.useState)(""),[h,N]=(0,l.useState)("normalizedScore"),[C,k]=(0,l.useState)("desc"),[w,S]=(0,l.useState)(0),[P,D]=(0,l.useState)(null),[T,R]=(0,l.useState)(!1),[A,I]=(0,l.useState)(!1),[E,F]=(0,l.useState)({}),[L,z]=(0,l.useState)(null),[O,M]=(0,l.useState)(null),[H,_]=(0,l.useState)(!1),W=(0,l.useMemo)(()=>(null==a?void 0:a.topRisks)?x(a.topRisks,h,C):[],[a,h,C]),G=(0,l.useMemo)(()=>{if(!c)return W;let e=c.toLowerCase();return W.filter(s=>(s.title||"").toLowerCase().includes(e)||(s.dimension||"").toLowerCase().includes(e)||(s.ownerDisplayName||"").toLowerCase().includes(e))},[W,c]),q=G.slice(0,(w+1)*20),B=async(e,s)=>{z(e);try{await i.FH.patch("/api/risks/".concat(e),{status:s}),n.add("Risk status updated to ".concat(s)),D(null),r()}catch(e){n.add(e.message,"error")}finally{z(null)}},J=async()=>{if(!E.title.trim())return void n.add("Title is required","error");z("edit");try{await i.FH.patch("/api/risks/".concat(P.id),E),n.add("Risk updated"),D(null),r()}catch(e){n.add(e.message||"Failed to update","error")}finally{z(null)}},U=async()=>{_(!0);try{await i.FH.del("/api/risks/".concat(O.id)),n.add("Risk deleted"),M(null),D(null),r()}catch(e){n.add(e.message||"Failed to delete","error")}finally{_(!1)}};return a?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{style:{display:"flex",gap:8,marginBottom:12},children:[(0,t.jsx)(j,{value:c,onChange:m,placeholder:"Search risks by title, dimension, owner..."}),(0,t.jsx)("button",{className:"button small",onClick:()=>R(!0),children:"+ New Risk"})]}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsx)("tr",{children:[{key:"id",label:"ID"},{key:"title",label:"Risk"},{key:"dimension",label:"Dimension"},{key:"lifecyclePhase",label:"Phase"},{key:"normalizedScore",label:"Score"},{key:"residualScore",label:"Residual"},{key:"status",label:"Status"},{key:"ownerDisplayName",label:"Owner"}].map(e=>(0,t.jsxs)("th",{className:"sortable",onClick:()=>{var s;h===(s=e.key)?k(e=>"asc"===e?"desc":"asc"):(N(s),k("asc"))},children:[e.label," ",h===e.key?"asc"===C?"▲":"▼":""]},e.key))})}),(0,t.jsx)("tbody",{children:q.map(e=>{var s,a,l;return(0,t.jsxs)("tr",{onClick:()=>{var s,a,t;D(e),F({title:e.title||"",description:e.description||"",dimension:e.dimension||"",domain:e.domain||"",lifecyclePhase:e.lifecyclePhase||"",probability:null!=(s=e.probability)?s:50,impact:null!=(a=e.impact)?a:50,detectability:null!=(t=e.detectability)?t:50,ownerDisplayName:e.ownerDisplayName||""}),I(!1),M(null)},children:[(0,t.jsx)("td",{style:{fontFamily:"monospace",fontSize:12},children:null==(s=e.id)?void 0:s.slice(0,8)}),(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.title})}),(0,t.jsx)("td",{children:(0,t.jsx)(p,{className:null==(a=e.dimension)?void 0:a.toLowerCase(),children:e.dimension})}),(0,t.jsx)("td",{style:{fontSize:12},children:e.lifecyclePhase}),(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.normalizedScore})}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{style:{color:e.residualScore>=50?"var(--danger)":e.residualScore>=25?"var(--warn)":"var(--accent)"},children:e.residualScore})}),(0,t.jsx)("td",{children:(0,t.jsx)(p,{className:null==(l=e.status)?void 0:l.toLowerCase().replace(/\s+/g,"-"),children:e.status})}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{className:"muted",children:e.ownerDisplayName||"-"})})]},e.id)})})]})}),G.length>q.length&&(0,t.jsx)("div",{style:{textAlign:"center",marginTop:12},children:(0,t.jsxs)("button",{className:"button secondary small",onClick:()=>S(e=>e+1),children:["Show more (",G.length-q.length," remaining)"]})}),!G.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No risks match your search"})}),T&&(0,t.jsx)(f,{project:s,onClose:()=>R(!1),onSaved:()=>{R(!1),r()},toast:n}),P&&!O&&(0,t.jsx)("div",{className:"modal-overlay",onClick:()=>D(null),children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:520},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"},children:[(0,t.jsx)("h2",{style:{margin:0},children:P.title}),(0,t.jsx)("button",{className:"button secondary small",onClick:()=>I(!A),children:A?"View":"Edit"})]}),A?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{style:{marginTop:12},children:[(0,t.jsx)(v,{label:"Title *",children:(0,t.jsx)(g,{value:E.title,onChange:e=>F(s=>({...s,title:e}))})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:E.description,onChange:e=>F(s=>({...s,description:e.target.value})),rows:2,style:{width:"100%",resize:"vertical"}})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Dimension",children:(0,t.jsx)(y,{value:E.dimension,onChange:e=>F(s=>({...s,dimension:e})),options:d})}),(0,t.jsx)(v,{label:"Domain",children:(0,t.jsx)(g,{value:E.domain,onChange:e=>F(s=>({...s,domain:e}))})})]}),(0,t.jsx)(v,{label:"Lifecycle Phase",children:(0,t.jsx)(y,{value:E.lifecyclePhase,onChange:e=>F(s=>({...s,lifecyclePhase:e})),options:o})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Probability",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:E.probability,onChange:e=>F(s=>({...s,probability:Number(e)}))})}),(0,t.jsx)(v,{label:"Impact",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:E.impact,onChange:e=>F(s=>({...s,impact:Number(e)}))})}),(0,t.jsx)(v,{label:"Detectability",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:E.detectability,onChange:e=>F(s=>({...s,detectability:Number(e)}))})})]}),(0,t.jsx)(v,{label:"Owner",children:(0,t.jsx)(g,{value:E.ownerDisplayName,onChange:e=>F(s=>({...s,ownerDisplayName:e}))})})]}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:()=>D(null),children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:J,disabled:"edit"===L,children:"edit"===L?"Saving...":"Save Changes"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff",marginLeft:"auto"},onClick:()=>M(P),children:"Delete"})]})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:12,fontSize:13,marginTop:12},children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Dimension"}),(0,t.jsx)("br",{}),P.dimension]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Phase"}),(0,t.jsx)("br",{}),P.lifecyclePhase]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Probability"}),(0,t.jsx)("br",{}),P.probability]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Impact"}),(0,t.jsx)("br",{}),P.impact]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Detectability"}),(0,t.jsx)("br",{}),P.detectability]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Score"}),(0,t.jsx)("br",{}),(0,t.jsx)("strong",{children:P.normalizedScore})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Residual"}),(0,t.jsx)("br",{}),P.residualScore]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Owner"}),(0,t.jsx)("br",{}),P.ownerDisplayName||"-"]})]}),P.description&&(0,t.jsxs)("div",{style:{marginTop:12,fontSize:13},children:[(0,t.jsx)("span",{className:"muted",children:"Description"}),(0,t.jsx)("br",{}),P.description]}),(0,t.jsxs)("div",{style:{marginTop:16},children:[(0,t.jsx)("span",{className:"muted",style:{fontSize:12},children:"Update status:"}),(0,t.jsx)("div",{style:{display:"flex",gap:6,marginTop:6,flexWrap:"wrap"},children:u.map(e=>(0,t.jsx)("button",{className:"button small ".concat("OPEN"===e?"secondary":""),onClick:()=>B(P.id,e),disabled:L===P.id,children:e.replace("_"," ")},e))})]}),(0,t.jsx)("div",{className:"modal-actions",children:(0,t.jsx)("button",{className:"button secondary small",onClick:()=>D(null),children:"Close"})})]})]})}),O&&(0,t.jsx)(b,{label:"this risk",onConfirm:U,onCancel:()=>M(null),deleting:H})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading..."})})}function k(e){let{project:s,risks:a,onClose:n,onSaved:r,toast:c}=e,[d,o]=(0,l.useState)(!1),[u,h]=(0,l.useState)({riskId:"",title:"",description:"",status:"NOT_STARTED",progressPercent:0,effectivenessPercent:0,dueDate:"",ownerDisplayName:""}),j=e=>s=>h(a=>({...a,[e]:s})),x=async()=>{if(!u.title.trim())return void c.add("Title is required","error");if(!u.riskId)return void c.add("Please select a risk","error");o(!0);try{let e={...u,progressPercent:Number(u.progressPercent),effectivenessPercent:Number(u.effectivenessPercent)};e.dueDate?e.dueDate=new Date(e.dueDate).toISOString():delete e.dueDate,await i.FH.post("/api/risks/".concat(u.riskId,"/mitigations"),e),c.add("Mitigation created"),r()}catch(e){c.add(e.message||"Failed to create mitigation","error")}finally{o(!1)}};return(0,t.jsx)("div",{className:"modal-overlay",onClick:n,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:500},children:[(0,t.jsx)("h2",{children:"New Mitigation"}),(0,t.jsx)(v,{label:"Risk *",children:(0,t.jsx)(y,{value:u.riskId,onChange:j("riskId"),options:(a||[]).map(e=>({value:e.id,label:e.title}))})}),(0,t.jsx)(v,{label:"Title *",children:(0,t.jsx)(g,{value:u.title,onChange:j("title")})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:u.description,onChange:e=>j("description")(e.target.value),rows:2,style:{width:"100%",resize:"vertical"}})}),(0,t.jsx)(v,{label:"Status",children:(0,t.jsx)(y,{value:u.status,onChange:j("status"),options:m})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Progress %",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:u.progressPercent,onChange:j("progressPercent")})}),(0,t.jsx)(v,{label:"Effectiveness %",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:u.effectivenessPercent,onChange:j("effectivenessPercent")})})]}),(0,t.jsx)(v,{label:"Due Date",children:(0,t.jsx)(g,{type:"date",value:u.dueDate,onChange:j("dueDate")})}),(0,t.jsx)(v,{label:"Owner",children:(0,t.jsx)(g,{value:u.ownerDisplayName,onChange:j("ownerDisplayName")})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:n,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:x,disabled:d,children:d?"Saving...":"Create Mitigation"})]})]})})}function w(e){let{project:s,dashboard:a,toast:n,onRefresh:r}=e,[c,d]=(0,l.useState)(""),[o,u]=(0,l.useState)("progressPercent"),[h,N]=(0,l.useState)("asc"),[f,C]=(0,l.useState)(!1),[w,S]=(0,l.useState)(null),[P,D]=(0,l.useState)(!1),[T,R]=(0,l.useState)({}),[A,I]=(0,l.useState)(null),[E,F]=(0,l.useState)(null),[L,z]=(0,l.useState)(!1),O=(0,l.useMemo)(()=>(null==a?void 0:a.mitigations)?x(a.mitigations,o,h):[],[a,o,h]),M=(0,l.useMemo)(()=>(null==a?void 0:a.topRisks)?a.topRisks:[],[a]),H=(0,l.useMemo)(()=>{if(!c)return O;let e=c.toLowerCase();return O.filter(s=>(s.title||"").toLowerCase().includes(e)||(s.riskTitle||"").toLowerCase().includes(e))},[O,c]),_=async()=>{if(!T.title.trim())return void n.add("Title is required","error");I("edit");try{let e={...T,progressPercent:Number(T.progressPercent),effectivenessPercent:Number(T.effectivenessPercent)};e.dueDate?e.dueDate=new Date(e.dueDate).toISOString():e.dueDate=null,await i.FH.patch("/api/mitigations/".concat(w.id),e),n.add("Mitigation updated"),S(null),r()}catch(e){n.add(e.message||"Failed to update","error")}finally{I(null)}},W=async()=>{z(!0);try{await i.FH.del("/api/mitigations/".concat(E.id)),n.add("Mitigation deleted"),F(null),S(null),r()}catch(e){n.add(e.message||"Failed to delete","error")}finally{z(!1)}};return a?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{style:{display:"flex",gap:8,marginBottom:12},children:[(0,t.jsx)(j,{value:c,onChange:d,placeholder:"Search mitigations..."}),(0,t.jsx)("button",{className:"button small",onClick:()=>C(!0),children:"+ New Mitigation"})]}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsx)("tr",{children:[{key:"title",label:"Title"},{key:"riskTitle",label:"Risk"},{key:"status",label:"Status"},{key:"progressPercent",label:"Progress"},{key:"effectivenessPercent",label:"Effectiveness"},{key:"ownerDisplayName",label:"Owner"}].map(e=>(0,t.jsxs)("th",{className:"sortable",onClick:()=>{var s;o===(s=e.key)?N(e=>"asc"===e?"desc":"asc"):(u(s),N("asc"))},children:[e.label," ",o===e.key?"asc"===h?"▲":"▼":""]},e.key))})}),(0,t.jsx)("tbody",{children:H.slice(0,50).map(e=>{var s;return(0,t.jsxs)("tr",{onClick:()=>{var s,a;S(e),R({title:e.title||"",description:e.description||"",status:e.status||"NOT_STARTED",progressPercent:null!=(s=e.progressPercent)?s:0,effectivenessPercent:null!=(a=e.effectivenessPercent)?a:0,dueDate:e.dueDate?e.dueDate.slice(0,10):"",ownerDisplayName:e.ownerDisplayName||""}),D(!0),F(null)},style:{cursor:"pointer"},children:[(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.title})}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{className:"muted",children:e.riskTitle})}),(0,t.jsx)("td",{children:(0,t.jsx)(p,{className:null==(s=e.status)?void 0:s.toLowerCase().replace(/\s+/g,"-"),children:e.status})}),(0,t.jsx)("td",{children:(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8},children:[(0,t.jsx)("div",{className:"bar-wrap",style:{flex:1,maxWidth:80},children:(0,t.jsx)("div",{className:"bar-fill",style:{width:"".concat(e.progressPercent||0,"%"),background:(e.progressPercent||0)>=80?"var(--accent)":(e.progressPercent||0)>=30?"var(--warn)":"var(--danger)"}})}),e.progressPercent||0,"%"]})}),(0,t.jsxs)("td",{children:[e.effectivenessPercent||0,"%"]}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{className:"muted",children:e.ownerDisplayName||"-"})})]},e.id)})})]})}),!H.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No mitigations found"})}),f&&(0,t.jsx)(k,{project:s,risks:M,onClose:()=>C(!1),onSaved:()=>{C(!1),r()},toast:n}),w&&!E&&(0,t.jsx)("div",{className:"modal-overlay",onClick:()=>S(null),children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:500},children:[(0,t.jsx)("h2",{style:{margin:0},children:P?"Edit Mitigation":w.title}),(0,t.jsxs)("div",{style:{marginTop:12},children:[(0,t.jsx)(v,{label:"Title *",children:(0,t.jsx)(g,{value:T.title,onChange:e=>R(s=>({...s,title:e}))})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:T.description,onChange:e=>R(s=>({...s,description:e.target.value})),rows:2,style:{width:"100%",resize:"vertical"}})}),(0,t.jsx)(v,{label:"Status",children:(0,t.jsx)(y,{value:T.status,onChange:e=>R(s=>({...s,status:e})),options:m})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Progress %",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:T.progressPercent,onChange:e=>R(s=>({...s,progressPercent:Number(e)}))})}),(0,t.jsx)(v,{label:"Effectiveness %",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:T.effectivenessPercent,onChange:e=>R(s=>({...s,effectivenessPercent:Number(e)}))})})]}),(0,t.jsx)(v,{label:"Due Date",children:(0,t.jsx)(g,{type:"date",value:T.dueDate,onChange:e=>R(s=>({...s,dueDate:e}))})}),(0,t.jsx)(v,{label:"Owner",children:(0,t.jsx)(g,{value:T.ownerDisplayName,onChange:e=>R(s=>({...s,ownerDisplayName:e}))})})]}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:()=>S(null),children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:_,disabled:"edit"===A,children:"edit"===A?"Saving...":"Save Changes"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff",marginLeft:"auto"},onClick:()=>F(w),children:"Delete"})]})]})}),E&&(0,t.jsx)(b,{label:"this mitigation",onConfirm:W,onCancel:()=>F(null),deleting:L})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading..."})})}function S(e){var s,a,n;let{project:r,dashboard:c,toast:d,onRefresh:o}=e,[u,m]=(0,l.useState)(!1),[h,j]=(0,l.useState)(!1),[x,b]=(0,l.useState)({decision:"APPROVED",reviewerName:"",reason:""}),[N,f]=(0,l.useState)(!1),C=(null==c||null==(s=c.gate)?void 0:s.criteria)||[],k=(null==c||null==(a=c.summary)?void 0:a.gateStatus)||"Unknown",w=null==c||null==(n=c.gate)?void 0:n.id,S="Ready"===k?"good":"Warning"===k?"warn":"bad",P=async()=>{m(!0);try{await i.FH.post("/api/projects/".concat(r.id,"/gate/evaluate"),{}),d.add("Gate evaluated"),o()}catch(e){d.add(e.message||"Evaluation failed","error")}finally{m(!1)}},D=async()=>{if(!x.reviewerName.trim())return void d.add("Reviewer name is required","error");f(!0);try{await i.FH.post("/api/gates/".concat(w,"/decisions"),x),d.add("Decision submitted"),j(!1),o()}catch(e){d.add(e.message||"Failed to submit decision","error")}finally{f(!1)}};return c?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{children:"Deployment Gate"}),(0,t.jsx)("p",{className:"muted",children:"Gate evaluation for AI deployment readiness"})]}),(0,t.jsx)("div",{className:"dash-actions",children:(0,t.jsx)("div",{className:"metric-value ".concat(S),style:{fontSize:28},children:k})})]}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsxs)("tr",{children:[(0,t.jsx)("th",{children:"Criterion"}),(0,t.jsx)("th",{children:"Required"}),(0,t.jsx)("th",{children:"Actual"}),(0,t.jsx)("th",{children:"Status"})]})}),(0,t.jsx)("tbody",{children:C.map(e=>{var s;return(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.name})}),(0,t.jsx)("td",{children:e.required}),(0,t.jsx)("td",{children:e.actual}),(0,t.jsx)("td",{children:(0,t.jsx)(p,{className:null==(s=e.status)?void 0:s.toLowerCase(),children:e.status})})]},e.name)})})]})}),!C.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No gate criteria evaluated yet"})}),(0,t.jsxs)("div",{style:{marginTop:16,display:"flex",gap:8,flexWrap:"wrap"},children:[(0,t.jsx)("button",{className:"button small",onClick:P,disabled:u,children:u?"Evaluating...":"Evaluate Gate"}),w&&(0,t.jsx)("button",{className:"button secondary small",onClick:()=>j(!0),children:"Add Decision"}),(0,t.jsx)("a",{href:"/api/projects/".concat(null==r?void 0:r.id,"/gate/history"),className:"button secondary small",target:"_blank",children:"History (API)"})]}),h&&(0,t.jsx)("div",{className:"modal-overlay",onClick:()=>j(!1),children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:400},children:[(0,t.jsx)("h2",{children:"Gate Decision"}),(0,t.jsx)(v,{label:"Decision",children:(0,t.jsx)(y,{value:x.decision,onChange:e=>b(s=>({...s,decision:e})),options:["APPROVED","REJECTED","ACCEPTED","NEEDS_CHANGES"]})}),(0,t.jsx)(v,{label:"Reviewer Name *",children:(0,t.jsx)(g,{value:x.reviewerName,onChange:e=>b(s=>({...s,reviewerName:e}))})}),(0,t.jsx)(v,{label:"Reason",children:(0,t.jsx)("textarea",{className:"input",value:x.reason,onChange:e=>b(s=>({...s,reason:e.target.value})),rows:3,style:{width:"100%",resize:"vertical"}})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:()=>j(!1),children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:D,disabled:N,children:N?"Saving...":"Submit Decision"})]})]})})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading..."})})}function P(e){var s;let{project:a,dashboard:n,onClose:r,onSaved:c,toast:d}=e,[o,u]=(0,l.useState)(!1),[m,h]=(0,l.useState)({provider:"TRELLO",workspaceName:"",baseUrl:"",authMode:"API_KEY"}),j=e=>s=>h(a=>({...a,[e]:s})),x=(null==n||null==(s=n.gate)?void 0:s.workspaceId)||(null==a?void 0:a.workspaceId),p=async()=>{if(!m.workspaceName.trim())return void d.add("Workspace name is required","error");u(!0);try{await i.FH.post("/api/workspaces/".concat(x,"/integrations"),m),d.add("Integration created"),c()}catch(e){d.add(e.message||"Failed to create integration","error")}finally{u(!1)}};return(0,t.jsx)("div",{className:"modal-overlay",onClick:r,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:450},children:[(0,t.jsx)("h2",{children:"New Integration"}),(0,t.jsx)(v,{label:"Provider",children:(0,t.jsx)(y,{value:m.provider,onChange:j("provider"),options:["TRELLO","JIRA","ASANA","MICROSOFT_PLANNER"]})}),(0,t.jsx)(v,{label:"Workspace Name *",children:(0,t.jsx)(g,{value:m.workspaceName,onChange:j("workspaceName")})}),(0,t.jsx)(v,{label:"Base URL",children:(0,t.jsx)(g,{value:m.baseUrl,onChange:j("baseUrl")})}),(0,t.jsx)(v,{label:"Auth Mode",children:(0,t.jsx)(y,{value:m.authMode,onChange:j("authMode"),options:["API_KEY","OAUTH","BASIC"]})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:r,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:p,disabled:o,children:o?"Saving...":"Create Integration"})]})]})})}function D(e){let{project:s,dashboard:a,toast:n,onRefresh:i}=e,[r,c]=(0,l.useState)(!1),d=(null==a?void 0:a.integrations)||[];return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{children:"Integrations"}),(0,t.jsx)("p",{className:"muted",children:"Connect Trello, Jira, Asana, or Microsoft Planner"})]}),(0,t.jsx)("div",{className:"dash-actions",children:(0,t.jsx)("button",{className:"button small",onClick:()=>c(!0),children:"+ New Integration"})})]}),(0,t.jsx)("div",{className:"grid",style:{gridTemplateColumns:"repeat(auto-fit, minmax(240px, 1fr))"},children:["TRELLO","JIRA","ASANA","MICROSOFT_PLANNER"].map(e=>{let s=d.find(s=>s.provider===e);return(0,t.jsxs)("div",{className:"panel",style:{textAlign:"center"},children:[(0,t.jsx)("div",{style:{fontSize:32,marginBottom:8},children:"TRELLO"===e?"⊞":"JIRA"===e?"◆":"ASANA"===e?"◇":"▣"}),(0,t.jsx)("h3",{style:{margin:"0 0 4px"},children:e.replace("_"," ")}),(0,t.jsx)("p",{className:"muted",style:{fontSize:12,margin:"0 0 12px"},children:s?s.workspaceName:"Not configured"}),(0,t.jsx)("div",{style:{display:"flex",gap:6,justifyContent:"center"},children:s?(0,t.jsx)("a",{href:"/api/integrations/".concat(s.id),className:"button secondary small",target:"_blank",children:"Manage"}):(0,t.jsx)("button",{className:"button secondary small",onClick:()=>c(!0),children:"Configure"})})]},e)})}),r&&(0,t.jsx)(P,{project:s,dashboard:a,onClose:()=>c(!1),onSaved:()=>{c(!1),i()},toast:n}),!d.length&&(0,t.jsx)("div",{style:{marginTop:12},children:(0,t.jsx)("a",{href:"/api/integration-providers",className:"button secondary small",target:"_blank",children:"Integration providers (API)"})})]})}function T(e){let{project:s,toast:a}=e,[n,r]=(0,l.useState)([]),[c,d]=(0,l.useState)(!0),[o,u]=(0,l.useState)(null),m=(0,l.useCallback)(async()=>{if(s){d(!0),u(null);try{let e=await i.FH.get("/api/projects/".concat(s.id,"/audit"));r(e.auditEvents||[])}catch(e){u(e.message||"Failed to load audit log")}finally{d(!1)}}},[s]);return((0,l.useEffect)(()=>{m()},[m]),c)?(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading audit log..."})}):o?(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:o})}):n.length?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{children:"Audit Log"}),(0,t.jsx)("p",{className:"muted",children:"Project activity history"})]}),(0,t.jsx)("div",{className:"dash-actions",children:(0,t.jsx)("button",{className:"button secondary small",onClick:m,children:"Refresh"})})]}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsxs)("tr",{children:[(0,t.jsx)("th",{children:"Date"}),(0,t.jsx)("th",{children:"Action"}),(0,t.jsx)("th",{children:"Entity"}),(0,t.jsx)("th",{children:"Actor"}),(0,t.jsx)("th",{children:"Details"})]})}),(0,t.jsx)("tbody",{children:n.map(e=>{var s,a;return(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{style:{fontSize:12,whiteSpace:"nowrap"},children:new Date(e.createdAt).toLocaleString()}),(0,t.jsx)("td",{children:(0,t.jsx)(p,{className:null==(s=e.action)?void 0:s.toLowerCase().replace(/\s+/g,"-"),children:e.action})}),(0,t.jsxs)("td",{style:{fontSize:12},children:[e.entityType," ",(0,t.jsxs)("span",{className:"muted",children:["(",null==(a=e.entityId)?void 0:a.slice(0,8),")"]})]}),(0,t.jsx)("td",{style:{fontSize:12},children:e.actorUserId||"system"}),(0,t.jsx)("td",{style:{fontSize:12,maxWidth:300,overflow:"hidden",textOverflow:"ellipsis"},children:e.afterJson?JSON.stringify(e.afterJson).slice(0,80):"-"})]},e.id)})})]})})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No audit events recorded yet"})})}function R(e){let{projects:s,workspaceId:a,currentProjectId:n,onSwitch:r,onRefresh:c,toast:d}=e,[o,u]=(0,l.useState)(null),[m,h]=(0,l.useState)(null),[j,x]=(0,l.useState)(!1),v=async()=>{u(!0);try{await i.FH.del("/api/projects/".concat(m.id)),d.add('Project "'.concat(m.name,'" deleted')),h(null),c()}catch(e){d.add(e.message||"Failed to delete project","error")}finally{u(!1)}};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{children:"All Projects"}),(0,t.jsxs)("p",{className:"muted",children:[s.length," project(s) in workspace"]})]}),(0,t.jsx)("div",{className:"dash-actions",children:(0,t.jsx)("button",{className:"button small",onClick:()=>x(!0),children:"+ New Project"})})]}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsxs)("tr",{children:[(0,t.jsx)("th",{children:"Name"}),(0,t.jsx)("th",{children:"Status"}),(0,t.jsx)("th",{children:"Type"}),(0,t.jsx)("th",{children:"Created"}),(0,t.jsx)("th",{})]})}),(0,t.jsx)("tbody",{children:[...s].sort((e,s)=>new Date(s.createdAt)-new Date(e.createdAt)).map(e=>{var s;return(0,t.jsxs)("tr",{style:{background:e.id===n?"var(--surface-alt)":"",cursor:"pointer"},onClick:()=>r(e.id),children:[(0,t.jsxs)("td",{children:[(0,t.jsx)("strong",{children:e.name}),e.id===n?(0,t.jsx)("span",{className:"muted",style:{fontSize:11,marginLeft:6},children:"(current)"}):""]}),(0,t.jsx)("td",{children:(0,t.jsx)(p,{className:null==(s=e.status)?void 0:s.toLowerCase(),children:e.status})}),(0,t.jsx)("td",{style:{fontSize:12},children:e.projectType}),(0,t.jsx)("td",{style:{fontSize:12},children:new Date(e.createdAt).toLocaleDateString()}),(0,t.jsx)("td",{style:{textAlign:"right",whiteSpace:"nowrap"},children:(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff"},onClick:s=>{s.stopPropagation(),h(e)},disabled:o===e.id,children:"✕ Delete"})})]},e.id)})})]})}),!s.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No projects yet. Create one to get started."})}),j&&(0,t.jsx)(I,{workspaceId:a,onClose:()=>x(!1),onSaved:()=>{x(!1),c()},toast:d}),m&&(0,t.jsx)("div",{className:"modal-overlay",onClick:()=>h(null),children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:380},children:[(0,t.jsxs)("h3",{children:['Delete "',m.name,'"?']}),(0,t.jsx)("p",{style:{fontSize:13,color:"var(--muted)"},children:"This permanently deletes the project and all its risks, mitigations, and data."}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:()=>h(null),children:"Cancel"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff"},onClick:v,disabled:o,children:o?"Deleting...":"Delete Project"})]})]})})]})}function A(e){let{project:s,onClose:a,onSaved:n,toast:r}=e,[c,d]=(0,l.useState)(!1),[o,u]=(0,l.useState)({name:(null==s?void 0:s.name)||"",description:(null==s?void 0:s.description)||"",subtitle:(null==s?void 0:s.subtitle)||"",status:(null==s?void 0:s.status)||"Active"}),m=async()=>{if(!o.name.trim())return void r.add("Project name is required","error");d(!0);try{await i.FH.patch("/api/projects/".concat(s.id),o),r.add("Project updated"),n()}catch(e){r.add(e.message||"Failed to update project","error")}finally{d(!1)}};return(0,t.jsx)("div",{className:"modal-overlay",onClick:a,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:450},children:[(0,t.jsx)("h2",{children:"Project Settings"}),(0,t.jsx)(v,{label:"Name *",children:(0,t.jsx)(g,{value:o.name,onChange:e=>u(s=>({...s,name:e}))})}),(0,t.jsx)(v,{label:"Subtitle",children:(0,t.jsx)(g,{value:o.subtitle,onChange:e=>u(s=>({...s,subtitle:e}))})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:o.description,onChange:e=>u(s=>({...s,description:e.target.value})),rows:3,style:{width:"100%",resize:"vertical"}})}),(0,t.jsx)(v,{label:"Status",children:(0,t.jsx)(y,{value:o.status,onChange:e=>u(s=>({...s,status:e})),options:["Active","Archived","On Hold"]})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:a,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:m,disabled:c,children:c?"Saving...":"Save Changes"})]})]})})}function I(e){let{workspaceId:s,onClose:a,onSaved:n,toast:r}=e,[c,d]=(0,l.useState)(!1),[o,u]=(0,l.useState)({name:"",description:"",projectType:"AI-Enabler"}),m=async()=>{if(!o.name.trim())return void r.add("Project name is required","error");d(!0);try{await i.FH.post("/api/workspaces/".concat(s,"/projects"),o),r.add("Project created"),n()}catch(e){r.add(e.message||"Failed to create project","error")}finally{d(!1)}};return(0,t.jsx)("div",{className:"modal-overlay",onClick:a,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:450},children:[(0,t.jsx)("h2",{children:"New Project"}),(0,t.jsx)(v,{label:"Name *",children:(0,t.jsx)(g,{value:o.name,onChange:e=>u(s=>({...s,name:e}))})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:o.description,onChange:e=>u(s=>({...s,description:e.target.value})),rows:3,style:{width:"100%",resize:"vertical"}})}),(0,t.jsx)(v,{label:"Project Type",children:(0,t.jsx)(y,{value:o.projectType,onChange:e=>u(s=>({...s,projectType:e})),options:["AI-Enabler","GENERATIVE_AI","ML-Pipeline","Automation"]})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:a,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:m,disabled:c,children:c?"Saving...":"Create Project"})]})]})})}function E(e){let{projects:s,workspaceId:a,currentProjectId:n,onClose:r,onSwitch:c,onSaved:d,toast:o}=e,[u,m]=(0,l.useState)(null),[h,j]=(0,l.useState)(null),[x,v]=(0,l.useState)(!1),g=async()=>{m(!0);try{await i.FH.del("/api/projects/".concat(h.id)),o.add('Project "'.concat(h.name,'" deleted')),j(null),d()}catch(e){o.add(e.message||"Failed to delete project","error")}finally{m(!1)}};return(0,t.jsxs)("div",{className:"modal-overlay",onClick:r,children:[(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:700,maxHeight:"80vh",overflow:"auto"},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"},children:[(0,t.jsx)("h2",{style:{margin:0},children:"All Projects"}),(0,t.jsx)("button",{className:"button small",onClick:()=>v(!0),children:"+ New Project"})]}),(0,t.jsxs)("p",{className:"muted",style:{fontSize:12,marginTop:4},children:[s.length," project(s) in workspace"]}),(0,t.jsx)("div",{className:"table-wrap",style:{marginTop:12},children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsxs)("tr",{children:[(0,t.jsx)("th",{children:"Name"}),(0,t.jsx)("th",{children:"Status"}),(0,t.jsx)("th",{children:"Type"}),(0,t.jsx)("th",{children:"Created"}),(0,t.jsx)("th",{})]})}),(0,t.jsx)("tbody",{children:[...s].sort((e,s)=>new Date(s.createdAt)-new Date(e.createdAt)).map(e=>{var s;return(0,t.jsxs)("tr",{style:{background:e.id===n?"var(--surface-alt)":""},children:[(0,t.jsxs)("td",{children:[(0,t.jsx)("strong",{children:e.name}),e.id===n?(0,t.jsx)("span",{className:"muted",style:{fontSize:11,marginLeft:6},children:"(current)"}):""]}),(0,t.jsx)("td",{children:(0,t.jsx)(p,{className:null==(s=e.status)?void 0:s.toLowerCase(),children:e.status})}),(0,t.jsx)("td",{style:{fontSize:12},children:e.projectType}),(0,t.jsx)("td",{style:{fontSize:12},children:new Date(e.createdAt).toLocaleDateString()}),(0,t.jsxs)("td",{style:{textAlign:"right",whiteSpace:"nowrap"},children:[e.id!==n&&(0,t.jsx)("button",{className:"button secondary small",style:{marginRight:6},onClick:()=>{c(e.id),r()},children:"Open"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff"},onClick:()=>j(e),disabled:u===e.id,children:"✕"})]})]},e.id)})})]})}),!s.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No projects yet"})}),(0,t.jsx)("div",{className:"modal-actions",children:(0,t.jsx)("button",{className:"button secondary small",onClick:r,children:"Close"})})]}),h&&(0,t.jsx)("div",{className:"modal-overlay",onClick:()=>j(null),children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:380},children:[(0,t.jsxs)("h3",{children:['Delete "',h.name,'"?']}),(0,t.jsx)("p",{style:{fontSize:13,color:"var(--muted)"},children:"This permanently deletes the project and all its risks, mitigations, and data."}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:()=>j(null),children:"Cancel"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff"},onClick:g,disabled:u,children:u?"Deleting...":"Delete Project"})]})]})}),x&&(0,t.jsx)(I,{workspaceId:a,onClose:()=>v(!1),onSaved:()=>{v(!1),d()},toast:o})]})}function F(){let e=(0,n.useRouter)(),s=(0,n.useSearchParams)(),a=c.includes(s.get("tab"))?s.get("tab"):"Overview",[d,o]=(0,l.useState)(null),[u,m]=(0,l.useState)([]),[j,x]=(0,l.useState)(s.get("projectId")||null),[p,v]=(0,l.useState)(null),[g,y]=(0,l.useState)(!0),[b,f]=(0,l.useState)(null),[k,P]=(0,l.useState)(0),[I,F]=(0,l.useState)(!1),[L,z]=(0,l.useState)(!1),[O,M]=(0,l.useState)(null),{toasts:H,add:_}=function(){let[e,s]=(0,l.useState)([]);return{toasts:e,add:(0,l.useCallback)(function(e){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"success",t=Date.now()+Math.random();s(s=>[...s,{id:t,message:e,type:a}]),setTimeout(()=>s(e=>e.filter(e=>e.id!==t)),3e3)},[])}}(),W=(0,l.useCallback)(()=>P(e=>e+1),[]),G=(0,l.useCallback)(async e=>{y(!0),f(null);try{var s,a;let t=await i.FH.get("/api/auth/session");if(!(null==t?void 0:t.authenticated)){f("Not authenticated."),y(!1);return}let l=null==(s=t.memberships)?void 0:s[0];if(!l){f("No organization membership found."),y(!1);return}let n=l.organizationId,r=null==(a=(await i.FH.get("/api/workspaces?organizationId=".concat(n))).workspaces)?void 0:a[0];if(!r){f("No workspace found — create one to get started."),y(!1);return}M(r.id);let c=(await i.FH.get("/api/workspaces/".concat(r.id,"/projects"))).projects||[];if(!c.length){f("No project found — create a project to get started."),y(!1);return}m(c);let d=e?c.find(s=>s.id===e):c[0];if(!d){f("Project not found."),y(!1);return}o(d),e||x(d.id);let u=await i.FH.get("/api/projects/".concat(d.id,"/dashboard"));v(u.dashboard),y(!1)}catch(e){f(e.message||"Failed to load dashboard data"),y(!1)}},[]);(0,l.useEffect)(()=>{G(j)},[G,k,j]);let q=s=>{x(s),e.push("/dashboard?tab=".concat(a,"&projectId=").concat(s))};return g&&"Integrations"!==a?(0,t.jsx)("div",{className:"shell-loading",children:(0,t.jsx)("div",{className:"spinner"})}):b&&"Integrations"!==a?(0,t.jsxs)("div",{className:"empty-state",children:[(0,t.jsx)("div",{className:"empty-icon",children:"!"}),(0,t.jsx)("p",{children:b}),(0,t.jsx)("button",{className:"button secondary small",style:{marginTop:12},onClick:()=>P(e=>e+1),children:"Retry"})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsx)("div",{style:{display:"flex",alignItems:"center",gap:10},children:(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6},children:[(0,t.jsx)("select",{className:"input",value:(null==d?void 0:d.id)||"",onChange:e=>q(e.target.value),style:{fontSize:16,fontWeight:700,width:"auto",minWidth:200,border:"none",background:"transparent",cursor:"pointer"},children:u.map(e=>(0,t.jsxs)("option",{value:e.id,children:[e.name," ","Active"!==e.status?"(".concat(e.status,")"):""]},e.id))}),(0,t.jsx)("button",{className:"button secondary small",style:{fontSize:14,padding:"2px 8px"},onClick:()=>F(!0),title:"Project settings",children:"⚙"}),(0,t.jsx)("button",{className:"button secondary small",onClick:()=>z(!0),children:"Projects"})]}),(0,t.jsx)("p",{className:"muted",style:{margin:0},children:(null==d?void 0:d.subtitle)||(null==d?void 0:d.description)||""})]})}),(0,t.jsxs)("div",{className:"dash-actions",children:[(0,t.jsx)("a",{href:"/api/projects/".concat(null==d?void 0:d.id,"/reports/executive.html"),className:"button secondary small",target:"_blank",children:"Report"}),(0,t.jsx)("a",{href:"/api/projects/".concat(null==d?void 0:d.id,"/reports/risk-register.csv"),className:"button secondary small",target:"_blank",children:"CSV"})]})]}),(0,t.jsx)("div",{className:"tabs",children:c.map(s=>(0,t.jsx)("button",{className:"tab ".concat(a===s?"active":""),onClick:()=>e.push("/dashboard?tab=".concat(s).concat(d?"&projectId=".concat(d.id):"")),children:s},s))}),"Overview"===a&&(0,t.jsx)(r,{name:"Overview",children:(0,t.jsx)(N,{project:d,dashboard:p})},"overview"),"Projects"===a&&(0,t.jsx)(r,{name:"Projects",children:(0,t.jsx)(R,{projects:u,workspaceId:O,currentProjectId:null==d?void 0:d.id,onSwitch:q,onRefresh:W,toast:{add:_}})},"projects"),"Risks"===a&&(0,t.jsx)(r,{name:"Risks",children:(0,t.jsx)(C,{project:d,dashboard:p,toast:{add:_},onRefresh:W})},"risks"),"Mitigations"===a&&(0,t.jsx)(r,{name:"Mitigations",children:(0,t.jsx)(w,{project:d,dashboard:p,toast:{add:_},onRefresh:W})},"mitigations"),"Gate"===a&&(0,t.jsx)(r,{name:"Gate",children:(0,t.jsx)(S,{project:d,dashboard:p,toast:{add:_},onRefresh:W})},"gate"),"Integrations"===a&&(0,t.jsx)(r,{name:"Integrations",children:(0,t.jsx)(D,{project:d,dashboard:p,toast:{add:_},onRefresh:W})},"integrations"),"Audit"===a&&(0,t.jsx)(r,{name:"Audit",children:(0,t.jsx)(T,{project:d,toast:{add:_}})},"audit"),I&&(0,t.jsx)(A,{project:d,onClose:()=>F(!1),onSaved:()=>{F(!1),W()},toast:{add:_}}),L&&(0,t.jsx)(E,{projects:u,workspaceId:O,currentProjectId:null==d?void 0:d.id,onClose:()=>z(!1),onSwitch:q,onSaved:()=>{z(!1),W()},toast:{add:_}}),(0,t.jsx)(h,{toasts:H})]})}},6282:(e,s,a)=>{"use strict";async function t(e,s,a){var t;let l={method:e,headers:{"Content-Type":"application/json"}};a&&(l.body=JSON.stringify(a));let n=await fetch("".concat("").concat(s),l),i=(null==(t=n.headers.get("content-type"))?void 0:t.includes("application/json"))?await n.json():await n.text();if(!n.ok)throw Error((null==i?void 0:i.error)||(null==i?void 0:i.message)||"Request failed (".concat(n.status,")"));return i}a.d(s,{FH:()=>l,Ht:()=>n,ri:()=>i});let l={get:e=>t("GET",e),post:(e,s)=>t("POST",e,s),put:(e,s)=>t("PUT",e,s),patch:(e,s)=>t("PATCH",e,s),del:e=>t("DELETE",e)};async function n(){try{let e=await l.get("/api/auth/session");return e.user||e.actor||null}catch(e){return null}}async function i(){await l.post("/api/auth/logout"),window.location.href="/"}}},e=>{e.O(0,[8441,1255,7358],()=>e(e.s=646)),_N_E=e.O()}]);           (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5105],{63:(e,s,a)=>{"use strict";var t=a(7260);a.o(t,"useRouter")&&a.d(s,{useRouter:function(){return t.useRouter}}),a.o(t,"useSearchParams")&&a.d(s,{useSearchParams:function(){return t.useSearchParams}})},646:(e,s,a)=>{Promise.resolve().then(a.bind(a,3399))},3399:(e,s,a)=>{"use strict";a.r(s),a.d(s,{default:()=>E});var t=a(5155),l=a(2115),i=a(63),n=a(6282);class r extends l.Component{static getDerivedStateFromError(e){return{error:e}}render(){if(this.state.error){let{fallback:e}=this.props;return e?"function"==typeof e?e(this.state.error):e:(0,t.jsxs)("div",{className:"empty-state",children:[(0,t.jsx)("div",{className:"empty-icon",children:"!"}),(0,t.jsxs)("p",{children:["Something went wrong in ",this.props.name||"this section","."]}),(0,t.jsx)("p",{className:"muted",style:{fontSize:12,marginTop:4},children:this.state.error.message}),(0,t.jsx)("button",{className:"button secondary small",style:{marginTop:12},onClick:()=>{var e,s;this.setState({error:null}),null==(e=(s=this.props).onRetry)||e.call(s)},children:"Retry"})]})}return this.props.children}constructor(e){super(e),this.state={error:null}}}let c=["Overview","Risks","Mitigations","Gate","Integrations","Audit"],d=["Technical","Governance","Legal","Ethical","Operational"],o=["Design","Development","Testing","Deployment"],u=["OPEN","IN_MITIGATION","ACCEPTED","CLOSED"],m=["NOT_STARTED","IN_PROGRESS","DONE","REJECTED"];function h(e){let{toasts:s}=e;return s.length?(0,t.jsx)("div",{className:"toast-container",children:s.map(e=>(0,t.jsx)("div",{className:"toast ".concat(e.type),children:e.message},e.id))}):null}function x(e){let{value:s,onChange:a,placeholder:l}=e;return(0,t.jsxs)("div",{className:"search-wrap",children:[(0,t.jsx)("span",{className:"search-icon",children:"⌕"}),(0,t.jsx)("input",{className:"input",value:s,onChange:e=>a(e.target.value),placeholder:l||"Search..."})]})}function p(e,s,a){return s?[...e].sort((e,t)=>{let l=e[s],i=t[s];if(null==l)return 1;if(null==i)return -1;let n="number"==typeof l?l-i:String(l).localeCompare(String(i));return"asc"===a?n:-n}):e}function j(e){let{children:s,className:a}=e;return(0,t.jsx)("span",{className:"badge ".concat(a||""),children:s})}function v(e){let{label:s,children:a}=e;return(0,t.jsxs)("div",{style:{marginBottom:10},children:[(0,t.jsx)("label",{style:{display:"block",fontSize:12,color:"var(--muted)",marginBottom:3},children:s}),a]})}function g(e){let{value:s,onChange:a,type:l="text",min:i,max:n,style:r}=e;return(0,t.jsx)("input",{className:"input",type:l,value:s,onChange:e=>a(e.target.value),min:i,max:n,style:{width:"100%",...r}})}function y(e){let{value:s,onChange:a,options:l}=e;return(0,t.jsxs)("select",{className:"input",value:s,onChange:e=>a(e.target.value),style:{width:"100%"},children:[(0,t.jsx)("option",{value:"",children:"— Select —"}),(l||[]).map(e=>{let s="object"==typeof e?e.value:e,a="object"==typeof e?e.label:e;return(0,t.jsx)("option",{value:s,children:a},s)})]})}function b(e){let{label:s,onConfirm:a,onCancel:l,deleting:i}=e;return(0,t.jsx)("div",{className:"modal-overlay",onClick:l,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:380},children:[(0,t.jsxs)("h3",{children:["Delete ",s,"?"]}),(0,t.jsx)("p",{style:{fontSize:13,color:"var(--muted)"},children:"This cannot be undone."}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:l,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff"},onClick:a,disabled:i,children:i?"Deleting...":"Delete"})]})]})})}function N(e){let{project:s,dashboard:a}=e,i=(0,l.useMemo)(()=>{var e,s,t,l,i,n,r,c,d,o,u,m,h,x,p,j,v,g,y;return a?[{label:"Overall Score",value:null!=(j=null==(e=a.summary)?void 0:e.overallScore)?j:"-",cls:(null==(s=a.summary)?void 0:s.overallScore)>=75?"bad":(null==(t=a.summary)?void 0:t.overallScore)>=50?"warn":"good",sub:"Risk level: ".concat((null==(l=a.summary)?void 0:l.riskLevel)||"-")},{label:"Deployment Gate",value:null!=(v=null==(i=a.summary)?void 0:i.gateStatus)?v:"-",cls:(null==(n=a.summary)?void 0:n.gateStatus)==="Ready"?"good":(null==(r=a.summary)?void 0:r.gateStatus)==="Warning"?"warn":"bad",sub:(null==(c=a.gate)?void 0:c.message)||""},{label:"Open Risks",value:null!=(g=null==(d=a.summary)?void 0:d.openRisks)?g:0,cls:((null==(o=a.summary)?void 0:o.openRisks)||0)>5?"bad":((null==(u=a.summary)?void 0:u.openRisks)||0)>2?"warn":"good",sub:"".concat((null==(m=a.summary)?void 0:m.totalRisks)||0," total risks")},{label:"Mitigation",value:"".concat(null!=(y=null==(h=a.summary)?void 0:h.mitigationCompletion)?y:0,"%"),cls:40>((null==(x=a.summary)?void 0:x.mitigationCompletion)||0)?"bad":70>((null==(p=a.summary)?void 0:p.mitigationCompletion)||0)?"warn":"good",sub:"Average active-risk completion"}]:[]},[a]);return a?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{className:"grid",style:{gridTemplateColumns:"repeat(auto-fit, minmax(200px, 1fr))"},children:i.map(e=>(0,t.jsxs)("div",{className:"metric-card",children:[(0,t.jsx)("h3",{children:e.label}),(0,t.jsx)("div",{className:"metric-value ".concat(e.cls),children:e.value}),(0,t.jsx)("div",{className:"metric-sub",children:e.sub})]},e.label))}),(0,t.jsxs)("div",{className:"grid",style:{gridTemplateColumns:"1fr 1fr",marginTop:18},children:[(0,t.jsxs)("div",{className:"panel",children:[(0,t.jsx)("h2",{children:"Dimensions"}),(a.dimensions||[]).map(e=>(0,t.jsxs)("div",{style:{marginBottom:12},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:4},children:[(0,t.jsx)("span",{style:{fontSize:13},children:e.name}),(0,t.jsx)("strong",{style:{fontSize:13},children:e.score})]}),(0,t.jsx)("div",{className:"bar-wrap",children:(0,t.jsx)("div",{className:"bar-fill",style:{width:"".concat(Math.min(e.score,100),"%"),background:e.score>=50?"var(--danger)":e.score>=25?"var(--warn)":"var(--accent)"}})})]},e.name))]}),(0,t.jsxs)("div",{className:"panel",children:[(0,t.jsx)("h2",{children:"Lifecycle"}),(a.lifecycle||[]).map(e=>(0,t.jsxs)("div",{style:{marginBottom:12},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:4},children:[(0,t.jsx)("span",{style:{fontSize:13},children:e.name}),(0,t.jsxs)("span",{className:"muted",style:{fontSize:12},children:[e.openRisks," open"]})]}),(0,t.jsx)("div",{className:"bar-wrap",children:(0,t.jsx)("div",{className:"bar-fill",style:{width:"".concat(Math.min(e.riskScore||0,100),"%"),background:(e.riskScore||0)>=50?"var(--danger)":(e.riskScore||0)>=25?"var(--warn)":"var(--accent)"}})})]},e.name))]})]})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading dashboard data..."})})}function f(e){let{project:s,onClose:a,onSaved:i,toast:r}=e,[c,u]=(0,l.useState)(!1),[m,h]=(0,l.useState)({title:"",description:"",dimension:"",domain:"",lifecyclePhase:"",probability:50,impact:50,detectability:50,ownerDisplayName:""}),x=e=>s=>h(a=>({...a,[e]:s})),p=async()=>{if(!m.title.trim())return void r.add("Title is required","error");if(!m.dimension)return void r.add("Dimension is required","error");u(!0);try{await n.FH.post("/api/projects/".concat(s.id,"/risks"),m),r.add("Risk created"),i()}catch(e){r.add(e.message||"Failed to create risk","error")}finally{u(!1)}};return(0,t.jsx)("div",{className:"modal-overlay",onClick:a,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:500},children:[(0,t.jsx)("h2",{children:"New Risk"}),(0,t.jsx)(v,{label:"Title *",children:(0,t.jsx)(g,{value:m.title,onChange:x("title")})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:m.description,onChange:e=>x("description")(e.target.value),rows:3,style:{width:"100%",resize:"vertical"}})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Dimension *",children:(0,t.jsx)(y,{value:m.dimension,onChange:x("dimension"),options:d})}),(0,t.jsx)(v,{label:"Domain",children:(0,t.jsx)(g,{value:m.domain,onChange:x("domain")})})]}),(0,t.jsx)(v,{label:"Lifecycle Phase",children:(0,t.jsx)(y,{value:m.lifecyclePhase,onChange:x("lifecyclePhase"),options:o})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Probability",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:m.probability,onChange:x("probability")})}),(0,t.jsx)(v,{label:"Impact",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:m.impact,onChange:x("impact")})}),(0,t.jsx)(v,{label:"Detectability",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:m.detectability,onChange:x("detectability")})})]}),(0,t.jsx)(v,{label:"Owner",children:(0,t.jsx)(g,{value:m.ownerDisplayName,onChange:x("ownerDisplayName")})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:a,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:p,disabled:c,children:c?"Saving...":"Create Risk"})]})]})})}function C(e){let{project:s,dashboard:a,toast:i,onRefresh:r}=e,[c,m]=(0,l.useState)(""),[h,N]=(0,l.useState)("normalizedScore"),[C,k]=(0,l.useState)("desc"),[S,w]=(0,l.useState)(0),[D,P]=(0,l.useState)(null),[T,R]=(0,l.useState)(!1),[E,I]=(0,l.useState)(!1),[A,O]=(0,l.useState)({}),[F,L]=(0,l.useState)(null),[z,M]=(0,l.useState)(null),[H,_]=(0,l.useState)(!1),W=(0,l.useMemo)(()=>(null==a?void 0:a.topRisks)?p(a.topRisks,h,C):[],[a,h,C]),G=(0,l.useMemo)(()=>{if(!c)return W;let e=c.toLowerCase();return W.filter(s=>(s.title||"").toLowerCase().includes(e)||(s.dimension||"").toLowerCase().includes(e)||(s.ownerDisplayName||"").toLowerCase().includes(e))},[W,c]),q=G.slice(0,(S+1)*20),B=async(e,s)=>{L(e);try{await n.FH.patch("/api/risks/".concat(e),{status:s}),i.add("Risk status updated to ".concat(s)),P(null),r()}catch(e){i.add(e.message,"error")}finally{L(null)}},J=async()=>{if(!A.title.trim())return void i.add("Title is required","error");L("edit");try{await n.FH.patch("/api/risks/".concat(D.id),A),i.add("Risk updated"),P(null),r()}catch(e){i.add(e.message||"Failed to update","error")}finally{L(null)}},U=async()=>{_(!0);try{await n.FH.del("/api/risks/".concat(z.id)),i.add("Risk deleted"),M(null),P(null),r()}catch(e){i.add(e.message||"Failed to delete","error")}finally{_(!1)}};return a?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{style:{display:"flex",gap:8,marginBottom:12},children:[(0,t.jsx)(x,{value:c,onChange:m,placeholder:"Search risks by title, dimension, owner..."}),(0,t.jsx)("button",{className:"button small",onClick:()=>R(!0),children:"+ New Risk"})]}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsx)("tr",{children:[{key:"id",label:"ID"},{key:"title",label:"Risk"},{key:"dimension",label:"Dimension"},{key:"lifecyclePhase",label:"Phase"},{key:"normalizedScore",label:"Score"},{key:"residualScore",label:"Residual"},{key:"status",label:"Status"},{key:"ownerDisplayName",label:"Owner"}].map(e=>(0,t.jsxs)("th",{className:"sortable",onClick:()=>{var s;h===(s=e.key)?k(e=>"asc"===e?"desc":"asc"):(N(s),k("asc"))},children:[e.label," ",h===e.key?"asc"===C?"▲":"▼":""]},e.key))})}),(0,t.jsx)("tbody",{children:q.map(e=>{var s,a,l;return(0,t.jsxs)("tr",{onClick:()=>{var s,a,t;P(e),O({title:e.title||"",description:e.description||"",dimension:e.dimension||"",domain:e.domain||"",lifecyclePhase:e.lifecyclePhase||"",probability:null!=(s=e.probability)?s:50,impact:null!=(a=e.impact)?a:50,detectability:null!=(t=e.detectability)?t:50,ownerDisplayName:e.ownerDisplayName||""}),I(!1),M(null)},children:[(0,t.jsx)("td",{style:{fontFamily:"monospace",fontSize:12},children:null==(s=e.id)?void 0:s.slice(0,8)}),(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.title})}),(0,t.jsx)("td",{children:(0,t.jsx)(j,{className:null==(a=e.dimension)?void 0:a.toLowerCase(),children:e.dimension})}),(0,t.jsx)("td",{style:{fontSize:12},children:e.lifecyclePhase}),(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.normalizedScore})}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{style:{color:e.residualScore>=50?"var(--danger)":e.residualScore>=25?"var(--warn)":"var(--accent)"},children:e.residualScore})}),(0,t.jsx)("td",{children:(0,t.jsx)(j,{className:null==(l=e.status)?void 0:l.toLowerCase().replace(/\s+/g,"-"),children:e.status})}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{className:"muted",children:e.ownerDisplayName||"-"})})]},e.id)})})]})}),G.length>q.length&&(0,t.jsx)("div",{style:{textAlign:"center",marginTop:12},children:(0,t.jsxs)("button",{className:"button secondary small",onClick:()=>w(e=>e+1),children:["Show more (",G.length-q.length," remaining)"]})}),!G.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No risks match your search"})}),T&&(0,t.jsx)(f,{project:s,onClose:()=>R(!1),onSaved:()=>{R(!1),r()},toast:i}),D&&!z&&(0,t.jsx)("div",{className:"modal-overlay",onClick:()=>P(null),children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:520},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"},children:[(0,t.jsx)("h2",{style:{margin:0},children:D.title}),(0,t.jsx)("button",{className:"button secondary small",onClick:()=>I(!E),children:E?"View":"Edit"})]}),E?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{style:{marginTop:12},children:[(0,t.jsx)(v,{label:"Title *",children:(0,t.jsx)(g,{value:A.title,onChange:e=>O(s=>({...s,title:e}))})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:A.description,onChange:e=>O(s=>({...s,description:e.target.value})),rows:2,style:{width:"100%",resize:"vertical"}})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Dimension",children:(0,t.jsx)(y,{value:A.dimension,onChange:e=>O(s=>({...s,dimension:e})),options:d})}),(0,t.jsx)(v,{label:"Domain",children:(0,t.jsx)(g,{value:A.domain,onChange:e=>O(s=>({...s,domain:e}))})})]}),(0,t.jsx)(v,{label:"Lifecycle Phase",children:(0,t.jsx)(y,{value:A.lifecyclePhase,onChange:e=>O(s=>({...s,lifecyclePhase:e})),options:o})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Probability",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:A.probability,onChange:e=>O(s=>({...s,probability:Number(e)}))})}),(0,t.jsx)(v,{label:"Impact",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:A.impact,onChange:e=>O(s=>({...s,impact:Number(e)}))})}),(0,t.jsx)(v,{label:"Detectability",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:A.detectability,onChange:e=>O(s=>({...s,detectability:Number(e)}))})})]}),(0,t.jsx)(v,{label:"Owner",children:(0,t.jsx)(g,{value:A.ownerDisplayName,onChange:e=>O(s=>({...s,ownerDisplayName:e}))})})]}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:()=>P(null),children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:J,disabled:"edit"===F,children:"edit"===F?"Saving...":"Save Changes"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff",marginLeft:"auto"},onClick:()=>M(D),children:"Delete"})]})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:12,fontSize:13,marginTop:12},children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Dimension"}),(0,t.jsx)("br",{}),D.dimension]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Phase"}),(0,t.jsx)("br",{}),D.lifecyclePhase]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Probability"}),(0,t.jsx)("br",{}),D.probability]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Impact"}),(0,t.jsx)("br",{}),D.impact]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Detectability"}),(0,t.jsx)("br",{}),D.detectability]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Score"}),(0,t.jsx)("br",{}),(0,t.jsx)("strong",{children:D.normalizedScore})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Residual"}),(0,t.jsx)("br",{}),D.residualScore]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Owner"}),(0,t.jsx)("br",{}),D.ownerDisplayName||"-"]})]}),D.description&&(0,t.jsxs)("div",{style:{marginTop:12,fontSize:13},children:[(0,t.jsx)("span",{className:"muted",children:"Description"}),(0,t.jsx)("br",{}),D.description]}),(0,t.jsxs)("div",{style:{marginTop:16},children:[(0,t.jsx)("span",{className:"muted",style:{fontSize:12},children:"Update status:"}),(0,t.jsx)("div",{style:{display:"flex",gap:6,marginTop:6,flexWrap:"wrap"},children:u.map(e=>(0,t.jsx)("button",{className:"button small ".concat("OPEN"===e?"secondary":""),onClick:()=>B(D.id,e),disabled:F===D.id,children:e.replace("_"," ")},e))})]}),(0,t.jsx)("div",{className:"modal-actions",children:(0,t.jsx)("button",{className:"button secondary small",onClick:()=>P(null),children:"Close"})})]})]})}),z&&(0,t.jsx)(b,{label:"this risk",onConfirm:U,onCancel:()=>M(null),deleting:H})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading..."})})}function k(e){let{project:s,risks:a,onClose:i,onSaved:r,toast:c}=e,[d,o]=(0,l.useState)(!1),[u,h]=(0,l.useState)({riskId:"",title:"",description:"",status:"NOT_STARTED",progressPercent:0,effectivenessPercent:0,dueDate:"",ownerDisplayName:""}),x=e=>s=>h(a=>({...a,[e]:s})),p=async()=>{if(!u.title.trim())return void c.add("Title is required","error");if(!u.riskId)return void c.add("Please select a risk","error");o(!0);try{let e={...u,progressPercent:Number(u.progressPercent),effectivenessPercent:Number(u.effectivenessPercent)};e.dueDate?e.dueDate=new Date(e.dueDate).toISOString():delete e.dueDate,await n.FH.post("/api/risks/".concat(u.riskId,"/mitigations"),e),c.add("Mitigation created"),r()}catch(e){c.add(e.message||"Failed to create mitigation","error")}finally{o(!1)}};return(0,t.jsx)("div",{className:"modal-overlay",onClick:i,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:500},children:[(0,t.jsx)("h2",{children:"New Mitigation"}),(0,t.jsx)(v,{label:"Risk *",children:(0,t.jsx)(y,{value:u.riskId,onChange:x("riskId"),options:(a||[]).map(e=>({value:e.id,label:e.title}))})}),(0,t.jsx)(v,{label:"Title *",children:(0,t.jsx)(g,{value:u.title,onChange:x("title")})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:u.description,onChange:e=>x("description")(e.target.value),rows:2,style:{width:"100%",resize:"vertical"}})}),(0,t.jsx)(v,{label:"Status",children:(0,t.jsx)(y,{value:u.status,onChange:x("status"),options:m})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Progress %",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:u.progressPercent,onChange:x("progressPercent")})}),(0,t.jsx)(v,{label:"Effectiveness %",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:u.effectivenessPercent,onChange:x("effectivenessPercent")})})]}),(0,t.jsx)(v,{label:"Due Date",children:(0,t.jsx)(g,{type:"date",value:u.dueDate,onChange:x("dueDate")})}),(0,t.jsx)(v,{label:"Owner",children:(0,t.jsx)(g,{value:u.ownerDisplayName,onChange:x("ownerDisplayName")})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:i,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:p,disabled:d,children:d?"Saving...":"Create Mitigation"})]})]})})}function S(e){let{project:s,dashboard:a,toast:i,onRefresh:r}=e,[c,d]=(0,l.useState)(""),[o,u]=(0,l.useState)("progressPercent"),[h,N]=(0,l.useState)("asc"),[f,C]=(0,l.useState)(!1),[S,w]=(0,l.useState)(null),[D,P]=(0,l.useState)(!1),[T,R]=(0,l.useState)({}),[E,I]=(0,l.useState)(null),[A,O]=(0,l.useState)(null),[F,L]=(0,l.useState)(!1),z=(0,l.useMemo)(()=>(null==a?void 0:a.mitigations)?p(a.mitigations,o,h):[],[a,o,h]),M=(0,l.useMemo)(()=>(null==a?void 0:a.topRisks)?a.topRisks:[],[a]),H=(0,l.useMemo)(()=>{if(!c)return z;let e=c.toLowerCase();return z.filter(s=>(s.title||"").toLowerCase().includes(e)||(s.riskTitle||"").toLowerCase().includes(e))},[z,c]),_=async()=>{if(!T.title.trim())return void i.add("Title is required","error");I("edit");try{let e={...T,progressPercent:Number(T.progressPercent),effectivenessPercent:Number(T.effectivenessPercent)};e.dueDate?e.dueDate=new Date(e.dueDate).toISOString():e.dueDate=null,await n.FH.patch("/api/mitigations/".concat(S.id),e),i.add("Mitigation updated"),w(null),r()}catch(e){i.add(e.message||"Failed to update","error")}finally{I(null)}},W=async()=>{L(!0);try{await n.FH.del("/api/mitigations/".concat(A.id)),i.add("Mitigation deleted"),O(null),w(null),r()}catch(e){i.add(e.message||"Failed to delete","error")}finally{L(!1)}};return a?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{style:{display:"flex",gap:8,marginBottom:12},children:[(0,t.jsx)(x,{value:c,onChange:d,placeholder:"Search mitigations..."}),(0,t.jsx)("button",{className:"button small",onClick:()=>C(!0),children:"+ New Mitigation"})]}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsx)("tr",{children:[{key:"title",label:"Title"},{key:"riskTitle",label:"Risk"},{key:"status",label:"Status"},{key:"progressPercent",label:"Progress"},{key:"effectivenessPercent",label:"Effectiveness"},{key:"ownerDisplayName",label:"Owner"}].map(e=>(0,t.jsxs)("th",{className:"sortable",onClick:()=>{var s;o===(s=e.key)?N(e=>"asc"===e?"desc":"asc"):(u(s),N("asc"))},children:[e.label," ",o===e.key?"asc"===h?"▲":"▼":""]},e.key))})}),(0,t.jsx)("tbody",{children:H.slice(0,50).map(e=>{var s;return(0,t.jsxs)("tr",{onClick:()=>{var s,a;w(e),R({title:e.title||"",description:e.description||"",status:e.status||"NOT_STARTED",progressPercent:null!=(s=e.progressPercent)?s:0,effectivenessPercent:null!=(a=e.effectivenessPercent)?a:0,dueDate:e.dueDate?e.dueDate.slice(0,10):"",ownerDisplayName:e.ownerDisplayName||""}),P(!0),O(null)},style:{cursor:"pointer"},children:[(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.title})}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{className:"muted",children:e.riskTitle})}),(0,t.jsx)("td",{children:(0,t.jsx)(j,{className:null==(s=e.status)?void 0:s.toLowerCase().replace(/\s+/g,"-"),children:e.status})}),(0,t.jsx)("td",{children:(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8},children:[(0,t.jsx)("div",{className:"bar-wrap",style:{flex:1,maxWidth:80},children:(0,t.jsx)("div",{className:"bar-fill",style:{width:"".concat(e.progressPercent||0,"%"),background:(e.progressPercent||0)>=80?"var(--accent)":(e.progressPercent||0)>=30?"var(--warn)":"var(--danger)"}})}),e.progressPercent||0,"%"]})}),(0,t.jsxs)("td",{children:[e.effectivenessPercent||0,"%"]}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{className:"muted",children:e.ownerDisplayName||"-"})})]},e.id)})})]})}),!H.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No mitigations found"})}),f&&(0,t.jsx)(k,{project:s,risks:M,onClose:()=>C(!1),onSaved:()=>{C(!1),r()},toast:i}),S&&!A&&(0,t.jsx)("div",{className:"modal-overlay",onClick:()=>w(null),children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:500},children:[(0,t.jsx)("h2",{style:{margin:0},children:D?"Edit Mitigation":S.title}),(0,t.jsxs)("div",{style:{marginTop:12},children:[(0,t.jsx)(v,{label:"Title *",children:(0,t.jsx)(g,{value:T.title,onChange:e=>R(s=>({...s,title:e}))})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:T.description,onChange:e=>R(s=>({...s,description:e.target.value})),rows:2,style:{width:"100%",resize:"vertical"}})}),(0,t.jsx)(v,{label:"Status",children:(0,t.jsx)(y,{value:T.status,onChange:e=>R(s=>({...s,status:e})),options:m})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Progress %",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:T.progressPercent,onChange:e=>R(s=>({...s,progressPercent:Number(e)}))})}),(0,t.jsx)(v,{label:"Effectiveness %",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:T.effectivenessPercent,onChange:e=>R(s=>({...s,effectivenessPercent:Number(e)}))})})]}),(0,t.jsx)(v,{label:"Due Date",children:(0,t.jsx)(g,{type:"date",value:T.dueDate,onChange:e=>R(s=>({...s,dueDate:e}))})}),(0,t.jsx)(v,{label:"Owner",children:(0,t.jsx)(g,{value:T.ownerDisplayName,onChange:e=>R(s=>({...s,ownerDisplayName:e}))})})]}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:()=>w(null),children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:_,disabled:"edit"===E,children:"edit"===E?"Saving...":"Save Changes"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff",marginLeft:"auto"},onClick:()=>O(S),children:"Delete"})]})]})}),A&&(0,t.jsx)(b,{label:"this mitigation",onConfirm:W,onCancel:()=>O(null),deleting:F})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading..."})})}function w(e){var s,a,i;let{project:r,dashboard:c,toast:d,onRefresh:o}=e,[u,m]=(0,l.useState)(!1),[h,x]=(0,l.useState)(!1),[p,b]=(0,l.useState)({decision:"APPROVED",reviewerName:"",reason:""}),[N,f]=(0,l.useState)(!1),C=(null==c||null==(s=c.gate)?void 0:s.criteria)||[],k=(null==c||null==(a=c.summary)?void 0:a.gateStatus)||"Unknown",S=null==c||null==(i=c.gate)?void 0:i.id,w="Ready"===k?"good":"Warning"===k?"warn":"bad",D=async()=>{m(!0);try{await n.FH.post("/api/projects/".concat(r.id,"/gate/evaluate"),{}),d.add("Gate evaluated"),o()}catch(e){d.add(e.message||"Evaluation failed","error")}finally{m(!1)}},P=async()=>{if(!p.reviewerName.trim())return void d.add("Reviewer name is required","error");f(!0);try{await n.FH.post("/api/gates/".concat(S,"/decisions"),p),d.add("Decision submitted"),x(!1),o()}catch(e){d.add(e.message||"Failed to submit decision","error")}finally{f(!1)}};return c?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{children:"Deployment Gate"}),(0,t.jsx)("p",{className:"muted",children:"Gate evaluation for AI deployment readiness"})]}),(0,t.jsx)("div",{className:"dash-actions",children:(0,t.jsx)("div",{className:"metric-value ".concat(w),style:{fontSize:28},children:k})})]}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsxs)("tr",{children:[(0,t.jsx)("th",{children:"Criterion"}),(0,t.jsx)("th",{children:"Required"}),(0,t.jsx)("th",{children:"Actual"}),(0,t.jsx)("th",{children:"Status"})]})}),(0,t.jsx)("tbody",{children:C.map(e=>{var s;return(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.name})}),(0,t.jsx)("td",{children:e.required}),(0,t.jsx)("td",{children:e.actual}),(0,t.jsx)("td",{children:(0,t.jsx)(j,{className:null==(s=e.status)?void 0:s.toLowerCase(),children:e.status})})]},e.name)})})]})}),!C.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No gate criteria evaluated yet"})}),(0,t.jsxs)("div",{style:{marginTop:16,display:"flex",gap:8,flexWrap:"wrap"},children:[(0,t.jsx)("button",{className:"button small",onClick:D,disabled:u,children:u?"Evaluating...":"Evaluate Gate"}),S&&(0,t.jsx)("button",{className:"button secondary small",onClick:()=>x(!0),children:"Add Decision"}),(0,t.jsx)("a",{href:"/api/projects/".concat(null==r?void 0:r.id,"/gate/history"),className:"button secondary small",target:"_blank",children:"History (API)"})]}),h&&(0,t.jsx)("div",{className:"modal-overlay",onClick:()=>x(!1),children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:400},children:[(0,t.jsx)("h2",{children:"Gate Decision"}),(0,t.jsx)(v,{label:"Decision",children:(0,t.jsx)(y,{value:p.decision,onChange:e=>b(s=>({...s,decision:e})),options:["APPROVED","REJECTED","ACCEPTED","NEEDS_CHANGES"]})}),(0,t.jsx)(v,{label:"Reviewer Name *",children:(0,t.jsx)(g,{value:p.reviewerName,onChange:e=>b(s=>({...s,reviewerName:e}))})}),(0,t.jsx)(v,{label:"Reason",children:(0,t.jsx)("textarea",{className:"input",value:p.reason,onChange:e=>b(s=>({...s,reason:e.target.value})),rows:3,style:{width:"100%",resize:"vertical"}})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:()=>x(!1),children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:P,disabled:N,children:N?"Saving...":"Submit Decision"})]})]})})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading..."})})}function D(e){var s;let{project:a,dashboard:i,onClose:r,onSaved:c,toast:d}=e,[o,u]=(0,l.useState)(!1),[m,h]=(0,l.useState)({provider:"TRELLO",workspaceName:"",baseUrl:"",authMode:"API_KEY"}),x=e=>s=>h(a=>({...a,[e]:s})),p=(null==i||null==(s=i.gate)?void 0:s.workspaceId)||(null==a?void 0:a.workspaceId),j=async()=>{if(!m.workspaceName.trim())return void d.add("Workspace name is required","error");u(!0);try{await n.FH.post("/api/workspaces/".concat(p,"/integrations"),m),d.add("Integration created"),c()}catch(e){d.add(e.message||"Failed to create integration","error")}finally{u(!1)}};return(0,t.jsx)("div",{className:"modal-overlay",onClick:r,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:450},children:[(0,t.jsx)("h2",{children:"New Integration"}),(0,t.jsx)(v,{label:"Provider",children:(0,t.jsx)(y,{value:m.provider,onChange:x("provider"),options:["TRELLO","JIRA","ASANA","MICROSOFT_PLANNER"]})}),(0,t.jsx)(v,{label:"Workspace Name *",children:(0,t.jsx)(g,{value:m.workspaceName,onChange:x("workspaceName")})}),(0,t.jsx)(v,{label:"Base URL",children:(0,t.jsx)(g,{value:m.baseUrl,onChange:x("baseUrl")})}),(0,t.jsx)(v,{label:"Auth Mode",children:(0,t.jsx)(y,{value:m.authMode,onChange:x("authMode"),options:["API_KEY","OAUTH","BASIC"]})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:r,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:j,disabled:o,children:o?"Saving...":"Create Integration"})]})]})})}function P(e){let{project:s,dashboard:a,toast:i,onRefresh:n}=e,[r,c]=(0,l.useState)(!1),d=(null==a?void 0:a.integrations)||[];return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{children:"Integrations"}),(0,t.jsx)("p",{className:"muted",children:"Connect Trello, Jira, Asana, or Microsoft Planner"})]}),(0,t.jsx)("div",{className:"dash-actions",children:(0,t.jsx)("button",{className:"button small",onClick:()=>c(!0),children:"+ New Integration"})})]}),(0,t.jsx)("div",{className:"grid",style:{gridTemplateColumns:"repeat(auto-fit, minmax(240px, 1fr))"},children:["TRELLO","JIRA","ASANA","MICROSOFT_PLANNER"].map(e=>{let s=d.find(s=>s.provider===e);return(0,t.jsxs)("div",{className:"panel",style:{textAlign:"center"},children:[(0,t.jsx)("div",{style:{fontSize:32,marginBottom:8},children:"TRELLO"===e?"⊞":"JIRA"===e?"◆":"ASANA"===e?"◇":"▣"}),(0,t.jsx)("h3",{style:{margin:"0 0 4px"},children:e.replace("_"," ")}),(0,t.jsx)("p",{className:"muted",style:{fontSize:12,margin:"0 0 12px"},children:s?s.workspaceName:"Not configured"}),(0,t.jsx)("div",{style:{display:"flex",gap:6,justifyContent:"center"},children:s?(0,t.jsx)("a",{href:"/api/integrations/".concat(s.id),className:"button secondary small",target:"_blank",children:"Manage"}):(0,t.jsx)("button",{className:"button secondary small",onClick:()=>c(!0),children:"Configure"})})]},e)})}),r&&(0,t.jsx)(D,{project:s,dashboard:a,onClose:()=>c(!1),onSaved:()=>{c(!1),n()},toast:i}),!d.length&&(0,t.jsx)("div",{style:{marginTop:12},children:(0,t.jsx)("a",{href:"/api/integration-providers",className:"button secondary small",target:"_blank",children:"Integration providers (API)"})})]})}function T(e){let{project:s,toast:a}=e,[i,r]=(0,l.useState)([]),[c,d]=(0,l.useState)(!0),[o,u]=(0,l.useState)(null),m=(0,l.useCallback)(async()=>{if(s){d(!0),u(null);try{let e=await n.FH.get("/api/projects/".concat(s.id,"/audit"));r(e.auditEvents||[])}catch(e){u(e.message||"Failed to load audit log")}finally{d(!1)}}},[s]);return((0,l.useEffect)(()=>{m()},[m]),c)?(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading audit log..."})}):o?(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:o})}):i.length?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{children:"Audit Log"}),(0,t.jsx)("p",{className:"muted",children:"Project activity history"})]}),(0,t.jsx)("div",{className:"dash-actions",children:(0,t.jsx)("button",{className:"button secondary small",onClick:m,children:"Refresh"})})]}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsxs)("tr",{children:[(0,t.jsx)("th",{children:"Date"}),(0,t.jsx)("th",{children:"Action"}),(0,t.jsx)("th",{children:"Entity"}),(0,t.jsx)("th",{children:"Actor"}),(0,t.jsx)("th",{children:"Details"})]})}),(0,t.jsx)("tbody",{children:i.map(e=>{var s,a;return(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{style:{fontSize:12,whiteSpace:"nowrap"},children:new Date(e.createdAt).toLocaleString()}),(0,t.jsx)("td",{children:(0,t.jsx)(j,{className:null==(s=e.action)?void 0:s.toLowerCase().replace(/\s+/g,"-"),children:e.action})}),(0,t.jsxs)("td",{style:{fontSize:12},children:[e.entityType," ",(0,t.jsxs)("span",{className:"muted",children:["(",null==(a=e.entityId)?void 0:a.slice(0,8),")"]})]}),(0,t.jsx)("td",{style:{fontSize:12},children:e.actorUserId||"system"}),(0,t.jsx)("td",{style:{fontSize:12,maxWidth:300,overflow:"hidden",textOverflow:"ellipsis"},children:e.afterJson?JSON.stringify(e.afterJson).slice(0,80):"-"})]},e.id)})})]})})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No audit events recorded yet"})})}function R(e){let{project:s,onClose:a,onSaved:i,toast:r}=e,[c,d]=(0,l.useState)(!1),[o,u]=(0,l.useState)({name:(null==s?void 0:s.name)||"",description:(null==s?void 0:s.description)||"",subtitle:(null==s?void 0:s.subtitle)||"",status:(null==s?void 0:s.status)||"Active"}),m=async()=>{if(!o.name.trim())return void r.add("Project name is required","error");d(!0);try{await n.FH.patch("/api/projects/".concat(s.id),o),r.add("Project updated"),i()}catch(e){r.add(e.message||"Failed to update project","error")}finally{d(!1)}};return(0,t.jsx)("div",{className:"modal-overlay",onClick:a,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:450},children:[(0,t.jsx)("h2",{children:"Project Settings"}),(0,t.jsx)(v,{label:"Name *",children:(0,t.jsx)(g,{value:o.name,onChange:e=>u(s=>({...s,name:e}))})}),(0,t.jsx)(v,{label:"Subtitle",children:(0,t.jsx)(g,{value:o.subtitle,onChange:e=>u(s=>({...s,subtitle:e}))})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:o.description,onChange:e=>u(s=>({...s,description:e.target.value})),rows:3,style:{width:"100%",resize:"vertical"}})}),(0,t.jsx)(v,{label:"Status",children:(0,t.jsx)(y,{value:o.status,onChange:e=>u(s=>({...s,status:e})),options:["Active","Archived","On Hold"]})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:a,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:m,disabled:c,children:c?"Saving...":"Save Changes"})]})]})})}function E(){let e=(0,i.useRouter)(),s=(0,i.useSearchParams)(),a=c.includes(s.get("tab"))?s.get("tab"):"Overview",[d,o]=(0,l.useState)(null),[u,m]=(0,l.useState)([]),[x,p]=(0,l.useState)(s.get("projectId")||null),[j,v]=(0,l.useState)(null),[g,y]=(0,l.useState)(!0),[b,f]=(0,l.useState)(null),[k,D]=(0,l.useState)(0),[E,I]=(0,l.useState)(!1),{toasts:A,add:O}=function(){let[e,s]=(0,l.useState)([]);return{toasts:e,add:(0,l.useCallback)(function(e){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"success",t=Date.now()+Math.random();s(s=>[...s,{id:t,message:e,type:a}]),setTimeout(()=>s(e=>e.filter(e=>e.id!==t)),3e3)},[])}}(),F=(0,l.useCallback)(()=>D(e=>e+1),[]),L=(0,l.useCallback)(async e=>{y(!0),f(null);try{var s,a;let t=await n.FH.get("/api/auth/session");if(!(null==t?void 0:t.authenticated)){f("Not authenticated."),y(!1);return}let l=null==(s=t.memberships)?void 0:s[0];if(!l){f("No organization membership found."),y(!1);return}let i=l.organizationId,r=null==(a=(await n.FH.get("/api/workspaces?organizationId=".concat(i))).workspaces)?void 0:a[0];if(!r){f("No workspace found — create one to get started."),y(!1);return}let c=(await n.FH.get("/api/workspaces/".concat(r.id,"/projects"))).projects||[];if(!c.length){f("No project found — create a project to get started."),y(!1);return}m(c);let d=e?c.find(s=>s.id===e):c[0];if(!d){f("Project not found."),y(!1);return}o(d),e||p(d.id);let u=await n.FH.get("/api/projects/".concat(d.id,"/dashboard"));v(u.dashboard),y(!1)}catch(e){f(e.message||"Failed to load dashboard data"),y(!1)}},[]);return((0,l.useEffect)(()=>{L(x)},[L,k,x]),g&&"Integrations"!==a)?(0,t.jsx)("div",{className:"shell-loading",children:(0,t.jsx)("div",{className:"spinner"})}):b&&"Integrations"!==a?(0,t.jsxs)("div",{className:"empty-state",children:[(0,t.jsx)("div",{className:"empty-icon",children:"!"}),(0,t.jsx)("p",{children:b}),(0,t.jsx)("button",{className:"button secondary small",style:{marginTop:12},onClick:()=>D(e=>e+1),children:"Retry"})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsx)("div",{style:{display:"flex",alignItems:"center",gap:10},children:(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6},children:[(0,t.jsx)("select",{className:"input",value:(null==d?void 0:d.id)||"",onChange:s=>{var t;p(t=s.target.value),e.push("/dashboard?tab=".concat(a,"&projectId=").concat(t))},style:{fontSize:16,fontWeight:700,width:"auto",minWidth:200,border:"none",background:"transparent",cursor:"pointer"},children:u.map(e=>(0,t.jsxs)("option",{value:e.id,children:[e.name," ","Active"!==e.status?"(".concat(e.status,")"):""]},e.id))}),(0,t.jsx)("button",{className:"button secondary small",style:{fontSize:14,padding:"2px 8px"},onClick:()=>I(!0),title:"Project settings",children:"⚙"})]}),(0,t.jsx)("p",{className:"muted",style:{margin:0},children:(null==d?void 0:d.subtitle)||(null==d?void 0:d.description)||""})]})}),(0,t.jsxs)("div",{className:"dash-actions",children:[(0,t.jsx)("a",{href:"/api/projects/".concat(null==d?void 0:d.id,"/reports/executive.html"),className:"button secondary small",target:"_blank",children:"Report"}),(0,t.jsx)("a",{href:"/api/projects/".concat(null==d?void 0:d.id,"/reports/risk-register.csv"),className:"button secondary small",target:"_blank",children:"CSV"})]})]}),(0,t.jsx)("div",{className:"tabs",children:c.map(s=>(0,t.jsx)("button",{className:"tab ".concat(a===s?"active":""),onClick:()=>e.push("/dashboard?tab=".concat(s).concat(d?"&projectId=".concat(d.id):"")),children:s},s))}),"Overview"===a&&(0,t.jsx)(r,{name:"Overview",children:(0,t.jsx)(N,{project:d,dashboard:j})},"overview"),"Risks"===a&&(0,t.jsx)(r,{name:"Risks",children:(0,t.jsx)(C,{project:d,dashboard:j,toast:{add:O},onRefresh:F})},"risks"),"Mitigations"===a&&(0,t.jsx)(r,{name:"Mitigations",children:(0,t.jsx)(S,{project:d,dashboard:j,toast:{add:O},onRefresh:F})},"mitigations"),"Gate"===a&&(0,t.jsx)(r,{name:"Gate",children:(0,t.jsx)(w,{project:d,dashboard:j,toast:{add:O},onRefresh:F})},"gate"),"Integrations"===a&&(0,t.jsx)(r,{name:"Integrations",children:(0,t.jsx)(P,{project:d,dashboard:j,toast:{add:O},onRefresh:F})},"integrations"),"Audit"===a&&(0,t.jsx)(r,{name:"Audit",children:(0,t.jsx)(T,{project:d,toast:{add:O}})},"audit"),E&&(0,t.jsx)(R,{project:d,onClose:()=>I(!1),onSaved:()=>{I(!1),F()},toast:{add:O}}),(0,t.jsx)(h,{toasts:A})]})}},6282:(e,s,a)=>{"use strict";async function t(e,s,a){var t;let l={method:e,headers:{"Content-Type":"application/json"}};a&&(l.body=JSON.stringify(a));let i=await fetch("".concat("").concat(s),l),n=(null==(t=i.headers.get("content-type"))?void 0:t.includes("application/json"))?await i.json():await i.text();if(!i.ok)throw Error((null==n?void 0:n.error)||(null==n?void 0:n.message)||"Request failed (".concat(i.status,")"));return n}a.d(s,{FH:()=>l,Ht:()=>i,ri:()=>n});let l={get:e=>t("GET",e),post:(e,s)=>t("POST",e,s),put:(e,s)=>t("PUT",e,s),patch:(e,s)=>t("PATCH",e,s),del:e=>t("DELETE",e)};async function i(){try{let e=await l.get("/api/auth/session");return e.user||e.actor||null}catch(e){return null}}async function n(){await l.post("/api/auth/logout"),window.location.href="/"}}},e=>{e.O(0,[8441,1255,7358],()=>e(e.s=646)),_N_E=e.O()}]);          v b(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5105],{63:(e,s,a)=>{"use strict";var t=a(7260);a.o(t,"useRouter")&&a.d(s,{useRouter:function(){return t.useRouter}}),a.o(t,"useSearchParams")&&a.d(s,{useSearchParams:function(){return t.useSearchParams}})},646:(e,s,a)=>{Promise.resolve().then(a.bind(a,3399))},3399:(e,s,a)=>{"use strict";a.r(s),a.d(s,{default:()=>F});var t=a(5155),l=a(2115),n=a(63),i=a(6282);class r extends l.Component{static getDerivedStateFromError(e){return{error:e}}render(){if(this.state.error){let{fallback:e}=this.props;return e?"function"==typeof e?e(this.state.error):e:(0,t.jsxs)("div",{className:"empty-state",children:[(0,t.jsx)("div",{className:"empty-icon",children:"!"}),(0,t.jsxs)("p",{children:["Something went wrong in ",this.props.name||"this section","."]}),(0,t.jsx)("p",{className:"muted",style:{fontSize:12,marginTop:4},children:this.state.error.message}),(0,t.jsx)("button",{className:"button secondary small",style:{marginTop:12},onClick:()=>{var e,s;this.setState({error:null}),null==(e=(s=this.props).onRetry)||e.call(s)},children:"Retry"})]})}return this.props.children}constructor(e){super(e),this.state={error:null}}}let c=["Overview","Projects","Risks","Mitigations","Gate","Integrations","Audit"],d=["Technical","Governance","Legal","Ethical","Operational"],o=["Design","Development","Testing","Deployment"],u=["OPEN","IN_MITIGATION","ACCEPTED","CLOSED"],m=["NOT_STARTED","IN_PROGRESS","DONE","REJECTED"];function h(e){let{toasts:s}=e;return s.length?(0,t.jsx)("div",{className:"toast-container",children:s.map(e=>(0,t.jsx)("div",{className:"toast ".concat(e.type),children:e.message},e.id))}):null}function j(e){let{value:s,onChange:a,placeholder:l}=e;return(0,t.jsxs)("div",{className:"search-wrap",children:[(0,t.jsx)("span",{className:"search-icon",children:"⌕"}),(0,t.jsx)("input",{className:"input",value:s,onChange:e=>a(e.target.value),placeholder:l||"Search..."})]})}function x(e,s,a){return s?[...e].sort((e,t)=>{let l=e[s],n=t[s];if(null==l)return 1;if(null==n)return -1;let i="number"==typeof l?l-n:String(l).localeCompare(String(n));return"asc"===a?i:-i}):e}function p(e){let{children:s,className:a}=e;return(0,t.jsx)("span",{className:"badge ".concat(a||""),children:s})}function v(e){let{label:s,children:a}=e;return(0,t.jsxs)("div",{style:{marginBottom:10},children:[(0,t.jsx)("label",{style:{display:"block",fontSize:12,color:"var(--muted)",marginBottom:3},children:s}),a]})}function g(e){let{value:s,onChange:a,type:l="text",min:n,max:i,style:r}=e;return(0,t.jsx)("input",{className:"input",type:l,value:s,onChange:e=>a(e.target.value),min:n,max:i,style:{width:"100%",...r}})}function y(e){let{value:s,onChange:a,options:l}=e;return(0,t.jsxs)("select",{className:"input",value:s,onChange:e=>a(e.target.value),style:{width:"100%"},children:[(0,t.jsx)("option",{value:"",children:"— Select —"}),(l||[]).map(e=>{let s="object"==typeof e?e.value:e,a="object"==typeof e?e.label:e;return(0,t.jsx)("option",{value:s,children:a},s)})]})}function b(e){let{label:s,onConfirm:a,onCancel:l,deleting:n}=e;return(0,t.jsx)("div",{className:"modal-overlay",onClick:l,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:380},children:[(0,t.jsxs)("h3",{children:["Delete ",s,"?"]}),(0,t.jsx)("p",{style:{fontSize:13,color:"var(--muted)"},children:"This cannot be undone."}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:l,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff"},onClick:a,disabled:n,children:n?"Deleting...":"Delete"})]})]})})}function N(e){let{project:s,dashboard:a}=e,n=(0,l.useMemo)(()=>{var e,s,t,l,n,i,r,c,d,o,u,m,h,j,x,p,v,g,y;return a?[{label:"Overall Score",value:null!=(p=null==(e=a.summary)?void 0:e.overallScore)?p:"-",cls:(null==(s=a.summary)?void 0:s.overallScore)>=75?"bad":(null==(t=a.summary)?void 0:t.overallScore)>=50?"warn":"good",sub:"Risk level: ".concat((null==(l=a.summary)?void 0:l.riskLevel)||"-")},{label:"Deployment Gate",value:null!=(v=null==(n=a.summary)?void 0:n.gateStatus)?v:"-",cls:(null==(i=a.summary)?void 0:i.gateStatus)==="Ready"?"good":(null==(r=a.summary)?void 0:r.gateStatus)==="Warning"?"warn":"bad",sub:(null==(c=a.gate)?void 0:c.message)||""},{label:"Open Risks",value:null!=(g=null==(d=a.summary)?void 0:d.openRisks)?g:0,cls:((null==(o=a.summary)?void 0:o.openRisks)||0)>5?"bad":((null==(u=a.summary)?void 0:u.openRisks)||0)>2?"warn":"good",sub:"".concat((null==(m=a.summary)?void 0:m.totalRisks)||0," total risks")},{label:"Mitigation",value:"".concat(null!=(y=null==(h=a.summary)?void 0:h.mitigationCompletion)?y:0,"%"),cls:40>((null==(j=a.summary)?void 0:j.mitigationCompletion)||0)?"bad":70>((null==(x=a.summary)?void 0:x.mitigationCompletion)||0)?"warn":"good",sub:"Average active-risk completion"}]:[]},[a]);return a?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{className:"grid",style:{gridTemplateColumns:"repeat(auto-fit, minmax(200px, 1fr))"},children:n.map(e=>(0,t.jsxs)("div",{className:"metric-card",children:[(0,t.jsx)("h3",{children:e.label}),(0,t.jsx)("div",{className:"metric-value ".concat(e.cls),children:e.value}),(0,t.jsx)("div",{className:"metric-sub",children:e.sub})]},e.label))}),(0,t.jsxs)("div",{className:"grid",style:{gridTemplateColumns:"1fr 1fr",marginTop:18},children:[(0,t.jsxs)("div",{className:"panel",children:[(0,t.jsx)("h2",{children:"Dimensions"}),(a.dimensions||[]).map(e=>(0,t.jsxs)("div",{style:{marginBottom:12},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:4},children:[(0,t.jsx)("span",{style:{fontSize:13},children:e.name}),(0,t.jsx)("strong",{style:{fontSize:13},children:e.score})]}),(0,t.jsx)("div",{className:"bar-wrap",children:(0,t.jsx)("div",{className:"bar-fill",style:{width:"".concat(Math.min(e.score,100),"%"),background:e.score>=50?"var(--danger)":e.score>=25?"var(--warn)":"var(--accent)"}})})]},e.name))]}),(0,t.jsxs)("div",{className:"panel",children:[(0,t.jsx)("h2",{children:"Lifecycle"}),(a.lifecycle||[]).map(e=>(0,t.jsxs)("div",{style:{marginBottom:12},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:4},children:[(0,t.jsx)("span",{style:{fontSize:13},children:e.name}),(0,t.jsxs)("span",{className:"muted",style:{fontSize:12},children:[e.openRisks," open"]})]}),(0,t.jsx)("div",{className:"bar-wrap",children:(0,t.jsx)("div",{className:"bar-fill",style:{width:"".concat(Math.min(e.riskScore||0,100),"%"),background:(e.riskScore||0)>=50?"var(--danger)":(e.riskScore||0)>=25?"var(--warn)":"var(--accent)"}})})]},e.name))]})]})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading dashboard data..."})})}function f(e){let{project:s,onClose:a,onSaved:n,toast:r}=e,[c,u]=(0,l.useState)(!1),[m,h]=(0,l.useState)({title:"",description:"",dimension:"",domain:"",lifecyclePhase:"",probability:50,impact:50,detectability:50,ownerDisplayName:""}),j=e=>s=>h(a=>({...a,[e]:s})),x=async()=>{if(!m.title.trim())return void r.add("Title is required","error");if(!m.dimension)return void r.add("Dimension is required","error");u(!0);try{await i.FH.post("/api/projects/".concat(s.id,"/risks"),m),r.add("Risk created"),n()}catch(e){r.add(e.message||"Failed to create risk","error")}finally{u(!1)}};return(0,t.jsx)("div",{className:"modal-overlay",onClick:a,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:500},children:[(0,t.jsx)("h2",{children:"New Risk"}),(0,t.jsx)(v,{label:"Title *",children:(0,t.jsx)(g,{value:m.title,onChange:j("title")})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:m.description,onChange:e=>j("description")(e.target.value),rows:3,style:{width:"100%",resize:"vertical"}})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Dimension *",children:(0,t.jsx)(y,{value:m.dimension,onChange:j("dimension"),options:d})}),(0,t.jsx)(v,{label:"Domain",children:(0,t.jsx)(g,{value:m.domain,onChange:j("domain")})})]}),(0,t.jsx)(v,{label:"Lifecycle Phase",children:(0,t.jsx)(y,{value:m.lifecyclePhase,onChange:j("lifecyclePhase"),options:o})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Probability",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:m.probability,onChange:j("probability")})}),(0,t.jsx)(v,{label:"Impact",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:m.impact,onChange:j("impact")})}),(0,t.jsx)(v,{label:"Detectability",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:m.detectability,onChange:j("detectability")})})]}),(0,t.jsx)(v,{label:"Owner",children:(0,t.jsx)(g,{value:m.ownerDisplayName,onChange:j("ownerDisplayName")})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:a,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:x,disabled:c,children:c?"Saving...":"Create Risk"})]})]})})}function C(e){let{project:s,dashboard:a,toast:n,onRefresh:r}=e,[c,m]=(0,l.useState)(""),[h,N]=(0,l.useState)("normalizedScore"),[C,k]=(0,l.useState)("desc"),[S,w]=(0,l.useState)(0),[P,D]=(0,l.useState)(null),[T,R]=(0,l.useState)(!1),[A,I]=(0,l.useState)(!1),[E,F]=(0,l.useState)({}),[L,z]=(0,l.useState)(null),[O,M]=(0,l.useState)(null),[H,_]=(0,l.useState)(!1),W=(0,l.useMemo)(()=>(null==a?void 0:a.topRisks)?x(a.topRisks,h,C):[],[a,h,C]),G=(0,l.useMemo)(()=>{if(!c)return W;let e=c.toLowerCase();return W.filter(s=>(s.title||"").toLowerCase().includes(e)||(s.dimension||"").toLowerCase().includes(e)||(s.ownerDisplayName||"").toLowerCase().includes(e))},[W,c]),q=G.slice(0,(S+1)*20),B=async(e,s)=>{z(e);try{await i.FH.patch("/api/risks/".concat(e),{status:s}),n.add("Risk status updated to ".concat(s)),D(null),r()}catch(e){n.add(e.message,"error")}finally{z(null)}},J=async()=>{if(!E.title.trim())return void n.add("Title is required","error");z("edit");try{await i.FH.patch("/api/risks/".concat(P.id),E),n.add("Risk updated"),D(null),r()}catch(e){n.add(e.message||"Failed to update","error")}finally{z(null)}},U=async()=>{_(!0);try{await i.FH.del("/api/risks/".concat(O.id)),n.add("Risk deleted"),M(null),D(null),r()}catch(e){n.add(e.message||"Failed to delete","error")}finally{_(!1)}};return a?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{style:{display:"flex",gap:8,marginBottom:12},children:[(0,t.jsx)(j,{value:c,onChange:m,placeholder:"Search risks by title, dimension, owner..."}),(0,t.jsx)("button",{className:"button small",onClick:()=>R(!0),children:"+ New Risk"})]}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsx)("tr",{children:[{key:"id",label:"ID"},{key:"title",label:"Risk"},{key:"dimension",label:"Dimension"},{key:"lifecyclePhase",label:"Phase"},{key:"normalizedScore",label:"Score"},{key:"residualScore",label:"Residual"},{key:"status",label:"Status"},{key:"ownerDisplayName",label:"Owner"}].map(e=>(0,t.jsxs)("th",{className:"sortable",onClick:()=>{var s;h===(s=e.key)?k(e=>"asc"===e?"desc":"asc"):(N(s),k("asc"))},children:[e.label," ",h===e.key?"asc"===C?"▲":"▼":""]},e.key))})}),(0,t.jsx)("tbody",{children:q.map(e=>{var s,a,l;return(0,t.jsxs)("tr",{onClick:()=>{var s,a,t;D(e),F({title:e.title||"",description:e.description||"",dimension:e.dimension||"",domain:e.domain||"",lifecyclePhase:e.lifecyclePhase||"",probability:null!=(s=e.probability)?s:50,impact:null!=(a=e.impact)?a:50,detectability:null!=(t=e.detectability)?t:50,ownerDisplayName:e.ownerDisplayName||""}),I(!1),M(null)},children:[(0,t.jsx)("td",{style:{fontFamily:"monospace",fontSize:12},children:null==(s=e.id)?void 0:s.slice(0,8)}),(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.title})}),(0,t.jsx)("td",{children:(0,t.jsx)(p,{className:null==(a=e.dimension)?void 0:a.toLowerCase(),children:e.dimension})}),(0,t.jsx)("td",{style:{fontSize:12},children:e.lifecyclePhase}),(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.normalizedScore})}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{style:{color:e.residualScore>=50?"var(--danger)":e.residualScore>=25?"var(--warn)":"var(--accent)"},children:e.residualScore})}),(0,t.jsx)("td",{children:(0,t.jsx)(p,{className:null==(l=e.status)?void 0:l.toLowerCase().replace(/\s+/g,"-"),children:e.status})}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{className:"muted",children:e.ownerDisplayName||"-"})})]},e.id)})})]})}),G.length>q.length&&(0,t.jsx)("div",{style:{textAlign:"center",marginTop:12},children:(0,t.jsxs)("button",{className:"button secondary small",onClick:()=>w(e=>e+1),children:["Show more (",G.length-q.length," remaining)"]})}),!G.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No risks match your search"})}),T&&(0,t.jsx)(f,{project:s,onClose:()=>R(!1),onSaved:()=>{R(!1),r()},toast:n}),P&&!O&&(0,t.jsx)("div",{className:"modal-overlay",onClick:()=>D(null),children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:520},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"},children:[(0,t.jsx)("h2",{style:{margin:0},children:P.title}),(0,t.jsx)("button",{className:"button secondary small",onClick:()=>I(!A),children:A?"View":"Edit"})]}),A?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{style:{marginTop:12},children:[(0,t.jsx)(v,{label:"Title *",children:(0,t.jsx)(g,{value:E.title,onChange:e=>F(s=>({...s,title:e}))})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:E.description,onChange:e=>F(s=>({...s,description:e.target.value})),rows:2,style:{width:"100%",resize:"vertical"}})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Dimension",children:(0,t.jsx)(y,{value:E.dimension,onChange:e=>F(s=>({...s,dimension:e})),options:d})}),(0,t.jsx)(v,{label:"Domain",children:(0,t.jsx)(g,{value:E.domain,onChange:e=>F(s=>({...s,domain:e}))})})]}),(0,t.jsx)(v,{label:"Lifecycle Phase",children:(0,t.jsx)(y,{value:E.lifecyclePhase,onChange:e=>F(s=>({...s,lifecyclePhase:e})),options:o})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Probability",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:E.probability,onChange:e=>F(s=>({...s,probability:Number(e)}))})}),(0,t.jsx)(v,{label:"Impact",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:E.impact,onChange:e=>F(s=>({...s,impact:Number(e)}))})}),(0,t.jsx)(v,{label:"Detectability",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:E.detectability,onChange:e=>F(s=>({...s,detectability:Number(e)}))})})]}),(0,t.jsx)(v,{label:"Owner",children:(0,t.jsx)(g,{value:E.ownerDisplayName,onChange:e=>F(s=>({...s,ownerDisplayName:e}))})})]}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:()=>D(null),children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:J,disabled:"edit"===L,children:"edit"===L?"Saving...":"Save Changes"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff",marginLeft:"auto"},onClick:()=>M(P),children:"Delete"})]})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:12,fontSize:13,marginTop:12},children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Dimension"}),(0,t.jsx)("br",{}),P.dimension]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Phase"}),(0,t.jsx)("br",{}),P.lifecyclePhase]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Probability"}),(0,t.jsx)("br",{}),P.probability]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Impact"}),(0,t.jsx)("br",{}),P.impact]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Detectability"}),(0,t.jsx)("br",{}),P.detectability]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Score"}),(0,t.jsx)("br",{}),(0,t.jsx)("strong",{children:P.normalizedScore})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Residual"}),(0,t.jsx)("br",{}),P.residualScore]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Owner"}),(0,t.jsx)("br",{}),P.ownerDisplayName||"-"]})]}),P.description&&(0,t.jsxs)("div",{style:{marginTop:12,fontSize:13},children:[(0,t.jsx)("span",{className:"muted",children:"Description"}),(0,t.jsx)("br",{}),P.description]}),(0,t.jsxs)("div",{style:{marginTop:16},children:[(0,t.jsx)("span",{className:"muted",style:{fontSize:12},children:"Update status:"}),(0,t.jsx)("div",{style:{display:"flex",gap:6,marginTop:6,flexWrap:"wrap"},children:u.map(e=>(0,t.jsx)("button",{className:"button small ".concat("OPEN"===e?"secondary":""),onClick:()=>B(P.id,e),disabled:L===P.id,children:e.replace("_"," ")},e))})]}),(0,t.jsx)("div",{className:"modal-actions",children:(0,t.jsx)("button",{className:"button secondary small",onClick:()=>D(null),children:"Close"})})]})]})}),O&&(0,t.jsx)(b,{label:"this risk",onConfirm:U,onCancel:()=>M(null),deleting:H})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading..."})})}function k(e){let{project:s,risks:a,onClose:n,onSaved:r,toast:c}=e,[d,o]=(0,l.useState)(!1),[u,h]=(0,l.useState)({riskId:"",title:"",description:"",status:"NOT_STARTED",progressPercent:0,effectivenessPercent:0,dueDate:"",ownerDisplayName:""}),j=e=>s=>h(a=>({...a,[e]:s})),x=async()=>{if(!u.title.trim())return void c.add("Title is required","error");if(!u.riskId)return void c.add("Please select a risk","error");o(!0);try{let e={...u,progressPercent:Number(u.progressPercent),effectivenessPercent:Number(u.effectivenessPercent)};e.dueDate?e.dueDate=new Date(e.dueDate).toISOString():delete e.dueDate,await i.FH.post("/api/risks/".concat(u.riskId,"/mitigations"),e),c.add("Mitigation created"),r()}catch(e){c.add(e.message||"Failed to create mitigation","error")}finally{o(!1)}};return(0,t.jsx)("div",{className:"modal-overlay",onClick:n,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:500},children:[(0,t.jsx)("h2",{children:"New Mitigation"}),(0,t.jsx)(v,{label:"Risk *",children:(0,t.jsx)(y,{value:u.riskId,onChange:j("riskId"),options:(a||[]).map(e=>({value:e.id,label:e.title}))})}),(0,t.jsx)(v,{label:"Title *",children:(0,t.jsx)(g,{value:u.title,onChange:j("title")})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:u.description,onChange:e=>j("description")(e.target.value),rows:2,style:{width:"100%",resize:"vertical"}})}),(0,t.jsx)(v,{label:"Status",children:(0,t.jsx)(y,{value:u.status,onChange:j("status"),options:m})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Progress %",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:u.progressPercent,onChange:j("progressPercent")})}),(0,t.jsx)(v,{label:"Effectiveness %",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:u.effectivenessPercent,onChange:j("effectivenessPercent")})})]}),(0,t.jsx)(v,{label:"Due Date",children:(0,t.jsx)(g,{type:"date",value:u.dueDate,onChange:j("dueDate")})}),(0,t.jsx)(v,{label:"Owner",children:(0,t.jsx)(g,{value:u.ownerDisplayName,onChange:j("ownerDisplayName")})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:n,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:x,disabled:d,children:d?"Saving...":"Create Mitigation"})]})]})})}function S(e){let{project:s,dashboard:a,toast:n,onRefresh:r}=e,[c,d]=(0,l.useState)(""),[o,u]=(0,l.useState)("progressPercent"),[h,N]=(0,l.useState)("asc"),[f,C]=(0,l.useState)(!1),[S,w]=(0,l.useState)(null),[P,D]=(0,l.useState)(!1),[T,R]=(0,l.useState)({}),[A,I]=(0,l.useState)(null),[E,F]=(0,l.useState)(null),[L,z]=(0,l.useState)(!1),O=(0,l.useMemo)(()=>(null==a?void 0:a.mitigations)?x(a.mitigations,o,h):[],[a,o,h]),M=(0,l.useMemo)(()=>(null==a?void 0:a.topRisks)?a.topRisks:[],[a]),H=(0,l.useMemo)(()=>{if(!c)return O;let e=c.toLowerCase();return O.filter(s=>(s.title||"").toLowerCase().includes(e)||(s.riskTitle||"").toLowerCase().includes(e))},[O,c]),_=async()=>{if(!T.title.trim())return void n.add("Title is required","error");I("edit");try{let e={...T,progressPercent:Number(T.progressPercent),effectivenessPercent:Number(T.effectivenessPercent)};e.dueDate?e.dueDate=new Date(e.dueDate).toISOString():e.dueDate=null,await i.FH.patch("/api/mitigations/".concat(S.id),e),n.add("Mitigation updated"),w(null),r()}catch(e){n.add(e.message||"Failed to update","error")}finally{I(null)}},W=async()=>{z(!0);try{await i.FH.del("/api/mitigations/".concat(E.id)),n.add("Mitigation deleted"),F(null),w(null),r()}catch(e){n.add(e.message||"Failed to delete","error")}finally{z(!1)}};return a?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{style:{display:"flex",gap:8,marginBottom:12},children:[(0,t.jsx)(j,{value:c,onChange:d,placeholder:"Search mitigations..."}),(0,t.jsx)("button",{className:"button small",onClick:()=>C(!0),children:"+ New Mitigation"})]}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsx)("tr",{children:[{key:"title",label:"Title"},{key:"riskTitle",label:"Risk"},{key:"status",label:"Status"},{key:"progressPercent",label:"Progress"},{key:"effectivenessPercent",label:"Effectiveness"},{key:"ownerDisplayName",label:"Owner"}].map(e=>(0,t.jsxs)("th",{className:"sortable",onClick:()=>{var s;o===(s=e.key)?N(e=>"asc"===e?"desc":"asc"):(u(s),N("asc"))},children:[e.label," ",o===e.key?"asc"===h?"▲":"▼":""]},e.key))})}),(0,t.jsx)("tbody",{children:H.slice(0,50).map(e=>{var s;return(0,t.jsxs)("tr",{onClick:()=>{var s,a;w(e),R({title:e.title||"",description:e.description||"",status:e.status||"NOT_STARTED",progressPercent:null!=(s=e.progressPercent)?s:0,effectivenessPercent:null!=(a=e.effectivenessPercent)?a:0,dueDate:e.dueDate?e.dueDate.slice(0,10):"",ownerDisplayName:e.ownerDisplayName||""}),D(!0),F(null)},style:{cursor:"pointer"},children:[(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.title})}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{className:"muted",children:e.riskTitle})}),(0,t.jsx)("td",{children:(0,t.jsx)(p,{className:null==(s=e.status)?void 0:s.toLowerCase().replace(/\s+/g,"-"),children:e.status})}),(0,t.jsx)("td",{children:(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8},children:[(0,t.jsx)("div",{className:"bar-wrap",style:{flex:1,maxWidth:80},children:(0,t.jsx)("div",{className:"bar-fill",style:{width:"".concat(e.progressPercent||0,"%"),background:(e.progressPercent||0)>=80?"var(--accent)":(e.progressPercent||0)>=30?"var(--warn)":"var(--danger)"}})}),e.progressPercent||0,"%"]})}),(0,t.jsxs)("td",{children:[e.effectivenessPercent||0,"%"]}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{className:"muted",children:e.ownerDisplayName||"-"})})]},e.id)})})]})}),!H.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No mitigations found"})}),f&&(0,t.jsx)(k,{project:s,risks:M,onClose:()=>C(!1),onSaved:()=>{C(!1),r()},toast:n}),S&&!E&&(0,t.jsx)("div",{className:"modal-overlay",onClick:()=>w(null),children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:500},children:[(0,t.jsx)("h2",{style:{margin:0},children:P?"Edit Mitigation":S.title}),(0,t.jsxs)("div",{style:{marginTop:12},children:[(0,t.jsx)(v,{label:"Title *",children:(0,t.jsx)(g,{value:T.title,onChange:e=>R(s=>({...s,title:e}))})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:T.description,onChange:e=>R(s=>({...s,description:e.target.value})),rows:2,style:{width:"100%",resize:"vertical"}})}),(0,t.jsx)(v,{label:"Status",children:(0,t.jsx)(y,{value:T.status,onChange:e=>R(s=>({...s,status:e})),options:m})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Progress %",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:T.progressPercent,onChange:e=>R(s=>({...s,progressPercent:Number(e)}))})}),(0,t.jsx)(v,{label:"Effectiveness %",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:T.effectivenessPercent,onChange:e=>R(s=>({...s,effectivenessPercent:Number(e)}))})})]}),(0,t.jsx)(v,{label:"Due Date",children:(0,t.jsx)(g,{type:"date",value:T.dueDate,onChange:e=>R(s=>({...s,dueDate:e}))})}),(0,t.jsx)(v,{label:"Owner",children:(0,t.jsx)(g,{value:T.ownerDisplayName,onChange:e=>R(s=>({...s,ownerDisplayName:e}))})})]}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:()=>w(null),children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:_,disabled:"edit"===A,children:"edit"===A?"Saving...":"Save Changes"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff",marginLeft:"auto"},onClick:()=>F(S),children:"Delete"})]})]})}),E&&(0,t.jsx)(b,{label:"this mitigation",onConfirm:W,onCancel:()=>F(null),deleting:L})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading..."})})}function w(e){var s,a,n;let{project:r,dashboard:c,toast:d,onRefresh:o}=e,[u,m]=(0,l.useState)(!1),[h,j]=(0,l.useState)(!1),[x,b]=(0,l.useState)({decision:"APPROVED",reviewerName:"",reason:""}),[N,f]=(0,l.useState)(!1),C=(null==c||null==(s=c.gate)?void 0:s.criteria)||[],k=(null==c||null==(a=c.summary)?void 0:a.gateStatus)||"Unknown",S=null==c||null==(n=c.gate)?void 0:n.id,w="Ready"===k?"good":"Warning"===k?"warn":"bad",P=async()=>{m(!0);try{await i.FH.post("/api/projects/".concat(r.id,"/gate/evaluate"),{}),d.add("Gate evaluated"),o()}catch(e){d.add(e.message||"Evaluation failed","error")}finally{m(!1)}},D=async()=>{if(!x.reviewerName.trim())return void d.add("Reviewer name is required","error");f(!0);try{await i.FH.post("/api/gates/".concat(S,"/decisions"),x),d.add("Decision submitted"),j(!1),o()}catch(e){d.add(e.message||"Failed to submit decision","error")}finally{f(!1)}};return c?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{children:"Deployment Gate"}),(0,t.jsx)("p",{className:"muted",children:"Gate evaluation for AI deployment readiness"})]}),(0,t.jsx)("div",{className:"dash-actions",children:(0,t.jsx)("div",{className:"metric-value ".concat(w),style:{fontSize:28},children:k})})]}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsxs)("tr",{children:[(0,t.jsx)("th",{children:"Criterion"}),(0,t.jsx)("th",{children:"Required"}),(0,t.jsx)("th",{children:"Actual"}),(0,t.jsx)("th",{children:"Status"})]})}),(0,t.jsx)("tbody",{children:C.map(e=>{var s;return(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.name})}),(0,t.jsx)("td",{children:e.required}),(0,t.jsx)("td",{children:e.actual}),(0,t.jsx)("td",{children:(0,t.jsx)(p,{className:null==(s=e.status)?void 0:s.toLowerCase(),children:e.status})})]},e.name)})})]})}),!C.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No gate criteria evaluated yet"})}),(0,t.jsxs)("div",{style:{marginTop:16,display:"flex",gap:8,flexWrap:"wrap"},children:[(0,t.jsx)("button",{className:"button small",onClick:P,disabled:u,children:u?"Evaluating...":"Evaluate Gate"}),S&&(0,t.jsx)("button",{className:"button secondary small",onClick:()=>j(!0),children:"Add Decision"}),(0,t.jsx)("a",{href:"/api/projects/".concat(null==r?void 0:r.id,"/gate/history"),className:"button secondary small",target:"_blank",children:"History (API)"})]}),h&&(0,t.jsx)("div",{className:"modal-overlay",onClick:()=>j(!1),children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:400},children:[(0,t.jsx)("h2",{children:"Gate Decision"}),(0,t.jsx)(v,{label:"Decision",children:(0,t.jsx)(y,{value:x.decision,onChange:e=>b(s=>({...s,decision:e})),options:["APPROVED","REJECTED","ACCEPTED","NEEDS_CHANGES"]})}),(0,t.jsx)(v,{label:"Reviewer Name *",children:(0,t.jsx)(g,{value:x.reviewerName,onChange:e=>b(s=>({...s,reviewerName:e}))})}),(0,t.jsx)(v,{label:"Reason",children:(0,t.jsx)("textarea",{className:"input",value:x.reason,onChange:e=>b(s=>({...s,reason:e.target.value})),rows:3,style:{width:"100%",resize:"vertical"}})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:()=>j(!1),children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:D,disabled:N,children:N?"Saving...":"Submit Decision"})]})]})})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading..."})})}function P(e){var s;let{project:a,dashboard:n,onClose:r,onSaved:c,toast:d}=e,[o,u]=(0,l.useState)(!1),[m,h]=(0,l.useState)({provider:"TRELLO",workspaceName:"",baseUrl:"",authMode:"API_KEY"}),j=e=>s=>h(a=>({...a,[e]:s})),x=(null==n||null==(s=n.gate)?void 0:s.workspaceId)||(null==a?void 0:a.workspaceId),p=async()=>{if(!m.workspaceName.trim())return void d.add("Workspace name is required","error");u(!0);try{await i.FH.post("/api/workspaces/".concat(x,"/integrations"),m),d.add("Integration created"),c()}catch(e){d.add(e.message||"Failed to create integration","error")}finally{u(!1)}};return(0,t.jsx)("div",{className:"modal-overlay",onClick:r,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:450},children:[(0,t.jsx)("h2",{children:"New Integration"}),(0,t.jsx)(v,{label:"Provider",children:(0,t.jsx)(y,{value:m.provider,onChange:j("provider"),options:["TRELLO","JIRA","ASANA","MICROSOFT_PLANNER"]})}),(0,t.jsx)(v,{label:"Workspace Name *",children:(0,t.jsx)(g,{value:m.workspaceName,onChange:j("workspaceName")})}),(0,t.jsx)(v,{label:"Base URL",children:(0,t.jsx)(g,{value:m.baseUrl,onChange:j("baseUrl")})}),(0,t.jsx)(v,{label:"Auth Mode",children:(0,t.jsx)(y,{value:m.authMode,onChange:j("authMode"),options:["API_KEY","OAUTH","BASIC"]})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:r,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:p,disabled:o,children:o?"Saving...":"Create Integration"})]})]})})}function D(e){let{project:s,dashboard:a,toast:n,onRefresh:i}=e,[r,c]=(0,l.useState)(!1),d=(null==a?void 0:a.integrations)||[];return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{children:"Integrations"}),(0,t.jsx)("p",{className:"muted",children:"Connect Trello, Jira, Asana, or Microsoft Planner"})]}),(0,t.jsx)("div",{className:"dash-actions",children:(0,t.jsx)("button",{className:"button small",onClick:()=>c(!0),children:"+ New Integration"})})]}),(0,t.jsx)("div",{className:"grid",style:{gridTemplateColumns:"repeat(auto-fit, minmax(240px, 1fr))"},children:["TRELLO","JIRA","ASANA","MICROSOFT_PLANNER"].map(e=>{let s=d.find(s=>s.provider===e);return(0,t.jsxs)("div",{className:"panel",style:{textAlign:"center"},children:[(0,t.jsx)("div",{style:{fontSize:32,marginBottom:8},children:"TRELLO"===e?"⊞":"JIRA"===e?"◆":"ASANA"===e?"◇":"▣"}),(0,t.jsx)("h3",{style:{margin:"0 0 4px"},children:e.replace("_"," ")}),(0,t.jsx)("p",{className:"muted",style:{fontSize:12,margin:"0 0 12px"},children:s?s.workspaceName:"Not configured"}),(0,t.jsx)("div",{style:{display:"flex",gap:6,justifyContent:"center"},children:s?(0,t.jsx)("a",{href:"/api/integrations/".concat(s.id),className:"button secondary small",target:"_blank",children:"Manage"}):(0,t.jsx)("button",{className:"button secondary small",onClick:()=>c(!0),children:"Configure"})})]},e)})}),r&&(0,t.jsx)(P,{project:s,dashboard:a,onClose:()=>c(!1),onSaved:()=>{c(!1),i()},toast:n}),!d.length&&(0,t.jsx)("div",{style:{marginTop:12},children:(0,t.jsx)("a",{href:"/api/integration-providers",className:"button secondary small",target:"_blank",children:"Integration providers (API)"})})]})}function T(e){let{project:s,toast:a}=e,[n,r]=(0,l.useState)([]),[c,d]=(0,l.useState)(!0),[o,u]=(0,l.useState)(null),m=(0,l.useCallback)(async()=>{if(s){d(!0),u(null);try{let e=await i.FH.get("/api/projects/".concat(s.id,"/audit"));r(e.auditEvents||[])}catch(e){u(e.message||"Failed to load audit log")}finally{d(!1)}}},[s]);return((0,l.useEffect)(()=>{m()},[m]),c)?(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading audit log..."})}):o?(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:o})}):n.length?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{children:"Audit Log"}),(0,t.jsx)("p",{className:"muted",children:"Project activity history"})]}),(0,t.jsx)("div",{className:"dash-actions",children:(0,t.jsx)("button",{className:"button secondary small",onClick:m,children:"Refresh"})})]}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsxs)("tr",{children:[(0,t.jsx)("th",{children:"Date"}),(0,t.jsx)("th",{children:"Action"}),(0,t.jsx)("th",{children:"Entity"}),(0,t.jsx)("th",{children:"Actor"}),(0,t.jsx)("th",{children:"Details"})]})}),(0,t.jsx)("tbody",{children:n.map(e=>{var s,a;return(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{style:{fontSize:12,whiteSpace:"nowrap"},children:new Date(e.createdAt).toLocaleString()}),(0,t.jsx)("td",{children:(0,t.jsx)(p,{className:null==(s=e.action)?void 0:s.toLowerCase().replace(/\s+/g,"-"),children:e.action})}),(0,t.jsxs)("td",{style:{fontSize:12},children:[e.entityType," ",(0,t.jsxs)("span",{className:"muted",children:["(",null==(a=e.entityId)?void 0:a.slice(0,8),")"]})]}),(0,t.jsx)("td",{style:{fontSize:12},children:e.actorUserId||"system"}),(0,t.jsx)("td",{style:{fontSize:12,maxWidth:300,overflow:"hidden",textOverflow:"ellipsis"},children:e.afterJson?JSON.stringify(e.afterJson).slice(0,80):"-"})]},e.id)})})]})})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No audit events recorded yet"})})}function R(e){let{projects:s,workspaceId:a,currentProjectId:n,onSwitch:r,onRefresh:c,toast:d}=e,[o,u]=(0,l.useState)(null),[m,h]=(0,l.useState)(null),[j,x]=(0,l.useState)(!1),v=async()=>{u(!0);try{await i.FH.del("/api/projects/".concat(m.id)),d.add('Project "'.concat(m.name,'" deleted')),h(null),c()}catch(e){d.add(e.message||"Failed to delete project","error")}finally{u(!1)}};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{children:"All Projects"}),(0,t.jsxs)("p",{className:"muted",children:[s.length," project(s) in workspace"]})]}),(0,t.jsx)("div",{className:"dash-actions",children:(0,t.jsx)("button",{className:"button small",onClick:()=>x(!0),children:"+ New Project"})})]}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsxs)("tr",{children:[(0,t.jsx)("th",{children:"Name"}),(0,t.jsx)("th",{children:"Status"}),(0,t.jsx)("th",{children:"Type"}),(0,t.jsx)("th",{children:"Created"}),(0,t.jsx)("th",{children:"Actions"})]})}),(0,t.jsx)("tbody",{children:[...s].sort((e,s)=>new Date(s.createdAt)-new Date(e.createdAt)).map(e=>{var s;return(0,t.jsxs)("tr",{style:{background:e.id===n?"var(--surface-alt)":""},children:[(0,t.jsxs)("td",{children:[(0,t.jsx)("strong",{children:e.name}),e.id===n?(0,t.jsx)("span",{className:"muted",style:{fontSize:11,marginLeft:6},children:"(current)"}):"",e.description?(0,t.jsx)("div",{className:"muted",style:{fontSize:11},children:e.description}):""]}),(0,t.jsx)("td",{children:(0,t.jsx)(p,{className:null==(s=e.status)?void 0:s.toLowerCase(),children:e.status})}),(0,t.jsx)("td",{style:{fontSize:12},children:e.projectType}),(0,t.jsx)("td",{style:{fontSize:12},children:new Date(e.createdAt).toLocaleDateString()}),(0,t.jsxs)("td",{style:{textAlign:"right",whiteSpace:"nowrap"},children:[e.id!==n&&(0,t.jsx)("button",{className:"button secondary small",style:{marginRight:6},onClick:()=>r(e.id),children:"Open"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff"},onClick:()=>h(e),disabled:o===e.id,children:"Delete"})]})]},e.id)})})]})}),!s.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No projects yet. Create one to get started."})}),j&&(0,t.jsx)(I,{workspaceId:a,onClose:()=>x(!1),onSaved:()=>{x(!1),c()},toast:d}),m&&(0,t.jsx)("div",{className:"modal-overlay",onClick:()=>h(null),children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:380},children:[(0,t.jsxs)("h3",{children:['Delete "',m.name,'"?']}),(0,t.jsx)("p",{style:{fontSize:13,color:"var(--muted)"},children:"This permanently deletes the project and all its risks, mitigations, and data."}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:()=>h(null),children:"Cancel"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff"},onClick:v,disabled:o,children:o?"Deleting...":"Delete Project"})]})]})})]})}function A(e){let{project:s,onClose:a,onSaved:n,toast:r}=e,[c,d]=(0,l.useState)(!1),[o,u]=(0,l.useState)({name:(null==s?void 0:s.name)||"",description:(null==s?void 0:s.description)||"",subtitle:(null==s?void 0:s.subtitle)||"",status:(null==s?void 0:s.status)||"Active"}),m=async()=>{if(!o.name.trim())return void r.add("Project name is required","error");d(!0);try{await i.FH.patch("/api/projects/".concat(s.id),o),r.add("Project updated"),n()}catch(e){r.add(e.message||"Failed to update project","error")}finally{d(!1)}};return(0,t.jsx)("div",{className:"modal-overlay",onClick:a,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:450},children:[(0,t.jsx)("h2",{children:"Project Settings"}),(0,t.jsx)(v,{label:"Name *",children:(0,t.jsx)(g,{value:o.name,onChange:e=>u(s=>({...s,name:e}))})}),(0,t.jsx)(v,{label:"Subtitle",children:(0,t.jsx)(g,{value:o.subtitle,onChange:e=>u(s=>({...s,subtitle:e}))})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:o.description,onChange:e=>u(s=>({...s,description:e.target.value})),rows:3,style:{width:"100%",resize:"vertical"}})}),(0,t.jsx)(v,{label:"Status",children:(0,t.jsx)(y,{value:o.status,onChange:e=>u(s=>({...s,status:e})),options:["Active","Archived","On Hold"]})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:a,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:m,disabled:c,children:c?"Saving...":"Save Changes"})]})]})})}function I(e){let{workspaceId:s,onClose:a,onSaved:n,toast:r}=e,[c,d]=(0,l.useState)(!1),[o,u]=(0,l.useState)({name:"",description:"",projectType:"AI-Enabler"}),m=async()=>{if(!o.name.trim())return void r.add("Project name is required","error");d(!0);try{await i.FH.post("/api/workspaces/".concat(s,"/projects"),o),r.add("Project created"),n()}catch(e){r.add(e.message||"Failed to create project","error")}finally{d(!1)}};return(0,t.jsx)("div",{className:"modal-overlay",onClick:a,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:450},children:[(0,t.jsx)("h2",{children:"New Project"}),(0,t.jsx)(v,{label:"Name *",children:(0,t.jsx)(g,{value:o.name,onChange:e=>u(s=>({...s,name:e}))})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:o.description,onChange:e=>u(s=>({...s,description:e.target.value})),rows:3,style:{width:"100%",resize:"vertical"}})}),(0,t.jsx)(v,{label:"Project Type",children:(0,t.jsx)(y,{value:o.projectType,onChange:e=>u(s=>({...s,projectType:e})),options:["AI-Enabler","GENERATIVE_AI","ML-Pipeline","Automation"]})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:a,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:m,disabled:c,children:c?"Saving...":"Create Project"})]})]})})}function E(e){let{projects:s,workspaceId:a,currentProjectId:n,onClose:r,onSwitch:c,onSaved:d,toast:o}=e,[u,m]=(0,l.useState)(null),[h,j]=(0,l.useState)(null),[x,v]=(0,l.useState)(!1),g=async()=>{m(!0);try{await i.FH.del("/api/projects/".concat(h.id)),o.add('Project "'.concat(h.name,'" deleted')),j(null),d()}catch(e){o.add(e.message||"Failed to delete project","error")}finally{m(!1)}};return(0,t.jsxs)("div",{className:"modal-overlay",onClick:r,children:[(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:700,maxHeight:"80vh",overflow:"auto"},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"},children:[(0,t.jsx)("h2",{style:{margin:0},children:"All Projects"}),(0,t.jsx)("button",{className:"button small",onClick:()=>v(!0),children:"+ New Project"})]}),(0,t.jsxs)("p",{className:"muted",style:{fontSize:12,marginTop:4},children:[s.length," project(s) in workspace"]}),(0,t.jsx)("div",{className:"table-wrap",style:{marginTop:12},children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsxs)("tr",{children:[(0,t.jsx)("th",{children:"Name"}),(0,t.jsx)("th",{children:"Status"}),(0,t.jsx)("th",{children:"Type"}),(0,t.jsx)("th",{children:"Created"}),(0,t.jsx)("th",{})]})}),(0,t.jsx)("tbody",{children:[...s].sort((e,s)=>new Date(s.createdAt)-new Date(e.createdAt)).map(e=>{var s;return(0,t.jsxs)("tr",{style:{background:e.id===n?"var(--surface-alt)":""},children:[(0,t.jsxs)("td",{children:[(0,t.jsx)("strong",{children:e.name}),e.id===n?(0,t.jsx)("span",{className:"muted",style:{fontSize:11,marginLeft:6},children:"(current)"}):""]}),(0,t.jsx)("td",{children:(0,t.jsx)(p,{className:null==(s=e.status)?void 0:s.toLowerCase(),children:e.status})}),(0,t.jsx)("td",{style:{fontSize:12},children:e.projectType}),(0,t.jsx)("td",{style:{fontSize:12},children:new Date(e.createdAt).toLocaleDateString()}),(0,t.jsxs)("td",{style:{textAlign:"right",whiteSpace:"nowrap"},children:[e.id!==n&&(0,t.jsx)("button",{className:"button secondary small",style:{marginRight:6},onClick:()=>{c(e.id),r()},children:"Open"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff"},onClick:()=>j(e),disabled:u===e.id,children:"✕"})]})]},e.id)})})]})}),!s.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No projects yet"})}),(0,t.jsx)("div",{className:"modal-actions",children:(0,t.jsx)("button",{className:"button secondary small",onClick:r,children:"Close"})})]}),h&&(0,t.jsx)("div",{className:"modal-overlay",onClick:()=>j(null),children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:380},children:[(0,t.jsxs)("h3",{children:['Delete "',h.name,'"?']}),(0,t.jsx)("p",{style:{fontSize:13,color:"var(--muted)"},children:"This permanently deletes the project and all its risks, mitigations, and data."}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:()=>j(null),children:"Cancel"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff"},onClick:g,disabled:u,children:u?"Deleting...":"Delete Project"})]})]})}),x&&(0,t.jsx)(I,{workspaceId:a,onClose:()=>v(!1),onSaved:()=>{v(!1),d()},toast:o})]})}function F(){let e=(0,n.useRouter)(),s=(0,n.useSearchParams)(),a=c.includes(s.get("tab"))?s.get("tab"):"Overview",[d,o]=(0,l.useState)(null),[u,m]=(0,l.useState)([]),[j,x]=(0,l.useState)(s.get("projectId")||null),[p,v]=(0,l.useState)(null),[g,y]=(0,l.useState)(!0),[b,f]=(0,l.useState)(null),[k,P]=(0,l.useState)(0),[I,F]=(0,l.useState)(!1),[L,z]=(0,l.useState)(!1),[O,M]=(0,l.useState)(null),{toasts:H,add:_}=function(){let[e,s]=(0,l.useState)([]);return{toasts:e,add:(0,l.useCallback)(function(e){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"success",t=Date.now()+Math.random();s(s=>[...s,{id:t,message:e,type:a}]),setTimeout(()=>s(e=>e.filter(e=>e.id!==t)),3e3)},[])}}(),W=(0,l.useCallback)(()=>P(e=>e+1),[]),G=(0,l.useCallback)(async e=>{y(!0),f(null);try{var s,a;let t=await i.FH.get("/api/auth/session");if(!(null==t?void 0:t.authenticated)){f("Not authenticated."),y(!1);return}let l=null==(s=t.memberships)?void 0:s[0];if(!l){f("No organization membership found."),y(!1);return}let n=l.organizationId,r=null==(a=(await i.FH.get("/api/workspaces?organizationId=".concat(n))).workspaces)?void 0:a[0];if(!r){f("No workspace found — create one to get started."),y(!1);return}M(r.id);let c=(await i.FH.get("/api/workspaces/".concat(r.id,"/projects"))).projects||[];if(!c.length){f("No project found — create a project to get started."),y(!1);return}m(c);let d=e?c.find(s=>s.id===e):c[0];if(!d){f("Project not found."),y(!1);return}o(d),e||x(d.id);let u=await i.FH.get("/api/projects/".concat(d.id,"/dashboard"));v(u.dashboard),y(!1)}catch(e){f(e.message||"Failed to load dashboard data"),y(!1)}},[]);(0,l.useEffect)(()=>{G(j)},[G,k,j]);let q=s=>{x(s),e.push("/dashboard?tab=".concat(a,"&projectId=").concat(s))};return g&&"Integrations"!==a?(0,t.jsx)("div",{className:"shell-loading",children:(0,t.jsx)("div",{className:"spinner"})}):b&&"Integrations"!==a?(0,t.jsxs)("div",{className:"empty-state",children:[(0,t.jsx)("div",{className:"empty-icon",children:"!"}),(0,t.jsx)("p",{children:b}),(0,t.jsx)("button",{className:"button secondary small",style:{marginTop:12},onClick:()=>P(e=>e+1),children:"Retry"})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsx)("div",{style:{display:"flex",alignItems:"center",gap:10},children:(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6},children:[(0,t.jsx)("select",{className:"input",value:(null==d?void 0:d.id)||"",onChange:e=>q(e.target.value),style:{fontSize:16,fontWeight:700,width:"auto",minWidth:200,border:"none",background:"transparent",cursor:"pointer"},children:u.map(e=>(0,t.jsxs)("option",{value:e.id,children:[e.name," ","Active"!==e.status?"(".concat(e.status,")"):""]},e.id))}),(0,t.jsx)("button",{className:"button secondary small",style:{fontSize:14,padding:"2px 8px"},onClick:()=>F(!0),title:"Project settings",children:"⚙"}),(0,t.jsx)("button",{className:"button secondary small",onClick:()=>z(!0),children:"Projects"})]}),(0,t.jsx)("p",{className:"muted",style:{margin:0},children:(null==d?void 0:d.subtitle)||(null==d?void 0:d.description)||""})]})}),(0,t.jsxs)("div",{className:"dash-actions",children:[(0,t.jsx)("a",{href:"/api/projects/".concat(null==d?void 0:d.id,"/reports/executive.html"),className:"button secondary small",target:"_blank",children:"Report"}),(0,t.jsx)("a",{href:"/api/projects/".concat(null==d?void 0:d.id,"/reports/risk-register.csv"),className:"button secondary small",target:"_blank",children:"CSV"})]})]}),(0,t.jsx)("div",{className:"tabs",children:c.map(s=>(0,t.jsx)("button",{className:"tab ".concat(a===s?"active":""),onClick:()=>e.push("/dashboard?tab=".concat(s).concat(d?"&projectId=".concat(d.id):"")),children:s},s))}),"Overview"===a&&(0,t.jsx)(r,{name:"Overview",children:(0,t.jsx)(N,{project:d,dashboard:p})},"overview"),"Projects"===a&&(0,t.jsx)(r,{name:"Projects",children:(0,t.jsx)(R,{projects:u,workspaceId:O,currentProjectId:null==d?void 0:d.id,onSwitch:q,onRefresh:W,toast:{add:_}})},"projects"),"Risks"===a&&(0,t.jsx)(r,{name:"Risks",children:(0,t.jsx)(C,{project:d,dashboard:p,toast:{add:_},onRefresh:W})},"risks"),"Mitigations"===a&&(0,t.jsx)(r,{name:"Mitigations",children:(0,t.jsx)(S,{project:d,dashboard:p,toast:{add:_},onRefresh:W})},"mitigations"),"Gate"===a&&(0,t.jsx)(r,{name:"Gate",children:(0,t.jsx)(w,{project:d,dashboard:p,toast:{add:_},onRefresh:W})},"gate"),"Integrations"===a&&(0,t.jsx)(r,{name:"Integrations",children:(0,t.jsx)(D,{project:d,dashboard:p,toast:{add:_},onRefresh:W})},"integrations"),"Audit"===a&&(0,t.jsx)(r,{name:"Audit",children:(0,t.jsx)(T,{project:d,toast:{add:_}})},"audit"),I&&(0,t.jsx)(A,{project:d,onClose:()=>F(!1),onSaved:()=>{F(!1),W()},toast:{add:_}}),L&&(0,t.jsx)(E,{projects:u,workspaceId:O,currentProjectId:null==d?void 0:d.id,onClose:()=>z(!1),onSwitch:q,onSaved:()=>{z(!1),W()},toast:{add:_}}),(0,t.jsx)(h,{toasts:H})]})}},6282:(e,s,a)=>{"use strict";async function t(e,s,a){var t;let l={method:e,headers:{"Content-Type":"application/json"}};a&&(l.body=JSON.stringify(a));let n=await fetch("".concat("").concat(s),l),i=(null==(t=n.headers.get("content-type"))?void 0:t.includes("application/json"))?await n.json():await n.text();if(!n.ok)throw Error((null==i?void 0:i.error)||(null==i?void 0:i.message)||"Request failed (".concat(n.status,")"));return i}a.d(s,{FH:()=>l,Ht:()=>n,ri:()=>i});let l={get:e=>t("GET",e),post:(e,s)=>t("POST",e,s),put:(e,s)=>t("PUT",e,s),patch:(e,s)=>t("PATCH",e,s),del:e=>t("DELETE",e)};async function n(){try{let e=await l.get("/api/auth/session");return e.user||e.actor||null}catch(e){return null}}async function i(){await l.post("/api/auth/logout"),window.location.href="/"}}},e=>{e.O(0,[8441,1255,7358],()=>e(e.s=646)),_N_E=e.O()}]);  s t  q u s   e (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5105],{63:(e,s,a)=>{"use strict";var t=a(7260);a.o(t,"useRouter")&&a.d(s,{useRouter:function(){return t.useRouter}}),a.o(t,"useSearchParams")&&a.d(s,{useSearchParams:function(){return t.useSearchParams}})},646:(e,s,a)=>{Promise.resolve().then(a.bind(a,3399))},3399:(e,s,a)=>{"use strict";a.r(s),a.d(s,{default:()=>F});var t=a(5155),l=a(2115),n=a(63),i=a(6282);class r extends l.Component{static getDerivedStateFromError(e){return{error:e}}render(){if(this.state.error){let{fallback:e}=this.props;return e?"function"==typeof e?e(this.state.error):e:(0,t.jsxs)("div",{className:"empty-state",children:[(0,t.jsx)("div",{className:"empty-icon",children:"!"}),(0,t.jsxs)("p",{children:["Something went wrong in ",this.props.name||"this section","."]}),(0,t.jsx)("p",{className:"muted",style:{fontSize:12,marginTop:4},children:this.state.error.message}),(0,t.jsx)("button",{className:"button secondary small",style:{marginTop:12},onClick:()=>{var e,s;this.setState({error:null}),null==(e=(s=this.props).onRetry)||e.call(s)},children:"Retry"})]})}return this.props.children}constructor(e){super(e),this.state={error:null}}}let c=["Overview","Projects","Risks","Mitigations","Gate","Integrations","Audit"],d=["Technical","Governance","Legal","Ethical","Operational"],o=["Design","Development","Testing","Deployment"],u=["OPEN","IN_MITIGATION","ACCEPTED","CLOSED"],m=["NOT_STARTED","IN_PROGRESS","DONE","REJECTED"];function h(e){let{toasts:s}=e;return s.length?(0,t.jsx)("div",{className:"toast-container",children:s.map(e=>(0,t.jsx)("div",{className:"toast ".concat(e.type),children:e.message},e.id))}):null}function j(e){let{value:s,onChange:a,placeholder:l}=e;return(0,t.jsxs)("div",{className:"search-wrap",children:[(0,t.jsx)("span",{className:"search-icon",children:"⌕"}),(0,t.jsx)("input",{className:"input",value:s,onChange:e=>a(e.target.value),placeholder:l||"Search..."})]})}function x(e,s,a){return s?[...e].sort((e,t)=>{let l=e[s],n=t[s];if(null==l)return 1;if(null==n)return -1;let i="number"==typeof l?l-n:String(l).localeCompare(String(n));return"asc"===a?i:-i}):e}function p(e){let{children:s,className:a}=e;return(0,t.jsx)("span",{className:"badge ".concat(a||""),children:s})}function v(e){let{label:s,children:a}=e;return(0,t.jsxs)("div",{style:{marginBottom:10},children:[(0,t.jsx)("label",{style:{display:"block",fontSize:12,color:"var(--muted)",marginBottom:3},children:s}),a]})}function g(e){let{value:s,onChange:a,type:l="text",min:n,max:i,style:r}=e;return(0,t.jsx)("input",{className:"input",type:l,value:s,onChange:e=>a(e.target.value),min:n,max:i,style:{width:"100%",...r}})}function y(e){let{value:s,onChange:a,options:l}=e;return(0,t.jsxs)("select",{className:"input",value:s,onChange:e=>a(e.target.value),style:{width:"100%"},children:[(0,t.jsx)("option",{value:"",children:"— Select —"}),(l||[]).map(e=>{let s="object"==typeof e?e.value:e,a="object"==typeof e?e.label:e;return(0,t.jsx)("option",{value:s,children:a},s)})]})}function b(e){let{label:s,onConfirm:a,onCancel:l,deleting:n}=e;return(0,t.jsx)("div",{className:"modal-overlay",onClick:l,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:380},children:[(0,t.jsxs)("h3",{children:["Delete ",s,"?"]}),(0,t.jsx)("p",{style:{fontSize:13,color:"var(--muted)"},children:"This cannot be undone."}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:l,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff"},onClick:a,disabled:n,children:n?"Deleting...":"Delete"})]})]})})}function N(e){let{project:s,dashboard:a}=e,n=(0,l.useMemo)(()=>{var e,s,t,l,n,i,r,c,d,o,u,m,h,j,x,p,v,g,y;return a?[{label:"Overall Score",value:null!=(p=null==(e=a.summary)?void 0:e.overallScore)?p:"-",cls:(null==(s=a.summary)?void 0:s.overallScore)>=75?"bad":(null==(t=a.summary)?void 0:t.overallScore)>=50?"warn":"good",sub:"Risk level: ".concat((null==(l=a.summary)?void 0:l.riskLevel)||"-")},{label:"Deployment Gate",value:null!=(v=null==(n=a.summary)?void 0:n.gateStatus)?v:"-",cls:(null==(i=a.summary)?void 0:i.gateStatus)==="Ready"?"good":(null==(r=a.summary)?void 0:r.gateStatus)==="Warning"?"warn":"bad",sub:(null==(c=a.gate)?void 0:c.message)||""},{label:"Open Risks",value:null!=(g=null==(d=a.summary)?void 0:d.openRisks)?g:0,cls:((null==(o=a.summary)?void 0:o.openRisks)||0)>5?"bad":((null==(u=a.summary)?void 0:u.openRisks)||0)>2?"warn":"good",sub:"".concat((null==(m=a.summary)?void 0:m.totalRisks)||0," total risks")},{label:"Mitigation",value:"".concat(null!=(y=null==(h=a.summary)?void 0:h.mitigationCompletion)?y:0,"%"),cls:40>((null==(j=a.summary)?void 0:j.mitigationCompletion)||0)?"bad":70>((null==(x=a.summary)?void 0:x.mitigationCompletion)||0)?"warn":"good",sub:"Average active-risk completion"}]:[]},[a]);return a?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{className:"grid",style:{gridTemplateColumns:"repeat(auto-fit, minmax(200px, 1fr))"},children:n.map(e=>(0,t.jsxs)("div",{className:"metric-card",children:[(0,t.jsx)("h3",{children:e.label}),(0,t.jsx)("div",{className:"metric-value ".concat(e.cls),children:e.value}),(0,t.jsx)("div",{className:"metric-sub",children:e.sub})]},e.label))}),(0,t.jsxs)("div",{className:"grid",style:{gridTemplateColumns:"1fr 1fr",marginTop:18},children:[(0,t.jsxs)("div",{className:"panel",children:[(0,t.jsx)("h2",{children:"Dimensions"}),(a.dimensions||[]).map(e=>(0,t.jsxs)("div",{style:{marginBottom:12},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:4},children:[(0,t.jsx)("span",{style:{fontSize:13},children:e.name}),(0,t.jsx)("strong",{style:{fontSize:13},children:e.score})]}),(0,t.jsx)("div",{className:"bar-wrap",children:(0,t.jsx)("div",{className:"bar-fill",style:{width:"".concat(Math.min(e.score,100),"%"),background:e.score>=50?"var(--danger)":e.score>=25?"var(--warn)":"var(--accent)"}})})]},e.name))]}),(0,t.jsxs)("div",{className:"panel",children:[(0,t.jsx)("h2",{children:"Lifecycle"}),(a.lifecycle||[]).map(e=>(0,t.jsxs)("div",{style:{marginBottom:12},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:4},children:[(0,t.jsx)("span",{style:{fontSize:13},children:e.name}),(0,t.jsxs)("span",{className:"muted",style:{fontSize:12},children:[e.openRisks," open"]})]}),(0,t.jsx)("div",{className:"bar-wrap",children:(0,t.jsx)("div",{className:"bar-fill",style:{width:"".concat(Math.min(e.riskScore||0,100),"%"),background:(e.riskScore||0)>=50?"var(--danger)":(e.riskScore||0)>=25?"var(--warn)":"var(--accent)"}})})]},e.name))]})]})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading dashboard data..."})})}function f(e){let{project:s,onClose:a,onSaved:n,toast:r}=e,[c,u]=(0,l.useState)(!1),[m,h]=(0,l.useState)({title:"",description:"",dimension:"",domain:"",lifecyclePhase:"",probability:50,impact:50,detectability:50,ownerDisplayName:""}),j=e=>s=>h(a=>({...a,[e]:s})),x=async()=>{if(!m.title.trim())return void r.add("Title is required","error");if(!m.dimension)return void r.add("Dimension is required","error");u(!0);try{await i.FH.post("/api/projects/".concat(s.id,"/risks"),m),r.add("Risk created"),n()}catch(e){r.add(e.message||"Failed to create risk","error")}finally{u(!1)}};return(0,t.jsx)("div",{className:"modal-overlay",onClick:a,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:500},children:[(0,t.jsx)("h2",{children:"New Risk"}),(0,t.jsx)(v,{label:"Title *",children:(0,t.jsx)(g,{value:m.title,onChange:j("title")})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:m.description,onChange:e=>j("description")(e.target.value),rows:3,style:{width:"100%",resize:"vertical"}})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Dimension *",children:(0,t.jsx)(y,{value:m.dimension,onChange:j("dimension"),options:d})}),(0,t.jsx)(v,{label:"Domain",children:(0,t.jsx)(g,{value:m.domain,onChange:j("domain")})})]}),(0,t.jsx)(v,{label:"Lifecycle Phase",children:(0,t.jsx)(y,{value:m.lifecyclePhase,onChange:j("lifecyclePhase"),options:o})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Probability",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:m.probability,onChange:j("probability")})}),(0,t.jsx)(v,{label:"Impact",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:m.impact,onChange:j("impact")})}),(0,t.jsx)(v,{label:"Detectability",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:m.detectability,onChange:j("detectability")})})]}),(0,t.jsx)(v,{label:"Owner",children:(0,t.jsx)(g,{value:m.ownerDisplayName,onChange:j("ownerDisplayName")})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:a,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:x,disabled:c,children:c?"Saving...":"Create Risk"})]})]})})}function C(e){let{project:s,dashboard:a,toast:n,onRefresh:r}=e,[c,m]=(0,l.useState)(""),[h,N]=(0,l.useState)("normalizedScore"),[C,k]=(0,l.useState)("desc"),[w,S]=(0,l.useState)(0),[P,D]=(0,l.useState)(null),[T,R]=(0,l.useState)(!1),[A,I]=(0,l.useState)(!1),[E,F]=(0,l.useState)({}),[L,O]=(0,l.useState)(null),[z,M]=(0,l.useState)(null),[H,_]=(0,l.useState)(!1),W=(0,l.useMemo)(()=>(null==a?void 0:a.topRisks)?x(a.topRisks,h,C):[],[a,h,C]),G=(0,l.useMemo)(()=>{if(!c)return W;let e=c.toLowerCase();return W.filter(s=>(s.title||"").toLowerCase().includes(e)||(s.dimension||"").toLowerCase().includes(e)||(s.ownerDisplayName||"").toLowerCase().includes(e))},[W,c]),q=G.slice(0,(w+1)*20),B=async(e,s)=>{O(e);try{await i.FH.patch("/api/risks/".concat(e),{status:s}),n.add("Risk status updated to ".concat(s)),D(null),r()}catch(e){n.add(e.message,"error")}finally{O(null)}},J=async()=>{if(!E.title.trim())return void n.add("Title is required","error");O("edit");try{await i.FH.patch("/api/risks/".concat(P.id),E),n.add("Risk updated"),D(null),r()}catch(e){n.add(e.message||"Failed to update","error")}finally{O(null)}},U=async()=>{_(!0);try{await i.FH.del("/api/risks/".concat(z.id)),n.add("Risk deleted"),M(null),D(null),r()}catch(e){n.add(e.message||"Failed to delete","error")}finally{_(!1)}};return a?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{style:{display:"flex",gap:8,marginBottom:12},children:[(0,t.jsx)(j,{value:c,onChange:m,placeholder:"Search risks by title, dimension, owner..."}),(0,t.jsx)("button",{className:"button small",onClick:()=>R(!0),children:"+ New Risk"})]}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsx)("tr",{children:[{key:"id",label:"ID"},{key:"title",label:"Risk"},{key:"dimension",label:"Dimension"},{key:"lifecyclePhase",label:"Phase"},{key:"normalizedScore",label:"Score"},{key:"residualScore",label:"Residual"},{key:"status",label:"Status"},{key:"ownerDisplayName",label:"Owner"}].map(e=>(0,t.jsxs)("th",{className:"sortable",onClick:()=>{var s;h===(s=e.key)?k(e=>"asc"===e?"desc":"asc"):(N(s),k("asc"))},children:[e.label," ",h===e.key?"asc"===C?"▲":"▼":""]},e.key))})}),(0,t.jsx)("tbody",{children:q.map(e=>{var s,a,l;return(0,t.jsxs)("tr",{onClick:()=>{var s,a,t;D(e),F({title:e.title||"",description:e.description||"",dimension:e.dimension||"",domain:e.domain||"",lifecyclePhase:e.lifecyclePhase||"",probability:null!=(s=e.probability)?s:50,impact:null!=(a=e.impact)?a:50,detectability:null!=(t=e.detectability)?t:50,ownerDisplayName:e.ownerDisplayName||""}),I(!1),M(null)},children:[(0,t.jsx)("td",{style:{fontFamily:"monospace",fontSize:12},children:null==(s=e.id)?void 0:s.slice(0,8)}),(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.title})}),(0,t.jsx)("td",{children:(0,t.jsx)(p,{className:null==(a=e.dimension)?void 0:a.toLowerCase(),children:e.dimension})}),(0,t.jsx)("td",{style:{fontSize:12},children:e.lifecyclePhase}),(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.normalizedScore})}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{style:{color:e.residualScore>=50?"var(--danger)":e.residualScore>=25?"var(--warn)":"var(--accent)"},children:e.residualScore})}),(0,t.jsx)("td",{children:(0,t.jsx)(p,{className:null==(l=e.status)?void 0:l.toLowerCase().replace(/\s+/g,"-"),children:e.status})}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{className:"muted",children:e.ownerDisplayName||"-"})})]},e.id)})})]})}),G.length>q.length&&(0,t.jsx)("div",{style:{textAlign:"center",marginTop:12},children:(0,t.jsxs)("button",{className:"button secondary small",onClick:()=>S(e=>e+1),children:["Show more (",G.length-q.length," remaining)"]})}),!G.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No risks match your search"})}),T&&(0,t.jsx)(f,{project:s,onClose:()=>R(!1),onSaved:()=>{R(!1),r()},toast:n}),P&&!z&&(0,t.jsx)("div",{className:"modal-overlay",onClick:()=>D(null),children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:520},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"},children:[(0,t.jsx)("h2",{style:{margin:0},children:P.title}),(0,t.jsx)("button",{className:"button secondary small",onClick:()=>I(!A),children:A?"View":"Edit"})]}),A?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{style:{marginTop:12},children:[(0,t.jsx)(v,{label:"Title *",children:(0,t.jsx)(g,{value:E.title,onChange:e=>F(s=>({...s,title:e}))})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:E.description,onChange:e=>F(s=>({...s,description:e.target.value})),rows:2,style:{width:"100%",resize:"vertical"}})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Dimension",children:(0,t.jsx)(y,{value:E.dimension,onChange:e=>F(s=>({...s,dimension:e})),options:d})}),(0,t.jsx)(v,{label:"Domain",children:(0,t.jsx)(g,{value:E.domain,onChange:e=>F(s=>({...s,domain:e}))})})]}),(0,t.jsx)(v,{label:"Lifecycle Phase",children:(0,t.jsx)(y,{value:E.lifecyclePhase,onChange:e=>F(s=>({...s,lifecyclePhase:e})),options:o})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Probability",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:E.probability,onChange:e=>F(s=>({...s,probability:Number(e)}))})}),(0,t.jsx)(v,{label:"Impact",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:E.impact,onChange:e=>F(s=>({...s,impact:Number(e)}))})}),(0,t.jsx)(v,{label:"Detectability",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:E.detectability,onChange:e=>F(s=>({...s,detectability:Number(e)}))})})]}),(0,t.jsx)(v,{label:"Owner",children:(0,t.jsx)(g,{value:E.ownerDisplayName,onChange:e=>F(s=>({...s,ownerDisplayName:e}))})})]}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:()=>D(null),children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:J,disabled:"edit"===L,children:"edit"===L?"Saving...":"Save Changes"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff",marginLeft:"auto"},onClick:()=>M(P),children:"Delete"})]})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:12,fontSize:13,marginTop:12},children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Dimension"}),(0,t.jsx)("br",{}),P.dimension]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Phase"}),(0,t.jsx)("br",{}),P.lifecyclePhase]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Probability"}),(0,t.jsx)("br",{}),P.probability]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Impact"}),(0,t.jsx)("br",{}),P.impact]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Detectability"}),(0,t.jsx)("br",{}),P.detectability]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Score"}),(0,t.jsx)("br",{}),(0,t.jsx)("strong",{children:P.normalizedScore})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Residual"}),(0,t.jsx)("br",{}),P.residualScore]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Owner"}),(0,t.jsx)("br",{}),P.ownerDisplayName||"-"]})]}),P.description&&(0,t.jsxs)("div",{style:{marginTop:12,fontSize:13},children:[(0,t.jsx)("span",{className:"muted",children:"Description"}),(0,t.jsx)("br",{}),P.description]}),(0,t.jsxs)("div",{style:{marginTop:16},children:[(0,t.jsx)("span",{className:"muted",style:{fontSize:12},children:"Update status:"}),(0,t.jsx)("div",{style:{display:"flex",gap:6,marginTop:6,flexWrap:"wrap"},children:u.map(e=>(0,t.jsx)("button",{className:"button small ".concat("OPEN"===e?"secondary":""),onClick:()=>B(P.id,e),disabled:L===P.id,children:e.replace("_"," ")},e))})]}),(0,t.jsx)("div",{className:"modal-actions",children:(0,t.jsx)("button",{className:"button secondary small",onClick:()=>D(null),children:"Close"})})]})]})}),z&&(0,t.jsx)(b,{label:"this risk",onConfirm:U,onCancel:()=>M(null),deleting:H})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading..."})})}function k(e){let{project:s,risks:a,onClose:n,onSaved:r,toast:c}=e,[d,o]=(0,l.useState)(!1),[u,h]=(0,l.useState)({riskId:"",title:"",description:"",status:"NOT_STARTED",progressPercent:0,effectivenessPercent:0,dueDate:"",ownerDisplayName:""}),j=e=>s=>h(a=>({...a,[e]:s})),x=async()=>{if(!u.title.trim())return void c.add("Title is required","error");if(!u.riskId)return void c.add("Please select a risk","error");o(!0);try{let e={...u,progressPercent:Number(u.progressPercent),effectivenessPercent:Number(u.effectivenessPercent)};e.dueDate?e.dueDate=new Date(e.dueDate).toISOString():delete e.dueDate,await i.FH.post("/api/risks/".concat(u.riskId,"/mitigations"),e),c.add("Mitigation created"),r()}catch(e){c.add(e.message||"Failed to create mitigation","error")}finally{o(!1)}};return(0,t.jsx)("div",{className:"modal-overlay",onClick:n,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:500},children:[(0,t.jsx)("h2",{children:"New Mitigation"}),(0,t.jsx)(v,{label:"Risk *",children:(0,t.jsx)(y,{value:u.riskId,onChange:j("riskId"),options:(a||[]).map(e=>({value:e.id,label:e.title}))})}),(0,t.jsx)(v,{label:"Title *",children:(0,t.jsx)(g,{value:u.title,onChange:j("title")})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:u.description,onChange:e=>j("description")(e.target.value),rows:2,style:{width:"100%",resize:"vertical"}})}),(0,t.jsx)(v,{label:"Status",children:(0,t.jsx)(y,{value:u.status,onChange:j("status"),options:m})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Progress %",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:u.progressPercent,onChange:j("progressPercent")})}),(0,t.jsx)(v,{label:"Effectiveness %",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:u.effectivenessPercent,onChange:j("effectivenessPercent")})})]}),(0,t.jsx)(v,{label:"Due Date",children:(0,t.jsx)(g,{type:"date",value:u.dueDate,onChange:j("dueDate")})}),(0,t.jsx)(v,{label:"Owner",children:(0,t.jsx)(g,{value:u.ownerDisplayName,onChange:j("ownerDisplayName")})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:n,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:x,disabled:d,children:d?"Saving...":"Create Mitigation"})]})]})})}function w(e){let{project:s,dashboard:a,toast:n,onRefresh:r}=e,[c,d]=(0,l.useState)(""),[o,u]=(0,l.useState)("progressPercent"),[h,N]=(0,l.useState)("asc"),[f,C]=(0,l.useState)(!1),[w,S]=(0,l.useState)(null),[P,D]=(0,l.useState)(!1),[T,R]=(0,l.useState)({}),[A,I]=(0,l.useState)(null),[E,F]=(0,l.useState)(null),[L,O]=(0,l.useState)(!1),z=(0,l.useMemo)(()=>(null==a?void 0:a.mitigations)?x(a.mitigations,o,h):[],[a,o,h]),M=(0,l.useMemo)(()=>(null==a?void 0:a.topRisks)?a.topRisks:[],[a]),H=(0,l.useMemo)(()=>{if(!c)return z;let e=c.toLowerCase();return z.filter(s=>(s.title||"").toLowerCase().includes(e)||(s.riskTitle||"").toLowerCase().includes(e))},[z,c]),_=async()=>{if(!T.title.trim())return void n.add("Title is required","error");I("edit");try{let e={...T,progressPercent:Number(T.progressPercent),effectivenessPercent:Number(T.effectivenessPercent)};e.dueDate?e.dueDate=new Date(e.dueDate).toISOString():e.dueDate=null,await i.FH.patch("/api/mitigations/".concat(w.id),e),n.add("Mitigation updated"),S(null),r()}catch(e){n.add(e.message||"Failed to update","error")}finally{I(null)}},W=async()=>{O(!0);try{await i.FH.del("/api/mitigations/".concat(E.id)),n.add("Mitigation deleted"),F(null),S(null),r()}catch(e){n.add(e.message||"Failed to delete","error")}finally{O(!1)}};return a?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{style:{display:"flex",gap:8,marginBottom:12},children:[(0,t.jsx)(j,{value:c,onChange:d,placeholder:"Search mitigations..."}),(0,t.jsx)("button",{className:"button small",onClick:()=>C(!0),children:"+ New Mitigation"})]}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsx)("tr",{children:[{key:"title",label:"Title"},{key:"riskTitle",label:"Risk"},{key:"status",label:"Status"},{key:"progressPercent",label:"Progress"},{key:"effectivenessPercent",label:"Effectiveness"},{key:"ownerDisplayName",label:"Owner"}].map(e=>(0,t.jsxs)("th",{className:"sortable",onClick:()=>{var s;o===(s=e.key)?N(e=>"asc"===e?"desc":"asc"):(u(s),N("asc"))},children:[e.label," ",o===e.key?"asc"===h?"▲":"▼":""]},e.key))})}),(0,t.jsx)("tbody",{children:H.slice(0,50).map(e=>{var s;return(0,t.jsxs)("tr",{onClick:()=>{var s,a;S(e),R({title:e.title||"",description:e.description||"",status:e.status||"NOT_STARTED",progressPercent:null!=(s=e.progressPercent)?s:0,effectivenessPercent:null!=(a=e.effectivenessPercent)?a:0,dueDate:e.dueDate?e.dueDate.slice(0,10):"",ownerDisplayName:e.ownerDisplayName||""}),D(!0),F(null)},style:{cursor:"pointer"},children:[(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.title})}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{className:"muted",children:e.riskTitle})}),(0,t.jsx)("td",{children:(0,t.jsx)(p,{className:null==(s=e.status)?void 0:s.toLowerCase().replace(/\s+/g,"-"),children:e.status})}),(0,t.jsx)("td",{children:(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8},children:[(0,t.jsx)("div",{className:"bar-wrap",style:{flex:1,maxWidth:80},children:(0,t.jsx)("div",{className:"bar-fill",style:{width:"".concat(e.progressPercent||0,"%"),background:(e.progressPercent||0)>=80?"var(--accent)":(e.progressPercent||0)>=30?"var(--warn)":"var(--danger)"}})}),e.progressPercent||0,"%"]})}),(0,t.jsxs)("td",{children:[e.effectivenessPercent||0,"%"]}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{className:"muted",children:e.ownerDisplayName||"-"})})]},e.id)})})]})}),!H.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No mitigations found"})}),f&&(0,t.jsx)(k,{project:s,risks:M,onClose:()=>C(!1),onSaved:()=>{C(!1),r()},toast:n}),w&&!E&&(0,t.jsx)("div",{className:"modal-overlay",onClick:()=>S(null),children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:500},children:[(0,t.jsx)("h2",{style:{margin:0},children:P?"Edit Mitigation":w.title}),(0,t.jsxs)("div",{style:{marginTop:12},children:[(0,t.jsx)(v,{label:"Title *",children:(0,t.jsx)(g,{value:T.title,onChange:e=>R(s=>({...s,title:e}))})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:T.description,onChange:e=>R(s=>({...s,description:e.target.value})),rows:2,style:{width:"100%",resize:"vertical"}})}),(0,t.jsx)(v,{label:"Status",children:(0,t.jsx)(y,{value:T.status,onChange:e=>R(s=>({...s,status:e})),options:m})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Progress %",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:T.progressPercent,onChange:e=>R(s=>({...s,progressPercent:Number(e)}))})}),(0,t.jsx)(v,{label:"Effectiveness %",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:T.effectivenessPercent,onChange:e=>R(s=>({...s,effectivenessPercent:Number(e)}))})})]}),(0,t.jsx)(v,{label:"Due Date",children:(0,t.jsx)(g,{type:"date",value:T.dueDate,onChange:e=>R(s=>({...s,dueDate:e}))})}),(0,t.jsx)(v,{label:"Owner",children:(0,t.jsx)(g,{value:T.ownerDisplayName,onChange:e=>R(s=>({...s,ownerDisplayName:e}))})})]}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:()=>S(null),children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:_,disabled:"edit"===A,children:"edit"===A?"Saving...":"Save Changes"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff",marginLeft:"auto"},onClick:()=>F(w),children:"Delete"})]})]})}),E&&(0,t.jsx)(b,{label:"this mitigation",onConfirm:W,onCancel:()=>F(null),deleting:L})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading..."})})}function S(e){var s,a,n;let{project:r,dashboard:c,toast:d,onRefresh:o}=e,[u,m]=(0,l.useState)(!1),[h,j]=(0,l.useState)(!1),[x,b]=(0,l.useState)({decision:"APPROVED",reviewerName:"",reason:""}),[N,f]=(0,l.useState)(!1),C=(null==c||null==(s=c.gate)?void 0:s.criteria)||[],k=(null==c||null==(a=c.summary)?void 0:a.gateStatus)||"Unknown",w=null==c||null==(n=c.gate)?void 0:n.id,S="Ready"===k?"good":"Warning"===k?"warn":"bad",P=async()=>{m(!0);try{await i.FH.post("/api/projects/".concat(r.id,"/gate/evaluate"),{}),d.add("Gate evaluated"),o()}catch(e){d.add(e.message||"Evaluation failed","error")}finally{m(!1)}},D=async()=>{if(!x.reviewerName.trim())return void d.add("Reviewer name is required","error");f(!0);try{await i.FH.post("/api/gates/".concat(w,"/decisions"),x),d.add("Decision submitted"),j(!1),o()}catch(e){d.add(e.message||"Failed to submit decision","error")}finally{f(!1)}};return c?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{children:"Deployment Gate"}),(0,t.jsx)("p",{className:"muted",children:"Gate evaluation for AI deployment readiness"})]}),(0,t.jsx)("div",{className:"dash-actions",children:(0,t.jsx)("div",{className:"metric-value ".concat(S),style:{fontSize:28},children:k})})]}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsxs)("tr",{children:[(0,t.jsx)("th",{children:"Criterion"}),(0,t.jsx)("th",{children:"Required"}),(0,t.jsx)("th",{children:"Actual"}),(0,t.jsx)("th",{children:"Status"})]})}),(0,t.jsx)("tbody",{children:C.map(e=>{var s;return(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.name})}),(0,t.jsx)("td",{children:e.required}),(0,t.jsx)("td",{children:e.actual}),(0,t.jsx)("td",{children:(0,t.jsx)(p,{className:null==(s=e.status)?void 0:s.toLowerCase(),children:e.status})})]},e.name)})})]})}),!C.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No gate criteria evaluated yet"})}),(0,t.jsxs)("div",{style:{marginTop:16,display:"flex",gap:8,flexWrap:"wrap"},children:[(0,t.jsx)("button",{className:"button small",onClick:P,disabled:u,children:u?"Evaluating...":"Evaluate Gate"}),w&&(0,t.jsx)("button",{className:"button secondary small",onClick:()=>j(!0),children:"Add Decision"}),(0,t.jsx)("a",{href:"/api/projects/".concat(null==r?void 0:r.id,"/gate/history"),className:"button secondary small",target:"_blank",children:"History (API)"})]}),h&&(0,t.jsx)("div",{className:"modal-overlay",onClick:()=>j(!1),children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:400},children:[(0,t.jsx)("h2",{children:"Gate Decision"}),(0,t.jsx)(v,{label:"Decision",children:(0,t.jsx)(y,{value:x.decision,onChange:e=>b(s=>({...s,decision:e})),options:["APPROVED","REJECTED","ACCEPTED","NEEDS_CHANGES"]})}),(0,t.jsx)(v,{label:"Reviewer Name *",children:(0,t.jsx)(g,{value:x.reviewerName,onChange:e=>b(s=>({...s,reviewerName:e}))})}),(0,t.jsx)(v,{label:"Reason",children:(0,t.jsx)("textarea",{className:"input",value:x.reason,onChange:e=>b(s=>({...s,reason:e.target.value})),rows:3,style:{width:"100%",resize:"vertical"}})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:()=>j(!1),children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:D,disabled:N,children:N?"Saving...":"Submit Decision"})]})]})})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading..."})})}function P(e){var s;let{project:a,dashboard:n,onClose:r,onSaved:c,toast:d}=e,[o,u]=(0,l.useState)(!1),[m,h]=(0,l.useState)({provider:"TRELLO",workspaceName:"",baseUrl:"",authMode:"API_KEY"}),j=e=>s=>h(a=>({...a,[e]:s})),x=(null==n||null==(s=n.gate)?void 0:s.workspaceId)||(null==a?void 0:a.workspaceId),p=async()=>{if(!m.workspaceName.trim())return void d.add("Workspace name is required","error");u(!0);try{await i.FH.post("/api/workspaces/".concat(x,"/integrations"),m),d.add("Integration created"),c()}catch(e){d.add(e.message||"Failed to create integration","error")}finally{u(!1)}};return(0,t.jsx)("div",{className:"modal-overlay",onClick:r,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:450},children:[(0,t.jsx)("h2",{children:"New Integration"}),(0,t.jsx)(v,{label:"Provider",children:(0,t.jsx)(y,{value:m.provider,onChange:j("provider"),options:["TRELLO","JIRA","ASANA","MICROSOFT_PLANNER"]})}),(0,t.jsx)(v,{label:"Workspace Name *",children:(0,t.jsx)(g,{value:m.workspaceName,onChange:j("workspaceName")})}),(0,t.jsx)(v,{label:"Base URL",children:(0,t.jsx)(g,{value:m.baseUrl,onChange:j("baseUrl")})}),(0,t.jsx)(v,{label:"Auth Mode",children:(0,t.jsx)(y,{value:m.authMode,onChange:j("authMode"),options:["API_KEY","OAUTH","BASIC"]})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:r,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:p,disabled:o,children:o?"Saving...":"Create Integration"})]})]})})}function D(e){let{project:s,dashboard:a,toast:n,onRefresh:i}=e,[r,c]=(0,l.useState)(!1),d=(null==a?void 0:a.integrations)||[];return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{children:"Integrations"}),(0,t.jsx)("p",{className:"muted",children:"Connect Trello, Jira, Asana, or Microsoft Planner"})]}),(0,t.jsx)("div",{className:"dash-actions",children:(0,t.jsx)("button",{className:"button small",onClick:()=>c(!0),children:"+ New Integration"})})]}),(0,t.jsx)("div",{className:"grid",style:{gridTemplateColumns:"repeat(auto-fit, minmax(240px, 1fr))"},children:["TRELLO","JIRA","ASANA","MICROSOFT_PLANNER"].map(e=>{let s=d.find(s=>s.provider===e);return(0,t.jsxs)("div",{className:"panel",style:{textAlign:"center"},children:[(0,t.jsx)("div",{style:{fontSize:32,marginBottom:8},children:"TRELLO"===e?"⊞":"JIRA"===e?"◆":"ASANA"===e?"◇":"▣"}),(0,t.jsx)("h3",{style:{margin:"0 0 4px"},children:e.replace("_"," ")}),(0,t.jsx)("p",{className:"muted",style:{fontSize:12,margin:"0 0 12px"},children:s?s.workspaceName:"Not configured"}),(0,t.jsx)("div",{style:{display:"flex",gap:6,justifyContent:"center"},children:s?(0,t.jsx)("a",{href:"/api/integrations/".concat(s.id),className:"button secondary small",target:"_blank",children:"Manage"}):(0,t.jsx)("button",{className:"button secondary small",onClick:()=>c(!0),children:"Configure"})})]},e)})}),r&&(0,t.jsx)(P,{project:s,dashboard:a,onClose:()=>c(!1),onSaved:()=>{c(!1),i()},toast:n}),!d.length&&(0,t.jsx)("div",{style:{marginTop:12},children:(0,t.jsx)("a",{href:"/api/integration-providers",className:"button secondary small",target:"_blank",children:"Integration providers (API)"})})]})}function T(e){let{project:s,toast:a}=e,[n,r]=(0,l.useState)([]),[c,d]=(0,l.useState)(!0),[o,u]=(0,l.useState)(null),m=(0,l.useCallback)(async()=>{if(s){d(!0),u(null);try{let e=await i.FH.get("/api/projects/".concat(s.id,"/audit"));r(e.auditEvents||[])}catch(e){u(e.message||"Failed to load audit log")}finally{d(!1)}}},[s]);return((0,l.useEffect)(()=>{m()},[m]),c)?(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading audit log..."})}):o?(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:o})}):n.length?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{children:"Audit Log"}),(0,t.jsx)("p",{className:"muted",children:"Project activity history"})]}),(0,t.jsx)("div",{className:"dash-actions",children:(0,t.jsx)("button",{className:"button secondary small",onClick:m,children:"Refresh"})})]}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsxs)("tr",{children:[(0,t.jsx)("th",{children:"Date"}),(0,t.jsx)("th",{children:"Action"}),(0,t.jsx)("th",{children:"Entity"}),(0,t.jsx)("th",{children:"Actor"}),(0,t.jsx)("th",{children:"Details"})]})}),(0,t.jsx)("tbody",{children:n.map(e=>{var s,a;return(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{style:{fontSize:12,whiteSpace:"nowrap"},children:new Date(e.createdAt).toLocaleString()}),(0,t.jsx)("td",{children:(0,t.jsx)(p,{className:null==(s=e.action)?void 0:s.toLowerCase().replace(/\s+/g,"-"),children:e.action})}),(0,t.jsxs)("td",{style:{fontSize:12},children:[e.entityType," ",(0,t.jsxs)("span",{className:"muted",children:["(",null==(a=e.entityId)?void 0:a.slice(0,8),")"]})]}),(0,t.jsx)("td",{style:{fontSize:12},children:e.actorUserId||"system"}),(0,t.jsx)("td",{style:{fontSize:12,maxWidth:300,overflow:"hidden",textOverflow:"ellipsis"},children:e.afterJson?JSON.stringify(e.afterJson).slice(0,80):"-"})]},e.id)})})]})})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No audit events recorded yet"})})}function R(e){let{projects:s,workspaceId:a,currentProjectId:n,onSwitch:r,onRefresh:c,toast:d}=e,[o,u]=(0,l.useState)(null),[m,h]=(0,l.useState)(null),[j,x]=(0,l.useState)(!1),v=async()=>{u(!0);try{await i.FH.del("/api/projects/".concat(m.id)),d.add('Project "'.concat(m.name,'" deleted')),h(null),c()}catch(e){d.add(e.message||"Failed to delete project","error")}finally{u(!1)}};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{children:"All Projects"}),(0,t.jsxs)("p",{className:"muted",children:[s.length," project(s) in workspace"]})]}),(0,t.jsx)("div",{className:"dash-actions",children:(0,t.jsx)("button",{className:"button small",onClick:()=>x(!0),children:"+ New Project"})})]}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsxs)("tr",{children:[(0,t.jsx)("th",{children:"Name"}),(0,t.jsx)("th",{children:"Status"}),(0,t.jsx)("th",{children:"Type"}),(0,t.jsx)("th",{children:"Created"}),(0,t.jsx)("th",{children:"Actions"})]})}),(0,t.jsx)("tbody",{children:[...s].sort((e,s)=>new Date(s.createdAt)-new Date(e.createdAt)).map(e=>{var s;return(0,t.jsxs)("tr",{style:{background:e.id===n?"var(--surface-alt)":""},children:[(0,t.jsxs)("td",{children:[(0,t.jsx)("strong",{children:e.name}),e.id===n?(0,t.jsx)("span",{className:"muted",style:{fontSize:11,marginLeft:6},children:"(current)"}):"",e.description?(0,t.jsx)("div",{className:"muted",style:{fontSize:11},children:e.description}):""]}),(0,t.jsx)("td",{children:(0,t.jsx)(p,{className:null==(s=e.status)?void 0:s.toLowerCase(),children:e.status})}),(0,t.jsx)("td",{style:{fontSize:12},children:e.projectType}),(0,t.jsx)("td",{style:{fontSize:12},children:new Date(e.createdAt).toLocaleDateString()}),(0,t.jsxs)("td",{style:{textAlign:"right",whiteSpace:"nowrap"},children:[e.id!==n&&(0,t.jsx)("button",{className:"button secondary small",style:{marginRight:6},onClick:()=>r(e.id),children:"Open"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff"},onClick:()=>h(e),disabled:o===e.id,children:"Delete"})]})]},e.id)})})]})}),!s.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No projects yet. Create one to get started."})}),j&&(0,t.jsx)(I,{workspaceId:a,onClose:()=>x(!1),onSaved:()=>{x(!1),c()},toast:d}),m&&(0,t.jsx)("div",{className:"modal-overlay",onClick:()=>h(null),children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:380},children:[(0,t.jsxs)("h3",{children:['Delete "',m.name,'"?']}),(0,t.jsx)("p",{style:{fontSize:13,color:"var(--muted)"},children:"This permanently deletes the project and all its risks, mitigations, and data."}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:()=>h(null),children:"Cancel"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff"},onClick:v,disabled:o,children:o?"Deleting...":"Delete Project"})]})]})})]})}function A(e){let{project:s,onClose:a,onSaved:n,toast:r}=e,[c,d]=(0,l.useState)(!1),[o,u]=(0,l.useState)({name:(null==s?void 0:s.name)||"",description:(null==s?void 0:s.description)||"",subtitle:(null==s?void 0:s.subtitle)||"",status:(null==s?void 0:s.status)||"Active"}),m=async()=>{if(!o.name.trim())return void r.add("Project name is required","error");d(!0);try{await i.FH.patch("/api/projects/".concat(s.id),o),r.add("Project updated"),n()}catch(e){r.add(e.message||"Failed to update project","error")}finally{d(!1)}};return(0,t.jsx)("div",{className:"modal-overlay",onClick:a,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:450},children:[(0,t.jsx)("h2",{children:"Project Settings"}),(0,t.jsx)(v,{label:"Name *",children:(0,t.jsx)(g,{value:o.name,onChange:e=>u(s=>({...s,name:e}))})}),(0,t.jsx)(v,{label:"Subtitle",children:(0,t.jsx)(g,{value:o.subtitle,onChange:e=>u(s=>({...s,subtitle:e}))})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:o.description,onChange:e=>u(s=>({...s,description:e.target.value})),rows:3,style:{width:"100%",resize:"vertical"}})}),(0,t.jsx)(v,{label:"Status",children:(0,t.jsx)(y,{value:o.status,onChange:e=>u(s=>({...s,status:e})),options:["Active","Archived","On Hold"]})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:a,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:m,disabled:c,children:c?"Saving...":"Save Changes"})]})]})})}function I(e){let{workspaceId:s,onClose:a,onSaved:n,toast:r}=e,[c,d]=(0,l.useState)(!1),[o,u]=(0,l.useState)({name:"",description:"",projectType:"AI-Enabler"}),m=async()=>{if(!o.name.trim())return void r.add("Project name is required","error");d(!0);try{await i.FH.post("/api/workspaces/".concat(s,"/projects"),o),r.add("Project created"),n()}catch(e){r.add(e.message||"Failed to create project","error")}finally{d(!1)}};return(0,t.jsx)("div",{className:"modal-overlay",onClick:a,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:450},children:[(0,t.jsx)("h2",{children:"New Project"}),(0,t.jsx)(v,{label:"Name *",children:(0,t.jsx)(g,{value:o.name,onChange:e=>u(s=>({...s,name:e}))})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:o.description,onChange:e=>u(s=>({...s,description:e.target.value})),rows:3,style:{width:"100%",resize:"vertical"}})}),(0,t.jsx)(v,{label:"Project Type",children:(0,t.jsx)(y,{value:o.projectType,onChange:e=>u(s=>({...s,projectType:e})),options:["AI-Enabler","GENERATIVE_AI","ML-Pipeline","Automation"]})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:a,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:m,disabled:c,children:c?"Saving...":"Create Project"})]})]})})}function E(e){let{projects:s,workspaceId:a,currentProjectId:n,onClose:r,onSwitch:c,onSaved:d,toast:o}=e,[u,m]=(0,l.useState)(null),[h,j]=(0,l.useState)(null),[x,v]=(0,l.useState)(!1),g=async()=>{m(!0);try{await i.FH.del("/api/projects/".concat(h.id)),o.add('Project "'.concat(h.name,'" deleted')),j(null),d()}catch(e){o.add(e.message||"Failed to delete project","error")}finally{m(!1)}};return(0,t.jsxs)("div",{className:"modal-overlay",onClick:r,children:[(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:700,maxHeight:"80vh",overflow:"auto"},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"},children:[(0,t.jsx)("h2",{style:{margin:0},children:"All Projects"}),(0,t.jsx)("button",{className:"button small",onClick:()=>v(!0),children:"+ New Project"})]}),(0,t.jsxs)("p",{className:"muted",style:{fontSize:12,marginTop:4},children:[s.length," project(s) in workspace"]}),(0,t.jsx)("div",{className:"table-wrap",style:{marginTop:12},children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsxs)("tr",{children:[(0,t.jsx)("th",{children:"Name"}),(0,t.jsx)("th",{children:"Status"}),(0,t.jsx)("th",{children:"Type"}),(0,t.jsx)("th",{children:"Created"}),(0,t.jsx)("th",{})]})}),(0,t.jsx)("tbody",{children:[...s].sort((e,s)=>new Date(s.createdAt)-new Date(e.createdAt)).map(e=>{var s;return(0,t.jsxs)("tr",{style:{background:e.id===n?"var(--surface-alt)":""},children:[(0,t.jsxs)("td",{children:[(0,t.jsx)("strong",{children:e.name}),e.id===n?(0,t.jsx)("span",{className:"muted",style:{fontSize:11,marginLeft:6},children:"(current)"}):""]}),(0,t.jsx)("td",{children:(0,t.jsx)(p,{className:null==(s=e.status)?void 0:s.toLowerCase(),children:e.status})}),(0,t.jsx)("td",{style:{fontSize:12},children:e.projectType}),(0,t.jsx)("td",{style:{fontSize:12},children:new Date(e.createdAt).toLocaleDateString()}),(0,t.jsxs)("td",{style:{textAlign:"right",whiteSpace:"nowrap"},children:[e.id!==n&&(0,t.jsx)("button",{className:"button secondary small",style:{marginRight:6},onClick:()=>{c(e.id),r()},children:"Open"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff"},onClick:()=>j(e),disabled:u===e.id,children:"✕"})]})]},e.id)})})]})}),!s.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No projects yet"})}),(0,t.jsx)("div",{className:"modal-actions",children:(0,t.jsx)("button",{className:"button secondary small",onClick:r,children:"Close"})})]}),h&&(0,t.jsx)("div",{className:"modal-overlay",onClick:()=>j(null),children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:380},children:[(0,t.jsxs)("h3",{children:['Delete "',h.name,'"?']}),(0,t.jsx)("p",{style:{fontSize:13,color:"var(--muted)"},children:"This permanently deletes the project and all its risks, mitigations, and data."}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:()=>j(null),children:"Cancel"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff"},onClick:g,disabled:u,children:u?"Deleting...":"Delete Project"})]})]})}),x&&(0,t.jsx)(I,{workspaceId:a,onClose:()=>v(!1),onSaved:()=>{v(!1),d()},toast:o})]})}function F(){let e=(0,n.useRouter)(),s=(0,n.useSearchParams)(),a=c.includes(s.get("tab"))?s.get("tab"):"Overview",[d,o]=(0,l.useState)(null),[u,m]=(0,l.useState)([]),[j,x]=(0,l.useState)(s.get("projectId")||null),[p,v]=(0,l.useState)(null),[g,y]=(0,l.useState)(!0),[b,f]=(0,l.useState)(null),[k,P]=(0,l.useState)(0),[I,F]=(0,l.useState)(!1),[L,O]=(0,l.useState)(!1),[z,M]=(0,l.useState)(null),{toasts:H,add:_}=function(){let[e,s]=(0,l.useState)([]);return{toasts:e,add:(0,l.useCallback)(function(e){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"success",t=Date.now()+Math.random();s(s=>[...s,{id:t,message:e,type:a}]),setTimeout(()=>s(e=>e.filter(e=>e.id!==t)),3e3)},[])}}(),W=(0,l.useCallback)(()=>P(e=>e+1),[]),G=(0,l.useCallback)(async s=>{y(!0),f(null);try{var a,t;let l=await i.FH.get("/api/auth/session");if(!(null==l?void 0:l.authenticated)){f("Not authenticated."),y(!1);return}let n=null==(a=l.memberships)?void 0:a[0];if(!n){f("No organization membership found."),y(!1);return}let r=n.organizationId,c=null==(t=(await i.FH.get("/api/workspaces?organizationId=".concat(r))).workspaces)?void 0:t[0];if(!c){f("No workspace found — create one to get started."),y(!1);return}M(c.id);let d=(await i.FH.get("/api/workspaces/".concat(c.id,"/projects"))).projects||[];if(!d.length){f("No project found — create a project to get started."),y(!1);return}m(d);let u=s?d.find(e=>e.id===s):null;if(u||(u=d[0]),o(u),u.id!==j){x(u.id);let s=new URLSearchParams(window.location.search).get("tab")||"Overview";e.replace("/dashboard?tab=".concat(s,"&projectId=").concat(u.id))}let h=await i.FH.get("/api/projects/".concat(u.id,"/dashboard"));v(h.dashboard),y(!1)}catch(e){f(e.message||"Failed to load dashboard data"),y(!1)}},[]);(0,l.useEffect)(()=>{G(j)},[G,k,j]);let q=s=>{x(s),e.push("/dashboard?tab=".concat(a,"&projectId=").concat(s))};return g&&"Integrations"!==a?(0,t.jsx)("div",{className:"shell-loading",children:(0,t.jsx)("div",{className:"spinner"})}):b&&"Integrations"!==a?(0,t.jsxs)("div",{className:"empty-state",children:[(0,t.jsx)("div",{className:"empty-icon",children:"!"}),(0,t.jsx)("p",{children:b}),(0,t.jsx)("button",{className:"button secondary small",style:{marginTop:12},onClick:()=>P(e=>e+1),children:"Retry"})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsx)("div",{style:{display:"flex",alignItems:"center",gap:10},children:(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6},children:[(0,t.jsx)("select",{className:"input",value:(null==d?void 0:d.id)||"",onChange:e=>q(e.target.value),style:{fontSize:16,fontWeight:700,width:"auto",minWidth:200,border:"none",background:"transparent",cursor:"pointer"},children:u.map(e=>(0,t.jsxs)("option",{value:e.id,children:[e.name," ","Active"!==e.status?"(".concat(e.status,")"):""]},e.id))}),(0,t.jsx)("button",{className:"button secondary small",style:{fontSize:14,padding:"2px 8px"},onClick:()=>F(!0),title:"Project settings",children:"⚙"}),(0,t.jsx)("button",{className:"button secondary small",onClick:()=>O(!0),children:"Projects"})]}),(0,t.jsx)("p",{className:"muted",style:{margin:0},children:(null==d?void 0:d.subtitle)||(null==d?void 0:d.description)||""})]})}),(0,t.jsxs)("div",{className:"dash-actions",children:[(0,t.jsx)("a",{href:"/api/projects/".concat(null==d?void 0:d.id,"/reports/executive.html"),className:"button secondary small",target:"_blank",children:"Report"}),(0,t.jsx)("a",{href:"/api/projects/".concat(null==d?void 0:d.id,"/reports/risk-register.csv"),className:"button secondary small",target:"_blank",children:"CSV"})]})]}),(0,t.jsx)("div",{className:"tabs",children:c.map(s=>(0,t.jsx)("button",{className:"tab ".concat(a===s?"active":""),onClick:()=>e.push("/dashboard?tab=".concat(s).concat(d?"&projectId=".concat(d.id):"")),children:s},s))}),"Overview"===a&&(0,t.jsx)(r,{name:"Overview",children:(0,t.jsx)(N,{project:d,dashboard:p})},"overview"),"Projects"===a&&(0,t.jsx)(r,{name:"Projects",children:(0,t.jsx)(R,{projects:u,workspaceId:z,currentProjectId:null==d?void 0:d.id,onSwitch:q,onRefresh:W,toast:{add:_}})},"projects"),"Risks"===a&&(0,t.jsx)(r,{name:"Risks",children:(0,t.jsx)(C,{project:d,dashboard:p,toast:{add:_},onRefresh:W})},"risks"),"Mitigations"===a&&(0,t.jsx)(r,{name:"Mitigations",children:(0,t.jsx)(w,{project:d,dashboard:p,toast:{add:_},onRefresh:W})},"mitigations"),"Gate"===a&&(0,t.jsx)(r,{name:"Gate",children:(0,t.jsx)(S,{project:d,dashboard:p,toast:{add:_},onRefresh:W})},"gate"),"Integrations"===a&&(0,t.jsx)(r,{name:"Integrations",children:(0,t.jsx)(D,{project:d,dashboard:p,toast:{add:_},onRefresh:W})},"integrations"),"Audit"===a&&(0,t.jsx)(r,{name:"Audit",children:(0,t.jsx)(T,{project:d,toast:{add:_}})},"audit"),I&&(0,t.jsx)(A,{project:d,onClose:()=>F(!1),onSaved:()=>{F(!1),W()},toast:{add:_}}),L&&(0,t.jsx)(E,{projects:u,workspaceId:z,currentProjectId:null==d?void 0:d.id,onClose:()=>O(!1),onSwitch:q,onSaved:()=>{O(!1),W()},toast:{add:_}}),(0,t.jsx)(h,{toasts:H})]})}},6282:(e,s,a)=>{"use strict";async function t(e,s,a){var t;let l={method:e,headers:{"Content-Type":"application/json"}};a&&(l.body=JSON.stringify(a));let n=await fetch("".concat("").concat(s),l),i=(null==(t=n.headers.get("content-type"))?void 0:t.includes("application/json"))?await n.json():await n.text();if(!n.ok)throw Error((null==i?void 0:i.error)||(null==i?void 0:i.message)||"Request failed (".concat(n.status,")"));return i}a.d(s,{FH:()=>l,Ht:()=>n,ri:()=>i});let l={get:e=>t("GET",e),post:(e,s)=>t("POST",e,s),put:(e,s)=>t("PUT",e,s),patch:(e,s)=>t("PATCH",e,s),del:e=>t("DELETE",e)};async function n(){try{let e=await l.get("/api/auth/session");return e.user||e.actor||null}catch(e){return null}}async function i(){await l.post("/api/auth/logout"),window.location.href="/"}}},e=>{e.O(0,[8441,1255,7358],()=>e(e.s=646)),_N_E=e.O()}]);  b c  ` d b o  T U  R V W d  I (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5105],{63:(e,s,a)=>{"use strict";var t=a(7260);a.o(t,"useRouter")&&a.d(s,{useRouter:function(){return t.useRouter}}),a.o(t,"useSearchParams")&&a.d(s,{useSearchParams:function(){return t.useSearchParams}})},646:(e,s,a)=>{Promise.resolve().then(a.bind(a,3399))},3399:(e,s,a)=>{"use strict";a.r(s),a.d(s,{default:()=>F});var t=a(5155),l=a(2115),n=a(63),i=a(6282);class r extends l.Component{static getDerivedStateFromError(e){return{error:e}}render(){if(this.state.error){let{fallback:e}=this.props;return e?"function"==typeof e?e(this.state.error):e:(0,t.jsxs)("div",{className:"empty-state",children:[(0,t.jsx)("div",{className:"empty-icon",children:"!"}),(0,t.jsxs)("p",{children:["Something went wrong in ",this.props.name||"this section","."]}),(0,t.jsx)("p",{className:"muted",style:{fontSize:12,marginTop:4},children:this.state.error.message}),(0,t.jsx)("button",{className:"button secondary small",style:{marginTop:12},onClick:()=>{var e,s;this.setState({error:null}),null==(e=(s=this.props).onRetry)||e.call(s)},children:"Retry"})]})}return this.props.children}constructor(e){super(e),this.state={error:null}}}let c=["Overview","Projects","Risks","Mitigations","Gate","Integrations","Audit"],d=["Technical","Governance","Legal","Ethical","Operational"],o=["Design","Development","Testing","Deployment"],u=["OPEN","IN_MITIGATION","ACCEPTED","CLOSED"],m=["NOT_STARTED","IN_PROGRESS","DONE","REJECTED"];function h(e){let{toasts:s}=e;return s.length?(0,t.jsx)("div",{className:"toast-container",children:s.map(e=>(0,t.jsx)("div",{className:"toast ".concat(e.type),children:e.message},e.id))}):null}function j(e){let{value:s,onChange:a,placeholder:l}=e;return(0,t.jsxs)("div",{className:"search-wrap",children:[(0,t.jsx)("span",{className:"search-icon",children:"⌕"}),(0,t.jsx)("input",{className:"input",value:s,onChange:e=>a(e.target.value),placeholder:l||"Search..."})]})}function x(e,s,a){return s?[...e].sort((e,t)=>{let l=e[s],n=t[s];if(null==l)return 1;if(null==n)return -1;let i="number"==typeof l?l-n:String(l).localeCompare(String(n));return"asc"===a?i:-i}):e}function p(e){let{children:s,className:a}=e;return(0,t.jsx)("span",{className:"badge ".concat(a||""),children:s})}function v(e){let{label:s,children:a}=e;return(0,t.jsxs)("div",{style:{marginBottom:10},children:[(0,t.jsx)("label",{style:{display:"block",fontSize:12,color:"var(--muted)",marginBottom:3},children:s}),a]})}function g(e){let{value:s,onChange:a,type:l="text",min:n,max:i,style:r}=e;return(0,t.jsx)("input",{className:"input",type:l,value:s,onChange:e=>a(e.target.value),min:n,max:i,style:{width:"100%",...r}})}function y(e){let{value:s,onChange:a,options:l}=e;return(0,t.jsxs)("select",{className:"input",value:s,onChange:e=>a(e.target.value),style:{width:"100%"},children:[(0,t.jsx)("option",{value:"",children:"— Select —"}),(l||[]).map(e=>{let s="object"==typeof e?e.value:e,a="object"==typeof e?e.label:e;return(0,t.jsx)("option",{value:s,children:a},s)})]})}function b(e){let{label:s,onConfirm:a,onCancel:l,deleting:n}=e;return(0,t.jsx)("div",{className:"modal-overlay",onClick:l,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:380},children:[(0,t.jsxs)("h3",{children:["Delete ",s,"?"]}),(0,t.jsx)("p",{style:{fontSize:13,color:"var(--muted)"},children:"This cannot be undone."}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:l,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff"},onClick:a,disabled:n,children:n?"Deleting...":"Delete"})]})]})})}function N(e){let{project:s,dashboard:a}=e,n=(0,l.useMemo)(()=>{var e,s,t,l,n,i,r,c,d,o,u,m,h,j,x,p,v,g,y;return a?[{label:"Overall Score",value:null!=(p=null==(e=a.summary)?void 0:e.overallScore)?p:"-",cls:(null==(s=a.summary)?void 0:s.overallScore)>=75?"bad":(null==(t=a.summary)?void 0:t.overallScore)>=50?"warn":"good",sub:"Risk level: ".concat((null==(l=a.summary)?void 0:l.riskLevel)||"-")},{label:"Deployment Gate",value:null!=(v=null==(n=a.summary)?void 0:n.gateStatus)?v:"-",cls:(null==(i=a.summary)?void 0:i.gateStatus)==="Ready"?"good":(null==(r=a.summary)?void 0:r.gateStatus)==="Warning"?"warn":"bad",sub:(null==(c=a.gate)?void 0:c.message)||""},{label:"Open Risks",value:null!=(g=null==(d=a.summary)?void 0:d.openRisks)?g:0,cls:((null==(o=a.summary)?void 0:o.openRisks)||0)>5?"bad":((null==(u=a.summary)?void 0:u.openRisks)||0)>2?"warn":"good",sub:"".concat((null==(m=a.summary)?void 0:m.totalRisks)||0," total risks")},{label:"Mitigation",value:"".concat(null!=(y=null==(h=a.summary)?void 0:h.mitigationCompletion)?y:0,"%"),cls:40>((null==(j=a.summary)?void 0:j.mitigationCompletion)||0)?"bad":70>((null==(x=a.summary)?void 0:x.mitigationCompletion)||0)?"warn":"good",sub:"Average active-risk completion"}]:[]},[a]);return a?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{className:"grid",style:{gridTemplateColumns:"repeat(auto-fit, minmax(200px, 1fr))"},children:n.map(e=>(0,t.jsxs)("div",{className:"metric-card",children:[(0,t.jsx)("h3",{children:e.label}),(0,t.jsx)("div",{className:"metric-value ".concat(e.cls),children:e.value}),(0,t.jsx)("div",{className:"metric-sub",children:e.sub})]},e.label))}),(0,t.jsxs)("div",{className:"grid",style:{gridTemplateColumns:"1fr 1fr",marginTop:18},children:[(0,t.jsxs)("div",{className:"panel",children:[(0,t.jsx)("h2",{children:"Dimensions"}),(a.dimensions||[]).map(e=>(0,t.jsxs)("div",{style:{marginBottom:12},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:4},children:[(0,t.jsx)("span",{style:{fontSize:13},children:e.name}),(0,t.jsx)("strong",{style:{fontSize:13},children:e.score})]}),(0,t.jsx)("div",{className:"bar-wrap",children:(0,t.jsx)("div",{className:"bar-fill",style:{width:"".concat(Math.min(e.score,100),"%"),background:e.score>=50?"var(--danger)":e.score>=25?"var(--warn)":"var(--accent)"}})})]},e.name))]}),(0,t.jsxs)("div",{className:"panel",children:[(0,t.jsx)("h2",{children:"Lifecycle"}),(a.lifecycle||[]).map(e=>(0,t.jsxs)("div",{style:{marginBottom:12},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:4},children:[(0,t.jsx)("span",{style:{fontSize:13},children:e.name}),(0,t.jsxs)("span",{className:"muted",style:{fontSize:12},children:[e.openRisks," open"]})]}),(0,t.jsx)("div",{className:"bar-wrap",children:(0,t.jsx)("div",{className:"bar-fill",style:{width:"".concat(Math.min(e.riskScore||0,100),"%"),background:(e.riskScore||0)>=50?"var(--danger)":(e.riskScore||0)>=25?"var(--warn)":"var(--accent)"}})})]},e.name))]})]})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading dashboard data..."})})}function f(e){let{project:s,onClose:a,onSaved:n,toast:r}=e,[c,u]=(0,l.useState)(!1),[m,h]=(0,l.useState)({title:"",description:"",dimension:"",domain:"",lifecyclePhase:"",probability:50,impact:50,detectability:50,ownerDisplayName:""}),j=e=>s=>h(a=>({...a,[e]:s})),x=async()=>{if(!m.title.trim())return void r.add("Title is required","error");if(!m.dimension)return void r.add("Dimension is required","error");u(!0);try{await i.FH.post("/api/projects/".concat(s.id,"/risks"),m),r.add("Risk created"),n()}catch(e){r.add(e.message||"Failed to create risk","error")}finally{u(!1)}};return(0,t.jsx)("div",{className:"modal-overlay",onClick:a,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:500},children:[(0,t.jsx)("h2",{children:"New Risk"}),(0,t.jsx)(v,{label:"Title *",children:(0,t.jsx)(g,{value:m.title,onChange:j("title")})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:m.description,onChange:e=>j("description")(e.target.value),rows:3,style:{width:"100%",resize:"vertical"}})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Dimension *",children:(0,t.jsx)(y,{value:m.dimension,onChange:j("dimension"),options:d})}),(0,t.jsx)(v,{label:"Domain",children:(0,t.jsx)(g,{value:m.domain,onChange:j("domain")})})]}),(0,t.jsx)(v,{label:"Lifecycle Phase",children:(0,t.jsx)(y,{value:m.lifecyclePhase,onChange:j("lifecyclePhase"),options:o})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Probability",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:m.probability,onChange:j("probability")})}),(0,t.jsx)(v,{label:"Impact",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:m.impact,onChange:j("impact")})}),(0,t.jsx)(v,{label:"Detectability",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:m.detectability,onChange:j("detectability")})})]}),(0,t.jsx)(v,{label:"Owner",children:(0,t.jsx)(g,{value:m.ownerDisplayName,onChange:j("ownerDisplayName")})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:a,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:x,disabled:c,children:c?"Saving...":"Create Risk"})]})]})})}function C(e){let{project:s,dashboard:a,toast:n,onRefresh:r}=e,[c,m]=(0,l.useState)(""),[h,N]=(0,l.useState)("normalizedScore"),[C,k]=(0,l.useState)("desc"),[w,S]=(0,l.useState)(0),[P,D]=(0,l.useState)(null),[T,R]=(0,l.useState)(!1),[A,I]=(0,l.useState)(!1),[E,F]=(0,l.useState)({}),[L,O]=(0,l.useState)(null),[z,M]=(0,l.useState)(null),[H,_]=(0,l.useState)(!1),W=(0,l.useMemo)(()=>(null==a?void 0:a.topRisks)?x(a.topRisks,h,C):[],[a,h,C]),G=(0,l.useMemo)(()=>{if(!c)return W;let e=c.toLowerCase();return W.filter(s=>(s.title||"").toLowerCase().includes(e)||(s.dimension||"").toLowerCase().includes(e)||(s.ownerDisplayName||"").toLowerCase().includes(e))},[W,c]),q=G.slice(0,(w+1)*20),B=async(e,s)=>{O(e);try{await i.FH.patch("/api/risks/".concat(e),{status:s}),n.add("Risk status updated to ".concat(s)),D(null),r()}catch(e){n.add(e.message,"error")}finally{O(null)}},J=async()=>{if(!E.title.trim())return void n.add("Title is required","error");O("edit");try{await i.FH.patch("/api/risks/".concat(P.id),E),n.add("Risk updated"),D(null),r()}catch(e){n.add(e.message||"Failed to update","error")}finally{O(null)}},U=async()=>{_(!0);try{await i.FH.del("/api/risks/".concat(z.id)),n.add("Risk deleted"),M(null),D(null),r()}catch(e){n.add(e.message||"Failed to delete","error")}finally{_(!1)}};return a?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{style:{display:"flex",gap:8,marginBottom:12},children:[(0,t.jsx)(j,{value:c,onChange:m,placeholder:"Search risks by title, dimension, owner..."}),(0,t.jsx)("button",{className:"button small",onClick:()=>R(!0),children:"+ New Risk"})]}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsx)("tr",{children:[{key:"id",label:"ID"},{key:"title",label:"Risk"},{key:"dimension",label:"Dimension"},{key:"lifecyclePhase",label:"Phase"},{key:"normalizedScore",label:"Score"},{key:"residualScore",label:"Residual"},{key:"status",label:"Status"},{key:"ownerDisplayName",label:"Owner"}].map(e=>(0,t.jsxs)("th",{className:"sortable",onClick:()=>{var s;h===(s=e.key)?k(e=>"asc"===e?"desc":"asc"):(N(s),k("asc"))},children:[e.label," ",h===e.key?"asc"===C?"▲":"▼":""]},e.key))})}),(0,t.jsx)("tbody",{children:q.map(e=>{var s,a,l;return(0,t.jsxs)("tr",{onClick:()=>{var s,a,t;D(e),F({title:e.title||"",description:e.description||"",dimension:e.dimension||"",domain:e.domain||"",lifecyclePhase:e.lifecyclePhase||"",probability:null!=(s=e.probability)?s:50,impact:null!=(a=e.impact)?a:50,detectability:null!=(t=e.detectability)?t:50,ownerDisplayName:e.ownerDisplayName||""}),I(!1),M(null)},children:[(0,t.jsx)("td",{style:{fontFamily:"monospace",fontSize:12},children:null==(s=e.id)?void 0:s.slice(0,8)}),(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.title})}),(0,t.jsx)("td",{children:(0,t.jsx)(p,{className:null==(a=e.dimension)?void 0:a.toLowerCase(),children:e.dimension})}),(0,t.jsx)("td",{style:{fontSize:12},children:e.lifecyclePhase}),(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.normalizedScore})}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{style:{color:e.residualScore>=50?"var(--danger)":e.residualScore>=25?"var(--warn)":"var(--accent)"},children:e.residualScore})}),(0,t.jsx)("td",{children:(0,t.jsx)(p,{className:null==(l=e.status)?void 0:l.toLowerCase().replace(/\s+/g,"-"),children:e.status})}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{className:"muted",children:e.ownerDisplayName||"-"})})]},e.id)})})]})}),G.length>q.length&&(0,t.jsx)("div",{style:{textAlign:"center",marginTop:12},children:(0,t.jsxs)("button",{className:"button secondary small",onClick:()=>S(e=>e+1),children:["Show more (",G.length-q.length," remaining)"]})}),!G.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No risks match your search"})}),T&&(0,t.jsx)(f,{project:s,onClose:()=>R(!1),onSaved:()=>{R(!1),r()},toast:n}),P&&!z&&(0,t.jsx)("div",{className:"modal-overlay",onClick:()=>D(null),children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:520},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"},children:[(0,t.jsx)("h2",{style:{margin:0},children:P.title}),(0,t.jsx)("button",{className:"button secondary small",onClick:()=>I(!A),children:A?"View":"Edit"})]}),A?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{style:{marginTop:12},children:[(0,t.jsx)(v,{label:"Title *",children:(0,t.jsx)(g,{value:E.title,onChange:e=>F(s=>({...s,title:e}))})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:E.description,onChange:e=>F(s=>({...s,description:e.target.value})),rows:2,style:{width:"100%",resize:"vertical"}})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Dimension",children:(0,t.jsx)(y,{value:E.dimension,onChange:e=>F(s=>({...s,dimension:e})),options:d})}),(0,t.jsx)(v,{label:"Domain",children:(0,t.jsx)(g,{value:E.domain,onChange:e=>F(s=>({...s,domain:e}))})})]}),(0,t.jsx)(v,{label:"Lifecycle Phase",children:(0,t.jsx)(y,{value:E.lifecyclePhase,onChange:e=>F(s=>({...s,lifecyclePhase:e})),options:o})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Probability",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:E.probability,onChange:e=>F(s=>({...s,probability:Number(e)}))})}),(0,t.jsx)(v,{label:"Impact",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:E.impact,onChange:e=>F(s=>({...s,impact:Number(e)}))})}),(0,t.jsx)(v,{label:"Detectability",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:E.detectability,onChange:e=>F(s=>({...s,detectability:Number(e)}))})})]}),(0,t.jsx)(v,{label:"Owner",children:(0,t.jsx)(g,{value:E.ownerDisplayName,onChange:e=>F(s=>({...s,ownerDisplayName:e}))})})]}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:()=>D(null),children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:J,disabled:"edit"===L,children:"edit"===L?"Saving...":"Save Changes"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff",marginLeft:"auto"},onClick:()=>M(P),children:"Delete"})]})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:12,fontSize:13,marginTop:12},children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Dimension"}),(0,t.jsx)("br",{}),P.dimension]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Phase"}),(0,t.jsx)("br",{}),P.lifecyclePhase]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Probability"}),(0,t.jsx)("br",{}),P.probability]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Impact"}),(0,t.jsx)("br",{}),P.impact]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Detectability"}),(0,t.jsx)("br",{}),P.detectability]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Score"}),(0,t.jsx)("br",{}),(0,t.jsx)("strong",{children:P.normalizedScore})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Residual"}),(0,t.jsx)("br",{}),P.residualScore]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Owner"}),(0,t.jsx)("br",{}),P.ownerDisplayName||"-"]})]}),P.description&&(0,t.jsxs)("div",{style:{marginTop:12,fontSize:13},children:[(0,t.jsx)("span",{className:"muted",children:"Description"}),(0,t.jsx)("br",{}),P.description]}),(0,t.jsxs)("div",{style:{marginTop:16},children:[(0,t.jsx)("span",{className:"muted",style:{fontSize:12},children:"Update status:"}),(0,t.jsx)("div",{style:{display:"flex",gap:6,marginTop:6,flexWrap:"wrap"},children:u.map(e=>(0,t.jsx)("button",{className:"button small ".concat("OPEN"===e?"secondary":""),onClick:()=>B(P.id,e),disabled:L===P.id,children:e.replace("_"," ")},e))})]}),(0,t.jsx)("div",{className:"modal-actions",children:(0,t.jsx)("button",{className:"button secondary small",onClick:()=>D(null),children:"Close"})})]})]})}),z&&(0,t.jsx)(b,{label:"this risk",onConfirm:U,onCancel:()=>M(null),deleting:H})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading..."})})}function k(e){let{project:s,risks:a,onClose:n,onSaved:r,toast:c}=e,[d,o]=(0,l.useState)(!1),[u,h]=(0,l.useState)({riskId:"",title:"",description:"",status:"NOT_STARTED",progressPercent:0,effectivenessPercent:0,dueDate:"",ownerDisplayName:""}),j=e=>s=>h(a=>({...a,[e]:s})),x=async()=>{if(!u.title.trim())return void c.add("Title is required","error");if(!u.riskId)return void c.add("Please select a risk","error");o(!0);try{let e={...u,progressPercent:Number(u.progressPercent),effectivenessPercent:Number(u.effectivenessPercent)};e.dueDate?e.dueDate=new Date(e.dueDate).toISOString():delete e.dueDate,await i.FH.post("/api/risks/".concat(u.riskId,"/mitigations"),e),c.add("Mitigation created"),r()}catch(e){c.add(e.message||"Failed to create mitigation","error")}finally{o(!1)}};return(0,t.jsx)("div",{className:"modal-overlay",onClick:n,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:500},children:[(0,t.jsx)("h2",{children:"New Mitigation"}),(0,t.jsx)(v,{label:"Risk *",children:(0,t.jsx)(y,{value:u.riskId,onChange:j("riskId"),options:(a||[]).map(e=>({value:e.id,label:e.title}))})}),(0,t.jsx)(v,{label:"Title *",children:(0,t.jsx)(g,{value:u.title,onChange:j("title")})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:u.description,onChange:e=>j("description")(e.target.value),rows:2,style:{width:"100%",resize:"vertical"}})}),(0,t.jsx)(v,{label:"Status",children:(0,t.jsx)(y,{value:u.status,onChange:j("status"),options:m})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Progress %",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:u.progressPercent,onChange:j("progressPercent")})}),(0,t.jsx)(v,{label:"Effectiveness %",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:u.effectivenessPercent,onChange:j("effectivenessPercent")})})]}),(0,t.jsx)(v,{label:"Due Date",children:(0,t.jsx)(g,{type:"date",value:u.dueDate,onChange:j("dueDate")})}),(0,t.jsx)(v,{label:"Owner",children:(0,t.jsx)(g,{value:u.ownerDisplayName,onChange:j("ownerDisplayName")})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:n,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:x,disabled:d,children:d?"Saving...":"Create Mitigation"})]})]})})}function w(e){let{project:s,dashboard:a,toast:n,onRefresh:r}=e,[c,d]=(0,l.useState)(""),[o,u]=(0,l.useState)("progressPercent"),[h,N]=(0,l.useState)("asc"),[f,C]=(0,l.useState)(!1),[w,S]=(0,l.useState)(null),[P,D]=(0,l.useState)(!1),[T,R]=(0,l.useState)({}),[A,I]=(0,l.useState)(null),[E,F]=(0,l.useState)(null),[L,O]=(0,l.useState)(!1),z=(0,l.useMemo)(()=>(null==a?void 0:a.mitigations)?x(a.mitigations,o,h):[],[a,o,h]),M=(0,l.useMemo)(()=>(null==a?void 0:a.topRisks)?a.topRisks:[],[a]),H=(0,l.useMemo)(()=>{if(!c)return z;let e=c.toLowerCase();return z.filter(s=>(s.title||"").toLowerCase().includes(e)||(s.riskTitle||"").toLowerCase().includes(e))},[z,c]),_=async()=>{if(!T.title.trim())return void n.add("Title is required","error");I("edit");try{let e={...T,progressPercent:Number(T.progressPercent),effectivenessPercent:Number(T.effectivenessPercent)};e.dueDate?e.dueDate=new Date(e.dueDate).toISOString():e.dueDate=null,await i.FH.patch("/api/mitigations/".concat(w.id),e),n.add("Mitigation updated"),S(null),r()}catch(e){n.add(e.message||"Failed to update","error")}finally{I(null)}},W=async()=>{O(!0);try{await i.FH.del("/api/mitigations/".concat(E.id)),n.add("Mitigation deleted"),F(null),S(null),r()}catch(e){n.add(e.message||"Failed to delete","error")}finally{O(!1)}};return a?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{style:{display:"flex",gap:8,marginBottom:12},children:[(0,t.jsx)(j,{value:c,onChange:d,placeholder:"Search mitigations..."}),(0,t.jsx)("button",{className:"button small",onClick:()=>C(!0),children:"+ New Mitigation"})]}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsx)("tr",{children:[{key:"title",label:"Title"},{key:"riskTitle",label:"Risk"},{key:"status",label:"Status"},{key:"progressPercent",label:"Progress"},{key:"effectivenessPercent",label:"Effectiveness"},{key:"ownerDisplayName",label:"Owner"}].map(e=>(0,t.jsxs)("th",{className:"sortable",onClick:()=>{var s;o===(s=e.key)?N(e=>"asc"===e?"desc":"asc"):(u(s),N("asc"))},children:[e.label," ",o===e.key?"asc"===h?"▲":"▼":""]},e.key))})}),(0,t.jsx)("tbody",{children:H.slice(0,50).map(e=>{var s;return(0,t.jsxs)("tr",{onClick:()=>{var s,a;S(e),R({title:e.title||"",description:e.description||"",status:e.status||"NOT_STARTED",progressPercent:null!=(s=e.progressPercent)?s:0,effectivenessPercent:null!=(a=e.effectivenessPercent)?a:0,dueDate:e.dueDate?e.dueDate.slice(0,10):"",ownerDisplayName:e.ownerDisplayName||""}),D(!0),F(null)},style:{cursor:"pointer"},children:[(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.title})}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{className:"muted",children:e.riskTitle})}),(0,t.jsx)("td",{children:(0,t.jsx)(p,{className:null==(s=e.status)?void 0:s.toLowerCase().replace(/\s+/g,"-"),children:e.status})}),(0,t.jsx)("td",{children:(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8},children:[(0,t.jsx)("div",{className:"bar-wrap",style:{flex:1,maxWidth:80},children:(0,t.jsx)("div",{className:"bar-fill",style:{width:"".concat(e.progressPercent||0,"%"),background:(e.progressPercent||0)>=80?"var(--accent)":(e.progressPercent||0)>=30?"var(--warn)":"var(--danger)"}})}),e.progressPercent||0,"%"]})}),(0,t.jsxs)("td",{children:[e.effectivenessPercent||0,"%"]}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{className:"muted",children:e.ownerDisplayName||"-"})})]},e.id)})})]})}),!H.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No mitigations found"})}),f&&(0,t.jsx)(k,{project:s,risks:M,onClose:()=>C(!1),onSaved:()=>{C(!1),r()},toast:n}),w&&!E&&(0,t.jsx)("div",{className:"modal-overlay",onClick:()=>S(null),children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:500},children:[(0,t.jsx)("h2",{style:{margin:0},children:P?"Edit Mitigation":w.title}),(0,t.jsxs)("div",{style:{marginTop:12},children:[(0,t.jsx)(v,{label:"Title *",children:(0,t.jsx)(g,{value:T.title,onChange:e=>R(s=>({...s,title:e}))})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:T.description,onChange:e=>R(s=>({...s,description:e.target.value})),rows:2,style:{width:"100%",resize:"vertical"}})}),(0,t.jsx)(v,{label:"Status",children:(0,t.jsx)(y,{value:T.status,onChange:e=>R(s=>({...s,status:e})),options:m})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Progress %",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:T.progressPercent,onChange:e=>R(s=>({...s,progressPercent:Number(e)}))})}),(0,t.jsx)(v,{label:"Effectiveness %",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:T.effectivenessPercent,onChange:e=>R(s=>({...s,effectivenessPercent:Number(e)}))})})]}),(0,t.jsx)(v,{label:"Due Date",children:(0,t.jsx)(g,{type:"date",value:T.dueDate,onChange:e=>R(s=>({...s,dueDate:e}))})}),(0,t.jsx)(v,{label:"Owner",children:(0,t.jsx)(g,{value:T.ownerDisplayName,onChange:e=>R(s=>({...s,ownerDisplayName:e}))})})]}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:()=>S(null),children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:_,disabled:"edit"===A,children:"edit"===A?"Saving...":"Save Changes"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff",marginLeft:"auto"},onClick:()=>F(w),children:"Delete"})]})]})}),E&&(0,t.jsx)(b,{label:"this mitigation",onConfirm:W,onCancel:()=>F(null),deleting:L})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading..."})})}function S(e){var s,a,n;let{project:r,dashboard:c,toast:d,onRefresh:o}=e,[u,m]=(0,l.useState)(!1),[h,j]=(0,l.useState)(!1),[x,b]=(0,l.useState)({decision:"APPROVED",reviewerName:"",reason:""}),[N,f]=(0,l.useState)(!1),C=(null==c||null==(s=c.gate)?void 0:s.criteria)||[],k=(null==c||null==(a=c.summary)?void 0:a.gateStatus)||"Unknown",w=null==c||null==(n=c.gate)?void 0:n.id,S="Ready"===k?"good":"Warning"===k?"warn":"bad",P=async()=>{m(!0);try{await i.FH.post("/api/projects/".concat(r.id,"/gate/evaluate"),{}),d.add("Gate evaluated"),o()}catch(e){d.add(e.message||"Evaluation failed","error")}finally{m(!1)}},D=async()=>{if(!x.reviewerName.trim())return void d.add("Reviewer name is required","error");f(!0);try{await i.FH.post("/api/gates/".concat(w,"/decisions"),x),d.add("Decision submitted"),j(!1),o()}catch(e){d.add(e.message||"Failed to submit decision","error")}finally{f(!1)}};return c?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{children:"Deployment Gate"}),(0,t.jsx)("p",{className:"muted",children:"Gate evaluation for AI deployment readiness"})]}),(0,t.jsx)("div",{className:"dash-actions",children:(0,t.jsx)("div",{className:"metric-value ".concat(S),style:{fontSize:28},children:k})})]}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsxs)("tr",{children:[(0,t.jsx)("th",{children:"Criterion"}),(0,t.jsx)("th",{children:"Required"}),(0,t.jsx)("th",{children:"Actual"}),(0,t.jsx)("th",{children:"Status"})]})}),(0,t.jsx)("tbody",{children:C.map(e=>{var s;return(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.name})}),(0,t.jsx)("td",{children:e.required}),(0,t.jsx)("td",{children:e.actual}),(0,t.jsx)("td",{children:(0,t.jsx)(p,{className:null==(s=e.status)?void 0:s.toLowerCase(),children:e.status})})]},e.name)})})]})}),!C.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No gate criteria evaluated yet"})}),(0,t.jsxs)("div",{style:{marginTop:16,display:"flex",gap:8,flexWrap:"wrap"},children:[(0,t.jsx)("button",{className:"button small",onClick:P,disabled:u,children:u?"Evaluating...":"Evaluate Gate"}),w&&(0,t.jsx)("button",{className:"button secondary small",onClick:()=>j(!0),children:"Add Decision"}),(0,t.jsx)("a",{href:"/api/projects/".concat(null==r?void 0:r.id,"/gate/history"),className:"button secondary small",target:"_blank",children:"History (API)"})]}),h&&(0,t.jsx)("div",{className:"modal-overlay",onClick:()=>j(!1),children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:400},children:[(0,t.jsx)("h2",{children:"Gate Decision"}),(0,t.jsx)(v,{label:"Decision",children:(0,t.jsx)(y,{value:x.decision,onChange:e=>b(s=>({...s,decision:e})),options:["APPROVED","REJECTED","ACCEPTED","NEEDS_CHANGES"]})}),(0,t.jsx)(v,{label:"Reviewer Name *",children:(0,t.jsx)(g,{value:x.reviewerName,onChange:e=>b(s=>({...s,reviewerName:e}))})}),(0,t.jsx)(v,{label:"Reason",children:(0,t.jsx)("textarea",{className:"input",value:x.reason,onChange:e=>b(s=>({...s,reason:e.target.value})),rows:3,style:{width:"100%",resize:"vertical"}})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:()=>j(!1),children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:D,disabled:N,children:N?"Saving...":"Submit Decision"})]})]})})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading..."})})}function P(e){var s;let{project:a,dashboard:n,onClose:r,onSaved:c,toast:d}=e,[o,u]=(0,l.useState)(!1),[m,h]=(0,l.useState)({provider:"TRELLO",workspaceName:"",baseUrl:"",authMode:"API_KEY"}),j=e=>s=>h(a=>({...a,[e]:s})),x=(null==n||null==(s=n.gate)?void 0:s.workspaceId)||(null==a?void 0:a.workspaceId),p=async()=>{if(!m.workspaceName.trim())return void d.add("Workspace name is required","error");u(!0);try{await i.FH.post("/api/workspaces/".concat(x,"/integrations"),m),d.add("Integration created"),c()}catch(e){d.add(e.message||"Failed to create integration","error")}finally{u(!1)}};return(0,t.jsx)("div",{className:"modal-overlay",onClick:r,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:450},children:[(0,t.jsx)("h2",{children:"New Integration"}),(0,t.jsx)(v,{label:"Provider",children:(0,t.jsx)(y,{value:m.provider,onChange:j("provider"),options:["TRELLO","JIRA","ASANA","MICROSOFT_PLANNER"]})}),(0,t.jsx)(v,{label:"Workspace Name *",children:(0,t.jsx)(g,{value:m.workspaceName,onChange:j("workspaceName")})}),(0,t.jsx)(v,{label:"Base URL",children:(0,t.jsx)(g,{value:m.baseUrl,onChange:j("baseUrl")})}),(0,t.jsx)(v,{label:"Auth Mode",children:(0,t.jsx)(y,{value:m.authMode,onChange:j("authMode"),options:["API_KEY","OAUTH","BASIC"]})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:r,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:p,disabled:o,children:o?"Saving...":"Create Integration"})]})]})})}function D(e){let{project:s,dashboard:a,toast:n,onRefresh:i}=e,[r,c]=(0,l.useState)(!1),d=(null==a?void 0:a.integrations)||[];return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{children:"Integrations"}),(0,t.jsx)("p",{className:"muted",children:"Connect Trello, Jira, Asana, or Microsoft Planner"})]}),(0,t.jsx)("div",{className:"dash-actions",children:(0,t.jsx)("button",{className:"button small",onClick:()=>c(!0),children:"+ New Integration"})})]}),(0,t.jsx)("div",{className:"grid",style:{gridTemplateColumns:"repeat(auto-fit, minmax(240px, 1fr))"},children:["TRELLO","JIRA","ASANA","MICROSOFT_PLANNER"].map(e=>{let s=d.find(s=>s.provider===e);return(0,t.jsxs)("div",{className:"panel",style:{textAlign:"center"},children:[(0,t.jsx)("div",{style:{fontSize:32,marginBottom:8},children:"TRELLO"===e?"⊞":"JIRA"===e?"◆":"ASANA"===e?"◇":"▣"}),(0,t.jsx)("h3",{style:{margin:"0 0 4px"},children:e.replace("_"," ")}),(0,t.jsx)("p",{className:"muted",style:{fontSize:12,margin:"0 0 12px"},children:s?s.workspaceName:"Not configured"}),(0,t.jsx)("div",{style:{display:"flex",gap:6,justifyContent:"center"},children:s?(0,t.jsx)("a",{href:"/api/integrations/".concat(s.id),className:"button secondary small",target:"_blank",children:"Manage"}):(0,t.jsx)("button",{className:"button secondary small",onClick:()=>c(!0),children:"Configure"})})]},e)})}),r&&(0,t.jsx)(P,{project:s,dashboard:a,onClose:()=>c(!1),onSaved:()=>{c(!1),i()},toast:n}),!d.length&&(0,t.jsx)("div",{style:{marginTop:12},children:(0,t.jsx)("a",{href:"/api/integration-providers",className:"button secondary small",target:"_blank",children:"Integration providers (API)"})})]})}function T(e){let{project:s,toast:a}=e,[n,r]=(0,l.useState)([]),[c,d]=(0,l.useState)(!0),[o,u]=(0,l.useState)(null),m=(0,l.useCallback)(async()=>{if(s){d(!0),u(null);try{let e=await i.FH.get("/api/projects/".concat(s.id,"/audit"));r(e.auditEvents||[])}catch(e){u(e.message||"Failed to load audit log")}finally{d(!1)}}},[s]);return((0,l.useEffect)(()=>{m()},[m]),c)?(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading audit log..."})}):o?(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:o})}):n.length?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{children:"Audit Log"}),(0,t.jsx)("p",{className:"muted",children:"Project activity history"})]}),(0,t.jsx)("div",{className:"dash-actions",children:(0,t.jsx)("button",{className:"button secondary small",onClick:m,children:"Refresh"})})]}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsxs)("tr",{children:[(0,t.jsx)("th",{children:"Date"}),(0,t.jsx)("th",{children:"Action"}),(0,t.jsx)("th",{children:"Entity"}),(0,t.jsx)("th",{children:"Actor"}),(0,t.jsx)("th",{children:"Details"})]})}),(0,t.jsx)("tbody",{children:n.map(e=>{var s,a;return(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{style:{fontSize:12,whiteSpace:"nowrap"},children:new Date(e.createdAt).toLocaleString()}),(0,t.jsx)("td",{children:(0,t.jsx)(p,{className:null==(s=e.action)?void 0:s.toLowerCase().replace(/\s+/g,"-"),children:e.action})}),(0,t.jsxs)("td",{style:{fontSize:12},children:[e.entityType," ",(0,t.jsxs)("span",{className:"muted",children:["(",null==(a=e.entityId)?void 0:a.slice(0,8),")"]})]}),(0,t.jsx)("td",{style:{fontSize:12},children:e.actorUserId||"system"}),(0,t.jsx)("td",{style:{fontSize:12,maxWidth:300,overflow:"hidden",textOverflow:"ellipsis"},children:e.afterJson?JSON.stringify(e.afterJson).slice(0,80):"-"})]},e.id)})})]})})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No audit events recorded yet"})})}function R(e){let{projects:s,workspaceId:a,currentProjectId:n,onSwitch:r,onRefresh:c,toast:d}=e,[o,u]=(0,l.useState)(null),[m,h]=(0,l.useState)(null),[j,x]=(0,l.useState)(!1),v=async()=>{u(!0);try{await i.FH.del("/api/projects/".concat(m.id)),d.add('Project "'.concat(m.name,'" deleted')),h(null),c()}catch(e){d.add(e.message||"Failed to delete project","error")}finally{u(!1)}};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{children:"All Projects"}),(0,t.jsxs)("p",{className:"muted",children:[s.length," project(s) in workspace"]})]}),(0,t.jsx)("div",{className:"dash-actions",children:(0,t.jsx)("button",{className:"button small",onClick:()=>x(!0),children:"+ New Project"})})]}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsxs)("tr",{children:[(0,t.jsx)("th",{children:"Name"}),(0,t.jsx)("th",{children:"Status"}),(0,t.jsx)("th",{children:"Type"}),(0,t.jsx)("th",{children:"Created"}),(0,t.jsx)("th",{children:"Actions"})]})}),(0,t.jsx)("tbody",{children:[...s].sort((e,s)=>new Date(s.createdAt)-new Date(e.createdAt)).map(e=>{var s;return(0,t.jsxs)("tr",{style:{background:e.id===n?"var(--surface-alt)":""},children:[(0,t.jsxs)("td",{children:[(0,t.jsx)("strong",{children:e.name}),e.id===n?(0,t.jsx)("span",{className:"muted",style:{fontSize:11,marginLeft:6},children:"(current)"}):"",e.description?(0,t.jsx)("div",{className:"muted",style:{fontSize:11},children:e.description}):""]}),(0,t.jsx)("td",{children:(0,t.jsx)(p,{className:null==(s=e.status)?void 0:s.toLowerCase(),children:e.status})}),(0,t.jsx)("td",{style:{fontSize:12},children:e.projectType}),(0,t.jsx)("td",{style:{fontSize:12},children:new Date(e.createdAt).toLocaleDateString()}),(0,t.jsxs)("td",{style:{textAlign:"right",whiteSpace:"nowrap"},children:[e.id!==n&&(0,t.jsx)("button",{className:"button secondary small",style:{marginRight:6},onClick:()=>r(e.id),children:"Open"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff"},onClick:()=>h(e),disabled:o===e.id,children:"Delete"})]})]},e.id)})})]})}),!s.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No projects yet. Create one to get started."})}),j&&(0,t.jsx)(I,{workspaceId:a,onClose:()=>x(!1),onSaved:()=>{x(!1),c()},toast:d}),m&&(0,t.jsx)("div",{className:"modal-overlay",onClick:()=>h(null),children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:380},children:[(0,t.jsxs)("h3",{children:['Delete "',m.name,'"?']}),(0,t.jsx)("p",{style:{fontSize:13,color:"var(--muted)"},children:"This permanently deletes the project and all its risks, mitigations, and data."}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:()=>h(null),children:"Cancel"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff"},onClick:v,disabled:o,children:o?"Deleting...":"Delete Project"})]})]})})]})}function A(e){let{project:s,onClose:a,onSaved:n,toast:r}=e,[c,d]=(0,l.useState)(!1),[o,u]=(0,l.useState)({name:(null==s?void 0:s.name)||"",description:(null==s?void 0:s.description)||"",subtitle:(null==s?void 0:s.subtitle)||"",status:(null==s?void 0:s.status)||"Active"}),m=async()=>{if(!o.name.trim())return void r.add("Project name is required","error");d(!0);try{await i.FH.patch("/api/projects/".concat(s.id),o),r.add("Project updated"),n()}catch(e){r.add(e.message||"Failed to update project","error")}finally{d(!1)}};return(0,t.jsx)("div",{className:"modal-overlay",onClick:a,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:450},children:[(0,t.jsx)("h2",{children:"Project Settings"}),(0,t.jsx)(v,{label:"Name *",children:(0,t.jsx)(g,{value:o.name,onChange:e=>u(s=>({...s,name:e}))})}),(0,t.jsx)(v,{label:"Subtitle",children:(0,t.jsx)(g,{value:o.subtitle,onChange:e=>u(s=>({...s,subtitle:e}))})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:o.description,onChange:e=>u(s=>({...s,description:e.target.value})),rows:3,style:{width:"100%",resize:"vertical"}})}),(0,t.jsx)(v,{label:"Status",children:(0,t.jsx)(y,{value:o.status,onChange:e=>u(s=>({...s,status:e})),options:["Active","Archived","On Hold"]})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:a,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:m,disabled:c,children:c?"Saving...":"Save Changes"})]})]})})}function I(e){let{workspaceId:s,onClose:a,onSaved:n,toast:r}=e,[c,d]=(0,l.useState)(!1),[o,u]=(0,l.useState)({name:"",description:"",projectType:"AI-Enabler"}),m=async()=>{if(!o.name.trim())return void r.add("Project name is required","error");d(!0);try{await i.FH.post("/api/workspaces/".concat(s,"/projects"),o),r.add("Project created"),n()}catch(e){r.add(e.message||"Failed to create project","error")}finally{d(!1)}};return(0,t.jsx)("div",{className:"modal-overlay",onClick:a,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:450},children:[(0,t.jsx)("h2",{children:"New Project"}),(0,t.jsx)(v,{label:"Name *",children:(0,t.jsx)(g,{value:o.name,onChange:e=>u(s=>({...s,name:e}))})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:o.description,onChange:e=>u(s=>({...s,description:e.target.value})),rows:3,style:{width:"100%",resize:"vertical"}})}),(0,t.jsx)(v,{label:"Project Type",children:(0,t.jsx)(y,{value:o.projectType,onChange:e=>u(s=>({...s,projectType:e})),options:["AI-Enabler","GENERATIVE_AI","ML-Pipeline","Automation"]})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:a,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:m,disabled:c,children:c?"Saving...":"Create Project"})]})]})})}function E(e){let{projects:s,workspaceId:a,currentProjectId:n,onClose:r,onSwitch:c,onSaved:d,toast:o}=e,[u,m]=(0,l.useState)(null),[h,j]=(0,l.useState)(null),[x,v]=(0,l.useState)(!1),g=async()=>{m(!0);try{await i.FH.del("/api/projects/".concat(h.id)),o.add('Project "'.concat(h.name,'" deleted')),j(null),d()}catch(e){o.add(e.message||"Failed to delete project","error")}finally{m(!1)}};return(0,t.jsxs)("div",{className:"modal-overlay",onClick:r,children:[(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:700,maxHeight:"80vh",overflow:"auto"},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"},children:[(0,t.jsx)("h2",{style:{margin:0},children:"All Projects"}),(0,t.jsx)("button",{className:"button small",onClick:()=>v(!0),children:"+ New Project"})]}),(0,t.jsxs)("p",{className:"muted",style:{fontSize:12,marginTop:4},children:[s.length," project(s) in workspace"]}),(0,t.jsx)("div",{className:"table-wrap",style:{marginTop:12},children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsxs)("tr",{children:[(0,t.jsx)("th",{children:"Name"}),(0,t.jsx)("th",{children:"Status"}),(0,t.jsx)("th",{children:"Type"}),(0,t.jsx)("th",{children:"Created"}),(0,t.jsx)("th",{})]})}),(0,t.jsx)("tbody",{children:[...s].sort((e,s)=>new Date(s.createdAt)-new Date(e.createdAt)).map(e=>{var s;return(0,t.jsxs)("tr",{style:{background:e.id===n?"var(--surface-alt)":""},children:[(0,t.jsxs)("td",{children:[(0,t.jsx)("strong",{children:e.name}),e.id===n?(0,t.jsx)("span",{className:"muted",style:{fontSize:11,marginLeft:6},children:"(current)"}):""]}),(0,t.jsx)("td",{children:(0,t.jsx)(p,{className:null==(s=e.status)?void 0:s.toLowerCase(),children:e.status})}),(0,t.jsx)("td",{style:{fontSize:12},children:e.projectType}),(0,t.jsx)("td",{style:{fontSize:12},children:new Date(e.createdAt).toLocaleDateString()}),(0,t.jsxs)("td",{style:{textAlign:"right",whiteSpace:"nowrap"},children:[e.id!==n&&(0,t.jsx)("button",{className:"button secondary small",style:{marginRight:6},onClick:()=>{c(e.id),r()},children:"Open"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff"},onClick:()=>j(e),disabled:u===e.id,children:"✕"})]})]},e.id)})})]})}),!s.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No projects yet"})}),(0,t.jsx)("div",{className:"modal-actions",children:(0,t.jsx)("button",{className:"button secondary small",onClick:r,children:"Close"})})]}),h&&(0,t.jsx)("div",{className:"modal-overlay",onClick:()=>j(null),children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:380},children:[(0,t.jsxs)("h3",{children:['Delete "',h.name,'"?']}),(0,t.jsx)("p",{style:{fontSize:13,color:"var(--muted)"},children:"This permanently deletes the project and all its risks, mitigations, and data."}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:()=>j(null),children:"Cancel"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff"},onClick:g,disabled:u,children:u?"Deleting...":"Delete Project"})]})]})}),x&&(0,t.jsx)(I,{workspaceId:a,onClose:()=>v(!1),onSaved:()=>{v(!1),d()},toast:o})]})}function F(){let e=(0,n.useRouter)(),s=(0,n.useSearchParams)(),a=c.includes(s.get("tab"))?s.get("tab"):"Overview",[d,o]=(0,l.useState)(null),[u,m]=(0,l.useState)([]),[j,x]=(0,l.useState)(s.get("projectId")||null),[p,v]=(0,l.useState)(null),[g,y]=(0,l.useState)(!0),[b,f]=(0,l.useState)(null),[k,P]=(0,l.useState)(0),[I,F]=(0,l.useState)(!1),[L,O]=(0,l.useState)(!1),[z,M]=(0,l.useState)(null),{toasts:H,add:_}=function(){let[e,s]=(0,l.useState)([]);return{toasts:e,add:(0,l.useCallback)(function(e){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"success",t=Date.now()+Math.random();s(s=>[...s,{id:t,message:e,type:a}]),setTimeout(()=>s(e=>e.filter(e=>e.id!==t)),3e3)},[])}}(),W=(0,l.useCallback)(()=>P(e=>e+1),[]),G=(0,l.useCallback)(async a=>{y(!0),f(null);try{var t,l;let n=await i.FH.get("/api/auth/session");if(!(null==n?void 0:n.authenticated)){f("Not authenticated."),y(!1);return}let r=null==(t=n.memberships)?void 0:t[0];if(!r){f("No organization membership found."),y(!1);return}let c=r.organizationId,d=null==(l=(await i.FH.get("/api/workspaces?organizationId=".concat(c))).workspaces)?void 0:l[0];if(!d){f("No workspace found — create one to get started."),y(!1);return}M(d.id);let u=(await i.FH.get("/api/workspaces/".concat(d.id,"/projects"))).projects||[];if(!u.length){f("No project found — create a project to get started."),y(!1);return}m(u);let h=a?u.find(e=>e.id===a):null;if(h||(h=u[0]),h.id!==(s.get("projectId")||null)){let a=s.get("tab")||"Overview";e.replace("/dashboard?tab=".concat(a,"&projectId=").concat(h.id))}o(h);let j=await i.FH.get("/api/projects/".concat(h.id,"/dashboard"));v(j.dashboard),y(!1)}catch(e){f(e.message||"Failed to load dashboard data"),y(!1)}},[]);(0,l.useEffect)(()=>{G(j)},[G,k,j]);let q=s=>{x(s),e.push("/dashboard?tab=".concat(a,"&projectId=").concat(s))};return g&&"Integrations"!==a?(0,t.jsx)("div",{className:"shell-loading",children:(0,t.jsx)("div",{className:"spinner"})}):b&&"Integrations"!==a?(0,t.jsxs)("div",{className:"empty-state",children:[(0,t.jsx)("div",{className:"empty-icon",children:"!"}),(0,t.jsx)("p",{children:b}),(0,t.jsx)("button",{className:"button secondary small",style:{marginTop:12},onClick:()=>P(e=>e+1),children:"Retry"})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsx)("div",{style:{display:"flex",alignItems:"center",gap:10},children:(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6},children:[(0,t.jsx)("select",{className:"input",value:(null==d?void 0:d.id)||"",onChange:e=>q(e.target.value),style:{fontSize:16,fontWeight:700,width:"auto",minWidth:200,border:"none",background:"transparent",cursor:"pointer"},children:u.map(e=>(0,t.jsxs)("option",{value:e.id,children:[e.name," ","Active"!==e.status?"(".concat(e.status,")"):""]},e.id))}),(0,t.jsx)("button",{className:"button secondary small",style:{fontSize:14,padding:"2px 8px"},onClick:()=>F(!0),title:"Project settings",children:"⚙"}),(0,t.jsx)("button",{className:"button secondary small",onClick:()=>O(!0),children:"Projects"})]}),(0,t.jsx)("p",{className:"muted",style:{margin:0},children:(null==d?void 0:d.subtitle)||(null==d?void 0:d.description)||""})]})}),(0,t.jsxs)("div",{className:"dash-actions",children:[(0,t.jsx)("a",{href:"/api/projects/".concat(null==d?void 0:d.id,"/reports/executive.html"),className:"button secondary small",target:"_blank",children:"Report"}),(0,t.jsx)("a",{href:"/api/projects/".concat(null==d?void 0:d.id,"/reports/risk-register.csv"),className:"button secondary small",target:"_blank",children:"CSV"})]})]}),(0,t.jsx)("div",{className:"tabs",children:c.map(s=>(0,t.jsx)("button",{className:"tab ".concat(a===s?"active":""),onClick:()=>e.push("/dashboard?tab=".concat(s).concat(d?"&projectId=".concat(d.id):"")),children:s},s))}),"Overview"===a&&(0,t.jsx)(r,{name:"Overview",children:(0,t.jsx)(N,{project:d,dashboard:p})},"overview"),"Projects"===a&&(0,t.jsx)(r,{name:"Projects",children:(0,t.jsx)(R,{projects:u,workspaceId:z,currentProjectId:null==d?void 0:d.id,onSwitch:q,onRefresh:W,toast:{add:_}})},"projects"),"Risks"===a&&(0,t.jsx)(r,{name:"Risks",children:(0,t.jsx)(C,{project:d,dashboard:p,toast:{add:_},onRefresh:W})},"risks"),"Mitigations"===a&&(0,t.jsx)(r,{name:"Mitigations",children:(0,t.jsx)(w,{project:d,dashboard:p,toast:{add:_},onRefresh:W})},"mitigations"),"Gate"===a&&(0,t.jsx)(r,{name:"Gate",children:(0,t.jsx)(S,{project:d,dashboard:p,toast:{add:_},onRefresh:W})},"gate"),"Integrations"===a&&(0,t.jsx)(r,{name:"Integrations",children:(0,t.jsx)(D,{project:d,dashboard:p,toast:{add:_},onRefresh:W})},"integrations"),"Audit"===a&&(0,t.jsx)(r,{name:"Audit",children:(0,t.jsx)(T,{project:d,toast:{add:_}})},"audit"),I&&(0,t.jsx)(A,{project:d,onClose:()=>F(!1),onSaved:()=>{F(!1),W()},toast:{add:_}}),L&&(0,t.jsx)(E,{projects:u,workspaceId:z,currentProjectId:null==d?void 0:d.id,onClose:()=>O(!1),onSwitch:q,onSaved:()=>{O(!1),W()},toast:{add:_}}),(0,t.jsx)(h,{toasts:H})]})}},6282:(e,s,a)=>{"use strict";async function t(e,s,a){var t;let l={method:e,headers:{"Content-Type":"application/json"}};a&&(l.body=JSON.stringify(a));let n=await fetch("".concat("").concat(s),l),i=(null==(t=n.headers.get("content-type"))?void 0:t.includes("application/json"))?await n.json():await n.text();if(!n.ok)throw Error((null==i?void 0:i.error)||(null==i?void 0:i.message)||"Request failed (".concat(n.status,")"));return i}a.d(s,{FH:()=>l,Ht:()=>n,ri:()=>i});let l={get:e=>t("GET",e),post:(e,s)=>t("POST",e,s),put:(e,s)=>t("PUT",e,s),patch:(e,s)=>t("PATCH",e,s),del:e=>t("DELETE",e)};async function n(){try{let e=await l.get("/api/auth/session");return e.user||e.actor||null}catch(e){return null}}async function i(){await l.post("/api/auth/logout"),window.location.href="/"}}},e=>{e.O(0,[8441,1255,7358],()=>e(e.s=646)),_N_E=e.O()}]);  C (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5105],{63:(e,s,a)=>{"use strict";var t=a(7260);a.o(t,"useRouter")&&a.d(s,{useRouter:function(){return t.useRouter}}),a.o(t,"useSearchParams")&&a.d(s,{useSearchParams:function(){return t.useSearchParams}})},646:(e,s,a)=>{Promise.resolve().then(a.bind(a,3399))},3399:(e,s,a)=>{"use strict";a.r(s),a.d(s,{default:()=>T});var t=a(5155),l=a(2115),i=a(63),n=a(6282);class r extends l.Component{static getDerivedStateFromError(e){return{error:e}}render(){if(this.state.error){let{fallback:e}=this.props;return e?"function"==typeof e?e(this.state.error):e:(0,t.jsxs)("div",{className:"empty-state",children:[(0,t.jsx)("div",{className:"empty-icon",children:"!"}),(0,t.jsxs)("p",{children:["Something went wrong in ",this.props.name||"this section","."]}),(0,t.jsx)("p",{className:"muted",style:{fontSize:12,marginTop:4},children:this.state.error.message}),(0,t.jsx)("button",{className:"button secondary small",style:{marginTop:12},onClick:()=>{var e,s;this.setState({error:null}),null==(e=(s=this.props).onRetry)||e.call(s)},children:"Retry"})]})}return this.props.children}constructor(e){super(e),this.state={error:null}}}let c=["Overview","Risks","Mitigations","Gate","Integrations"],o=["Technical","Governance","Legal","Ethical","Operational"],d=["Design","Development","Testing","Deployment"],u=["OPEN","IN_MITIGATION","ACCEPTED","CLOSED"],m=["NOT_STARTED","IN_PROGRESS","DONE","REJECTED"];function h(e){let{toasts:s}=e;return s.length?(0,t.jsx)("div",{className:"toast-container",children:s.map(e=>(0,t.jsx)("div",{className:"toast ".concat(e.type),children:e.message},e.id))}):null}function x(e){let{value:s,onChange:a,placeholder:l}=e;return(0,t.jsxs)("div",{className:"search-wrap",children:[(0,t.jsx)("span",{className:"search-icon",children:"⌕"}),(0,t.jsx)("input",{className:"input",value:s,onChange:e=>a(e.target.value),placeholder:l||"Search..."})]})}function p(e,s,a){return s?[...e].sort((e,t)=>{let l=e[s],i=t[s];if(null==l)return 1;if(null==i)return -1;let n="number"==typeof l?l-i:String(l).localeCompare(String(i));return"asc"===a?n:-n}):e}function j(e){let{children:s,className:a}=e;return(0,t.jsx)("span",{className:"badge ".concat(a||""),children:s})}function v(e){let{label:s,children:a}=e;return(0,t.jsxs)("div",{style:{marginBottom:10},children:[(0,t.jsx)("label",{style:{display:"block",fontSize:12,color:"var(--muted)",marginBottom:3},children:s}),a]})}function g(e){let{value:s,onChange:a,type:l="text",min:i,max:n,style:r}=e;return(0,t.jsx)("input",{className:"input",type:l,value:s,onChange:e=>a(e.target.value),min:i,max:n,style:{width:"100%",...r}})}function y(e){let{value:s,onChange:a,options:l}=e;return(0,t.jsxs)("select",{className:"input",value:s,onChange:e=>a(e.target.value),style:{width:"100%"},children:[(0,t.jsx)("option",{value:"",children:"— Select —"}),l.map(e=>(0,t.jsx)("option",{value:e,children:e},e))]})}function b(e){let{label:s,onConfirm:a,onCancel:l,deleting:i}=e;return(0,t.jsx)("div",{className:"modal-overlay",onClick:l,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:380},children:[(0,t.jsxs)("h3",{children:["Delete ",s,"?"]}),(0,t.jsx)("p",{style:{fontSize:13,color:"var(--muted)"},children:"This cannot be undone."}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:l,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff"},onClick:a,disabled:i,children:i?"Deleting...":"Delete"})]})]})})}function N(e){let{project:s,dashboard:a}=e,i=(0,l.useMemo)(()=>{var e,s,t,l,i,n,r,c,o,d,u,m,h,x,p,j,v,g,y;return a?[{label:"Overall Score",value:null!=(j=null==(e=a.summary)?void 0:e.overallScore)?j:"-",cls:(null==(s=a.summary)?void 0:s.overallScore)>=75?"bad":(null==(t=a.summary)?void 0:t.overallScore)>=50?"warn":"good",sub:"Risk level: ".concat((null==(l=a.summary)?void 0:l.riskLevel)||"-")},{label:"Deployment Gate",value:null!=(v=null==(i=a.summary)?void 0:i.gateStatus)?v:"-",cls:(null==(n=a.summary)?void 0:n.gateStatus)==="Ready"?"good":(null==(r=a.summary)?void 0:r.gateStatus)==="Warning"?"warn":"bad",sub:(null==(c=a.gate)?void 0:c.message)||""},{label:"Open Risks",value:null!=(g=null==(o=a.summary)?void 0:o.openRisks)?g:0,cls:((null==(d=a.summary)?void 0:d.openRisks)||0)>5?"bad":((null==(u=a.summary)?void 0:u.openRisks)||0)>2?"warn":"good",sub:"".concat((null==(m=a.summary)?void 0:m.totalRisks)||0," total risks")},{label:"Mitigation",value:"".concat(null!=(y=null==(h=a.summary)?void 0:h.mitigationCompletion)?y:0,"%"),cls:40>((null==(x=a.summary)?void 0:x.mitigationCompletion)||0)?"bad":70>((null==(p=a.summary)?void 0:p.mitigationCompletion)||0)?"warn":"good",sub:"Average active-risk completion"}]:[]},[a]);return a?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{className:"grid",style:{gridTemplateColumns:"repeat(auto-fit, minmax(200px, 1fr))"},children:i.map(e=>(0,t.jsxs)("div",{className:"metric-card",children:[(0,t.jsx)("h3",{children:e.label}),(0,t.jsx)("div",{className:"metric-value ".concat(e.cls),children:e.value}),(0,t.jsx)("div",{className:"metric-sub",children:e.sub})]},e.label))}),(0,t.jsxs)("div",{className:"grid",style:{gridTemplateColumns:"1fr 1fr",marginTop:18},children:[(0,t.jsxs)("div",{className:"panel",children:[(0,t.jsx)("h2",{children:"Dimensions"}),(a.dimensions||[]).map(e=>(0,t.jsxs)("div",{style:{marginBottom:12},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:4},children:[(0,t.jsx)("span",{style:{fontSize:13},children:e.name}),(0,t.jsx)("strong",{style:{fontSize:13},children:e.score})]}),(0,t.jsx)("div",{className:"bar-wrap",children:(0,t.jsx)("div",{className:"bar-fill",style:{width:"".concat(Math.min(e.score,100),"%"),background:e.score>=50?"var(--danger)":e.score>=25?"var(--warn)":"var(--accent)"}})})]},e.name))]}),(0,t.jsxs)("div",{className:"panel",children:[(0,t.jsx)("h2",{children:"Lifecycle"}),(a.lifecycle||[]).map(e=>(0,t.jsxs)("div",{style:{marginBottom:12},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:4},children:[(0,t.jsx)("span",{style:{fontSize:13},children:e.name}),(0,t.jsxs)("span",{className:"muted",style:{fontSize:12},children:[e.openRisks," open"]})]}),(0,t.jsx)("div",{className:"bar-wrap",children:(0,t.jsx)("div",{className:"bar-fill",style:{width:"".concat(Math.min(e.riskScore||0,100),"%"),background:(e.riskScore||0)>=50?"var(--danger)":(e.riskScore||0)>=25?"var(--warn)":"var(--accent)"}})})]},e.name))]})]})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading dashboard data..."})})}function f(e){let{project:s,onClose:a,onSaved:i,toast:r}=e,[c,u]=(0,l.useState)(!1),[m,h]=(0,l.useState)({title:"",description:"",dimension:"",domain:"",lifecyclePhase:"",probability:50,impact:50,detectability:50,ownerDisplayName:""}),x=e=>s=>h(a=>({...a,[e]:s})),p=async()=>{if(!m.title.trim())return void r.add("Title is required","error");if(!m.dimension)return void r.add("Dimension is required","error");u(!0);try{await n.FH.post("/api/projects/".concat(s.id,"/risks"),m),r.add("Risk created"),i()}catch(e){r.add(e.message||"Failed to create risk","error")}finally{u(!1)}};return(0,t.jsx)("div",{className:"modal-overlay",onClick:a,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:500},children:[(0,t.jsx)("h2",{children:"New Risk"}),(0,t.jsx)(v,{label:"Title *",children:(0,t.jsx)(g,{value:m.title,onChange:x("title")})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:m.description,onChange:e=>x("description")(e.target.value),rows:3,style:{width:"100%",resize:"vertical"}})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Dimension *",children:(0,t.jsx)(y,{value:m.dimension,onChange:x("dimension"),options:o})}),(0,t.jsx)(v,{label:"Domain",children:(0,t.jsx)(g,{value:m.domain,onChange:x("domain")})})]}),(0,t.jsx)(v,{label:"Lifecycle Phase",children:(0,t.jsx)(y,{value:m.lifecyclePhase,onChange:x("lifecyclePhase"),options:d})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Probability",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:m.probability,onChange:x("probability")})}),(0,t.jsx)(v,{label:"Impact",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:m.impact,onChange:x("impact")})}),(0,t.jsx)(v,{label:"Detectability",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:m.detectability,onChange:x("detectability")})})]}),(0,t.jsx)(v,{label:"Owner",children:(0,t.jsx)(g,{value:m.ownerDisplayName,onChange:x("ownerDisplayName")})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:a,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:p,disabled:c,children:c?"Saving...":"Create Risk"})]})]})})}function C(e){let{project:s,dashboard:a,toast:i,onRefresh:r}=e,[c,m]=(0,l.useState)(""),[h,N]=(0,l.useState)("normalizedScore"),[C,k]=(0,l.useState)("desc"),[w,S]=(0,l.useState)(0),[D,P]=(0,l.useState)(null),[T,R]=(0,l.useState)(!1),[E,I]=(0,l.useState)(!1),[O,A]=(0,l.useState)({}),[F,L]=(0,l.useState)(null),[M,z]=(0,l.useState)(null),[_,H]=(0,l.useState)(!1),G=(0,l.useMemo)(()=>(null==a?void 0:a.topRisks)?p(a.topRisks,h,C):[],[a,h,C]),W=(0,l.useMemo)(()=>{if(!c)return G;let e=c.toLowerCase();return G.filter(s=>(s.title||"").toLowerCase().includes(e)||(s.dimension||"").toLowerCase().includes(e)||(s.ownerDisplayName||"").toLowerCase().includes(e))},[G,c]),B=W.slice(0,(w+1)*20),q=async(e,s)=>{L(e);try{await n.FH.patch("/api/risks/".concat(e),{status:s}),i.add("Risk status updated to ".concat(s)),P(null),r()}catch(e){i.add(e.message,"error")}finally{L(null)}},U=async()=>{if(!O.title.trim())return void i.add("Title is required","error");L("edit");try{await n.FH.patch("/api/risks/".concat(D.id),O),i.add("Risk updated"),P(null),r()}catch(e){i.add(e.message||"Failed to update","error")}finally{L(null)}},J=async()=>{H(!0);try{await n.FH.del("/api/risks/".concat(M.id)),i.add("Risk deleted"),z(null),P(null),r()}catch(e){i.add(e.message||"Failed to delete","error")}finally{H(!1)}};return a?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{style:{display:"flex",gap:8,marginBottom:12},children:[(0,t.jsx)(x,{value:c,onChange:m,placeholder:"Search risks by title, dimension, owner..."}),(0,t.jsx)("button",{className:"button small",onClick:()=>R(!0),children:"+ New Risk"})]}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsx)("tr",{children:[{key:"id",label:"ID"},{key:"title",label:"Risk"},{key:"dimension",label:"Dimension"},{key:"lifecyclePhase",label:"Phase"},{key:"normalizedScore",label:"Score"},{key:"residualScore",label:"Residual"},{key:"status",label:"Status"},{key:"ownerDisplayName",label:"Owner"}].map(e=>(0,t.jsxs)("th",{className:"sortable",onClick:()=>{var s;h===(s=e.key)?k(e=>"asc"===e?"desc":"asc"):(N(s),k("asc"))},children:[e.label," ",h===e.key?"asc"===C?"▲":"▼":""]},e.key))})}),(0,t.jsx)("tbody",{children:B.map(e=>{var s,a,l;return(0,t.jsxs)("tr",{onClick:()=>{var s,a,t;P(e),A({title:e.title||"",description:e.description||"",dimension:e.dimension||"",domain:e.domain||"",lifecyclePhase:e.lifecyclePhase||"",probability:null!=(s=e.probability)?s:50,impact:null!=(a=e.impact)?a:50,detectability:null!=(t=e.detectability)?t:50,ownerDisplayName:e.ownerDisplayName||""}),I(!1),z(null)},children:[(0,t.jsx)("td",{style:{fontFamily:"monospace",fontSize:12},children:null==(s=e.id)?void 0:s.slice(0,8)}),(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.title})}),(0,t.jsx)("td",{children:(0,t.jsx)(j,{className:null==(a=e.dimension)?void 0:a.toLowerCase(),children:e.dimension})}),(0,t.jsx)("td",{style:{fontSize:12},children:e.lifecyclePhase}),(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.normalizedScore})}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{style:{color:e.residualScore>=50?"var(--danger)":e.residualScore>=25?"var(--warn)":"var(--accent)"},children:e.residualScore})}),(0,t.jsx)("td",{children:(0,t.jsx)(j,{className:null==(l=e.status)?void 0:l.toLowerCase().replace(/\s+/g,"-"),children:e.status})}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{className:"muted",children:e.ownerDisplayName||"-"})})]},e.id)})})]})}),W.length>B.length&&(0,t.jsx)("div",{style:{textAlign:"center",marginTop:12},children:(0,t.jsxs)("button",{className:"button secondary small",onClick:()=>S(e=>e+1),children:["Show more (",W.length-B.length," remaining)"]})}),!W.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No risks match your search"})}),T&&(0,t.jsx)(f,{project:s,onClose:()=>R(!1),onSaved:()=>{R(!1),r()},toast:i}),D&&!M&&(0,t.jsx)("div",{className:"modal-overlay",onClick:()=>P(null),children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:520},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"},children:[(0,t.jsx)("h2",{style:{margin:0},children:D.title}),(0,t.jsx)("button",{className:"button secondary small",onClick:()=>I(!E),children:E?"View":"Edit"})]}),E?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{style:{marginTop:12},children:[(0,t.jsx)(v,{label:"Title *",children:(0,t.jsx)(g,{value:O.title,onChange:e=>A(s=>({...s,title:e}))})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:O.description,onChange:e=>A(s=>({...s,description:e.target.value})),rows:2,style:{width:"100%",resize:"vertical"}})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Dimension",children:(0,t.jsx)(y,{value:O.dimension,onChange:e=>A(s=>({...s,dimension:e})),options:o})}),(0,t.jsx)(v,{label:"Domain",children:(0,t.jsx)(g,{value:O.domain,onChange:e=>A(s=>({...s,domain:e}))})})]}),(0,t.jsx)(v,{label:"Lifecycle Phase",children:(0,t.jsx)(y,{value:O.lifecyclePhase,onChange:e=>A(s=>({...s,lifecyclePhase:e})),options:d})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Probability",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:O.probability,onChange:e=>A(s=>({...s,probability:Number(e)}))})}),(0,t.jsx)(v,{label:"Impact",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:O.impact,onChange:e=>A(s=>({...s,impact:Number(e)}))})}),(0,t.jsx)(v,{label:"Detectability",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:O.detectability,onChange:e=>A(s=>({...s,detectability:Number(e)}))})})]}),(0,t.jsx)(v,{label:"Owner",children:(0,t.jsx)(g,{value:O.ownerDisplayName,onChange:e=>A(s=>({...s,ownerDisplayName:e}))})})]}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:()=>P(null),children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:U,disabled:"edit"===F,children:"edit"===F?"Saving...":"Save Changes"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff",marginLeft:"auto"},onClick:()=>z(D),children:"Delete"})]})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:12,fontSize:13,marginTop:12},children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Dimension"}),(0,t.jsx)("br",{}),D.dimension]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Phase"}),(0,t.jsx)("br",{}),D.lifecyclePhase]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Probability"}),(0,t.jsx)("br",{}),D.probability]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Impact"}),(0,t.jsx)("br",{}),D.impact]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Detectability"}),(0,t.jsx)("br",{}),D.detectability]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Score"}),(0,t.jsx)("br",{}),(0,t.jsx)("strong",{children:D.normalizedScore})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Residual"}),(0,t.jsx)("br",{}),D.residualScore]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Owner"}),(0,t.jsx)("br",{}),D.ownerDisplayName||"-"]})]}),D.description&&(0,t.jsxs)("div",{style:{marginTop:12,fontSize:13},children:[(0,t.jsx)("span",{className:"muted",children:"Description"}),(0,t.jsx)("br",{}),D.description]}),(0,t.jsxs)("div",{style:{marginTop:16},children:[(0,t.jsx)("span",{className:"muted",style:{fontSize:12},children:"Update status:"}),(0,t.jsx)("div",{style:{display:"flex",gap:6,marginTop:6,flexWrap:"wrap"},children:u.map(e=>(0,t.jsx)("button",{className:"button small ".concat("OPEN"===e?"secondary":""),onClick:()=>q(D.id,e),disabled:F===D.id,children:e.replace("_"," ")},e))})]}),(0,t.jsx)("div",{className:"modal-actions",children:(0,t.jsx)("button",{className:"button secondary small",onClick:()=>P(null),children:"Close"})})]})]})}),M&&(0,t.jsx)(b,{label:"this risk",onConfirm:J,onCancel:()=>z(null),deleting:_})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading..."})})}function k(e){let{project:s,risks:a,onClose:i,onSaved:r,toast:c}=e,[o,d]=(0,l.useState)(!1),[u,h]=(0,l.useState)({riskId:"",title:"",description:"",status:"NOT_STARTED",progressPercent:0,effectivenessPercent:0,dueDate:"",ownerDisplayName:""}),x=e=>s=>h(a=>({...a,[e]:s})),p=async()=>{if(!u.title.trim())return void c.add("Title is required","error");if(!u.riskId)return void c.add("Please select a risk","error");d(!0);try{let e={...u,progressPercent:Number(u.progressPercent),effectivenessPercent:Number(u.effectivenessPercent)};e.dueDate?e.dueDate=new Date(e.dueDate).toISOString():delete e.dueDate,await n.FH.post("/api/risks/".concat(u.riskId,"/mitigations"),e),c.add("Mitigation created"),r()}catch(e){c.add(e.message||"Failed to create mitigation","error")}finally{d(!1)}};return(0,t.jsx)("div",{className:"modal-overlay",onClick:i,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:500},children:[(0,t.jsx)("h2",{children:"New Mitigation"}),(0,t.jsx)(v,{label:"Risk *",children:(0,t.jsx)(y,{value:u.riskId,onChange:x("riskId"),options:(a||[]).map(e=>({value:e.id,label:e.title}))})}),(0,t.jsx)(v,{label:"Title *",children:(0,t.jsx)(g,{value:u.title,onChange:x("title")})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:u.description,onChange:e=>x("description")(e.target.value),rows:2,style:{width:"100%",resize:"vertical"}})}),(0,t.jsx)(v,{label:"Status",children:(0,t.jsx)(y,{value:u.status,onChange:x("status"),options:m})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Progress %",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:u.progressPercent,onChange:x("progressPercent")})}),(0,t.jsx)(v,{label:"Effectiveness %",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:u.effectivenessPercent,onChange:x("effectivenessPercent")})})]}),(0,t.jsx)(v,{label:"Due Date",children:(0,t.jsx)(g,{type:"date",value:u.dueDate,onChange:x("dueDate")})}),(0,t.jsx)(v,{label:"Owner",children:(0,t.jsx)(g,{value:u.ownerDisplayName,onChange:x("ownerDisplayName")})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:i,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:p,disabled:o,children:o?"Saving...":"Create Mitigation"})]})]})})}function w(e){let{project:s,dashboard:a,toast:i,onRefresh:r}=e,[c,o]=(0,l.useState)(""),[d,u]=(0,l.useState)("progressPercent"),[h,N]=(0,l.useState)("asc"),[f,C]=(0,l.useState)(!1),[w,S]=(0,l.useState)(null),[D,P]=(0,l.useState)(!1),[T,R]=(0,l.useState)({}),[E,I]=(0,l.useState)(null),[O,A]=(0,l.useState)(null),[F,L]=(0,l.useState)(!1),M=(0,l.useMemo)(()=>(null==a?void 0:a.mitigations)?p(a.mitigations,d,h):[],[a,d,h]),z=(0,l.useMemo)(()=>(null==a?void 0:a.topRisks)?a.topRisks:[],[a]),_=(0,l.useMemo)(()=>{if(!c)return M;let e=c.toLowerCase();return M.filter(s=>(s.title||"").toLowerCase().includes(e)||(s.riskTitle||"").toLowerCase().includes(e))},[M,c]),H=async()=>{if(!T.title.trim())return void i.add("Title is required","error");I("edit");try{let e={...T,progressPercent:Number(T.progressPercent),effectivenessPercent:Number(T.effectivenessPercent)};e.dueDate?e.dueDate=new Date(e.dueDate).toISOString():e.dueDate=null,await n.FH.patch("/api/mitigations/".concat(w.id),e),i.add("Mitigation updated"),S(null),r()}catch(e){i.add(e.message||"Failed to update","error")}finally{I(null)}},G=async()=>{L(!0);try{await n.FH.del("/api/mitigations/".concat(O.id)),i.add("Mitigation deleted"),A(null),S(null),r()}catch(e){i.add(e.message||"Failed to delete","error")}finally{L(!1)}};return a?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{style:{display:"flex",gap:8,marginBottom:12},children:[(0,t.jsx)(x,{value:c,onChange:o,placeholder:"Search mitigations..."}),(0,t.jsx)("button",{className:"button small",onClick:()=>C(!0),children:"+ New Mitigation"})]}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsx)("tr",{children:[{key:"title",label:"Title"},{key:"riskTitle",label:"Risk"},{key:"status",label:"Status"},{key:"progressPercent",label:"Progress"},{key:"effectivenessPercent",label:"Effectiveness"},{key:"ownerDisplayName",label:"Owner"}].map(e=>(0,t.jsxs)("th",{className:"sortable",onClick:()=>{var s;d===(s=e.key)?N(e=>"asc"===e?"desc":"asc"):(u(s),N("asc"))},children:[e.label," ",d===e.key?"asc"===h?"▲":"▼":""]},e.key))})}),(0,t.jsx)("tbody",{children:_.slice(0,50).map(e=>{var s;return(0,t.jsxs)("tr",{onClick:()=>{var s,a;S(e),R({title:e.title||"",description:e.description||"",status:e.status||"NOT_STARTED",progressPercent:null!=(s=e.progressPercent)?s:0,effectivenessPercent:null!=(a=e.effectivenessPercent)?a:0,dueDate:e.dueDate?e.dueDate.slice(0,10):"",ownerDisplayName:e.ownerDisplayName||""}),P(!0),A(null)},style:{cursor:"pointer"},children:[(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.title})}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{className:"muted",children:e.riskTitle})}),(0,t.jsx)("td",{children:(0,t.jsx)(j,{className:null==(s=e.status)?void 0:s.toLowerCase().replace(/\s+/g,"-"),children:e.status})}),(0,t.jsx)("td",{children:(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8},children:[(0,t.jsx)("div",{className:"bar-wrap",style:{flex:1,maxWidth:80},children:(0,t.jsx)("div",{className:"bar-fill",style:{width:"".concat(e.progressPercent||0,"%"),background:(e.progressPercent||0)>=80?"var(--accent)":(e.progressPercent||0)>=30?"var(--warn)":"var(--danger)"}})}),e.progressPercent||0,"%"]})}),(0,t.jsxs)("td",{children:[e.effectivenessPercent||0,"%"]}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{className:"muted",children:e.ownerDisplayName||"-"})})]},e.id)})})]})}),!_.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No mitigations found"})}),f&&(0,t.jsx)(k,{project:s,risks:z,onClose:()=>C(!1),onSaved:()=>{C(!1),r()},toast:i}),w&&!O&&(0,t.jsx)("div",{className:"modal-overlay",onClick:()=>S(null),children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:500},children:[(0,t.jsx)("h2",{style:{margin:0},children:D?"Edit Mitigation":w.title}),(0,t.jsxs)("div",{style:{marginTop:12},children:[(0,t.jsx)(v,{label:"Title *",children:(0,t.jsx)(g,{value:T.title,onChange:e=>R(s=>({...s,title:e}))})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:T.description,onChange:e=>R(s=>({...s,description:e.target.value})),rows:2,style:{width:"100%",resize:"vertical"}})}),(0,t.jsx)(v,{label:"Status",children:(0,t.jsx)(y,{value:T.status,onChange:e=>R(s=>({...s,status:e})),options:m})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Progress %",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:T.progressPercent,onChange:e=>R(s=>({...s,progressPercent:Number(e)}))})}),(0,t.jsx)(v,{label:"Effectiveness %",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:T.effectivenessPercent,onChange:e=>R(s=>({...s,effectivenessPercent:Number(e)}))})})]}),(0,t.jsx)(v,{label:"Due Date",children:(0,t.jsx)(g,{type:"date",value:T.dueDate,onChange:e=>R(s=>({...s,dueDate:e}))})}),(0,t.jsx)(v,{label:"Owner",children:(0,t.jsx)(g,{value:T.ownerDisplayName,onChange:e=>R(s=>({...s,ownerDisplayName:e}))})})]}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:()=>S(null),children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:H,disabled:"edit"===E,children:"edit"===E?"Saving...":"Save Changes"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff",marginLeft:"auto"},onClick:()=>A(w),children:"Delete"})]})]})}),O&&(0,t.jsx)(b,{label:"this mitigation",onConfirm:G,onCancel:()=>A(null),deleting:F})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading..."})})}function S(e){var s,a,i;let{project:r,dashboard:c,toast:o,onRefresh:d}=e,[u,m]=(0,l.useState)(!1),[h,x]=(0,l.useState)(!1),[p,b]=(0,l.useState)({decision:"APPROVED",reviewerName:"",reason:""}),[N,f]=(0,l.useState)(!1),C=(null==c||null==(s=c.gate)?void 0:s.criteria)||[],k=(null==c||null==(a=c.summary)?void 0:a.gateStatus)||"Unknown",w=null==c||null==(i=c.gate)?void 0:i.id,S="Ready"===k?"good":"Warning"===k?"warn":"bad",D=async()=>{m(!0);try{await n.FH.post("/api/projects/".concat(r.id,"/gate/evaluate"),{}),o.add("Gate evaluated"),d()}catch(e){o.add(e.message||"Evaluation failed","error")}finally{m(!1)}},P=async()=>{if(!p.reviewerName.trim())return void o.add("Reviewer name is required","error");f(!0);try{await n.FH.post("/api/gates/".concat(w,"/decisions"),p),o.add("Decision submitted"),x(!1),d()}catch(e){o.add(e.message||"Failed to submit decision","error")}finally{f(!1)}};return c?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{children:"Deployment Gate"}),(0,t.jsx)("p",{className:"muted",children:"Gate evaluation for AI deployment readiness"})]}),(0,t.jsx)("div",{className:"dash-actions",children:(0,t.jsx)("div",{className:"metric-value ".concat(S),style:{fontSize:28},children:k})})]}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsxs)("tr",{children:[(0,t.jsx)("th",{children:"Criterion"}),(0,t.jsx)("th",{children:"Required"}),(0,t.jsx)("th",{children:"Actual"}),(0,t.jsx)("th",{children:"Status"})]})}),(0,t.jsx)("tbody",{children:C.map(e=>{var s;return(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.name})}),(0,t.jsx)("td",{children:e.required}),(0,t.jsx)("td",{children:e.actual}),(0,t.jsx)("td",{children:(0,t.jsx)(j,{className:null==(s=e.status)?void 0:s.toLowerCase(),children:e.status})})]},e.name)})})]})}),!C.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No gate criteria evaluated yet"})}),(0,t.jsxs)("div",{style:{marginTop:16,display:"flex",gap:8,flexWrap:"wrap"},children:[(0,t.jsx)("button",{className:"button small",onClick:D,disabled:u,children:u?"Evaluating...":"Evaluate Gate"}),w&&(0,t.jsx)("button",{className:"button secondary small",onClick:()=>x(!0),children:"Add Decision"}),(0,t.jsx)("a",{href:"/api/projects/".concat(null==r?void 0:r.id,"/gate/history"),className:"button secondary small",target:"_blank",children:"History (API)"})]}),h&&(0,t.jsx)("div",{className:"modal-overlay",onClick:()=>x(!1),children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:400},children:[(0,t.jsx)("h2",{children:"Gate Decision"}),(0,t.jsx)(v,{label:"Decision",children:(0,t.jsx)(y,{value:p.decision,onChange:e=>b(s=>({...s,decision:e})),options:["APPROVED","REJECTED","ACCEPTED","NEEDS_CHANGES"]})}),(0,t.jsx)(v,{label:"Reviewer Name *",children:(0,t.jsx)(g,{value:p.reviewerName,onChange:e=>b(s=>({...s,reviewerName:e}))})}),(0,t.jsx)(v,{label:"Reason",children:(0,t.jsx)("textarea",{className:"input",value:p.reason,onChange:e=>b(s=>({...s,reason:e.target.value})),rows:3,style:{width:"100%",resize:"vertical"}})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:()=>x(!1),children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:P,disabled:N,children:N?"Saving...":"Submit Decision"})]})]})})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading..."})})}function D(e){var s;let{project:a,dashboard:i,onClose:r,onSaved:c,toast:o}=e,[d,u]=(0,l.useState)(!1),[m,h]=(0,l.useState)({provider:"TRELLO",workspaceName:"",baseUrl:"",authMode:"API_KEY"}),x=e=>s=>h(a=>({...a,[e]:s})),p=(null==i||null==(s=i.gate)?void 0:s.workspaceId)||(null==a?void 0:a.workspaceId),j=async()=>{if(!m.workspaceName.trim())return void o.add("Workspace name is required","error");u(!0);try{await n.FH.post("/api/workspaces/".concat(p,"/integrations"),m),o.add("Integration created"),c()}catch(e){o.add(e.message||"Failed to create integration","error")}finally{u(!1)}};return(0,t.jsx)("div",{className:"modal-overlay",onClick:r,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:450},children:[(0,t.jsx)("h2",{children:"New Integration"}),(0,t.jsx)(v,{label:"Provider",children:(0,t.jsx)(y,{value:m.provider,onChange:x("provider"),options:["TRELLO","JIRA","ASANA","MICROSOFT_PLANNER"]})}),(0,t.jsx)(v,{label:"Workspace Name *",children:(0,t.jsx)(g,{value:m.workspaceName,onChange:x("workspaceName")})}),(0,t.jsx)(v,{label:"Base URL",children:(0,t.jsx)(g,{value:m.baseUrl,onChange:x("baseUrl")})}),(0,t.jsx)(v,{label:"Auth Mode",children:(0,t.jsx)(y,{value:m.authMode,onChange:x("authMode"),options:["API_KEY","OAUTH","BASIC"]})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:r,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:j,disabled:d,children:d?"Saving...":"Create Integration"})]})]})})}function P(e){let{project:s,dashboard:a,toast:i,onRefresh:n}=e,[r,c]=(0,l.useState)(!1),o=(null==a?void 0:a.integrations)||[];return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{children:"Integrations"}),(0,t.jsx)("p",{className:"muted",children:"Connect Trello, Jira, Asana, or Microsoft Planner"})]}),(0,t.jsx)("div",{className:"dash-actions",children:(0,t.jsx)("button",{className:"button small",onClick:()=>c(!0),children:"+ New Integration"})})]}),(0,t.jsx)("div",{className:"grid",style:{gridTemplateColumns:"repeat(auto-fit, minmax(240px, 1fr))"},children:["TRELLO","JIRA","ASANA","MICROSOFT_PLANNER"].map(e=>{let s=o.find(s=>s.provider===e);return(0,t.jsxs)("div",{className:"panel",style:{textAlign:"center"},children:[(0,t.jsx)("div",{style:{fontSize:32,marginBottom:8},children:"TRELLO"===e?"⊞":"JIRA"===e?"◆":"ASANA"===e?"◇":"▣"}),(0,t.jsx)("h3",{style:{margin:"0 0 4px"},children:e.replace("_"," ")}),(0,t.jsx)("p",{className:"muted",style:{fontSize:12,margin:"0 0 12px"},children:s?s.workspaceName:"Not configured"}),(0,t.jsx)("div",{style:{display:"flex",gap:6,justifyContent:"center"},children:s?(0,t.jsx)("a",{href:"/api/integrations/".concat(s.id),className:"button secondary small",target:"_blank",children:"Manage"}):(0,t.jsx)("button",{className:"button secondary small",onClick:()=>c(!0),children:"Configure"})})]},e)})}),r&&(0,t.jsx)(D,{project:s,dashboard:a,onClose:()=>c(!1),onSaved:()=>{c(!1),n()},toast:i}),!o.length&&(0,t.jsx)("div",{style:{marginTop:12},children:(0,t.jsx)("a",{href:"/api/integration-providers",className:"button secondary small",target:"_blank",children:"Integration providers (API)"})})]})}function T(){let e=(0,i.useRouter)(),s=(0,i.useSearchParams)(),a=c.includes(s.get("tab"))?s.get("tab"):"Overview",[o,d]=(0,l.useState)(null),[u,m]=(0,l.useState)(null),[x,p]=(0,l.useState)(!0),[j,v]=(0,l.useState)(null),[g,y]=(0,l.useState)(0),{toasts:b,add:f}=function(){let[e,s]=(0,l.useState)([]);return{toasts:e,add:(0,l.useCallback)(function(e){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"success",t=Date.now()+Math.random();s(s=>[...s,{id:t,message:e,type:a}]),setTimeout(()=>s(e=>e.filter(e=>e.id!==t)),3e3)},[])}}(),k=(0,l.useCallback)(()=>y(e=>e+1),[]),D=(0,l.useCallback)(async()=>{p(!0),v(null);try{var e,s,a;let t=await n.FH.get("/api/auth/session");if(!(null==t?void 0:t.authenticated)){v("Not authenticated."),p(!1);return}let l=null==(e=t.memberships)?void 0:e[0];if(!l){v("No organization membership found."),p(!1);return}let i=l.organizationId,r=null==(s=(await n.FH.get("/api/workspaces?organizationId=".concat(i))).workspaces)?void 0:s[0];if(!r){v("No workspace found — create one to get started."),p(!1);return}let c=null==(a=(await n.FH.get("/api/workspaces/".concat(r.id,"/projects"))).projects)?void 0:a[0];if(!c){v("No project found — create a project to get started."),p(!1);return}d(c);let o=await n.FH.get("/api/projects/".concat(c.id,"/dashboard"));m(o.dashboard),p(!1)}catch(e){v(e.message||"Failed to load dashboard data"),p(!1)}},[]);return((0,l.useEffect)(()=>{D()},[D,g]),x&&"Integrations"!==a)?(0,t.jsx)("div",{className:"shell-loading",children:(0,t.jsx)("div",{className:"spinner"})}):j&&"Integrations"!==a?(0,t.jsxs)("div",{className:"empty-state",children:[(0,t.jsx)("div",{className:"empty-icon",children:"!"}),(0,t.jsx)("p",{children:j}),(0,t.jsx)("button",{className:"button secondary small",style:{marginTop:12},onClick:()=>y(e=>e+1),children:"Retry"})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{children:(null==o?void 0:o.name)||"Dashboard"}),(0,t.jsx)("p",{className:"muted",children:(null==o?void 0:o.subtitle)||""})]}),(0,t.jsxs)("div",{className:"dash-actions",children:[(0,t.jsx)("a",{href:"/api/projects/".concat(null==o?void 0:o.id,"/reports/executive.html"),className:"button secondary small",target:"_blank",children:"Report"}),(0,t.jsx)("a",{href:"/api/projects/".concat(null==o?void 0:o.id,"/reports/risk-register.csv"),className:"button secondary small",target:"_blank",children:"CSV"})]})]}),(0,t.jsx)("div",{className:"tabs",children:c.map(s=>(0,t.jsx)("button",{className:"tab ".concat(a===s?"active":""),onClick:()=>e.push("/dashboard?tab=".concat(s)),children:s},s))}),"Overview"===a&&(0,t.jsx)(r,{name:"Overview",children:(0,t.jsx)(N,{project:o,dashboard:u})},"overview"),"Risks"===a&&(0,t.jsx)(r,{name:"Risks",children:(0,t.jsx)(C,{project:o,dashboard:u,toast:{add:f},onRefresh:k})},"risks"),"Mitigations"===a&&(0,t.jsx)(r,{name:"Mitigations",children:(0,t.jsx)(w,{project:o,dashboard:u,toast:{add:f},onRefresh:k})},"mitigations"),"Gate"===a&&(0,t.jsx)(r,{name:"Gate",children:(0,t.jsx)(S,{project:o,dashboard:u,toast:{add:f},onRefresh:k})},"gate"),"Integrations"===a&&(0,t.jsx)(r,{name:"Integrations",children:(0,t.jsx)(P,{project:o,dashboard:u,toast:{add:f},onRefresh:k})},"integrations"),(0,t.jsx)(h,{toasts:b})]})}},6282:(e,s,a)=>{"use strict";async function t(e,s,a){var t;let l={method:e,headers:{"Content-Type":"application/json"}};a&&(l.body=JSON.stringify(a));let i=await fetch("".concat("").concat(s),l),n=(null==(t=i.headers.get("content-type"))?void 0:t.includes("application/json"))?await i.json():await i.text();if(!i.ok)throw Error((null==n?void 0:n.error)||(null==n?void 0:n.message)||"Request failed (".concat(i.status,")"));return n}a.d(s,{FH:()=>l,Ht:()=>i,ri:()=>n});let l={get:e=>t("GET",e),post:(e,s)=>t("POST",e,s),put:(e,s)=>t("PUT",e,s),patch:(e,s)=>t("PATCH",e,s),del:e=>t("DELETE",e)};async function i(){try{let e=await l.get("/api/auth/session");return e.user||e.actor||null}catch(e){return null}}async function n(){await l.post("/api/auth/logout"),window.location.href="/"}}},e=>{e.O(0,[8441,1255,7358],()=>e(e.s=646)),_N_E=e.O()}]);  @ A  > B @ M  2 3  0 4 5 B  ' W(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5105],{63:(e,s,a)=>{"use strict";var t=a(7260);a.o(t,"useRouter")&&a.d(s,{useRouter:function(){return t.useRouter}}),a.o(t,"useSearchParams")&&a.d(s,{useSearchParams:function(){return t.useSearchParams}})},646:(e,s,a)=>{Promise.resolve().then(a.bind(a,3399))},3399:(e,s,a)=>{"use strict";a.r(s),a.d(s,{default:()=>T});var t=a(5155),l=a(2115),i=a(63),n=a(6282);class r extends l.Component{static getDerivedStateFromError(e){return{error:e}}render(){if(this.state.error){let{fallback:e}=this.props;return e?"function"==typeof e?e(this.state.error):e:(0,t.jsxs)("div",{className:"empty-state",children:[(0,t.jsx)("div",{className:"empty-icon",children:"!"}),(0,t.jsxs)("p",{children:["Something went wrong in ",this.props.name||"this section","."]}),(0,t.jsx)("p",{className:"muted",style:{fontSize:12,marginTop:4},children:this.state.error.message}),(0,t.jsx)("button",{className:"button secondary small",style:{marginTop:12},onClick:()=>{var e,s;this.setState({error:null}),null==(e=(s=this.props).onRetry)||e.call(s)},children:"Retry"})]})}return this.props.children}constructor(e){super(e),this.state={error:null}}}let c=["Overview","Risks","Mitigations","Gate","Integrations"],o=["Technical","Governance","Legal","Ethical","Operational"],d=["Design","Development","Testing","Deployment"],u=["OPEN","IN_MITIGATION","ACCEPTED","CLOSED"],m=["NOT_STARTED","IN_PROGRESS","DONE","REJECTED"];function h(e){let{toasts:s}=e;return s.length?(0,t.jsx)("div",{className:"toast-container",children:s.map(e=>(0,t.jsx)("div",{className:"toast ".concat(e.type),children:e.message},e.id))}):null}function x(e){let{value:s,onChange:a,placeholder:l}=e;return(0,t.jsxs)("div",{className:"search-wrap",children:[(0,t.jsx)("span",{className:"search-icon",children:"⌕"}),(0,t.jsx)("input",{className:"input",value:s,onChange:e=>a(e.target.value),placeholder:l||"Search..."})]})}function p(e,s,a){return s?[...e].sort((e,t)=>{let l=e[s],i=t[s];if(null==l)return 1;if(null==i)return -1;let n="number"==typeof l?l-i:String(l).localeCompare(String(i));return"asc"===a?n:-n}):e}function j(e){let{children:s,className:a}=e;return(0,t.jsx)("span",{className:"badge ".concat(a||""),children:s})}function v(e){let{label:s,children:a}=e;return(0,t.jsxs)("div",{style:{marginBottom:10},children:[(0,t.jsx)("label",{style:{display:"block",fontSize:12,color:"var(--muted)",marginBottom:3},children:s}),a]})}function g(e){let{value:s,onChange:a,type:l="text",min:i,max:n,style:r}=e;return(0,t.jsx)("input",{className:"input",type:l,value:s,onChange:e=>a(e.target.value),min:i,max:n,style:{width:"100%",...r}})}function y(e){let{value:s,onChange:a,options:l}=e;return(0,t.jsxs)("select",{className:"input",value:s,onChange:e=>a(e.target.value),style:{width:"100%"},children:[(0,t.jsx)("option",{value:"",children:"— Select —"}),(l||[]).map(e=>{let s="object"==typeof e?e.value:e,a="object"==typeof e?e.label:e;return(0,t.jsx)("option",{value:s,children:a},s)})]})}function b(e){let{label:s,onConfirm:a,onCancel:l,deleting:i}=e;return(0,t.jsx)("div",{className:"modal-overlay",onClick:l,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:380},children:[(0,t.jsxs)("h3",{children:["Delete ",s,"?"]}),(0,t.jsx)("p",{style:{fontSize:13,color:"var(--muted)"},children:"This cannot be undone."}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:l,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff"},onClick:a,disabled:i,children:i?"Deleting...":"Delete"})]})]})})}function N(e){let{project:s,dashboard:a}=e,i=(0,l.useMemo)(()=>{var e,s,t,l,i,n,r,c,o,d,u,m,h,x,p,j,v,g,y;return a?[{label:"Overall Score",value:null!=(j=null==(e=a.summary)?void 0:e.overallScore)?j:"-",cls:(null==(s=a.summary)?void 0:s.overallScore)>=75?"bad":(null==(t=a.summary)?void 0:t.overallScore)>=50?"warn":"good",sub:"Risk level: ".concat((null==(l=a.summary)?void 0:l.riskLevel)||"-")},{label:"Deployment Gate",value:null!=(v=null==(i=a.summary)?void 0:i.gateStatus)?v:"-",cls:(null==(n=a.summary)?void 0:n.gateStatus)==="Ready"?"good":(null==(r=a.summary)?void 0:r.gateStatus)==="Warning"?"warn":"bad",sub:(null==(c=a.gate)?void 0:c.message)||""},{label:"Open Risks",value:null!=(g=null==(o=a.summary)?void 0:o.openRisks)?g:0,cls:((null==(d=a.summary)?void 0:d.openRisks)||0)>5?"bad":((null==(u=a.summary)?void 0:u.openRisks)||0)>2?"warn":"good",sub:"".concat((null==(m=a.summary)?void 0:m.totalRisks)||0," total risks")},{label:"Mitigation",value:"".concat(null!=(y=null==(h=a.summary)?void 0:h.mitigationCompletion)?y:0,"%"),cls:40>((null==(x=a.summary)?void 0:x.mitigationCompletion)||0)?"bad":70>((null==(p=a.summary)?void 0:p.mitigationCompletion)||0)?"warn":"good",sub:"Average active-risk completion"}]:[]},[a]);return a?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{className:"grid",style:{gridTemplateColumns:"repeat(auto-fit, minmax(200px, 1fr))"},children:i.map(e=>(0,t.jsxs)("div",{className:"metric-card",children:[(0,t.jsx)("h3",{children:e.label}),(0,t.jsx)("div",{className:"metric-value ".concat(e.cls),children:e.value}),(0,t.jsx)("div",{className:"metric-sub",children:e.sub})]},e.label))}),(0,t.jsxs)("div",{className:"grid",style:{gridTemplateColumns:"1fr 1fr",marginTop:18},children:[(0,t.jsxs)("div",{className:"panel",children:[(0,t.jsx)("h2",{children:"Dimensions"}),(a.dimensions||[]).map(e=>(0,t.jsxs)("div",{style:{marginBottom:12},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:4},children:[(0,t.jsx)("span",{style:{fontSize:13},children:e.name}),(0,t.jsx)("strong",{style:{fontSize:13},children:e.score})]}),(0,t.jsx)("div",{className:"bar-wrap",children:(0,t.jsx)("div",{className:"bar-fill",style:{width:"".concat(Math.min(e.score,100),"%"),background:e.score>=50?"var(--danger)":e.score>=25?"var(--warn)":"var(--accent)"}})})]},e.name))]}),(0,t.jsxs)("div",{className:"panel",children:[(0,t.jsx)("h2",{children:"Lifecycle"}),(a.lifecycle||[]).map(e=>(0,t.jsxs)("div",{style:{marginBottom:12},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:4},children:[(0,t.jsx)("span",{style:{fontSize:13},children:e.name}),(0,t.jsxs)("span",{className:"muted",style:{fontSize:12},children:[e.openRisks," open"]})]}),(0,t.jsx)("div",{className:"bar-wrap",children:(0,t.jsx)("div",{className:"bar-fill",style:{width:"".concat(Math.min(e.riskScore||0,100),"%"),background:(e.riskScore||0)>=50?"var(--danger)":(e.riskScore||0)>=25?"var(--warn)":"var(--accent)"}})})]},e.name))]})]})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading dashboard data..."})})}function f(e){let{project:s,onClose:a,onSaved:i,toast:r}=e,[c,u]=(0,l.useState)(!1),[m,h]=(0,l.useState)({title:"",description:"",dimension:"",domain:"",lifecyclePhase:"",probability:50,impact:50,detectability:50,ownerDisplayName:""}),x=e=>s=>h(a=>({...a,[e]:s})),p=async()=>{if(!m.title.trim())return void r.add("Title is required","error");if(!m.dimension)return void r.add("Dimension is required","error");u(!0);try{await n.FH.post("/api/projects/".concat(s.id,"/risks"),m),r.add("Risk created"),i()}catch(e){r.add(e.message||"Failed to create risk","error")}finally{u(!1)}};return(0,t.jsx)("div",{className:"modal-overlay",onClick:a,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:500},children:[(0,t.jsx)("h2",{children:"New Risk"}),(0,t.jsx)(v,{label:"Title *",children:(0,t.jsx)(g,{value:m.title,onChange:x("title")})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:m.description,onChange:e=>x("description")(e.target.value),rows:3,style:{width:"100%",resize:"vertical"}})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Dimension *",children:(0,t.jsx)(y,{value:m.dimension,onChange:x("dimension"),options:o})}),(0,t.jsx)(v,{label:"Domain",children:(0,t.jsx)(g,{value:m.domain,onChange:x("domain")})})]}),(0,t.jsx)(v,{label:"Lifecycle Phase",children:(0,t.jsx)(y,{value:m.lifecyclePhase,onChange:x("lifecyclePhase"),options:d})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Probability",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:m.probability,onChange:x("probability")})}),(0,t.jsx)(v,{label:"Impact",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:m.impact,onChange:x("impact")})}),(0,t.jsx)(v,{label:"Detectability",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:m.detectability,onChange:x("detectability")})})]}),(0,t.jsx)(v,{label:"Owner",children:(0,t.jsx)(g,{value:m.ownerDisplayName,onChange:x("ownerDisplayName")})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:a,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:p,disabled:c,children:c?"Saving...":"Create Risk"})]})]})})}function C(e){let{project:s,dashboard:a,toast:i,onRefresh:r}=e,[c,m]=(0,l.useState)(""),[h,N]=(0,l.useState)("normalizedScore"),[C,k]=(0,l.useState)("desc"),[w,S]=(0,l.useState)(0),[D,P]=(0,l.useState)(null),[T,R]=(0,l.useState)(!1),[E,I]=(0,l.useState)(!1),[O,A]=(0,l.useState)({}),[F,L]=(0,l.useState)(null),[M,z]=(0,l.useState)(null),[_,H]=(0,l.useState)(!1),G=(0,l.useMemo)(()=>(null==a?void 0:a.topRisks)?p(a.topRisks,h,C):[],[a,h,C]),W=(0,l.useMemo)(()=>{if(!c)return G;let e=c.toLowerCase();return G.filter(s=>(s.title||"").toLowerCase().includes(e)||(s.dimension||"").toLowerCase().includes(e)||(s.ownerDisplayName||"").toLowerCase().includes(e))},[G,c]),B=W.slice(0,(w+1)*20),q=async(e,s)=>{L(e);try{await n.FH.patch("/api/risks/".concat(e),{status:s}),i.add("Risk status updated to ".concat(s)),P(null),r()}catch(e){i.add(e.message,"error")}finally{L(null)}},U=async()=>{if(!O.title.trim())return void i.add("Title is required","error");L("edit");try{await n.FH.patch("/api/risks/".concat(D.id),O),i.add("Risk updated"),P(null),r()}catch(e){i.add(e.message||"Failed to update","error")}finally{L(null)}},J=async()=>{H(!0);try{await n.FH.del("/api/risks/".concat(M.id)),i.add("Risk deleted"),z(null),P(null),r()}catch(e){i.add(e.message||"Failed to delete","error")}finally{H(!1)}};return a?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{style:{display:"flex",gap:8,marginBottom:12},children:[(0,t.jsx)(x,{value:c,onChange:m,placeholder:"Search risks by title, dimension, owner..."}),(0,t.jsx)("button",{className:"button small",onClick:()=>R(!0),children:"+ New Risk"})]}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsx)("tr",{children:[{key:"id",label:"ID"},{key:"title",label:"Risk"},{key:"dimension",label:"Dimension"},{key:"lifecyclePhase",label:"Phase"},{key:"normalizedScore",label:"Score"},{key:"residualScore",label:"Residual"},{key:"status",label:"Status"},{key:"ownerDisplayName",label:"Owner"}].map(e=>(0,t.jsxs)("th",{className:"sortable",onClick:()=>{var s;h===(s=e.key)?k(e=>"asc"===e?"desc":"asc"):(N(s),k("asc"))},children:[e.label," ",h===e.key?"asc"===C?"▲":"▼":""]},e.key))})}),(0,t.jsx)("tbody",{children:B.map(e=>{var s,a,l;return(0,t.jsxs)("tr",{onClick:()=>{var s,a,t;P(e),A({title:e.title||"",description:e.description||"",dimension:e.dimension||"",domain:e.domain||"",lifecyclePhase:e.lifecyclePhase||"",probability:null!=(s=e.probability)?s:50,impact:null!=(a=e.impact)?a:50,detectability:null!=(t=e.detectability)?t:50,ownerDisplayName:e.ownerDisplayName||""}),I(!1),z(null)},children:[(0,t.jsx)("td",{style:{fontFamily:"monospace",fontSize:12},children:null==(s=e.id)?void 0:s.slice(0,8)}),(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.title})}),(0,t.jsx)("td",{children:(0,t.jsx)(j,{className:null==(a=e.dimension)?void 0:a.toLowerCase(),children:e.dimension})}),(0,t.jsx)("td",{style:{fontSize:12},children:e.lifecyclePhase}),(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.normalizedScore})}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{style:{color:e.residualScore>=50?"var(--danger)":e.residualScore>=25?"var(--warn)":"var(--accent)"},children:e.residualScore})}),(0,t.jsx)("td",{children:(0,t.jsx)(j,{className:null==(l=e.status)?void 0:l.toLowerCase().replace(/\s+/g,"-"),children:e.status})}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{className:"muted",children:e.ownerDisplayName||"-"})})]},e.id)})})]})}),W.length>B.length&&(0,t.jsx)("div",{style:{textAlign:"center",marginTop:12},children:(0,t.jsxs)("button",{className:"button secondary small",onClick:()=>S(e=>e+1),children:["Show more (",W.length-B.length," remaining)"]})}),!W.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No risks match your search"})}),T&&(0,t.jsx)(f,{project:s,onClose:()=>R(!1),onSaved:()=>{R(!1),r()},toast:i}),D&&!M&&(0,t.jsx)("div",{className:"modal-overlay",onClick:()=>P(null),children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:520},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"},children:[(0,t.jsx)("h2",{style:{margin:0},children:D.title}),(0,t.jsx)("button",{className:"button secondary small",onClick:()=>I(!E),children:E?"View":"Edit"})]}),E?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{style:{marginTop:12},children:[(0,t.jsx)(v,{label:"Title *",children:(0,t.jsx)(g,{value:O.title,onChange:e=>A(s=>({...s,title:e}))})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:O.description,onChange:e=>A(s=>({...s,description:e.target.value})),rows:2,style:{width:"100%",resize:"vertical"}})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Dimension",children:(0,t.jsx)(y,{value:O.dimension,onChange:e=>A(s=>({...s,dimension:e})),options:o})}),(0,t.jsx)(v,{label:"Domain",children:(0,t.jsx)(g,{value:O.domain,onChange:e=>A(s=>({...s,domain:e}))})})]}),(0,t.jsx)(v,{label:"Lifecycle Phase",children:(0,t.jsx)(y,{value:O.lifecyclePhase,onChange:e=>A(s=>({...s,lifecyclePhase:e})),options:d})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Probability",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:O.probability,onChange:e=>A(s=>({...s,probability:Number(e)}))})}),(0,t.jsx)(v,{label:"Impact",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:O.impact,onChange:e=>A(s=>({...s,impact:Number(e)}))})}),(0,t.jsx)(v,{label:"Detectability",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:O.detectability,onChange:e=>A(s=>({...s,detectability:Number(e)}))})})]}),(0,t.jsx)(v,{label:"Owner",children:(0,t.jsx)(g,{value:O.ownerDisplayName,onChange:e=>A(s=>({...s,ownerDisplayName:e}))})})]}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:()=>P(null),children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:U,disabled:"edit"===F,children:"edit"===F?"Saving...":"Save Changes"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff",marginLeft:"auto"},onClick:()=>z(D),children:"Delete"})]})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:12,fontSize:13,marginTop:12},children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Dimension"}),(0,t.jsx)("br",{}),D.dimension]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Phase"}),(0,t.jsx)("br",{}),D.lifecyclePhase]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Probability"}),(0,t.jsx)("br",{}),D.probability]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Impact"}),(0,t.jsx)("br",{}),D.impact]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Detectability"}),(0,t.jsx)("br",{}),D.detectability]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Score"}),(0,t.jsx)("br",{}),(0,t.jsx)("strong",{children:D.normalizedScore})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Residual"}),(0,t.jsx)("br",{}),D.residualScore]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"muted",children:"Owner"}),(0,t.jsx)("br",{}),D.ownerDisplayName||"-"]})]}),D.description&&(0,t.jsxs)("div",{style:{marginTop:12,fontSize:13},children:[(0,t.jsx)("span",{className:"muted",children:"Description"}),(0,t.jsx)("br",{}),D.description]}),(0,t.jsxs)("div",{style:{marginTop:16},children:[(0,t.jsx)("span",{className:"muted",style:{fontSize:12},children:"Update status:"}),(0,t.jsx)("div",{style:{display:"flex",gap:6,marginTop:6,flexWrap:"wrap"},children:u.map(e=>(0,t.jsx)("button",{className:"button small ".concat("OPEN"===e?"secondary":""),onClick:()=>q(D.id,e),disabled:F===D.id,children:e.replace("_"," ")},e))})]}),(0,t.jsx)("div",{className:"modal-actions",children:(0,t.jsx)("button",{className:"button secondary small",onClick:()=>P(null),children:"Close"})})]})]})}),M&&(0,t.jsx)(b,{label:"this risk",onConfirm:J,onCancel:()=>z(null),deleting:_})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading..."})})}function k(e){let{project:s,risks:a,onClose:i,onSaved:r,toast:c}=e,[o,d]=(0,l.useState)(!1),[u,h]=(0,l.useState)({riskId:"",title:"",description:"",status:"NOT_STARTED",progressPercent:0,effectivenessPercent:0,dueDate:"",ownerDisplayName:""}),x=e=>s=>h(a=>({...a,[e]:s})),p=async()=>{if(!u.title.trim())return void c.add("Title is required","error");if(!u.riskId)return void c.add("Please select a risk","error");d(!0);try{let e={...u,progressPercent:Number(u.progressPercent),effectivenessPercent:Number(u.effectivenessPercent)};e.dueDate?e.dueDate=new Date(e.dueDate).toISOString():delete e.dueDate,await n.FH.post("/api/risks/".concat(u.riskId,"/mitigations"),e),c.add("Mitigation created"),r()}catch(e){c.add(e.message||"Failed to create mitigation","error")}finally{d(!1)}};return(0,t.jsx)("div",{className:"modal-overlay",onClick:i,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:500},children:[(0,t.jsx)("h2",{children:"New Mitigation"}),(0,t.jsx)(v,{label:"Risk *",children:(0,t.jsx)(y,{value:u.riskId,onChange:x("riskId"),options:(a||[]).map(e=>({value:e.id,label:e.title}))})}),(0,t.jsx)(v,{label:"Title *",children:(0,t.jsx)(g,{value:u.title,onChange:x("title")})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:u.description,onChange:e=>x("description")(e.target.value),rows:2,style:{width:"100%",resize:"vertical"}})}),(0,t.jsx)(v,{label:"Status",children:(0,t.jsx)(y,{value:u.status,onChange:x("status"),options:m})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Progress %",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:u.progressPercent,onChange:x("progressPercent")})}),(0,t.jsx)(v,{label:"Effectiveness %",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:u.effectivenessPercent,onChange:x("effectivenessPercent")})})]}),(0,t.jsx)(v,{label:"Due Date",children:(0,t.jsx)(g,{type:"date",value:u.dueDate,onChange:x("dueDate")})}),(0,t.jsx)(v,{label:"Owner",children:(0,t.jsx)(g,{value:u.ownerDisplayName,onChange:x("ownerDisplayName")})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:i,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:p,disabled:o,children:o?"Saving...":"Create Mitigation"})]})]})})}function w(e){let{project:s,dashboard:a,toast:i,onRefresh:r}=e,[c,o]=(0,l.useState)(""),[d,u]=(0,l.useState)("progressPercent"),[h,N]=(0,l.useState)("asc"),[f,C]=(0,l.useState)(!1),[w,S]=(0,l.useState)(null),[D,P]=(0,l.useState)(!1),[T,R]=(0,l.useState)({}),[E,I]=(0,l.useState)(null),[O,A]=(0,l.useState)(null),[F,L]=(0,l.useState)(!1),M=(0,l.useMemo)(()=>(null==a?void 0:a.mitigations)?p(a.mitigations,d,h):[],[a,d,h]),z=(0,l.useMemo)(()=>(null==a?void 0:a.topRisks)?a.topRisks:[],[a]),_=(0,l.useMemo)(()=>{if(!c)return M;let e=c.toLowerCase();return M.filter(s=>(s.title||"").toLowerCase().includes(e)||(s.riskTitle||"").toLowerCase().includes(e))},[M,c]),H=async()=>{if(!T.title.trim())return void i.add("Title is required","error");I("edit");try{let e={...T,progressPercent:Number(T.progressPercent),effectivenessPercent:Number(T.effectivenessPercent)};e.dueDate?e.dueDate=new Date(e.dueDate).toISOString():e.dueDate=null,await n.FH.patch("/api/mitigations/".concat(w.id),e),i.add("Mitigation updated"),S(null),r()}catch(e){i.add(e.message||"Failed to update","error")}finally{I(null)}},G=async()=>{L(!0);try{await n.FH.del("/api/mitigations/".concat(O.id)),i.add("Mitigation deleted"),A(null),S(null),r()}catch(e){i.add(e.message||"Failed to delete","error")}finally{L(!1)}};return a?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{style:{display:"flex",gap:8,marginBottom:12},children:[(0,t.jsx)(x,{value:c,onChange:o,placeholder:"Search mitigations..."}),(0,t.jsx)("button",{className:"button small",onClick:()=>C(!0),children:"+ New Mitigation"})]}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsx)("tr",{children:[{key:"title",label:"Title"},{key:"riskTitle",label:"Risk"},{key:"status",label:"Status"},{key:"progressPercent",label:"Progress"},{key:"effectivenessPercent",label:"Effectiveness"},{key:"ownerDisplayName",label:"Owner"}].map(e=>(0,t.jsxs)("th",{className:"sortable",onClick:()=>{var s;d===(s=e.key)?N(e=>"asc"===e?"desc":"asc"):(u(s),N("asc"))},children:[e.label," ",d===e.key?"asc"===h?"▲":"▼":""]},e.key))})}),(0,t.jsx)("tbody",{children:_.slice(0,50).map(e=>{var s;return(0,t.jsxs)("tr",{onClick:()=>{var s,a;S(e),R({title:e.title||"",description:e.description||"",status:e.status||"NOT_STARTED",progressPercent:null!=(s=e.progressPercent)?s:0,effectivenessPercent:null!=(a=e.effectivenessPercent)?a:0,dueDate:e.dueDate?e.dueDate.slice(0,10):"",ownerDisplayName:e.ownerDisplayName||""}),P(!0),A(null)},style:{cursor:"pointer"},children:[(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.title})}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{className:"muted",children:e.riskTitle})}),(0,t.jsx)("td",{children:(0,t.jsx)(j,{className:null==(s=e.status)?void 0:s.toLowerCase().replace(/\s+/g,"-"),children:e.status})}),(0,t.jsx)("td",{children:(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8},children:[(0,t.jsx)("div",{className:"bar-wrap",style:{flex:1,maxWidth:80},children:(0,t.jsx)("div",{className:"bar-fill",style:{width:"".concat(e.progressPercent||0,"%"),background:(e.progressPercent||0)>=80?"var(--accent)":(e.progressPercent||0)>=30?"var(--warn)":"var(--danger)"}})}),e.progressPercent||0,"%"]})}),(0,t.jsxs)("td",{children:[e.effectivenessPercent||0,"%"]}),(0,t.jsx)("td",{children:(0,t.jsx)("span",{className:"muted",children:e.ownerDisplayName||"-"})})]},e.id)})})]})}),!_.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No mitigations found"})}),f&&(0,t.jsx)(k,{project:s,risks:z,onClose:()=>C(!1),onSaved:()=>{C(!1),r()},toast:i}),w&&!O&&(0,t.jsx)("div",{className:"modal-overlay",onClick:()=>S(null),children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:500},children:[(0,t.jsx)("h2",{style:{margin:0},children:D?"Edit Mitigation":w.title}),(0,t.jsxs)("div",{style:{marginTop:12},children:[(0,t.jsx)(v,{label:"Title *",children:(0,t.jsx)(g,{value:T.title,onChange:e=>R(s=>({...s,title:e}))})}),(0,t.jsx)(v,{label:"Description",children:(0,t.jsx)("textarea",{className:"input",value:T.description,onChange:e=>R(s=>({...s,description:e.target.value})),rows:2,style:{width:"100%",resize:"vertical"}})}),(0,t.jsx)(v,{label:"Status",children:(0,t.jsx)(y,{value:T.status,onChange:e=>R(s=>({...s,status:e})),options:m})}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[(0,t.jsx)(v,{label:"Progress %",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:T.progressPercent,onChange:e=>R(s=>({...s,progressPercent:Number(e)}))})}),(0,t.jsx)(v,{label:"Effectiveness %",children:(0,t.jsx)(g,{type:"number",min:0,max:100,value:T.effectivenessPercent,onChange:e=>R(s=>({...s,effectivenessPercent:Number(e)}))})})]}),(0,t.jsx)(v,{label:"Due Date",children:(0,t.jsx)(g,{type:"date",value:T.dueDate,onChange:e=>R(s=>({...s,dueDate:e}))})}),(0,t.jsx)(v,{label:"Owner",children:(0,t.jsx)(g,{value:T.ownerDisplayName,onChange:e=>R(s=>({...s,ownerDisplayName:e}))})})]}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:()=>S(null),children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:H,disabled:"edit"===E,children:"edit"===E?"Saving...":"Save Changes"}),(0,t.jsx)("button",{className:"button small",style:{background:"var(--danger)",color:"#fff",marginLeft:"auto"},onClick:()=>A(w),children:"Delete"})]})]})}),O&&(0,t.jsx)(b,{label:"this mitigation",onConfirm:G,onCancel:()=>A(null),deleting:F})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading..."})})}function S(e){var s,a,i;let{project:r,dashboard:c,toast:o,onRefresh:d}=e,[u,m]=(0,l.useState)(!1),[h,x]=(0,l.useState)(!1),[p,b]=(0,l.useState)({decision:"APPROVED",reviewerName:"",reason:""}),[N,f]=(0,l.useState)(!1),C=(null==c||null==(s=c.gate)?void 0:s.criteria)||[],k=(null==c||null==(a=c.summary)?void 0:a.gateStatus)||"Unknown",w=null==c||null==(i=c.gate)?void 0:i.id,S="Ready"===k?"good":"Warning"===k?"warn":"bad",D=async()=>{m(!0);try{await n.FH.post("/api/projects/".concat(r.id,"/gate/evaluate"),{}),o.add("Gate evaluated"),d()}catch(e){o.add(e.message||"Evaluation failed","error")}finally{m(!1)}},P=async()=>{if(!p.reviewerName.trim())return void o.add("Reviewer name is required","error");f(!0);try{await n.FH.post("/api/gates/".concat(w,"/decisions"),p),o.add("Decision submitted"),x(!1),d()}catch(e){o.add(e.message||"Failed to submit decision","error")}finally{f(!1)}};return c?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{children:"Deployment Gate"}),(0,t.jsx)("p",{className:"muted",children:"Gate evaluation for AI deployment readiness"})]}),(0,t.jsx)("div",{className:"dash-actions",children:(0,t.jsx)("div",{className:"metric-value ".concat(S),style:{fontSize:28},children:k})})]}),(0,t.jsx)("div",{className:"table-wrap",children:(0,t.jsxs)("table",{className:"table",children:[(0,t.jsx)("thead",{children:(0,t.jsxs)("tr",{children:[(0,t.jsx)("th",{children:"Criterion"}),(0,t.jsx)("th",{children:"Required"}),(0,t.jsx)("th",{children:"Actual"}),(0,t.jsx)("th",{children:"Status"})]})}),(0,t.jsx)("tbody",{children:C.map(e=>{var s;return(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{children:(0,t.jsx)("strong",{children:e.name})}),(0,t.jsx)("td",{children:e.required}),(0,t.jsx)("td",{children:e.actual}),(0,t.jsx)("td",{children:(0,t.jsx)(j,{className:null==(s=e.status)?void 0:s.toLowerCase(),children:e.status})})]},e.name)})})]})}),!C.length&&(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"No gate criteria evaluated yet"})}),(0,t.jsxs)("div",{style:{marginTop:16,display:"flex",gap:8,flexWrap:"wrap"},children:[(0,t.jsx)("button",{className:"button small",onClick:D,disabled:u,children:u?"Evaluating...":"Evaluate Gate"}),w&&(0,t.jsx)("button",{className:"button secondary small",onClick:()=>x(!0),children:"Add Decision"}),(0,t.jsx)("a",{href:"/api/projects/".concat(null==r?void 0:r.id,"/gate/history"),className:"button secondary small",target:"_blank",children:"History (API)"})]}),h&&(0,t.jsx)("div",{className:"modal-overlay",onClick:()=>x(!1),children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:400},children:[(0,t.jsx)("h2",{children:"Gate Decision"}),(0,t.jsx)(v,{label:"Decision",children:(0,t.jsx)(y,{value:p.decision,onChange:e=>b(s=>({...s,decision:e})),options:["APPROVED","REJECTED","ACCEPTED","NEEDS_CHANGES"]})}),(0,t.jsx)(v,{label:"Reviewer Name *",children:(0,t.jsx)(g,{value:p.reviewerName,onChange:e=>b(s=>({...s,reviewerName:e}))})}),(0,t.jsx)(v,{label:"Reason",children:(0,t.jsx)("textarea",{className:"input",value:p.reason,onChange:e=>b(s=>({...s,reason:e.target.value})),rows:3,style:{width:"100%",resize:"vertical"}})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:()=>x(!1),children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:P,disabled:N,children:N?"Saving...":"Submit Decision"})]})]})})]}):(0,t.jsx)("div",{className:"empty-state",children:(0,t.jsx)("p",{children:"Loading..."})})}function D(e){var s;let{project:a,dashboard:i,onClose:r,onSaved:c,toast:o}=e,[d,u]=(0,l.useState)(!1),[m,h]=(0,l.useState)({provider:"TRELLO",workspaceName:"",baseUrl:"",authMode:"API_KEY"}),x=e=>s=>h(a=>({...a,[e]:s})),p=(null==i||null==(s=i.gate)?void 0:s.workspaceId)||(null==a?void 0:a.workspaceId),j=async()=>{if(!m.workspaceName.trim())return void o.add("Workspace name is required","error");u(!0);try{await n.FH.post("/api/workspaces/".concat(p,"/integrations"),m),o.add("Integration created"),c()}catch(e){o.add(e.message||"Failed to create integration","error")}finally{u(!1)}};return(0,t.jsx)("div",{className:"modal-overlay",onClick:r,children:(0,t.jsxs)("div",{className:"modal",onClick:e=>e.stopPropagation(),style:{maxWidth:450},children:[(0,t.jsx)("h2",{children:"New Integration"}),(0,t.jsx)(v,{label:"Provider",children:(0,t.jsx)(y,{value:m.provider,onChange:x("provider"),options:["TRELLO","JIRA","ASANA","MICROSOFT_PLANNER"]})}),(0,t.jsx)(v,{label:"Workspace Name *",children:(0,t.jsx)(g,{value:m.workspaceName,onChange:x("workspaceName")})}),(0,t.jsx)(v,{label:"Base URL",children:(0,t.jsx)(g,{value:m.baseUrl,onChange:x("baseUrl")})}),(0,t.jsx)(v,{label:"Auth Mode",children:(0,t.jsx)(y,{value:m.authMode,onChange:x("authMode"),options:["API_KEY","OAUTH","BASIC"]})}),(0,t.jsxs)("div",{className:"modal-actions",children:[(0,t.jsx)("button",{className:"button secondary small",onClick:r,children:"Cancel"}),(0,t.jsx)("button",{className:"button small",onClick:j,disabled:d,children:d?"Saving...":"Create Integration"})]})]})})}function P(e){let{project:s,dashboard:a,toast:i,onRefresh:n}=e,[r,c]=(0,l.useState)(!1),o=(null==a?void 0:a.integrations)||[];return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{children:"Integrations"}),(0,t.jsx)("p",{className:"muted",children:"Connect Trello, Jira, Asana, or Microsoft Planner"})]}),(0,t.jsx)("div",{className:"dash-actions",children:(0,t.jsx)("button",{className:"button small",onClick:()=>c(!0),children:"+ New Integration"})})]}),(0,t.jsx)("div",{className:"grid",style:{gridTemplateColumns:"repeat(auto-fit, minmax(240px, 1fr))"},children:["TRELLO","JIRA","ASANA","MICROSOFT_PLANNER"].map(e=>{let s=o.find(s=>s.provider===e);return(0,t.jsxs)("div",{className:"panel",style:{textAlign:"center"},children:[(0,t.jsx)("div",{style:{fontSize:32,marginBottom:8},children:"TRELLO"===e?"⊞":"JIRA"===e?"◆":"ASANA"===e?"◇":"▣"}),(0,t.jsx)("h3",{style:{margin:"0 0 4px"},children:e.replace("_"," ")}),(0,t.jsx)("p",{className:"muted",style:{fontSize:12,margin:"0 0 12px"},children:s?s.workspaceName:"Not configured"}),(0,t.jsx)("div",{style:{display:"flex",gap:6,justifyContent:"center"},children:s?(0,t.jsx)("a",{href:"/api/integrations/".concat(s.id),className:"button secondary small",target:"_blank",children:"Manage"}):(0,t.jsx)("button",{className:"button secondary small",onClick:()=>c(!0),children:"Configure"})})]},e)})}),r&&(0,t.jsx)(D,{project:s,dashboard:a,onClose:()=>c(!1),onSaved:()=>{c(!1),n()},toast:i}),!o.length&&(0,t.jsx)("div",{style:{marginTop:12},children:(0,t.jsx)("a",{href:"/api/integration-providers",className:"button secondary small",target:"_blank",children:"Integration providers (API)"})})]})}function T(){let e=(0,i.useRouter)(),s=(0,i.useSearchParams)(),a=c.includes(s.get("tab"))?s.get("tab"):"Overview",[o,d]=(0,l.useState)(null),[u,m]=(0,l.useState)(null),[x,p]=(0,l.useState)(!0),[j,v]=(0,l.useState)(null),[g,y]=(0,l.useState)(0),{toasts:b,add:f}=function(){let[e,s]=(0,l.useState)([]);return{toasts:e,add:(0,l.useCallback)(function(e){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"success",t=Date.now()+Math.random();s(s=>[...s,{id:t,message:e,type:a}]),setTimeout(()=>s(e=>e.filter(e=>e.id!==t)),3e3)},[])}}(),k=(0,l.useCallback)(()=>y(e=>e+1),[]),D=(0,l.useCallback)(async()=>{p(!0),v(null);try{var e,s,a;let t=await n.FH.get("/api/auth/session");if(!(null==t?void 0:t.authenticated)){v("Not authenticated."),p(!1);return}let l=null==(e=t.memberships)?void 0:e[0];if(!l){v("No organization membership found."),p(!1);return}let i=l.organizationId,r=null==(s=(await n.FH.get("/api/workspaces?organizationId=".concat(i))).workspaces)?void 0:s[0];if(!r){v("No workspace found — create one to get started."),p(!1);return}let c=null==(a=(await n.FH.get("/api/workspaces/".concat(r.id,"/projects"))).projects)?void 0:a[0];if(!c){v("No project found — create a project to get started."),p(!1);return}d(c);let o=await n.FH.get("/api/projects/".concat(c.id,"/dashboard"));m(o.dashboard),p(!1)}catch(e){v(e.message||"Failed to load dashboard data"),p(!1)}},[]);return((0,l.useEffect)(()=>{D()},[D,g]),x&&"Integrations"!==a)?(0,t.jsx)("div",{className:"shell-loading",children:(0,t.jsx)("div",{className:"spinner"})}):j&&"Integrations"!==a?(0,t.jsxs)("div",{className:"empty-state",children:[(0,t.jsx)("div",{className:"empty-icon",children:"!"}),(0,t.jsx)("p",{children:j}),(0,t.jsx)("button",{className:"button secondary small",style:{marginTop:12},onClick:()=>y(e=>e+1),children:"Retry"})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"dash-header",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{children:(null==o?void 0:o.name)||"Dashboard"}),(0,t.jsx)("p",{className:"muted",children:(null==o?void 0:o.subtitle)||""})]}),(0,t.jsxs)("div",{className:"dash-actions",children:[(0,t.jsx)("a",{href:"/api/projects/".concat(null==o?void 0:o.id,"/reports/executive.html"),className:"button secondary small",target:"_blank",children:"Report"}),(0,t.jsx)("a",{href:"/api/projects/".concat(null==o?void 0:o.id,"/reports/risk-register.csv"),className:"button secondary small",target:"_blank",children:"CSV"})]})]}),(0,t.jsx)("div",{className:"tabs",children:c.map(s=>(0,t.jsx)("button",{className:"tab ".concat(a===s?"active":""),onClick:()=>e.push("/dashboard?tab=".concat(s)),children:s},s))}),"Overview"===a&&(0,t.jsx)(r,{name:"Overview",children:(0,t.jsx)(N,{project:o,dashboard:u})},"overview"),"Risks"===a&&(0,t.jsx)(r,{name:"Risks",children:(0,t.jsx)(C,{project:o,dashboard:u,toast:{add:f},onRefresh:k})},"risks"),"Mitigations"===a&&(0,t.jsx)(r,{name:"Mitigations",children:(0,t.jsx)(w,{project:o,dashboard:u,toast:{add:f},onRefresh:k})},"mitigations"),"Gate"===a&&(0,t.jsx)(r,{name:"Gate",children:(0,t.jsx)(S,{project:o,dashboard:u,toast:{add:f},onRefresh:k})},"gate"),"Integrations"===a&&(0,t.jsx)(r,{name:"Integrations",children:(0,t.jsx)(P,{project:o,dashboard:u,toast:{add:f},onRefresh:k})},"integrations"),(0,t.jsx)(h,{toasts:b})]})}},6282:(e,s,a)=>{"use strict";async function t(e,s,a){var t;let l={method:e,headers:{"Content-Type":"application/json"}};a&&(l.body=JSON.stringify(a));let i=await fetch("".concat("").concat(s),l),n=(null==(t=i.headers.get("content-type"))?void 0:t.includes("application/json"))?await i.json():await i.text();if(!i.ok)throw Error((null==n?void 0:n.error)||(null==n?void 0:n.message)||"Request failed (".concat(i.status,")"));return n}a.d(s,{FH:()=>l,Ht:()=>i,ri:()=>n});let l={get:e=>t("GET",e),post:(e,s)=>t("POST",e,s),put:(e,s)=>t("PUT",e,s),patch:(e,s)=>t("PATCH",e,s),del:e=>t("DELETE",e)};async function i(){try{let e=await l.get("/api/auth/session");return e.user||e.actor||null}catch(e){return null}}async function n(){await l.post("/api/auth/logout"),window.location.href="/"}}},e=>{e.O(0,[8441,1255,7358],()=>e(e.s=646)),_N_E=e.O()}]);  $ %  " & $ 1