@cobaltcore-dev/aurora 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +73 -77
- package/dist/client/AuroraApp.d.ts +15 -0
- package/dist/client/{AuthProvider-D-5Jpa6F.mjs → AuthProvider-Co4d0WzB.mjs} +3 -3
- package/dist/client/{AuthProvider-D-5Jpa6F.mjs.map → AuthProvider-Co4d0WzB.mjs.map} +1 -1
- package/dist/client/{ContentHeader-BXZoN3B9.mjs → ContentHeader-xQVhO2yT.mjs} +20 -20
- package/dist/client/{ContentHeader-BXZoN3B9.mjs.map → ContentHeader-xQVhO2yT.mjs.map} +1 -1
- package/dist/client/{DeleteFlavorModal-BusYn32r.mjs → DeleteFlavorModal-CHTUZ3YV.mjs} +211 -202
- package/dist/client/DeleteFlavorModal-CHTUZ3YV.mjs.map +1 -0
- package/dist/client/{EditSecurityGroupModal-DK3WYikA.mjs → EditSecurityGroupModal-CWHHx2Xk.mjs} +22 -22
- package/dist/client/{EditSecurityGroupModal-DK3WYikA.mjs.map → EditSecurityGroupModal-CWHHx2Xk.mjs.map} +1 -1
- package/dist/client/{FiltersInput-OVeIJzIo.mjs → FiltersInput-UKJpNFdr.mjs} +10 -10
- package/dist/client/{FiltersInput-OVeIJzIo.mjs.map → FiltersInput-UKJpNFdr.mjs.map} +1 -1
- package/dist/client/{FloatingIpActionModals-Dok7fJss.mjs → FloatingIpActionModals-caXn6bYo.mjs} +54 -54
- package/dist/client/{FloatingIpActionModals-Dok7fJss.mjs.map → FloatingIpActionModals-caXn6bYo.mjs.map} +1 -1
- package/dist/client/{ImageToastNotifications-BG9LPnXf.mjs → ImageToastNotifications-BWimIzu_.mjs} +227 -227
- package/dist/client/{ImageToastNotifications-BG9LPnXf.mjs.map → ImageToastNotifications-BWimIzu_.mjs.map} +1 -1
- package/dist/client/{RouteError-pDEWC_k7.mjs → RouteError-CUj_m3gu.mjs} +6 -6
- package/dist/client/{RouteError-pDEWC_k7.mjs.map → RouteError-CUj_m3gu.mjs.map} +1 -1
- package/dist/client/{SortInput-DXWSqSny.mjs → SortInput-GQlQBlAj.mjs} +6 -6
- package/dist/client/{SortInput-DXWSqSny.mjs.map → SortInput-GQlQBlAj.mjs.map} +1 -1
- package/dist/client/{_auth-CJj1Cnbm.mjs → _auth-DXJkv9QO.mjs} +3 -3
- package/dist/client/{_auth-CJj1Cnbm.mjs.map → _auth-DXJkv9QO.mjs.map} +1 -1
- package/dist/client/_flavorId-C5dc1N_j.mjs +194 -0
- package/dist/client/_flavorId-C5dc1N_j.mjs.map +1 -0
- package/dist/client/{_flavorId-BoNcxYmF.mjs → _flavorId-sUWG0xuy.mjs} +15 -15
- package/dist/client/_flavorId-sUWG0xuy.mjs.map +1 -0
- package/dist/client/{_floatingIpId-DF_BSJN6.mjs → _floatingIpId-COK_TBrz2.mjs} +42 -42
- package/dist/client/_floatingIpId-COK_TBrz2.mjs.map +1 -0
- package/dist/client/{_floatingIpId-D33bOEmH.mjs → _floatingIpId-CT4y-60o.mjs} +3 -3
- package/dist/client/{_floatingIpId-D33bOEmH.mjs.map → _floatingIpId-CT4y-60o.mjs.map} +1 -1
- package/dist/client/_imageId-n3RcnhAR.mjs +534 -0
- package/dist/client/_imageId-n3RcnhAR.mjs.map +1 -0
- package/dist/client/{_pcaId-CbBhBrX1.mjs → _pcaId-B-f_6kqs.mjs} +99 -99
- package/dist/client/{_pcaId-CbBhBrX1.mjs.map → _pcaId-B-f_6kqs.mjs.map} +1 -1
- package/dist/client/{_pcaId-BYCoeK6_.mjs → _pcaId-ChnM_t-9.mjs} +3 -3
- package/dist/client/{_pcaId-BYCoeK6_.mjs.map → _pcaId-ChnM_t-9.mjs.map} +1 -1
- package/dist/client/_projectId-26bw-_rm.mjs +46 -0
- package/dist/client/_projectId-26bw-_rm.mjs.map +1 -0
- package/dist/client/{_projectId-BwLMEMGC.mjs → _projectId-BK9UqeYw.mjs} +14 -14
- package/dist/client/{_projectId-BwLMEMGC.mjs.map → _projectId-BK9UqeYw.mjs.map} +1 -1
- package/dist/client/{_projectId-D35MN1kY.mjs → _projectId-CCtpAQ8m.mjs} +78 -95
- package/dist/client/_projectId-CCtpAQ8m.mjs.map +1 -0
- package/dist/client/{_projectId-OW2xkK43.mjs → _projectId-Dhb4AyBD.mjs} +3 -3
- package/dist/client/{_projectId-OW2xkK43.mjs.map → _projectId-Dhb4AyBD.mjs.map} +1 -1
- package/dist/client/{_securityGroupId-B-Z-CzLp.mjs → _securityGroupId-CR1mKICQ.mjs} +3 -3
- package/dist/client/{_securityGroupId-B-Z-CzLp.mjs.map → _securityGroupId-CR1mKICQ.mjs.map} +1 -1
- package/dist/client/{_securityGroupId-B1bOYRbX.mjs → _securityGroupId-DroYG6cA.mjs} +254 -255
- package/dist/client/{_securityGroupId-B1bOYRbX.mjs.map → _securityGroupId-DroYG6cA.mjs.map} +1 -1
- package/dist/client/about-969pIiZ9.mjs +92 -0
- package/dist/client/{about-DLn1ShhF.mjs.map → about-969pIiZ9.mjs.map} +1 -1
- package/dist/client/aurora-DDzsst74.mjs +19 -0
- package/dist/client/{aurora-CRcxVUCo.mjs.map → aurora-DDzsst74.mjs.map} +1 -1
- package/dist/client/{build-BJDfnAyi.mjs → build-DracvfrJ.mjs} +5 -5
- package/dist/client/{build-BJDfnAyi.mjs.map → build-DracvfrJ.mjs.map} +1 -1
- package/dist/client/{buildFilterParams-TeyosGyK.mjs → buildFilterParams-DoZzMKX9.mjs} +1 -1
- package/dist/client/{buildFilterParams-TeyosGyK.mjs.map → buildFilterParams-DoZzMKX9.mjs.map} +1 -1
- package/dist/client/{cn-C3laVXMm.mjs → cn-DM4Cy3jv.mjs} +1 -1
- package/dist/client/{cn-C3laVXMm.mjs.map → cn-DM4Cy3jv.mjs.map} +1 -1
- package/dist/client/{constants-B-P2r5F1.mjs → constants-4lVQXort.mjs} +22 -22
- package/dist/client/{constants-B-P2r5F1.mjs.map → constants-4lVQXort.mjs.map} +1 -1
- package/dist/client/{containers-BjWqjNOx.mjs → containers-DGY2hoWw.mjs} +3 -3
- package/dist/client/{containers-BjWqjNOx.mjs.map → containers-DGY2hoWw.mjs.map} +1 -1
- package/dist/client/containers-ZMFTRaQL.mjs +3277 -0
- package/dist/client/containers-ZMFTRaQL.mjs.map +1 -0
- package/dist/client/{containers-DsRWc1L5.mjs → containers-xfsYgRyf.mjs} +2 -2
- package/dist/client/{containers-DsRWc1L5.mjs.map → containers-xfsYgRyf.mjs.map} +1 -1
- package/dist/client/{flavors-D8oElC2K.mjs → flavors-C4GtoybP.mjs} +2 -2
- package/dist/client/{flavors-D8oElC2K.mjs.map → flavors-C4GtoybP.mjs.map} +1 -1
- package/dist/client/{flavors-qvgPSI7J.mjs → flavors-CpirO_nr.mjs} +167 -148
- package/dist/client/flavors-CpirO_nr.mjs.map +1 -0
- package/dist/client/{flavors-BXPYAFyQ.mjs → flavors-DWMZ6TuJ.mjs} +2 -2
- package/dist/client/{flavors-BXPYAFyQ.mjs.map → flavors-DWMZ6TuJ.mjs.map} +1 -1
- package/dist/client/{floatingips-Fa6ocNUu.mjs → floatingips-BUf_oLRl.mjs} +74 -75
- package/dist/client/{floatingips-Fa6ocNUu.mjs.map → floatingips-BUf_oLRl.mjs.map} +1 -1
- package/dist/client/{formatBytes-tQBEnPoL.mjs → formatBytes-CZv_XyCY.mjs} +1 -1
- package/dist/client/{formatBytes-tQBEnPoL.mjs.map → formatBytes-CZv_XyCY.mjs.map} +1 -1
- package/dist/client/{helpers--JWXi40U.mjs → helpers-1PpYf-fC.mjs} +1 -1
- package/dist/client/{helpers--JWXi40U.mjs.map → helpers-1PpYf-fC.mjs.map} +1 -1
- package/dist/client/hooks-dSArr2Ca.mjs +2 -0
- package/dist/client/{images-tYfyOkX8.mjs → images-CsonlmFx.mjs} +3 -3
- package/dist/client/{images-tYfyOkX8.mjs.map → images-CsonlmFx.mjs.map} +1 -1
- package/dist/client/{images-CSFfefAu.mjs → images-Da1t5KPh.mjs} +507 -535
- package/dist/client/images-Da1t5KPh.mjs.map +1 -0
- package/dist/client/{images-DM9I8G0p.mjs → images-NBf2bV43.mjs} +2 -2
- package/dist/client/{images-DM9I8G0p.mjs.map → images-NBf2bV43.mjs.map} +1 -1
- package/dist/client/{images-CTLCY-yY.mjs → images-QnWf63uj.mjs} +2 -2
- package/dist/client/{images-CTLCY-yY.mjs.map → images-QnWf63uj.mjs.map} +1 -1
- package/dist/client/index.js +252 -258
- package/dist/client/index.js.map +1 -1
- package/dist/client/{md-BivyCkGC.mjs → md-sBiSNVSQ.mjs} +7 -7
- package/dist/client/{md-BivyCkGC.mjs.map → md-sBiSNVSQ.mjs.map} +1 -1
- package/dist/client/{network-rYLHyf15.mjs → network-DuZm76BZ.mjs} +2 -2
- package/dist/client/{network-rYLHyf15.mjs.map → network-DuZm76BZ.mjs.map} +1 -1
- package/dist/client/{objects-BciXwZ00.mjs → objects-B89dYCBq.mjs} +3 -3
- package/dist/client/{objects-BciXwZ00.mjs.map → objects-B89dYCBq.mjs.map} +1 -1
- package/dist/client/{objects-Cdew99tK.mjs → objects-CuFLUOe1.mjs} +2 -2
- package/dist/client/{objects-Cdew99tK.mjs.map → objects-CuFLUOe1.mjs.map} +1 -1
- package/dist/client/objects-H0NN_Sja.mjs +5460 -0
- package/dist/client/objects-H0NN_Sja.mjs.map +1 -0
- package/dist/client/{pca-oc7J0_Xd.mjs → pca-C-UFjicP.mjs} +42 -42
- package/dist/client/{pca-oc7J0_Xd.mjs.map → pca-C-UFjicP.mjs.map} +1 -1
- package/dist/client/{pca-COmKvp3J.mjs → pca-CtU6REww.mjs} +2 -2
- package/dist/client/{pca-COmKvp3J.mjs.map → pca-CtU6REww.mjs.map} +1 -1
- package/dist/client/{projects-Dl5XkXUP.mjs → projects-C-sjd9T5.mjs} +3 -3
- package/dist/client/{projects-Dl5XkXUP.mjs.map → projects-C-sjd9T5.mjs.map} +1 -1
- package/dist/client/{projects-BUabCzvw.mjs → projects-DNXsDnJM.mjs} +25 -21
- package/dist/client/projects-DNXsDnJM.mjs.map +1 -0
- package/dist/client/{projects-DI_L4oDw.mjs → projects-dhnQkuvV.mjs} +2 -2
- package/dist/client/{projects-DI_L4oDw.mjs.map → projects-dhnQkuvV.mjs.map} +1 -1
- package/dist/client/{projects-HoQ0gE5Y.mjs → projects-yiK0HGSA.mjs} +2 -2
- package/dist/client/{projects-HoQ0gE5Y.mjs.map → projects-yiK0HGSA.mjs.map} +1 -1
- package/dist/client/{securitygroups-BjkmHk2J.mjs → securitygroups-wHdrxZXd.mjs} +72 -73
- package/dist/client/{securitygroups-BjkmHk2J.mjs.map → securitygroups-wHdrxZXd.mjs.map} +1 -1
- package/dist/client/{trpcClient-BxguzNYF.mjs → trpcClient-BzPUgiM2.mjs} +1 -1
- package/dist/client/{trpcClient-BxguzNYF.mjs.map → trpcClient-BzPUgiM2.mjs.map} +1 -1
- package/dist/client/{useErrorTranslation-TZVwIAzq.mjs → useErrorTranslation-Dc0eE8Zt.mjs} +1 -1
- package/dist/client/{useErrorTranslation-TZVwIAzq.mjs.map → useErrorTranslation-Dc0eE8Zt.mjs.map} +1 -1
- package/dist/client/useListWithFiltering-DrgUwXef.mjs +157 -0
- package/dist/client/useListWithFiltering-DrgUwXef.mjs.map +1 -0
- package/dist/client/{useModal-DxxlilRm.mjs → useModal-DCs1OJh7.mjs} +1 -1
- package/dist/client/{useModal-DxxlilRm.mjs.map → useModal-DCs1OJh7.mjs.map} +1 -1
- package/dist/client/{useProjectId-OQv2KBbG.mjs → useProjectId-DBc5lpoU.mjs} +1 -1
- package/dist/client/{useProjectId-OQv2KBbG.mjs.map → useProjectId-DBc5lpoU.mjs.map} +1 -1
- package/dist/server/index.js +1281 -432
- package/package.json +6 -5
- package/dist/client/DeleteFlavorModal-BusYn32r.mjs.map +0 -1
- package/dist/client/ListToolbar-BojRTNbo.mjs +0 -129
- package/dist/client/ListToolbar-BojRTNbo.mjs.map +0 -1
- package/dist/client/_flavorId-BRonXvCo.mjs +0 -188
- package/dist/client/_flavorId-BRonXvCo.mjs.map +0 -1
- package/dist/client/_flavorId-BoNcxYmF.mjs.map +0 -1
- package/dist/client/_floatingIpId-DF_BSJN6.mjs.map +0 -1
- package/dist/client/_imageId-BL0I5_pv.mjs +0 -527
- package/dist/client/_imageId-BL0I5_pv.mjs.map +0 -1
- package/dist/client/_projectId-5NiasyXm.mjs +0 -26
- package/dist/client/_projectId-5NiasyXm.mjs.map +0 -1
- package/dist/client/_projectId-D35MN1kY.mjs.map +0 -1
- package/dist/client/about-DLn1ShhF.mjs +0 -92
- package/dist/client/aurora-CRcxVUCo.mjs +0 -19
- package/dist/client/containers-J7WFA18U.mjs +0 -3120
- package/dist/client/containers-J7WFA18U.mjs.map +0 -1
- package/dist/client/flavors-qvgPSI7J.mjs.map +0 -1
- package/dist/client/hooks-DEjb9d1F.mjs +0 -2
- package/dist/client/images-CSFfefAu.mjs.map +0 -1
- package/dist/client/objects-DaElrban.mjs +0 -5340
- package/dist/client/objects-DaElrban.mjs.map +0 -1
- package/dist/client/overview-BMhjFMIV.mjs +0 -15
- package/dist/client/overview-BMhjFMIV.mjs.map +0 -1
- package/dist/client/overview-BYIRj7_X.mjs +0 -15
- package/dist/client/overview-BYIRj7_X.mjs.map +0 -1
- package/dist/client/overview-DRCKNBH2.mjs +0 -15
- package/dist/client/overview-DRCKNBH2.mjs.map +0 -1
- package/dist/client/overview-urYLOVQE.mjs +0 -173
- package/dist/client/overview-urYLOVQE.mjs.map +0 -1
- package/dist/client/projects-BUabCzvw.mjs.map +0 -1
- package/dist/client/useListWithFiltering-CbhHJO4V.mjs +0 -32
- package/dist/client/useListWithFiltering-CbhHJO4V.mjs.map +0 -1
package/dist/client/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["useEffect","useState","useNavigate","useRouterState","cn","SessionExpirationTimer","props","timeLeft","setTimeLeft","navigate","pathname","select","s","location","updateCountdown","now","Date","timeDiff","sessionExpired","getTime","seconds","Math","floor","minutes","hours","days","formatted","filter","Boolean","join","intervalId","setInterval","delay","handleExpiration","logout","error","console","to","search","redirect","undefined","logoutTimer","setTimeout","clearInterval","clearTimeout","div","className","trpcClient","PopupMenu","PopupMenuOptions","PopupMenuItem","PopupMenuSection","PopupMenuSectionHeading","PopupMenuSectionSeparator","useAuth","useNavigate","SessionExpirationTimer","useState","UserMenu","isLoading","setIsLoading","isAuthenticated","user","logout","expiresAt","navigate","handleLogin","to","handleLogout","auth","terminateUserSession","mutate","error","console","icon","div","className","name","domain","label","disabled","onClick","sessionExpired","Logo","isMatch","Link","useRouterState","UserMenu","PageHeader","ThemeToggle","cn","textColorClass","textHoverClass","textMutedClass","getDomain","matches","domainMatch","filter","match","name","loaderData","crumbDomain","path","getProject","projectMatch","domain","projectId","crumbProject","id","undefined","MainNavigation","items","handleThemeToggle","select","s","project","logo","className","title","applicationName","div","to","span","data-testid","map","route","label","index","onToggleTheme","newTheme","Modal","useAuth","InactivityModal","useLingui","showInactivityModal","closeInactivityModal","logoutReason","title","t","message","open","onConfirm","confirmButtonLabel","disableCancelButton","size","p","createRootRouteWithContext","Outlet","useRouter","HeadContent","AppShell","Spinner","Stack","MainNavigation","styles","InactivityModal","RouteError","StatusError","Route","component","RootComponent","notFoundComponent","PageNotFound","errorComponent","RootErrorComponent","pendingComponent","PendingComponent","AuroraLayout","children","navItems","handleThemeToggle","useRouteContext","style","toString","pageHeader","items","fullWidthContent","error","useLingui","navigateTo","useNavigate","router","message","t","title","onHomeClick","to","onBackClick","history","back","statusCode","className","distribution","alignment","div","variant","size","createFileRoute","Route","component","lazyRouteComponent","$$splitComponentImporter","createFileRoute","redirect","Route","component","lazyRouteComponent","$$splitComponentImporter","beforeLoad","context","location","auth","isAuthenticated","token","trpcClient","getCurrentUserSession","query","redirectPath","pathname","to","search","login","user","expires_at","useState","useCallback","useEffect","useRef","createFileRoute","redirect","useRouterState","useAuth","z","trpcClient","Button","ContentHeading","Message","useErrorTranslation","isSafeRedirect","path","startsWith","Route","validateSearch","object","string","optional","catch","beforeLoad","context","search","isAuthenticated","auth","token","getCurrentUserSession","query","login","user","expires_at","savedRedirect","sessionStorage","getItem","redirectTo","removeItem","to","component","AuthLoginPage","textinputstyles","logoutReason","isLoading","select","s","navigate","useNavigate","useSearch","useLingui","translateError","form","setForm","domainName","password","isSubmitting","setIsSubmitting","loginError","setLoginError","skipAutoRedirectRef","signin","createUserSession","mutate","searchRedirect","defaultRedirect","current","replace","error","console","errorMessage","message","t","dismissError","isLoggingIn","wasInactive","div","className","onDismiss","text","variant","p","onSubmit","e","preventDefault","label","htmlFor","input","id","type","placeholder","onChange","target","value","required","disabled","createFileRoute","Route","component","lazyRouteComponent","$$splitComponentImporter","createFileRoute","redirect","Route","beforeLoad","context","auth","isAuthenticated","user","domain","id","to","createFileRoute","Route","component","lazyRouteComponent","$$splitComponentImporter","ServiceCardProps","title","links","label","to","createFileRoute","redirect","getServiceIndex","Route","loader","context","trpcClient","availableServices","auth","getAvailableServices","query","beforeLoad","params","projectId","serviceIndex","to","component","lazyRouteComponent","$$splitComponentImporter","createFileRoute","redirect","Route","beforeLoad","params","to","createFileRoute","redirect","Route","beforeLoad","params","to","createFileRoute","Route","createFileRoute","t","RouteInfo","Route","staticData","section","service","crumb","labelKey","head","meta","title","component","lazyRouteComponent","$$splitComponentImporter","createFileRoute","t","Route","staticData","section","service","crumb","labelKey","RouteInfo","head","meta","title","component","lazyRouteComponent","$$splitComponentImporter","createFileRoute","redirect","getServiceIndex","z","multiValueEnum","allowedValues","string","refine","val","values","startsWith","replace","split","every","v","includes","imagesSearchFields","status","optional","visibility","enum","disk_format","container_format","protected","search","sortBy","sortDirection","memberStatus","page","number","int","positive","imagesSearchSchema","object","passthrough","Route","staticData","section","service","sectionCrumb","labelKey","crumb","RouteInfo","errorComponent","lazyRouteComponent","$$splitErrorComponentImporter","validateSearch","result","safeParse","success","data","undefined","beforeLoad","context","params","trpcClient","projectId","Error","availableServices","auth","getAvailableServices","query","serviceIndex","to","component","$$splitComponentImporter","createFileRoute","redirect","getServiceIndex","z","flavorsSearchFields","search","string","optional","sortBy","enum","sortDirection","page","number","int","positive","flavorsSearchSchema","object","passthrough","Route","staticData","section","service","sectionCrumb","labelKey","crumb","RouteInfo","validateSearch","result","safeParse","success","data","undefined","beforeLoad","context","params","trpcClient","projectId","availableServices","auth","getAvailableServices","query","serviceIndex","to","component","lazyRouteComponent","$$splitComponentImporter","createFileRoute","t","Route","staticData","section","service","sectionCrumb","labelKey","crumb","RouteInfo","head","meta","title","component","lazyRouteComponent","$$splitComponentImporter","createFileRoute","t","Route","staticData","section","service","sectionCrumb","labelKey","crumb","RouteInfo","head","meta","title","component","lazyRouteComponent","$$splitComponentImporter","createFileRoute","redirect","z","getServiceIndex","GlanceImage","MemberStatus","Route","staticData","section","service","isDetail","sectionCrumb","labelKey","crumb","to","RouteInfo","validateSearch","object","tab","enum","optional","loader","context","params","image","trpcClient","compute","getImageById","query","project_id","projectId","imageId","imageTitle","name","id","head","loaderData","meta","title","component","lazyRouteComponent","$$splitComponentImporter","beforeLoad","availableServices","auth","getAvailableServices","serviceIndex","createFileRoute","useNavigate","trpcReact","Button","DescriptionDefinition","DescriptionList","DescriptionTerm","Divider","Spinner","Stack","MdContentCopy","MdDownload","Fragment","Route","staticData","section","service","isDetail","sectionCrumb","labelKey","crumb","to","loader","context","params","cert","trpcClient","services","pca","getByIdCertificate","query","project_id","projectId","certificate_authority_id","pcaId","certificate_id","certificateId","certTitle","id","head","loaderData","meta","title","component","RouteComponent","useLingui","navigate","useParams","isLoading","isError","error","data","certificate","useQuery","className","distribution","alignment","direction","variant","size","handleBack","errorMessage","message","gap","p","onClick","basicInfo","label","t","value","configuration","validity","not_before","undefined","not_after","Math","round","div","alignTerms","map","csr","Route","rootRouteImport","AboutRouteImport","AuthRouteImport","IndexRouteImport","AuthAuroraRouteImport","AuthProjectsIndexRouteImport","AuthAccountsIndexRouteImport","AuthProjectsProjectIdRouteImport","AuthProjectsProjectIdIndexRouteImport","AuthProjectsProjectIdNetworkRouteImport","AuthProjectsProjectIdServicesIndexRouteImport","AuthProjectsProjectIdNetworkIndexRouteImport","AuthProjectsProjectIdComputeIndexRouteImport","AuthProjectsProjectIdServicesOverviewRouteImport","AuthProjectsProjectIdNetworkOverviewRouteImport","AuthProjectsProjectIdComputeOverviewRouteImport","AuthProjectsProjectIdComputeImagesRouteImport","AuthProjectsProjectIdComputeFlavorsRouteImport","AuthProjectsProjectIdServicesPcaIndexRouteImport","AuthProjectsProjectIdNetworkSecuritygroupsIndexRouteImport","AuthProjectsProjectIdNetworkFloatingipsIndexRouteImport","AuthProjectsProjectIdComputeImagesIndexRouteImport","AuthProjectsProjectIdComputeFlavorsIndexRouteImport","AuthProjectsProjectIdComputeImagesImageIdRouteImport","AuthProjectsProjectIdComputeFlavorsFlavorIdRouteImport","AuthProjectsProjectIdStorageProviderContainersIndexRouteImport","AuthProjectsProjectIdServicesPcaPcaIdIndexRouteImport","AuthProjectsProjectIdNetworkSecuritygroupsSecurityGroupIdIndexRouteImport","AuthProjectsProjectIdNetworkFloatingipsFloatingIpIdIndexRouteImport","AuthProjectsProjectIdServicesPcaPcaIdCertificateIdRouteImport","AuthProjectsProjectIdStorageProviderContainersContainerNameObjectsIndexRouteImport","AboutRoute","update","id","path","getParentRoute","AuthRoute","IndexRoute","AuthAuroraRoute","AuthProjectsIndexRoute","AuthAccountsIndexRoute","AuthProjectsProjectIdRoute","AuthProjectsProjectIdIndexRoute","AuthProjectsProjectIdNetworkRoute","AuthProjectsProjectIdServicesIndexRoute","AuthProjectsProjectIdNetworkIndexRoute","AuthProjectsProjectIdComputeIndexRoute","AuthProjectsProjectIdServicesOverviewRoute","AuthProjectsProjectIdNetworkOverviewRoute","AuthProjectsProjectIdComputeOverviewRoute","AuthProjectsProjectIdComputeImagesRoute","AuthProjectsProjectIdComputeFlavorsRoute","AuthProjectsProjectIdServicesPcaIndexRoute","AuthProjectsProjectIdNetworkSecuritygroupsIndexRoute","AuthProjectsProjectIdNetworkFloatingipsIndexRoute","AuthProjectsProjectIdComputeImagesIndexRoute","AuthProjectsProjectIdComputeFlavorsIndexRoute","AuthProjectsProjectIdComputeImagesImageIdRoute","AuthProjectsProjectIdComputeFlavorsFlavorIdRoute","AuthProjectsProjectIdStorageProviderContainersIndexRoute","AuthProjectsProjectIdServicesPcaPcaIdIndexRoute","AuthProjectsProjectIdNetworkSecuritygroupsSecurityGroupIdIndexRoute","AuthProjectsProjectIdNetworkFloatingipsFloatingIpIdIndexRoute","AuthProjectsProjectIdServicesPcaPcaIdCertificateIdRoute","AuthProjectsProjectIdStorageProviderContainersContainerNameObjectsIndexRoute","AuthProjectsProjectIdNetworkRouteChildren","AuthProjectsProjectIdNetworkRouteWithChildren","_addFileChildren","AuthProjectsProjectIdComputeFlavorsRouteChildren","AuthProjectsProjectIdComputeFlavorsRouteWithChildren","AuthProjectsProjectIdComputeImagesRouteChildren","AuthProjectsProjectIdComputeImagesRouteWithChildren","AuthProjectsProjectIdRouteChildren","AuthProjectsProjectIdRouteWithChildren","AuthRouteChildren","AuthRouteWithChildren","rootRouteChildren","routeTree","_addFileTypes","createRouter","routeTree","createAuroraRouter","trpcReact","trpcClient","context","auth","undefined","navItems","handleThemeToggle","slots","messages","JSON","parse","AppShellProvider","RouterProvider","AuthProvider","useAuth","QueryClient","QueryClientProvider","hashKey","trpcReact","trpcReactClient","trpcClient","setBffEndpoint","createAuroraRouter","useState","useEffect","i18n","I18nProvider","ErrorBoundary","messages","enMessages","load","en","activate","navItems","App","props","bffEndpoint","router","currentTheme","setCurrentTheme","theme","queryClient","defaultOptions","queries","staleTime","refetchOnWindowFocus","queryKeyHashFn","queryKey","match","state","matches","findLast","m","params","projectId","reactClient","handleThemeToggle","newTheme","onThemeChange","fallbackRender","error","resetErrorBoundary","message","div","role","style","padding","p","pre","color","button","onClick","shadowRoot","Provider","client","AppInner","slots","auth","routerContext","context","App","AuroraApp"],"sources":["../../src/client/assets/logo.svg?react","../../src/client/components/Auth/SessionExpirationTimer.tsx","../../src/client/components/navigation/UserMenu.tsx","../../src/client/components/navigation/MainNavigation.tsx","../../src/client/index.css?inline","../../src/client/components/Auth/InactivityModal.tsx","../../src/client/routes/__root.tsx","../../src/client/routes/about.tsx","../../src/client/routes/_auth.tsx","../../src/client/routes/index.tsx","../../src/client/routes/_auth/aurora.tsx","../../src/client/routes/_auth/accounts/index.tsx","../../src/client/routes/_auth/projects/$projectId/index.tsx","../../src/client/routes/_auth/projects/$projectId/network.tsx","../../src/client/routes/_auth/projects/$projectId/services/index.tsx","../../src/client/routes/_auth/projects/$projectId/network/index.tsx","../../src/client/routes/_auth/projects/$projectId/compute/index.tsx","../../src/client/routes/_auth/projects/$projectId/services/overview.tsx","../../src/client/routes/_auth/projects/$projectId/network/overview.tsx","../../src/client/routes/_auth/projects/$projectId/compute/images.tsx","../../src/client/routes/_auth/projects/$projectId/compute/flavors.tsx","../../src/client/routes/_auth/projects/$projectId/network/securitygroups/index.tsx","../../src/client/routes/_auth/projects/$projectId/network/floatingips/index.tsx","../../src/client/routes/_auth/projects/$projectId/compute/images/$imageId.tsx","../../src/client/routes/_auth/projects/$projectId/services/pca/$pcaId/$certificateId.tsx","../../src/client/routeTree.gen.ts","../../src/client/router.ts","../../src/locales/en/messages.ts","../../src/client/App.tsx","../../src/client/AuroraApp.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst SvgLogo = (props) => /* @__PURE__ */ _jsxs(\"svg\", {\n\tviewBox: \"0 0 500 500\",\n\txmlns: \"http://www.w3.org/2000/svg\",\n\tdesc: \"Created with imagetracer.js version 1.2.6\",\n\t...props,\n\tchildren: [\n\t\t/* @__PURE__ */ _jsx(\"path\", {\n\t\t\tclassName: \"shape-1\",\n\t\t\tstrokeWidth: 1,\n\t\t\topacity: .9215686274509803,\n\t\t\td: \"M 67.5 0 L 204.5 0 L 207 2.5 L 273 116.5 L 273 119.5 L 205 237 L 67.5 237 L 67 235.5 L 0 120.5 L 0 116.5 L 67.5 0 Z M 78 15 L 18 117 L 18 120 L 76 220 L 78 221 L 195 221 L 254 120 L 252 113 L 219 58 L 197 18 L 195 15 L 78 15 Z \"\n\t\t}),\n\t\t/* @__PURE__ */ _jsx(\"path\", {\n\t\t\tclassName: \"shape-2\",\n\t\t\tstrokeWidth: 1,\n\t\t\topacity: .9215686274509803,\n\t\t\td: \"M 295.5 131 L 432.5 131 L 433 132.5 L 471 196.5 L 483 219.5 L 486 222.5 L 486 224.5 L 500 247.5 L 500 251.5 L 433 368 L 295.5 368 L 294 366.5 L 234 263.5 L 227 248.5 L 295.5 131 Z M 304 147 L 286 181 L 246 248 L 246 252 L 304 351 L 305 352 L 424 352 L 427 345 L 482 251 L 482 249 L 424 149 L 423 147 L 304 147 Z \"\n\t\t}),\n\t\t/* @__PURE__ */ _jsx(\"path\", {\n\t\t\tclassName: \"shape-3\",\n\t\t\tstrokeWidth: 1,\n\t\t\topacity: .9215686274509803,\n\t\t\td: \"M 67 256 L 204.5 256 L 205 257.5 L 268 364.5 L 273 375.5 L 213 478.5 L 206 493 L 67.5 493 L 67 491.5 L 64 488.5 L 64 486.5 L 42 450.5 L 22 413.5 L 19 410.5 L 19 408.5 L 3 382.5 L 0 376.5 L 0 372.5 L 57 275.5 L 67 256 Z M 78 272 L 18 374 L 18 377 L 36 406 L 76 477 L 78 478 L 195 478 L 254 377 L 254 374 L 247 361 L 196 274 L 196 272 L 78 272 Z \"\n\t\t}),\n\t\t/* @__PURE__ */ _jsx(\"path\", {\n\t\t\tclassName: \"shape-4\",\n\t\t\tstrokeWidth: 1,\n\t\t\topacity: 0,\n\t\t\td: \"M 0 0 L 67 0.5 L 0.5 116 L 0 0 Z \"\n\t\t}),\n\t\t/* @__PURE__ */ _jsx(\"path\", {\n\t\t\tclassName: \"shape-5\",\n\t\t\tstrokeWidth: 1,\n\t\t\topacity: 0,\n\t\t\td: \"M 205.5 0 L 500 0 L 500 246.5 L 498 245.5 L 433 131 L 295.5 131 L 294 132.5 L 247 215.5 L 229 244.5 L 227 250.5 L 295.5 368 L 432.5 368 L 433 366.5 L 499.5 252 L 500 493 L 206.5 493 L 206 491.5 L 266 388.5 L 273 373.5 L 205 256 L 67.5 256 L 67 257.5 L 0.5 372 L 0 121.5 L 2 122.5 L 67 237 L 204.5 237 L 205 235.5 L 273 119.5 L 273 116.5 L 205.5 0 Z \"\n\t\t}),\n\t\t/* @__PURE__ */ _jsx(\"path\", {\n\t\t\tclassName: \"shape-6\",\n\t\t\tstrokeWidth: 1,\n\t\t\topacity: 0,\n\t\t\td: \"M 77.5 15 L 194.5 15 L 197 17.5 L 219 57.5 L 252 112.5 L 254 119.5 L 194.5 221 L 77.5 221 L 76 219.5 L 18 119.5 L 18 116.5 L 77.5 15 Z \"\n\t\t}),\n\t\t/* @__PURE__ */ _jsx(\"path\", {\n\t\t\tclassName: \"shape-7\",\n\t\t\tstrokeWidth: 1,\n\t\t\topacity: 0,\n\t\t\td: \"M 304 147 L 422.5 147 L 424 148.5 L 482 248.5 L 482 250.5 L 427 344.5 L 424 352 L 304.5 352 L 304 350.5 L 246 251.5 L 246 247.5 L 286 180.5 L 304 147 Z \"\n\t\t}),\n\t\t/* @__PURE__ */ _jsx(\"path\", {\n\t\t\tclassName: \"shape-8\",\n\t\t\tstrokeWidth: 1,\n\t\t\topacity: 0,\n\t\t\td: \"M 77.5 272 L 195.5 272 L 196 273.5 L 247 360.5 L 254 373.5 L 254 376.5 L 194.5 478 L 77.5 478 L 76 476.5 L 36 405.5 L 18 376.5 L 18 373.5 L 77.5 272 Z \"\n\t\t}),\n\t\t/* @__PURE__ */ _jsx(\"path\", {\n\t\t\tclassName: \"shape-9\",\n\t\t\tstrokeWidth: 1,\n\t\t\topacity: 0,\n\t\t\td: \"M 0.5 377 L 67 493 L 0 493 L 0.5 377 Z \"\n\t\t})\n\t]\n});\nexport default SvgLogo;\n","import { useEffect, useState } from \"react\"\nimport { useNavigate, useRouterState } from \"@tanstack/react-router\"\nimport { cn } from \"@/client/utils/cn\"\nimport { Trans } from \"@lingui/react/macro\"\n\nexport function SessionExpirationTimer(props: {\n className?: string\n sessionExpired: Date\n logout: () => Promise<void>\n}) {\n const [timeLeft, setTimeLeft] = useState<string>(\"\")\n const navigate = useNavigate()\n const pathname = useRouterState({ select: (s) => s.location.pathname })\n\n useEffect(() => {\n const updateCountdown = () => {\n const now = new Date()\n const timeDiff = props.sessionExpired.getTime() - now.getTime()\n\n if (timeDiff <= 0) {\n setTimeLeft(`expired!`)\n return\n }\n\n const seconds = Math.floor(timeDiff / 1000) % 60\n const minutes = Math.floor(timeDiff / (1000 * 60)) % 60\n const hours = Math.floor(timeDiff / (1000 * 60 * 60)) % 24\n const days = Math.floor(timeDiff / (1000 * 60 * 60 * 24))\n\n const formatted = [days > 0 && `${days}d`, hours > 0 && `${hours}h`, minutes > 0 && `${minutes}m`, `${seconds}s`]\n .filter(Boolean)\n .join(\" \")\n\n setTimeLeft(formatted)\n }\n\n updateCountdown()\n const intervalId = setInterval(updateCountdown, 1000)\n\n const delay = props.sessionExpired.getTime() - Date.now()\n\n const handleExpiration = async () => {\n try {\n await props.logout()\n } catch (error) {\n console.error(\"Error during session expiration logout: \", error)\n }\n\n // Only navigate if not already on login page\n if (pathname !== \"/\") {\n navigate({\n to: \"/\",\n search: {\n redirect: pathname || undefined,\n },\n })\n }\n }\n\n let logoutTimer: NodeJS.Timeout | undefined\n\n if (delay <= 0) {\n handleExpiration()\n } else {\n logoutTimer = setTimeout(handleExpiration, delay)\n }\n\n return () => {\n clearInterval(intervalId)\n if (logoutTimer) clearTimeout(logoutTimer)\n }\n }, [props.sessionExpired, props.logout, navigate, pathname])\n\n return (\n <div className={cn(\"text-theme-light pt-2 pb-2 text-xs\", props.className)}>\n <Trans>Session expires in</Trans> {timeLeft}\n </div>\n )\n}\n","import { trpcClient } from \"../../trpcClient\"\nimport {\n PopupMenu,\n PopupMenuOptions,\n PopupMenuItem,\n PopupMenuSection,\n PopupMenuSectionHeading,\n PopupMenuSectionSeparator,\n} from \"@cloudoperators/juno-ui-components\"\nimport { useAuth } from \"../../store/AuthProvider\"\nimport { useNavigate } from \"@tanstack/react-router\"\nimport { SessionExpirationTimer } from \"../Auth/SessionExpirationTimer\"\nimport { useState } from \"react\"\n\nexport function UserMenu() {\n const [isLoading, setIsLoading] = useState(false)\n const { isAuthenticated, user, logout, expiresAt } = useAuth()\n const navigate = useNavigate()\n\n const handleLogin = () => {\n navigate({ to: \"/\" })\n }\n\n const handleLogout = async () => {\n setIsLoading(true)\n try {\n await trpcClient.auth.terminateUserSession.mutate()\n } catch (error) {\n console.error(\"Error logging out: \", error)\n } finally {\n try {\n await logout(\"manual\")\n } catch (error) {\n console.error(\"Error during logout: \", error)\n }\n setIsLoading(false)\n await navigate({ to: \"/\" })\n }\n }\n\n return (\n <PopupMenu icon=\"accountCircle\">\n <PopupMenuOptions>\n {isAuthenticated ? (\n <>\n <PopupMenuSection>\n <PopupMenuSectionHeading>\n <div className=\"font-semibold\">{user?.name}</div>\n {user?.domain?.name && <div className=\"text-xs opacity-60\">{user.domain.name}</div>}\n </PopupMenuSectionHeading>\n </PopupMenuSection>\n <PopupMenuSectionSeparator />\n <PopupMenuSection>\n <PopupMenuItem\n icon=\"exitToApp\"\n label={isLoading ? \"Signing out…\" : \"Log Out\"}\n disabled={isLoading}\n onClick={handleLogout}\n />\n {expiresAt && (\n <PopupMenuSectionHeading>\n <SessionExpirationTimer sessionExpired={expiresAt} logout={() => logout(\"expired\")} />\n </PopupMenuSectionHeading>\n )}\n </PopupMenuSection>\n </>\n ) : (\n <PopupMenuSection>\n <PopupMenuItem icon=\"manageAccounts\" label=\"Sign In\" onClick={handleLogin} />\n </PopupMenuSection>\n )}\n </PopupMenuOptions>\n </PopupMenu>\n )\n}\n","import Logo from \"../../assets/logo.svg?react\"\nimport { NavigationItem } from \"./types\"\nimport { isMatch, Link, MakeRouteMatchUnion, useRouterState } from \"@tanstack/react-router\"\nimport { UserMenu } from \"./UserMenu\"\nimport { PageHeader, ThemeToggle } from \"@cloudoperators/juno-ui-components/index\"\nimport { cn } from \"@/client/utils/cn\"\n\ninterface NavigationProps {\n items: NavigationItem[]\n handleThemeToggle?: (theme: string) => void\n}\n\nconst textColorClass = \"text-theme-pageheader-appname-default\"\nconst textHoverClass = \"hover:text-theme-pageheader-appname-hover\"\nconst textMutedClass = \"text-theme-pageheader-appname-default/40\"\n\nfunction getDomain(matches: MakeRouteMatchUnion[]) {\n const domainMatch = matches.filter((match) => isMatch(match, \"loaderData.crumbDomain\"))[0]\n if (!domainMatch) {\n return null\n }\n return {\n name: domainMatch?.loaderData?.crumbDomain?.name,\n path: domainMatch?.loaderData?.crumbDomain?.path,\n }\n}\n\nfunction getProject(matches: MakeRouteMatchUnion[]) {\n const projectMatch = matches.filter((match) => isMatch(match, \"loaderData.crumbProject\"))[0]\n if (!projectMatch) {\n return null\n }\n const domain = getDomain(matches)\n const projectId = projectMatch.loaderData?.crumbProject?.id\n return {\n name: projectMatch.loaderData?.crumbProject?.name || undefined,\n path: domain?.path && projectId ? `${domain.path}/${projectId}` : undefined,\n }\n}\n\nexport function MainNavigation({ items, handleThemeToggle }: NavigationProps) {\n const matches = useRouterState({ select: (s) => s.matches })\n const domain = getDomain(matches)\n const project = getProject(matches)\n\n return (\n <PageHeader\n logo={<Logo className={cn(\"h-6 w-6 shrink-0 fill-current\", textColorClass)} title=\"Aurora\" />}\n applicationName={\n <div className=\"flex flex-nowrap items-center space-x-2\">\n <Link to=\"/projects\" className={cn(\"shrink-0\", textColorClass, textHoverClass)}>\n Aurora\n </Link>\n {domain && (\n <>\n <span className={cn(\"shrink-0\", textMutedClass)}>|</span>\n <span data-testid=\"domain-name\" className={cn(\"shrink-0\", textColorClass)}>\n {domain.name}\n </span>\n </>\n )}\n {project && (\n <>\n <span className={cn(\"shrink-0\", textMutedClass)}>|</span>\n <Link\n to={project.path ?? \"/projects\"}\n data-testid=\"project-link\"\n className={cn(\"shrink-0\", textColorClass, textHoverClass)}\n >\n {project.name}\n </Link>\n </>\n )}\n </div>\n }\n >\n {items.map(({ route, label }, index) => (\n <Link className={cn(\"shrink-0\", textColorClass, textHoverClass)} key={index} to={route}>\n {label}\n </Link>\n ))}\n <ThemeToggle onToggleTheme={(newTheme: string) => handleThemeToggle?.(newTheme)} />\n <UserMenu />\n </PageHeader>\n )\n}\n","/* Do not remove these tailwind directives. Without them styles won't work as expected */\n@import \"tailwindcss\";\n@import \"@cloudoperators/juno-ui-components/theme.css\";\n@import \"./theme.css\";\n/* Tell Tailwind to scan this directory for class names. Needed because routes are code-split (lazy loaded) and won't be in Vite's module graph when CSS is first generated. */\n@source \".\";\nhtml,\nbody {\n height: 100%;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n}\n\n#app {\n flex-grow: 1;\n /* This pushes the footer down */\n}\n","import { Modal } from \"@cloudoperators/juno-ui-components\"\nimport { Trans, useLingui } from \"@lingui/react/macro\"\nimport { useAuth } from \"../../store/AuthProvider\"\n\nexport function InactivityModal() {\n const { t } = useLingui()\n const { showInactivityModal, closeInactivityModal, logoutReason } = useAuth()\n\n if (!showInactivityModal) return null\n\n const title = logoutReason === \"expired\" ? t`Session Expired` : t`Inactivity Timeout`\n const message =\n logoutReason === \"expired\" ? t`Your session has expired.` : t`You have been logged out due to inactivity.`\n\n return (\n <Modal\n open={showInactivityModal}\n title={title}\n onConfirm={closeInactivityModal}\n confirmButtonLabel={t`OK`}\n disableCancelButton\n size=\"small\"\n >\n <p>{message}</p>\n <p>\n <Trans>Please log in again to continue.</Trans>\n </p>\n </Modal>\n )\n}\n","import { createRootRouteWithContext, Outlet, useRouter, HeadContent } from \"@tanstack/react-router\"\nimport { AppShell, Spinner, Stack } from \"@cloudoperators/juno-ui-components\"\nimport { MainNavigation } from \"../components/navigation/MainNavigation\"\nimport { TrpcClient, TrpcReact } from \"../trpcClient\"\nimport { AuthContext } from \"../store/AuthProvider\"\nimport { NavigationItem } from \"../components/navigation/types\"\nimport type { Slots } from \"../AuroraApp\"\nimport styles from \"../index.css?inline\"\nimport { InactivityModal } from \"../components/Auth/InactivityModal\"\nimport { RouteError } from \"../components/Error/RouteError\"\nimport { useLingui } from \"@lingui/react/macro\"\nimport { StatusError } from \"../components/Error/StatusError\"\n\nexport interface RouterContext {\n trpcReact: TrpcReact\n trpcClient: TrpcClient\n auth: AuthContext\n navItems: NavigationItem[]\n handleThemeToggle?: (theme: string) => void\n slots?: Slots\n}\n\nexport const Route = createRootRouteWithContext<RouterContext>()({\n component: RootComponent,\n notFoundComponent: PageNotFound,\n errorComponent: RootErrorComponent,\n pendingComponent: PendingComponent,\n})\n\nfunction AuroraLayout({ children }: { children: React.ReactNode }) {\n const { navItems, handleThemeToggle } = Route.useRouteContext()\n\n return (\n <>\n <HeadContent />\n <style>{styles.toString()}</style>\n\n <AppShell pageHeader={<MainNavigation items={navItems} handleThemeToggle={handleThemeToggle} />} fullWidthContent>\n <InactivityModal />\n {children}\n </AppShell>\n </>\n )\n}\n\nfunction RootComponent() {\n return (\n <AuroraLayout>\n <Outlet />\n </AuroraLayout>\n )\n}\n\nfunction RootErrorComponent({ error }: { error: Error }) {\n return (\n <AuroraLayout>\n <RouteError error={error} />\n </AuroraLayout>\n )\n}\n\nfunction PageNotFound() {\n const { t } = useLingui()\n const navigateTo = Route.useNavigate()\n const router = useRouter()\n\n return (\n <StatusError\n message={t`The page you are looking for does not exist.`}\n title={t`Page Not Found`}\n onHomeClick={() => navigateTo({ to: \"/\" })}\n onBackClick={() => router.history.back()}\n statusCode={404}\n />\n )\n}\n\nfunction PendingComponent() {\n return (\n <AuroraLayout>\n <Stack className=\"fixed inset-0\" distribution=\"center\" alignment=\"center\">\n <div className=\"absolute inset-0 backdrop-blur-sm\" />\n <Spinner variant=\"primary\" size=\"large\" />\n </Stack>\n </AuroraLayout>\n )\n}\n","import { createFileRoute } from \"@tanstack/react-router\"\nimport { Trans } from \"@lingui/react/macro\"\nimport { Container, ContentHeading } from \"@cloudoperators/juno-ui-components/index\"\n\nexport const Route = createFileRoute(\"/about\")({\n component: About,\n})\n\nfunction About() {\n return (\n <Container className=\"flex flex-col items-center justify-center px-6 py-12 sm:px-12 md:px-20\">\n <div className=\"mx-auto w-full lg:w-2/3\">\n <ContentHeading className=\"mb-6 text-center\">\n <Trans>About Aurora Dashboard</Trans>\n </ContentHeading>\n <p className=\"mb-8 text-center\">\n <Trans>\n Welcome to <strong>Aurora Dashboard</strong>, your next-generation cloud management solution. We are\n dedicated to simplifying how you interact with and manage your cloud infrastructure. Designed with\n efficiency, scalability, and usability at its core, Aurora empowers you to streamline operations and unlock\n the full potential of your cloud resources.\n </Trans>\n </p>\n <ContentHeading className=\"mb-4 text-center\">\n <Trans>Our Mission</Trans>\n </ContentHeading>\n <p className=\"mb-8 text-center\">\n <Trans>\n At Aurora, our mission is to provide a centralized platform that unifies cloud management. We aim to\n simplify the complexities of provisioning, configuring, and scaling resources across diverse cloud\n environments while enabling seamless growth for your business.\n </Trans>\n </p>\n <ContentHeading className=\"mb-4 text-center\">\n <Trans>Key Features</Trans>\n </ContentHeading>\n <ul className=\"mb-8 list-disc space-y-4 pl-6\">\n <li>\n <p>\n <Trans>\n <strong>Unified Cloud Management:</strong> Consolidates all your cloud assets into one intuitive\n interface.\n </Trans>\n </p>\n </li>\n <li>\n <p>\n <Trans>\n <strong>Effortless Resource Provisioning:</strong> Quickly provision, configure, and deploy resources\n like servers, networks, and volumes with just a few clicks.\n </Trans>\n </p>\n </li>\n <li>\n <p>\n <Trans>\n <strong>Optimized Scalability:</strong> Built for businesses of all sizes, Aurora grows with you,\n supporting simple environments and intricate multi-cloud setups alike.\n </Trans>\n </p>\n </li>\n <li>\n <p>\n <Trans>\n <strong>Enhanced Productivity:</strong> By reducing operational complexity, Aurora helps your team focus\n on what truly matters—innovating and driving business success.\n </Trans>\n </p>\n </li>\n </ul>\n <ContentHeading className=\"mb-4 text-center\">\n <Trans>Why Choose Aurora?</Trans>\n </ContentHeading>\n <p className=\"mb-8 text-center\">\n <Trans>\n Aurora Dashboard is more than just a tool—it's your partner in navigating the cloud. Whether you're a small\n startup or a global enterprise, Aurora provides the flexibility, power, and simplicity you need to achieve\n your goals.\n </Trans>\n </p>\n <ul className=\"mb-8 list-disc space-y-4 pl-6\">\n <li>\n <p>\n <Trans>\n <strong>Secure & Reliable:</strong> Your data and operations are safeguarded with enterprise-grade\n security and robust reliability.\n </Trans>\n </p>\n </li>\n <li>\n <p>\n <Trans>\n <strong>Future-Ready:</strong> Aurora is designed to evolve with the latest trends in cloud technology,\n ensuring your solution is always cutting-edge.\n </Trans>\n </p>\n </li>\n </ul>\n <ContentHeading className=\"mb-4 text-center\">\n <Trans>Get Involved</Trans>\n </ContentHeading>\n <p className=\"mb-6 text-center\">\n <Trans>\n We are building Aurora Dashboard to serve you better. Your feedback is invaluable in shaping a tool that\n meets the unique needs of businesses like yours. Stay connected and join us as we redefine cloud management.\n </Trans>\n </p>\n <p className=\"text-center\">\n <Trans>Together, we can unlock the true potential of your cloud infrastructure.</Trans>\n </p>\n </div>\n </Container>\n )\n}\n","import { createFileRoute, Outlet, redirect } from \"@tanstack/react-router\"\nimport { useAuth } from \"../store/AuthProvider\"\n\nexport const Route = createFileRoute(\"/_auth\")({\n component: RouteComponent,\n beforeLoad: async ({ context, location }) => {\n if (!context.auth?.isAuthenticated) {\n const token = await context.trpcClient?.auth.getCurrentUserSession.query()\n if (!token) {\n const redirectPath = location.pathname ? location.pathname : \"\"\n\n throw redirect({\n to: \"/\",\n search: { redirect: redirectPath },\n })\n }\n context.auth?.login(token.user, token.expires_at)\n }\n },\n})\n\nfunction RouteComponent() {\n useAuth()\n\n return <Outlet />\n}\n","import { useState, useCallback, useEffect, useRef } from \"react\"\nimport { createFileRoute, redirect, useRouterState } from \"@tanstack/react-router\"\nimport { useAuth } from \"../store/AuthProvider\"\nimport { z } from \"zod\"\nimport { trpcClient } from \"../trpcClient\"\nimport { Trans, useLingui } from \"@lingui/react/macro\"\nimport { Button, ContentHeading, Message } from \"@cloudoperators/juno-ui-components\"\nimport { useErrorTranslation } from \"../utils/useErrorTranslation\"\n\nfunction isSafeRedirect(path: unknown): path is string {\n return typeof path === \"string\" && path.startsWith(\"/\") && !path.startsWith(\"//\")\n}\n\nexport const Route = createFileRoute(\"/\")({\n validateSearch: z.object({\n redirect: z.string().optional().catch(\"\"),\n }),\n beforeLoad: async ({ context, search }) => {\n let isAuthenticated = context.auth?.isAuthenticated\n\n if (!isAuthenticated && context.trpcClient) {\n try {\n const token = await context.trpcClient.auth.getCurrentUserSession.query()\n if (token) {\n context.auth?.login(token.user, token.expires_at)\n isAuthenticated = true\n }\n } catch {\n // Session probe failed — treat as unauthenticated so the login route can render\n }\n }\n\n if (isAuthenticated) {\n const savedRedirect = sessionStorage.getItem(\"redirect_after_login\")\n\n let redirectTo = `/projects`\n\n if (isSafeRedirect(savedRedirect)) {\n redirectTo = savedRedirect\n } else if (isSafeRedirect(search.redirect)) {\n redirectTo = search.redirect\n }\n\n sessionStorage.removeItem(\"redirect_after_login\")\n throw redirect({ to: redirectTo })\n }\n },\n component: AuthLoginPage,\n})\n\nconst textinputstyles = `\n jn-bg-theme-textinput\n jn-text-theme-textinput\n jn-text-base\n jn-leading-4\n jn-px-4\n jn-h-textinput\n jn-rounded-3px\n focus:jn-outline-none\n focus:jn-ring-2\n focus:jn-ring-theme-focus\n disabled:jn-opacity-50\n autofill:jn-bg-theme-textinput-autofill\n autofill:jn-text-theme-textinput-autofill\n peer\n`\n\nexport function AuthLoginPage() {\n const { isAuthenticated, login, logoutReason } = useAuth()\n const isLoading = useRouterState({ select: (s) => s.isLoading })\n const navigate = Route.useNavigate()\n const search = Route.useSearch()\n const { t } = useLingui()\n const { translateError } = useErrorTranslation()\n\n const [form, setForm] = useState({ domainName: \"\", user: \"\", password: \"\" })\n const [isSubmitting, setIsSubmitting] = useState(false)\n const [loginError, setLoginError] = useState<string | null>(null)\n const skipAutoRedirectRef = useRef(false)\n\n const signin = useCallback(async () => {\n setIsSubmitting(true)\n setLoginError(null)\n\n try {\n const token = await trpcClient.auth.createUserSession.mutate(form)\n\n await login(token.user, token.expires_at)\n\n const savedRedirect = sessionStorage.getItem(\"redirect_after_login\")\n const searchRedirect = search.redirect\n const defaultRedirect = `/projects`\n\n let redirectTo = defaultRedirect\n\n if (isSafeRedirect(savedRedirect)) {\n redirectTo = savedRedirect\n } else if (isSafeRedirect(searchRedirect)) {\n redirectTo = searchRedirect\n }\n\n sessionStorage.removeItem(\"redirect_after_login\")\n skipAutoRedirectRef.current = true\n\n await navigate({\n to: redirectTo,\n replace: true,\n })\n } catch (error) {\n await login(null)\n console.error(\"Error logging in: \", error)\n\n const errorMessage = (error as Error)?.message\n ? translateError((error as Error).message)\n : t`Login failed. Please check your credentials and try again.`\n\n setLoginError(errorMessage)\n } finally {\n setIsSubmitting(false)\n }\n }, [form, login, navigate, search.redirect, t, translateError])\n\n const dismissError = () => {\n setLoginError(null)\n }\n\n // Redirect effect: Handle race condition where isAuthenticated becomes true after component mounts\n // (e.g., during login flow). The beforeLoad guard handles direct navigation to / while\n // already authenticated, but this effect handles the case where authentication completes mid-render.\n useEffect(() => {\n if (!isAuthenticated || isLoading) return\n\n if (skipAutoRedirectRef.current) {\n skipAutoRedirectRef.current = false\n return\n }\n\n const savedRedirect = sessionStorage.getItem(\"redirect_after_login\")\n const searchRedirect = search.redirect\n\n let redirectTo = `/projects`\n\n if (isSafeRedirect(savedRedirect)) {\n redirectTo = savedRedirect\n } else if (isSafeRedirect(searchRedirect)) {\n redirectTo = searchRedirect\n }\n\n sessionStorage.removeItem(\"redirect_after_login\")\n\n navigate({\n to: redirectTo,\n replace: true,\n })\n }, [isAuthenticated, isLoading, search.redirect, navigate])\n\n const isLoggingIn = isLoading || isSubmitting\n\n const wasInactive = logoutReason === \"inactive\" || logoutReason === \"expired\"\n\n return (\n <div className=\"mt-8 flex justify-center\">\n <div className=\"border-theme-light relative w-full max-w-md rounded-lg border p-6 shadow-lg\">\n {loginError && (\n <Message\n onDismiss={dismissError}\n text={loginError}\n variant=\"error\"\n className=\"absolute -top-14 right-0 left-0 z-50\"\n />\n )}\n <ContentHeading className=\"text-center\">\n <Trans>Login to Your Account</Trans>\n </ContentHeading>\n <p className=\"mb-6 text-center\">\n <Trans>Enter your credentials to access your account</Trans>\n </p>\n {(search.redirect || wasInactive) && (\n <p className=\"mb-4 text-center text-sm text-red-500\">\n {wasInactive ? (\n <Trans>Your session expired. Please login again.</Trans>\n ) : (\n <Trans>You need to login to access this page.</Trans>\n )}\n </p>\n )}\n <form\n className=\"space-y-4\"\n onSubmit={(e) => {\n e.preventDefault()\n signin()\n }}\n >\n <div className=\"flex flex-col\">\n <label htmlFor=\"domain\" className=\"font-medium text-gray-300\">\n <Trans>Domain</Trans>\n </label>\n <input\n id=\"domain\"\n type=\"text\"\n placeholder={t`Enter your domain`}\n className={textinputstyles}\n onChange={(e) => {\n setForm({ ...form, domainName: e.target.value })\n if (loginError) setLoginError(null)\n }}\n required\n />\n </div>\n\n <div className=\"flex flex-col\">\n <label htmlFor=\"user\" className=\"font-medium text-gray-300\">\n <Trans>User C/D/I</Trans>\n </label>\n <input\n id=\"user\"\n type=\"text\"\n placeholder={t`Enter your username`}\n className={textinputstyles}\n onChange={(e) => {\n setForm({ ...form, user: e.target.value })\n if (loginError) setLoginError(null)\n }}\n required\n />\n </div>\n\n <div className=\"flex flex-col\">\n <label htmlFor=\"password\" className=\"font-medium text-gray-300\">\n <Trans>Password</Trans>\n </label>\n <input\n id=\"password\"\n type=\"password\"\n required\n className={textinputstyles}\n onChange={(e) => {\n setForm({ ...form, password: e.target.value })\n if (loginError) setLoginError(null)\n }}\n />\n </div>\n\n <Button type=\"submit\" className=\"w-full\" disabled={isLoggingIn}>\n {isLoggingIn ? <Trans>Loading...</Trans> : <Trans>Sign In</Trans>}\n </Button>\n </form>\n </div>\n </div>\n )\n}\n","import { createFileRoute } from \"@tanstack/react-router\"\n\nimport { useAuth } from \"../../store/AuthProvider\"\nimport { Trans } from \"@lingui/react/macro\"\n\nexport const Route = createFileRoute(\"/_auth/aurora\")({\n component: DashboardPage,\n})\n\nfunction DashboardPage() {\n const { user } = useAuth()\n\n return (\n <div className=\"grid gap-2 p-2\">\n <p>\n <Trans>Hi</Trans> {user?.name}\n </p>\n <p>\n <Trans>You are currently on the dashboard route.</Trans>\n </p>\n </div>\n )\n}\n","import { createFileRoute, redirect } from \"@tanstack/react-router\"\n\nexport const Route = createFileRoute(\"/_auth/accounts/\")({\n beforeLoad: ({ context }) => {\n if (context.auth?.isAuthenticated && context.auth.user?.domain?.id) {\n throw redirect({\n to: `/projects`,\n })\n } else {\n throw redirect({ to: \"/\" })\n }\n },\n})\n","import { createFileRoute, Link, useLoaderData } from \"@tanstack/react-router\"\nimport { Box, Stack } from \"@cloudoperators/juno-ui-components\"\nimport { getServiceIndex } from \"@/server/Authentication/helpers\"\nimport { Trans } from \"@lingui/react/macro\"\nimport { useLingui } from \"@lingui/react/macro\"\nimport { ContentHeader } from \"@/client/components/ContentHeader/ContentHeader\"\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/\")({\n component: RouteComponent,\n})\n\ninterface ServiceCardProps {\n title: string\n links: { label: string; to: string }[]\n}\n\nfunction ServiceCard({ title, links }: ServiceCardProps) {\n return (\n <Box className=\"p-5\">\n <h3 className=\"text-theme-high mb-3 text-base font-semibold\">{title}</h3>\n <ul className=\"space-y-1.5\">\n {links.map(({ label, to }) => (\n <li key={label}>\n <Link to={to} className=\"text-theme-accent hover:text-theme-accent/80 text-sm\">\n {label}\n </Link>\n </li>\n ))}\n </ul>\n </Box>\n )\n}\n\nfunction RouteComponent() {\n const { crumbProject, availableServices, projectId } = useLoaderData({\n from: \"/_auth/projects/$projectId\",\n })\n const { t } = useLingui()\n\n const serviceIndex = getServiceIndex(availableServices ?? [])\n const base = `/projects/${projectId}`\n\n const cards: ServiceCardProps[] = []\n\n if (serviceIndex[\"image\"]?.[\"glance\"] || serviceIndex[\"compute\"]?.[\"nova\"]) {\n const links: { label: string; to: string }[] = []\n if (serviceIndex[\"image\"]?.[\"glance\"]) links.push({ label: \"Images\", to: `${base}/compute/images` })\n if (serviceIndex[\"compute\"]?.[\"nova\"]) links.push({ label: \"Flavors\", to: `${base}/compute/flavors` })\n cards.push({ title: \"Compute\", links })\n }\n\n if (serviceIndex[\"network\"]) {\n cards.push({\n title: \"Network\",\n links: [\n { label: \"Security Groups\", to: `${base}/network/securitygroups` },\n { label: \"Floating IPs\", to: `${base}/network/floatingips` },\n ],\n })\n }\n\n // Storage section - always show Ceph, optionally add Swift\n const storageLinks: { label: string; to: string }[] = []\n if (serviceIndex[\"object-store\"]?.[\"swift\"]) {\n storageLinks.push({ label: \"Swift\", to: `${base}/storage/swift/containers` })\n }\n storageLinks.push({ label: \"Ceph\", to: `${base}/storage/ceph/containers` })\n cards.push({ title: \"Storage\", links: storageLinks })\n\n // temporary as clavis is not fully GA, after GA replace with [\"pca\"]?.[\"clavis\"]\n if (serviceIndex[\"pca\"]?.[\"clavis-dev\"] || serviceIndex[\"pca\"]?.[\"clavis-beta\"]) {\n cards.push({\n title: \"Services\",\n links: [{ label: \"PCA (Clavis)\", to: `${base}/services/pca` }],\n })\n }\n\n return (\n <Stack direction=\"vertical\" gap=\"6\" className=\"pb-4\">\n <ContentHeader title={crumbProject?.name ?? t`Project`} projectId={projectId} />\n {cards.length > 0 ? (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {cards.map((card) => (\n <ServiceCard key={card.title} {...card} />\n ))}\n </div>\n ) : (\n <p className=\"text-theme-light text-sm\">\n <Trans>No services available for this project.</Trans>\n </p>\n )}\n </Stack>\n )\n}\n","import { createFileRoute, Outlet, redirect } from \"@tanstack/react-router\"\nimport { getServiceIndex } from \"@/server/Authentication/helpers\"\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/network\")({\n loader: async ({ context }) => {\n const { trpcClient } = context\n const availableServices = await trpcClient?.auth.getAvailableServices.query()\n return { availableServices }\n },\n beforeLoad: async ({ context, params }) => {\n const { trpcClient } = context\n const { projectId } = params\n const availableServices = await trpcClient?.auth.getAvailableServices.query()\n const serviceIndex = getServiceIndex(availableServices!)\n\n if (!serviceIndex[\"network\"]) {\n throw redirect({\n to: \"/projects/$projectId\",\n params: { projectId },\n })\n }\n },\n component: () => <Outlet />,\n})\n","import { createFileRoute, redirect } from \"@tanstack/react-router\"\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/services/\")({\n beforeLoad: ({ params }) => {\n throw redirect({\n to: \"/projects/$projectId/services/overview\",\n params,\n })\n },\n})\n","import { createFileRoute, redirect } from \"@tanstack/react-router\"\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/network/\")({\n beforeLoad: ({ params }) => {\n throw redirect({\n to: \"/projects/$projectId/network/overview\",\n params,\n })\n },\n})\n","import { createFileRoute } from \"@tanstack/react-router\"\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/compute/\")({})\n","import { createFileRoute } from \"@tanstack/react-router\"\nimport { t } from \"@lingui/core/macro\"\nimport { useLingui, Trans } from \"@lingui/react/macro\"\nimport { ContentHeading } from \"@cloudoperators/juno-ui-components\"\nimport { RouteInfo } from \"@/client/routes/routeInfo\"\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/services/overview\")({\n staticData: { section: \"services\", service: \"overview\", crumb: { labelKey: \"Services\" } } satisfies RouteInfo,\n head: () => ({ meta: [{ title: t`Services Overview` }] }),\n component: RouteComponent,\n})\n\nfunction RouteComponent() {\n const { t } = useLingui()\n return (\n <>\n <ContentHeading>{t`Services Overview`}</ContentHeading>\n <div className=\"p-4 text-center\">\n <Trans>Services Overview</Trans>\n </div>\n </>\n )\n}\n","import { createFileRoute } from \"@tanstack/react-router\"\nimport { t } from \"@lingui/core/macro\"\nimport { useLingui, Trans } from \"@lingui/react/macro\"\nimport type { RouteInfo } from \"@/client/routes/routeInfo\"\nimport { ContentHeading } from \"@cloudoperators/juno-ui-components\"\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/network/overview\")({\n staticData: { section: \"network\", service: \"overview\", crumb: { labelKey: \"Network\" } } satisfies RouteInfo,\n head: () => ({ meta: [{ title: t`Network Overview` }] }),\n component: RouteComponent,\n})\n\nfunction RouteComponent() {\n const { t } = useLingui()\n return (\n <>\n <ContentHeading>{t`Network Overview`}</ContentHeading>\n <div className=\"p-4 text-center\">\n <Trans>Network Overview</Trans>\n </div>\n </>\n )\n}\n","import { createFileRoute, Outlet, redirect } from \"@tanstack/react-router\"\nimport { getServiceIndex } from \"@/server/Authentication/helpers\"\nimport { z } from \"zod\"\nimport type { RouteInfo } from \"@/client/routes/routeInfo\"\nimport { RouteError } from \"@/client/components/Error/RouteError\"\n\nconst multiValueEnum = (allowedValues: string[]) => {\n return z.string().refine((val) => {\n const values = val.startsWith(\"in:\") ? val.replace(\"in:\", \"\").split(\",\") : [val]\n return values.every((v) => allowedValues.includes(v))\n })\n}\n\nconst imagesSearchFields = {\n status: multiValueEnum([\n \"queued\",\n \"saving\",\n \"active\",\n \"deactivated\",\n \"killed\",\n \"deleted\",\n \"pending_delete\",\n ]).optional(),\n visibility: z.enum([\"public\", \"private\", \"shared\", \"community\", \"all\"]).optional(),\n disk_format: multiValueEnum([\n \"ami\",\n \"ari\",\n \"aki\",\n \"vhd\",\n \"vhdx\",\n \"vmdk\",\n \"raw\",\n \"qcow2\",\n \"vdi\",\n \"iso\",\n \"ploop\",\n ]).optional(),\n container_format: multiValueEnum([\"ami\", \"ari\", \"aki\", \"bare\", \"ovf\", \"ova\", \"docker\"]).optional(),\n protected: z.enum([\"true\", \"false\"]).optional(),\n search: z.string().optional(),\n sortBy: z.enum([\"created_at\", \"updated_at\", \"name\", \"size\", \"status\"]).optional(),\n sortDirection: z.enum([\"asc\", \"desc\"]).optional(),\n memberStatus: z.enum([\"all\", \"accepted\", \"pending\"]).optional(),\n page: z.number().int().positive().optional(),\n}\n\nconst imagesSearchSchema = z.object(imagesSearchFields).passthrough()\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/compute/images\")({\n staticData: {\n section: \"compute\",\n service: \"images\",\n sectionCrumb: { labelKey: \"Compute\" },\n crumb: { labelKey: \"Images\" },\n } satisfies RouteInfo,\n errorComponent: ({ error }) => <RouteError error={error} />,\n validateSearch: (search) => {\n const result = imagesSearchSchema.safeParse(search)\n if (result.success) return result.data\n return {\n ...search,\n status: imagesSearchFields.status.safeParse(search.status).success ? search.status : undefined,\n visibility: imagesSearchFields.visibility.safeParse(search.visibility).success ? search.visibility : undefined,\n disk_format: imagesSearchFields.disk_format.safeParse(search.disk_format).success\n ? search.disk_format\n : undefined,\n container_format: imagesSearchFields.container_format.safeParse(search.container_format).success\n ? search.container_format\n : undefined,\n protected: imagesSearchFields.protected.safeParse(search.protected).success ? search.protected : undefined,\n search: imagesSearchFields.search.safeParse(search.search).success ? search.search : undefined,\n sortBy: imagesSearchFields.sortBy.safeParse(search.sortBy).success ? search.sortBy : undefined,\n sortDirection: imagesSearchFields.sortDirection.safeParse(search.sortDirection).success\n ? search.sortDirection\n : undefined,\n memberStatus: imagesSearchFields.memberStatus.safeParse(search.memberStatus).success\n ? search.memberStatus\n : undefined,\n page: imagesSearchFields.page.safeParse(search.page).success ? (search.page as number) : undefined,\n }\n },\n beforeLoad: async ({ context, params }) => {\n const { trpcClient } = context\n const { projectId } = params\n\n if (!trpcClient) {\n throw new Error(\"trpcClient is not available in route context\")\n }\n\n const availableServices = await trpcClient.auth.getAvailableServices.query()\n const serviceIndex = getServiceIndex(availableServices)\n\n if (!serviceIndex[\"image\"]?.[\"glance\"]) {\n throw redirect({\n to: \"/projects/$projectId\",\n params: { projectId },\n })\n }\n },\n component: () => <Outlet />,\n})\n","import { createFileRoute, Outlet, redirect } from \"@tanstack/react-router\"\nimport { getServiceIndex } from \"@/server/Authentication/helpers\"\nimport { z } from \"zod\"\nimport type { RouteInfo } from \"@/client/routes/routeInfo\"\n\nconst flavorsSearchFields = {\n search: z.string().optional(),\n sortBy: z.enum([\"name\", \"vcpus\", \"ram\", \"disk\", \"swap\"]).optional(),\n sortDirection: z.enum([\"asc\", \"desc\"]).optional(),\n page: z.number().int().positive().optional(),\n}\n\nconst flavorsSearchSchema = z.object(flavorsSearchFields).passthrough()\n\nexport type FlavorsSearchParams = z.infer<typeof flavorsSearchSchema>\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/compute/flavors\")({\n staticData: {\n section: \"compute\",\n service: \"flavors\",\n sectionCrumb: { labelKey: \"Compute\" },\n crumb: { labelKey: \"Flavors\" },\n } satisfies RouteInfo,\n validateSearch: (search) => {\n const result = flavorsSearchSchema.safeParse(search)\n if (result.success) return result.data\n return {\n ...search,\n search: flavorsSearchFields.search.safeParse(search.search).success ? search.search : undefined,\n sortBy: flavorsSearchFields.sortBy.safeParse(search.sortBy).success ? search.sortBy : undefined,\n sortDirection: flavorsSearchFields.sortDirection.safeParse(search.sortDirection).success\n ? search.sortDirection\n : undefined,\n page: flavorsSearchFields.page.safeParse(search.page).success ? (search.page as number) : undefined,\n }\n },\n beforeLoad: async ({ context, params }) => {\n const { trpcClient } = context\n const { projectId } = params\n const availableServices = await trpcClient?.auth.getAvailableServices.query()\n const serviceIndex = getServiceIndex(availableServices!)\n\n if (!serviceIndex[\"compute\"]?.[\"nova\"]) {\n throw redirect({\n to: \"/projects/$projectId\",\n params: { projectId },\n })\n }\n },\n component: () => <Outlet />,\n})\n","import { createFileRoute } from \"@tanstack/react-router\"\nimport { t } from \"@lingui/core/macro\"\nimport { useLingui } from \"@lingui/react/macro\"\nimport { SecurityGroups } from \"./-components/SecurityGroupsList\"\nimport type { RouteInfo } from \"@/client/routes/routeInfo\"\nimport { ContentHeading } from \"@cloudoperators/juno-ui-components\"\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/network/securitygroups/\")({\n staticData: {\n section: \"network\",\n service: \"securitygroups\",\n sectionCrumb: { labelKey: \"Network\" },\n crumb: { labelKey: \"Security Groups\" },\n } satisfies RouteInfo,\n head: () => ({ meta: [{ title: t`Security Groups` }] }),\n component: RouteComponent,\n})\n\nfunction RouteComponent() {\n const { t } = useLingui()\n return (\n <>\n <ContentHeading>{t`Security Groups`}</ContentHeading>\n <SecurityGroups />\n </>\n )\n}\n","import { createFileRoute } from \"@tanstack/react-router\"\nimport { t } from \"@lingui/core/macro\"\nimport { useLingui } from \"@lingui/react/macro\"\nimport { FloatingIpsList } from \"./-components/FloatingIpsList\"\nimport type { RouteInfo } from \"@/client/routes/routeInfo\"\nimport { ContentHeading } from \"@cloudoperators/juno-ui-components\"\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/network/floatingips/\")({\n staticData: {\n section: \"network\",\n service: \"floatingips\",\n sectionCrumb: { labelKey: \"Network\" },\n crumb: { labelKey: \"Floating IPs\" },\n } satisfies RouteInfo,\n head: () => ({ meta: [{ title: t`Floating IPs` }] }),\n component: RouteComponent,\n})\n\nfunction RouteComponent() {\n const { t } = useLingui()\n return (\n <>\n <ContentHeading>{t`Floating IPs`}</ContentHeading>\n <FloatingIpsList />\n </>\n )\n}\n","import {\n Button,\n ButtonRow,\n Stack,\n Spinner,\n PopupMenu,\n PopupMenuToggle,\n PopupMenuOptions,\n PopupMenuItem,\n Toast,\n ToastProps,\n} from \"@cloudoperators/juno-ui-components/index\"\nimport { createFileRoute, redirect, useNavigate, useParams, useSearch } from \"@tanstack/react-router\"\nimport { z } from \"zod\"\nimport type { RouteInfo } from \"@/client/routes/routeInfo\"\nimport { Trans, useLingui } from \"@lingui/react/macro\"\nimport { getServiceIndex } from \"@/server/Authentication/helpers\"\nimport { trpcReact } from \"@/client/trpcClient\"\nimport { ImageDetailsView } from \"../-components/Images/-components/ImageDetailsView\"\nimport { EditImageDetailsModal } from \"../-components/Images/-components/EditImageDetailsModal\"\nimport { EditImageMetadataModal } from \"../-components/Images/-components/EditImageMetadataModal\"\nimport { DeleteImageModal } from \"../-components/Images/-components/DeleteImageModal\"\nimport { ActivateImageModal } from \"../-components/Images/-components/ActivateImageModal\"\nimport { DeactivateImageModal } from \"../-components/Images/-components/DeactivateImageModal\"\nimport { IMAGE_STATUSES, IMAGE_VISIBILITY } from \"../-constants/filters\"\nimport { GlanceImage, MemberStatus } from \"@/server/Compute/types/image\"\nimport { TRPCClientError } from \"@trpc/client\"\nimport { InferrableClientTypes } from \"@trpc/server/unstable-core-do-not-import\"\nimport {\n getImageAccessStatusUpdatedToast,\n getImageAccessStatusErrorToast,\n} from \"../-components/Images/-components/ImageToastNotifications\"\nimport { useState } from \"react\"\nimport { ContentHeader } from \"@/client/components/ContentHeader/ContentHeader\"\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/compute/images/$imageId\")({\n staticData: {\n section: \"compute\",\n service: \"images\",\n isDetail: true,\n sectionCrumb: { labelKey: \"Compute\" },\n crumb: { labelKey: \"Images\", to: \"/projects/$projectId/compute/images\" },\n } satisfies RouteInfo,\n validateSearch: z.object({\n tab: z.enum([\"details\", \"sharing\"]).optional(),\n }),\n loader: async ({ context, params }) => {\n try {\n const image = await context.trpcClient?.compute.getImageById.query({\n project_id: params.projectId,\n imageId: params.imageId,\n })\n return { imageTitle: (image?.name as string | undefined) ?? image?.id ?? null }\n } catch {\n return { imageTitle: null }\n }\n },\n head: ({ loaderData }) => ({\n meta: [{ title: loaderData?.imageTitle ?? \"Image Details\" }],\n }),\n component: RouteComponent,\n beforeLoad: async ({ context, params }) => {\n const { trpcClient } = context\n const { projectId } = params\n\n const availableServices = (await trpcClient?.auth.getAvailableServices.query()) || []\n\n const serviceIndex = getServiceIndex(availableServices)\n\n // Redirect to the \"Projects Overview\" page if none of compute services available\n if (!serviceIndex[\"image\"] && !serviceIndex[\"compute\"]) {\n throw redirect({\n to: \"/projects/$projectId\",\n params: { projectId },\n })\n }\n\n if (!serviceIndex[\"image\"][\"glance\"]) {\n // Redirect to the \"Compute Services Overview\" page if the \"Glance\" service is not available\n throw redirect({\n to: \"/projects/$projectId\",\n params: { projectId: params.projectId },\n })\n }\n },\n})\n\nfunction RouteComponent() {\n const { projectId, imageId } = useParams({\n from: \"/_auth/projects/$projectId/compute/images/$imageId\",\n })\n const { tab } = useSearch({\n from: \"/_auth/projects/$projectId/compute/images/$imageId\",\n })\n\n const navigate = useNavigate()\n const { t } = useLingui()\n\n const {\n data: image,\n status,\n error,\n } = trpcReact.compute.getImageById.useQuery({ project_id: projectId, imageId: imageId })\n\n const { data: permissionsData } = trpcReact.compute.canUser.useQuery({\n project_id: projectId,\n permission: [\n \"images:delete\",\n \"images:update\",\n \"images:create_member\",\n \"images:delete_member\",\n \"images:update_member\",\n ],\n })\n\n const permissions = {\n canDelete: permissionsData?.[0] ?? false,\n canUpdate: permissionsData?.[1] ?? false,\n canCreateMember: permissionsData?.[2] ?? false,\n canDeleteMember: permissionsData?.[3] ?? false,\n canUpdateMember: permissionsData?.[4] ?? false,\n }\n\n const utils = trpcReact.useUtils()\n\n const [editDetailsModalOpen, setEditDetailsModalOpen] = useState(false)\n const [editMetadataModalOpen, setEditMetadataModalOpen] = useState(false)\n const [deleteModalOpen, setDeleteModalOpen] = useState(false)\n const [activateModalOpen, setActivateModalOpen] = useState(false)\n const [deactivateModalOpen, setDeactivateModalOpen] = useState(false)\n const [toastData, setToastData] = useState<ToastProps | null>(null)\n\n const updateImageMutation = trpcReact.compute.updateImage.useMutation({\n onSuccess: (updatedImage) => {\n utils.compute.getImageById.setData({ project_id: projectId, imageId }, updatedImage)\n utils.compute.listImagesWithPagination.invalidate()\n },\n })\n\n const deleteImageMutation = trpcReact.compute.deleteImage.useMutation({\n onSuccess: () => {\n utils.compute.listImagesWithPagination.invalidate()\n },\n })\n\n const deactivateImageMutation = trpcReact.compute.deactivateImage.useMutation({\n onSuccess: () => {\n utils.compute.getImageById.invalidate({ project_id: projectId, imageId })\n },\n })\n\n const reactivateImageMutation = trpcReact.compute.reactivateImage.useMutation({\n onSuccess: () => {\n utils.compute.getImageById.invalidate({ project_id: projectId, imageId })\n },\n })\n\n const updateImageVisibilityMutation = trpcReact.compute.updateImageVisibility.useMutation({\n onSuccess: (updatedImage) => {\n utils.compute.getImageById.setData({ project_id: projectId, imageId }, updatedImage)\n },\n })\n\n const isSharedWithMe =\n image?.visibility === IMAGE_VISIBILITY.SHARED && image?.owner !== undefined && image?.owner !== projectId\n\n const { data: myMemberData } = trpcReact.compute.getImageMember.useQuery(\n { project_id: projectId, imageId: imageId, memberId: projectId },\n { enabled: isSharedWithMe && !!imageId && !!projectId }\n )\n\n const updateMemberMutation = trpcReact.compute.updateImageMember.useMutation({\n onSuccess: () => {\n utils.compute.getImageMember.invalidate({ project_id: projectId, imageId: imageId, memberId: projectId })\n utils.compute.listImageMembers.invalidate({ project_id: projectId, imageId: imageId })\n utils.compute.listImagesWithPagination.invalidate()\n utils.compute.listSharedImagesByMemberStatus.invalidate()\n },\n })\n\n const handleMemberStatusChange = async (newStatus: MemberStatus) => {\n try {\n await updateMemberMutation.mutateAsync({ project_id: projectId, imageId, memberId: projectId, status: newStatus })\n setToastData(getImageAccessStatusUpdatedToast(newStatus, { onDismiss: () => setToastData(null) }))\n } catch (error) {\n const errorMessage = (error as TRPCClientError<InferrableClientTypes>)?.message\n setToastData(getImageAccessStatusErrorToast(errorMessage, { onDismiss: () => setToastData(null) }))\n }\n }\n\n const handleBack = () => {\n navigate({\n to: \"/projects/$projectId/compute/images\",\n params: { projectId },\n })\n }\n\n const isLoading =\n updateImageMutation.isPending ||\n deleteImageMutation.isPending ||\n deactivateImageMutation.isPending ||\n reactivateImageMutation.isPending ||\n updateImageVisibilityMutation.isPending\n\n const convertToJsonPatchOperations = (\n updatedProperties: Partial<GlanceImage>,\n originalImage: GlanceImage\n ): Array<{ op: \"add\" | \"replace\" | \"remove\"; path: string; value?: unknown }> => {\n const operations: Array<{ op: \"add\" | \"replace\" | \"remove\"; path: string; value?: unknown }> = []\n Object.entries(updatedProperties).forEach(([key, value]) => {\n const path = `/${key}`\n if (value === null || value === undefined) {\n if (key in originalImage) operations.push({ op: \"remove\", path })\n } else {\n const propertyExists = key in originalImage\n operations.push({ op: propertyExists ? \"replace\" : \"add\", path, value })\n }\n })\n return operations\n }\n\n const handleSaveEdit = async (updatedProperties: Partial<GlanceImage>): Promise<boolean> => {\n if (!image) return false\n const operations = convertToJsonPatchOperations(updatedProperties, image)\n try {\n await updateImageMutation.mutateAsync({ project_id: projectId, imageId, operations })\n setEditDetailsModalOpen(false)\n return true\n } catch {\n return false\n }\n }\n\n const handleDelete = async (deletedImage: GlanceImage) => {\n try {\n await deleteImageMutation.mutateAsync({ project_id: projectId, imageId: deletedImage.id })\n setDeleteModalOpen(false)\n handleBack()\n } catch {\n setDeleteModalOpen(false)\n }\n }\n\n const handleActivate = async (img: GlanceImage) => {\n try {\n await reactivateImageMutation.mutateAsync({ project_id: projectId, imageId: img.id })\n setActivateModalOpen(false)\n } catch {\n setActivateModalOpen(false)\n }\n }\n\n const handleDeactivate = async (img: GlanceImage) => {\n try {\n await deactivateImageMutation.mutateAsync({ project_id: projectId, imageId: img.id })\n setDeactivateModalOpen(false)\n } catch {\n setDeactivateModalOpen(false)\n }\n }\n\n const handleUpdateVisibility = async (newVisibility: \"public\" | \"private\" | \"shared\" | \"community\") => {\n if (!image) return\n try {\n await updateImageVisibilityMutation.mutateAsync({\n project_id: projectId,\n imageId: image.id,\n visibility: newVisibility,\n })\n } catch {\n // error handled by mutation state\n }\n }\n\n // Handle loading state\n if (status === \"pending\") {\n return (\n <Stack className=\"fixed inset-0\" distribution=\"center\" alignment=\"center\" direction=\"vertical\">\n <Spinner variant=\"primary\" size=\"large\" className=\"mb-2\" />\n <Trans>Loading Image Details...</Trans>\n </Stack>\n )\n }\n\n // Handle error state\n if (status === \"error\") {\n const errorMessage = error?.message || \"Unknown error\"\n\n return (\n <Stack className=\"fixed inset-0\" distribution=\"center\" alignment=\"center\" direction=\"vertical\" gap=\"5\">\n <p className=\"text-theme-error font-semibold\">\n <Trans>Error loading image</Trans>\n </p>\n <p className=\"text-theme-highest\">{errorMessage}</p>\n <Button onClick={handleBack} variant=\"primary\">\n <Trans>Back to Images</Trans>\n </Button>\n </Stack>\n )\n }\n\n // Handle no data state\n if (!image) {\n return (\n <Stack className=\"fixed inset-0\" distribution=\"center\" alignment=\"center\" direction=\"vertical\" gap=\"5\">\n <p className=\"text-theme-highest\">\n <Trans>Image not found</Trans>\n </p>\n <Button onClick={handleBack} variant=\"primary\">\n <Trans>Back to Images</Trans>\n </Button>\n </Stack>\n )\n }\n\n const isDeactivated = image.status === IMAGE_STATUSES.DEACTIVATED\n const isPrivate = image.visibility === IMAGE_VISIBILITY.PRIVATE\n const hasMoreActions = !isSharedWithMe && (permissions.canUpdate || (permissions.canDelete && !image.protected))\n\n const headerActions =\n !isSharedWithMe && (hasMoreActions || permissions.canUpdate) ? (\n <ButtonRow>\n {hasMoreActions && (\n <PopupMenu>\n <PopupMenuToggle as=\"div\">\n <Button icon=\"moreVert\" disabled={isLoading}>\n <Trans>More Actions</Trans>\n </Button>\n </PopupMenuToggle>\n <PopupMenuOptions>\n {permissions.canUpdate && (\n <PopupMenuItem\n label={isDeactivated ? t`Activate` : t`Deactivate`}\n onClick={() => (isDeactivated ? setActivateModalOpen(true) : setDeactivateModalOpen(true))}\n />\n )}\n {permissions.canUpdate && isPrivate && (\n <PopupMenuItem label={t`Set to \"Shared\"`} onClick={() => handleUpdateVisibility(\"shared\")} />\n )}\n {permissions.canDelete && !image.protected && (\n <PopupMenuItem label={t`Delete`} onClick={() => setDeleteModalOpen(true)} />\n )}\n </PopupMenuOptions>\n </PopupMenu>\n )}\n {permissions.canUpdate && (\n <Button onClick={() => setEditMetadataModalOpen(true)} disabled={isLoading}>\n <Trans>Edit Metadata</Trans>\n </Button>\n )}\n {permissions.canUpdate && (\n <Button onClick={() => setEditDetailsModalOpen(true)} variant=\"primary\" disabled={isLoading}>\n <Trans>Edit Details</Trans>\n </Button>\n )}\n </ButtonRow>\n ) : undefined\n\n // Render success state\n return (\n <>\n <ContentHeader title={String(image.name ?? image.id)} projectId={projectId} actions={headerActions} />\n <ImageDetailsView\n key={image.id}\n image={image}\n currentProjectId={projectId}\n activeTab={tab ?? \"details\"}\n onTabChange={(newTab) =>\n navigate({\n search: { tab: newTab === \"details\" ? undefined : newTab } as unknown as true,\n })\n }\n permissions={{\n canCreateMember: permissions.canCreateMember,\n canDeleteMember: permissions.canDeleteMember,\n canUpdateMember: permissions.canUpdateMember,\n }}\n myMemberData={myMemberData}\n onMemberStatusChange={handleMemberStatusChange}\n isMemberStatusChanging={updateMemberMutation.isPending}\n />\n\n {toastData && <Toast {...toastData} />}\n\n {editDetailsModalOpen && (\n <EditImageDetailsModal\n image={image}\n isOpen={editDetailsModalOpen}\n isLoading={updateImageMutation.isPending}\n onClose={() => setEditDetailsModalOpen(false)}\n onSave={handleSaveEdit}\n />\n )}\n\n {editMetadataModalOpen && (\n <EditImageMetadataModal\n image={image}\n isOpen={editMetadataModalOpen}\n isLoading={updateImageMutation.isPending}\n onClose={() => setEditMetadataModalOpen(false)}\n onSave={handleSaveEdit}\n />\n )}\n\n {deleteModalOpen && (\n <DeleteImageModal\n image={image}\n isOpen={deleteModalOpen}\n isLoading={deleteImageMutation.isPending}\n isDisabled={!!image.protected}\n onClose={() => setDeleteModalOpen(false)}\n onDelete={handleDelete}\n />\n )}\n\n {activateModalOpen && (\n <ActivateImageModal\n image={image}\n isOpen={activateModalOpen}\n isLoading={reactivateImageMutation.isPending}\n onClose={() => setActivateModalOpen(false)}\n onActivate={handleActivate}\n />\n )}\n\n {deactivateModalOpen && (\n <DeactivateImageModal\n image={image}\n isOpen={deactivateModalOpen}\n isLoading={deactivateImageMutation.isPending}\n onClose={() => setDeactivateModalOpen(false)}\n onDeactivate={handleDeactivate}\n />\n )}\n </>\n )\n}\n","import { createFileRoute, useNavigate } from \"@tanstack/react-router\"\nimport type { RouteInfo } from \"@/client/routes/routeInfo\"\nimport { trpcReact } from \"@/client/trpcClient\"\nimport {\n Button,\n DescriptionDefinition,\n DescriptionList,\n DescriptionTerm,\n Divider,\n Spinner,\n Stack,\n} from \"@cloudoperators/juno-ui-components/index\"\nimport { Trans, useLingui } from \"@lingui/react/macro\"\nimport { MdContentCopy, MdDownload } from \"react-icons/md\"\nimport { Fragment } from \"react/jsx-runtime\"\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/services/pca/$pcaId/$certificateId\")({\n staticData: {\n section: \"services\",\n service: \"pca\",\n isDetail: true,\n sectionCrumb: { labelKey: \"Services\" },\n crumb: { labelKey: \"PCA (Clavis)\", to: \"/projects/$projectId/services/pca\" },\n } satisfies RouteInfo,\n loader: async ({ context, params }) => {\n const cert = await context.trpcClient?.services.pca.getByIdCertificate.query({\n project_id: params.projectId,\n certificate_authority_id: params.pcaId,\n certificate_id: params.certificateId,\n })\n return { certTitle: cert ? `Certificate ${cert.id}` : null }\n },\n head: ({ loaderData }) => ({\n meta: [{ title: loaderData?.certTitle ?? \"Certificate\" }],\n }),\n component: RouteComponent,\n})\n\nexport function RouteComponent() {\n const { t } = useLingui()\n const navigate = useNavigate()\n const { projectId, pcaId, certificateId } = Route.useParams()\n\n const {\n isLoading,\n isError,\n error,\n data: certificate,\n } = trpcReact.services.pca.getByIdCertificate.useQuery({\n project_id: projectId,\n certificate_authority_id: pcaId,\n certificate_id: certificateId,\n })\n\n // Loading state\n if (isLoading) {\n return (\n <Stack className=\"fixed inset-0\" distribution=\"center\" alignment=\"center\" direction=\"vertical\">\n <Spinner variant=\"primary\" size=\"large\" className=\"mb-2\" />\n <Trans>Loading Certificate Details...</Trans>\n </Stack>\n )\n }\n\n const handleBack = () =>\n navigate({\n to: \"/projects/$projectId/services/pca/$pcaId\",\n params: { projectId, pcaId },\n })\n\n // Error state\n if (isError) {\n const errorMessage = error?.message || \"Unknown error\"\n return (\n <Stack className=\"fixed inset-0\" distribution=\"center\" alignment=\"center\" direction=\"vertical\" gap=\"5\">\n <p className=\"text-theme-error font-semibold\">\n <Trans>Error loading Certificate</Trans>\n </p>\n <p className=\"text-theme-highest\">{errorMessage}</p>\n <Button onClick={handleBack} variant=\"primary\">\n <Trans>Back to Certificate Authorities Details page</Trans>\n </Button>\n </Stack>\n )\n }\n\n // No data state\n if (!certificate) {\n return (\n <Stack className=\"fixed inset-0\" distribution=\"center\" alignment=\"center\" direction=\"vertical\" gap=\"5\">\n <p className=\"text-theme-secondary\">\n <Trans>Certificate not found</Trans>\n </p>\n <Button onClick={handleBack} variant=\"primary\">\n <Trans>Back to Certificate Authorities Details page</Trans>\n </Button>\n </Stack>\n )\n }\n\n const basicInfo = [\n { label: t`CA ID`, value: certificate.certificate_authority_id },\n { label: t`ID`, value: certificate.id },\n {\n label: t`Duration/validity`,\n value:\n certificate.configuration?.validity.not_before !== undefined &&\n certificate.configuration?.validity.not_after !== undefined\n ? `${Math.round(\n (certificate.configuration.validity.not_after - certificate.configuration.validity.not_before) /\n (60 * 60 * 24)\n )} days`\n : undefined,\n },\n ] as const\n\n return (\n <Stack direction=\"vertical\" gap=\"3\">\n <div className=\"text-theme-default text-2xl font-semibold\">{`${certificate.id} Certificate Details`}</div>\n\n <p className=\"text-theme-highest text-sm\">\n <Trans>Manage your Certificate</Trans>\n </p>\n\n <Stack gap=\"4\" className=\"grid grid-cols-2 items-start\">\n <DescriptionList alignTerms=\"right\" className=\"w-full\">\n {basicInfo.map(({ label, value }) => (\n <Fragment key={label}>\n <DescriptionTerm>{label}</DescriptionTerm>\n <DescriptionDefinition>{value || \"—\"}</DescriptionDefinition>\n </Fragment>\n ))}\n </DescriptionList>\n\n <div className=\"bg-dt-background w-full rounded-sm\">\n <div className=\"text-theme-default p-4 text-xl font-bold\">Certificate {`${certificate.id}`}</div>\n <Divider />\n\n <div className=\"p-4 text-sm break-all whitespace-pre-wrap\">{certificate?.csr}</div>\n\n {/* I will implement downloading-copying functionality at issue/import part of the epic as I need to clarify some stuff with design-clavis team */}\n <Divider />\n <Stack gap=\"2\" distribution=\"end\" className=\"p-4\">\n <Button>\n <MdDownload />\n </Button>\n <Button>\n <MdContentCopy />\n </Button>\n </Stack>\n </div>\n </Stack>\n </Stack>\n )\n}\n","/* eslint-disable */\n\n// @ts-nocheck\n\n// noinspection JSUnusedGlobalSymbols\n\n// This file was automatically generated by TanStack Router.\n// You should NOT make any changes in this file as it will be overwritten.\n// Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified.\n\nimport { Route as rootRouteImport } from \"./routes/__root\"\nimport { Route as AboutRouteImport } from \"./routes/about\"\nimport { Route as AuthRouteImport } from \"./routes/_auth\"\nimport { Route as IndexRouteImport } from \"./routes/index\"\nimport { Route as AuthAuroraRouteImport } from \"./routes/_auth/aurora\"\nimport { Route as AuthProjectsIndexRouteImport } from \"./routes/_auth/projects/index\"\nimport { Route as AuthAccountsIndexRouteImport } from \"./routes/_auth/accounts/index\"\nimport { Route as AuthProjectsProjectIdRouteImport } from \"./routes/_auth/projects/$projectId\"\nimport { Route as AuthProjectsProjectIdIndexRouteImport } from \"./routes/_auth/projects/$projectId/index\"\nimport { Route as AuthProjectsProjectIdNetworkRouteImport } from \"./routes/_auth/projects/$projectId/network\"\nimport { Route as AuthProjectsProjectIdServicesIndexRouteImport } from \"./routes/_auth/projects/$projectId/services/index\"\nimport { Route as AuthProjectsProjectIdNetworkIndexRouteImport } from \"./routes/_auth/projects/$projectId/network/index\"\nimport { Route as AuthProjectsProjectIdComputeIndexRouteImport } from \"./routes/_auth/projects/$projectId/compute/index\"\nimport { Route as AuthProjectsProjectIdServicesOverviewRouteImport } from \"./routes/_auth/projects/$projectId/services/overview\"\nimport { Route as AuthProjectsProjectIdNetworkOverviewRouteImport } from \"./routes/_auth/projects/$projectId/network/overview\"\nimport { Route as AuthProjectsProjectIdComputeOverviewRouteImport } from \"./routes/_auth/projects/$projectId/compute/overview\"\nimport { Route as AuthProjectsProjectIdComputeImagesRouteImport } from \"./routes/_auth/projects/$projectId/compute/images\"\nimport { Route as AuthProjectsProjectIdComputeFlavorsRouteImport } from \"./routes/_auth/projects/$projectId/compute/flavors\"\nimport { Route as AuthProjectsProjectIdServicesPcaIndexRouteImport } from \"./routes/_auth/projects/$projectId/services/pca/index\"\nimport { Route as AuthProjectsProjectIdNetworkSecuritygroupsIndexRouteImport } from \"./routes/_auth/projects/$projectId/network/securitygroups/index\"\nimport { Route as AuthProjectsProjectIdNetworkFloatingipsIndexRouteImport } from \"./routes/_auth/projects/$projectId/network/floatingips/index\"\nimport { Route as AuthProjectsProjectIdComputeImagesIndexRouteImport } from \"./routes/_auth/projects/$projectId/compute/images/index\"\nimport { Route as AuthProjectsProjectIdComputeFlavorsIndexRouteImport } from \"./routes/_auth/projects/$projectId/compute/flavors/index\"\nimport { Route as AuthProjectsProjectIdComputeImagesImageIdRouteImport } from \"./routes/_auth/projects/$projectId/compute/images/$imageId\"\nimport { Route as AuthProjectsProjectIdComputeFlavorsFlavorIdRouteImport } from \"./routes/_auth/projects/$projectId/compute/flavors/$flavorId\"\nimport { Route as AuthProjectsProjectIdStorageProviderContainersIndexRouteImport } from \"./routes/_auth/projects/$projectId/storage/$provider/containers/index\"\nimport { Route as AuthProjectsProjectIdServicesPcaPcaIdIndexRouteImport } from \"./routes/_auth/projects/$projectId/services/pca/$pcaId/index\"\nimport { Route as AuthProjectsProjectIdNetworkSecuritygroupsSecurityGroupIdIndexRouteImport } from \"./routes/_auth/projects/$projectId/network/securitygroups/$securityGroupId/index\"\nimport { Route as AuthProjectsProjectIdNetworkFloatingipsFloatingIpIdIndexRouteImport } from \"./routes/_auth/projects/$projectId/network/floatingips/$floatingIpId/index\"\nimport { Route as AuthProjectsProjectIdServicesPcaPcaIdCertificateIdRouteImport } from \"./routes/_auth/projects/$projectId/services/pca/$pcaId/$certificateId\"\nimport { Route as AuthProjectsProjectIdStorageProviderContainersContainerNameObjectsIndexRouteImport } from \"./routes/_auth/projects/$projectId/storage/$provider/containers/$containerName/objects/index\"\n\nconst AboutRoute = AboutRouteImport.update({\n id: \"/about\",\n path: \"/about\",\n getParentRoute: () => rootRouteImport,\n} as any)\nconst AuthRoute = AuthRouteImport.update({\n id: \"/_auth\",\n getParentRoute: () => rootRouteImport,\n} as any)\nconst IndexRoute = IndexRouteImport.update({\n id: \"/\",\n path: \"/\",\n getParentRoute: () => rootRouteImport,\n} as any)\nconst AuthAuroraRoute = AuthAuroraRouteImport.update({\n id: \"/aurora\",\n path: \"/aurora\",\n getParentRoute: () => AuthRoute,\n} as any)\nconst AuthProjectsIndexRoute = AuthProjectsIndexRouteImport.update({\n id: \"/projects/\",\n path: \"/projects/\",\n getParentRoute: () => AuthRoute,\n} as any)\nconst AuthAccountsIndexRoute = AuthAccountsIndexRouteImport.update({\n id: \"/accounts/\",\n path: \"/accounts/\",\n getParentRoute: () => AuthRoute,\n} as any)\nconst AuthProjectsProjectIdRoute = AuthProjectsProjectIdRouteImport.update({\n id: \"/projects/$projectId\",\n path: \"/projects/$projectId\",\n getParentRoute: () => AuthRoute,\n} as any)\nconst AuthProjectsProjectIdIndexRoute =\n AuthProjectsProjectIdIndexRouteImport.update({\n id: \"/\",\n path: \"/\",\n getParentRoute: () => AuthProjectsProjectIdRoute,\n } as any)\nconst AuthProjectsProjectIdNetworkRoute =\n AuthProjectsProjectIdNetworkRouteImport.update({\n id: \"/network\",\n path: \"/network\",\n getParentRoute: () => AuthProjectsProjectIdRoute,\n } as any)\nconst AuthProjectsProjectIdServicesIndexRoute =\n AuthProjectsProjectIdServicesIndexRouteImport.update({\n id: \"/services/\",\n path: \"/services/\",\n getParentRoute: () => AuthProjectsProjectIdRoute,\n } as any)\nconst AuthProjectsProjectIdNetworkIndexRoute =\n AuthProjectsProjectIdNetworkIndexRouteImport.update({\n id: \"/\",\n path: \"/\",\n getParentRoute: () => AuthProjectsProjectIdNetworkRoute,\n } as any)\nconst AuthProjectsProjectIdComputeIndexRoute =\n AuthProjectsProjectIdComputeIndexRouteImport.update({\n id: \"/compute/\",\n path: \"/compute/\",\n getParentRoute: () => AuthProjectsProjectIdRoute,\n } as any)\nconst AuthProjectsProjectIdServicesOverviewRoute =\n AuthProjectsProjectIdServicesOverviewRouteImport.update({\n id: \"/services/overview\",\n path: \"/services/overview\",\n getParentRoute: () => AuthProjectsProjectIdRoute,\n } as any)\nconst AuthProjectsProjectIdNetworkOverviewRoute =\n AuthProjectsProjectIdNetworkOverviewRouteImport.update({\n id: \"/overview\",\n path: \"/overview\",\n getParentRoute: () => AuthProjectsProjectIdNetworkRoute,\n } as any)\nconst AuthProjectsProjectIdComputeOverviewRoute =\n AuthProjectsProjectIdComputeOverviewRouteImport.update({\n id: \"/compute/overview\",\n path: \"/compute/overview\",\n getParentRoute: () => AuthProjectsProjectIdRoute,\n } as any)\nconst AuthProjectsProjectIdComputeImagesRoute =\n AuthProjectsProjectIdComputeImagesRouteImport.update({\n id: \"/compute/images\",\n path: \"/compute/images\",\n getParentRoute: () => AuthProjectsProjectIdRoute,\n } as any)\nconst AuthProjectsProjectIdComputeFlavorsRoute =\n AuthProjectsProjectIdComputeFlavorsRouteImport.update({\n id: \"/compute/flavors\",\n path: \"/compute/flavors\",\n getParentRoute: () => AuthProjectsProjectIdRoute,\n } as any)\nconst AuthProjectsProjectIdServicesPcaIndexRoute =\n AuthProjectsProjectIdServicesPcaIndexRouteImport.update({\n id: \"/services/pca/\",\n path: \"/services/pca/\",\n getParentRoute: () => AuthProjectsProjectIdRoute,\n } as any)\nconst AuthProjectsProjectIdNetworkSecuritygroupsIndexRoute =\n AuthProjectsProjectIdNetworkSecuritygroupsIndexRouteImport.update({\n id: \"/securitygroups/\",\n path: \"/securitygroups/\",\n getParentRoute: () => AuthProjectsProjectIdNetworkRoute,\n } as any)\nconst AuthProjectsProjectIdNetworkFloatingipsIndexRoute =\n AuthProjectsProjectIdNetworkFloatingipsIndexRouteImport.update({\n id: \"/floatingips/\",\n path: \"/floatingips/\",\n getParentRoute: () => AuthProjectsProjectIdNetworkRoute,\n } as any)\nconst AuthProjectsProjectIdComputeImagesIndexRoute =\n AuthProjectsProjectIdComputeImagesIndexRouteImport.update({\n id: \"/\",\n path: \"/\",\n getParentRoute: () => AuthProjectsProjectIdComputeImagesRoute,\n } as any)\nconst AuthProjectsProjectIdComputeFlavorsIndexRoute =\n AuthProjectsProjectIdComputeFlavorsIndexRouteImport.update({\n id: \"/\",\n path: \"/\",\n getParentRoute: () => AuthProjectsProjectIdComputeFlavorsRoute,\n } as any)\nconst AuthProjectsProjectIdComputeImagesImageIdRoute =\n AuthProjectsProjectIdComputeImagesImageIdRouteImport.update({\n id: \"/$imageId\",\n path: \"/$imageId\",\n getParentRoute: () => AuthProjectsProjectIdComputeImagesRoute,\n } as any)\nconst AuthProjectsProjectIdComputeFlavorsFlavorIdRoute =\n AuthProjectsProjectIdComputeFlavorsFlavorIdRouteImport.update({\n id: \"/$flavorId\",\n path: \"/$flavorId\",\n getParentRoute: () => AuthProjectsProjectIdComputeFlavorsRoute,\n } as any)\nconst AuthProjectsProjectIdStorageProviderContainersIndexRoute =\n AuthProjectsProjectIdStorageProviderContainersIndexRouteImport.update({\n id: \"/storage/$provider/containers/\",\n path: \"/storage/$provider/containers/\",\n getParentRoute: () => AuthProjectsProjectIdRoute,\n } as any)\nconst AuthProjectsProjectIdServicesPcaPcaIdIndexRoute =\n AuthProjectsProjectIdServicesPcaPcaIdIndexRouteImport.update({\n id: \"/services/pca/$pcaId/\",\n path: \"/services/pca/$pcaId/\",\n getParentRoute: () => AuthProjectsProjectIdRoute,\n } as any)\nconst AuthProjectsProjectIdNetworkSecuritygroupsSecurityGroupIdIndexRoute =\n AuthProjectsProjectIdNetworkSecuritygroupsSecurityGroupIdIndexRouteImport.update(\n {\n id: \"/securitygroups/$securityGroupId/\",\n path: \"/securitygroups/$securityGroupId/\",\n getParentRoute: () => AuthProjectsProjectIdNetworkRoute,\n } as any,\n )\nconst AuthProjectsProjectIdNetworkFloatingipsFloatingIpIdIndexRoute =\n AuthProjectsProjectIdNetworkFloatingipsFloatingIpIdIndexRouteImport.update({\n id: \"/floatingips/$floatingIpId/\",\n path: \"/floatingips/$floatingIpId/\",\n getParentRoute: () => AuthProjectsProjectIdNetworkRoute,\n } as any)\nconst AuthProjectsProjectIdServicesPcaPcaIdCertificateIdRoute =\n AuthProjectsProjectIdServicesPcaPcaIdCertificateIdRouteImport.update({\n id: \"/services/pca/$pcaId/$certificateId\",\n path: \"/services/pca/$pcaId/$certificateId\",\n getParentRoute: () => AuthProjectsProjectIdRoute,\n } as any)\nconst AuthProjectsProjectIdStorageProviderContainersContainerNameObjectsIndexRoute =\n AuthProjectsProjectIdStorageProviderContainersContainerNameObjectsIndexRouteImport.update(\n {\n id: \"/storage/$provider/containers/$containerName/objects/\",\n path: \"/storage/$provider/containers/$containerName/objects/\",\n getParentRoute: () => AuthProjectsProjectIdRoute,\n } as any,\n )\n\nexport interface FileRoutesByFullPath {\n \"/\": typeof IndexRoute\n \"/about\": typeof AboutRoute\n \"/aurora\": typeof AuthAuroraRoute\n \"/projects/$projectId\": typeof AuthProjectsProjectIdRouteWithChildren\n \"/accounts/\": typeof AuthAccountsIndexRoute\n \"/projects/\": typeof AuthProjectsIndexRoute\n \"/projects/$projectId/network\": typeof AuthProjectsProjectIdNetworkRouteWithChildren\n \"/projects/$projectId/\": typeof AuthProjectsProjectIdIndexRoute\n \"/projects/$projectId/compute/flavors\": typeof AuthProjectsProjectIdComputeFlavorsRouteWithChildren\n \"/projects/$projectId/compute/images\": typeof AuthProjectsProjectIdComputeImagesRouteWithChildren\n \"/projects/$projectId/compute/overview\": typeof AuthProjectsProjectIdComputeOverviewRoute\n \"/projects/$projectId/network/overview\": typeof AuthProjectsProjectIdNetworkOverviewRoute\n \"/projects/$projectId/services/overview\": typeof AuthProjectsProjectIdServicesOverviewRoute\n \"/projects/$projectId/compute/\": typeof AuthProjectsProjectIdComputeIndexRoute\n \"/projects/$projectId/network/\": typeof AuthProjectsProjectIdNetworkIndexRoute\n \"/projects/$projectId/services/\": typeof AuthProjectsProjectIdServicesIndexRoute\n \"/projects/$projectId/compute/flavors/$flavorId\": typeof AuthProjectsProjectIdComputeFlavorsFlavorIdRoute\n \"/projects/$projectId/compute/images/$imageId\": typeof AuthProjectsProjectIdComputeImagesImageIdRoute\n \"/projects/$projectId/compute/flavors/\": typeof AuthProjectsProjectIdComputeFlavorsIndexRoute\n \"/projects/$projectId/compute/images/\": typeof AuthProjectsProjectIdComputeImagesIndexRoute\n \"/projects/$projectId/network/floatingips/\": typeof AuthProjectsProjectIdNetworkFloatingipsIndexRoute\n \"/projects/$projectId/network/securitygroups/\": typeof AuthProjectsProjectIdNetworkSecuritygroupsIndexRoute\n \"/projects/$projectId/services/pca/\": typeof AuthProjectsProjectIdServicesPcaIndexRoute\n \"/projects/$projectId/services/pca/$pcaId/$certificateId\": typeof AuthProjectsProjectIdServicesPcaPcaIdCertificateIdRoute\n \"/projects/$projectId/network/floatingips/$floatingIpId/\": typeof AuthProjectsProjectIdNetworkFloatingipsFloatingIpIdIndexRoute\n \"/projects/$projectId/network/securitygroups/$securityGroupId/\": typeof AuthProjectsProjectIdNetworkSecuritygroupsSecurityGroupIdIndexRoute\n \"/projects/$projectId/services/pca/$pcaId/\": typeof AuthProjectsProjectIdServicesPcaPcaIdIndexRoute\n \"/projects/$projectId/storage/$provider/containers/\": typeof AuthProjectsProjectIdStorageProviderContainersIndexRoute\n \"/projects/$projectId/storage/$provider/containers/$containerName/objects/\": typeof AuthProjectsProjectIdStorageProviderContainersContainerNameObjectsIndexRoute\n}\nexport interface FileRoutesByTo {\n \"/\": typeof IndexRoute\n \"/about\": typeof AboutRoute\n \"/aurora\": typeof AuthAuroraRoute\n \"/accounts\": typeof AuthAccountsIndexRoute\n \"/projects\": typeof AuthProjectsIndexRoute\n \"/projects/$projectId\": typeof AuthProjectsProjectIdIndexRoute\n \"/projects/$projectId/compute/overview\": typeof AuthProjectsProjectIdComputeOverviewRoute\n \"/projects/$projectId/network/overview\": typeof AuthProjectsProjectIdNetworkOverviewRoute\n \"/projects/$projectId/services/overview\": typeof AuthProjectsProjectIdServicesOverviewRoute\n \"/projects/$projectId/compute\": typeof AuthProjectsProjectIdComputeIndexRoute\n \"/projects/$projectId/network\": typeof AuthProjectsProjectIdNetworkIndexRoute\n \"/projects/$projectId/services\": typeof AuthProjectsProjectIdServicesIndexRoute\n \"/projects/$projectId/compute/flavors/$flavorId\": typeof AuthProjectsProjectIdComputeFlavorsFlavorIdRoute\n \"/projects/$projectId/compute/images/$imageId\": typeof AuthProjectsProjectIdComputeImagesImageIdRoute\n \"/projects/$projectId/compute/flavors\": typeof AuthProjectsProjectIdComputeFlavorsIndexRoute\n \"/projects/$projectId/compute/images\": typeof AuthProjectsProjectIdComputeImagesIndexRoute\n \"/projects/$projectId/network/floatingips\": typeof AuthProjectsProjectIdNetworkFloatingipsIndexRoute\n \"/projects/$projectId/network/securitygroups\": typeof AuthProjectsProjectIdNetworkSecuritygroupsIndexRoute\n \"/projects/$projectId/services/pca\": typeof AuthProjectsProjectIdServicesPcaIndexRoute\n \"/projects/$projectId/services/pca/$pcaId/$certificateId\": typeof AuthProjectsProjectIdServicesPcaPcaIdCertificateIdRoute\n \"/projects/$projectId/network/floatingips/$floatingIpId\": typeof AuthProjectsProjectIdNetworkFloatingipsFloatingIpIdIndexRoute\n \"/projects/$projectId/network/securitygroups/$securityGroupId\": typeof AuthProjectsProjectIdNetworkSecuritygroupsSecurityGroupIdIndexRoute\n \"/projects/$projectId/services/pca/$pcaId\": typeof AuthProjectsProjectIdServicesPcaPcaIdIndexRoute\n \"/projects/$projectId/storage/$provider/containers\": typeof AuthProjectsProjectIdStorageProviderContainersIndexRoute\n \"/projects/$projectId/storage/$provider/containers/$containerName/objects\": typeof AuthProjectsProjectIdStorageProviderContainersContainerNameObjectsIndexRoute\n}\nexport interface FileRoutesById {\n __root__: typeof rootRouteImport\n \"/\": typeof IndexRoute\n \"/_auth\": typeof AuthRouteWithChildren\n \"/about\": typeof AboutRoute\n \"/_auth/aurora\": typeof AuthAuroraRoute\n \"/_auth/projects/$projectId\": typeof AuthProjectsProjectIdRouteWithChildren\n \"/_auth/accounts/\": typeof AuthAccountsIndexRoute\n \"/_auth/projects/\": typeof AuthProjectsIndexRoute\n \"/_auth/projects/$projectId/network\": typeof AuthProjectsProjectIdNetworkRouteWithChildren\n \"/_auth/projects/$projectId/\": typeof AuthProjectsProjectIdIndexRoute\n \"/_auth/projects/$projectId/compute/flavors\": typeof AuthProjectsProjectIdComputeFlavorsRouteWithChildren\n \"/_auth/projects/$projectId/compute/images\": typeof AuthProjectsProjectIdComputeImagesRouteWithChildren\n \"/_auth/projects/$projectId/compute/overview\": typeof AuthProjectsProjectIdComputeOverviewRoute\n \"/_auth/projects/$projectId/network/overview\": typeof AuthProjectsProjectIdNetworkOverviewRoute\n \"/_auth/projects/$projectId/services/overview\": typeof AuthProjectsProjectIdServicesOverviewRoute\n \"/_auth/projects/$projectId/compute/\": typeof AuthProjectsProjectIdComputeIndexRoute\n \"/_auth/projects/$projectId/network/\": typeof AuthProjectsProjectIdNetworkIndexRoute\n \"/_auth/projects/$projectId/services/\": typeof AuthProjectsProjectIdServicesIndexRoute\n \"/_auth/projects/$projectId/compute/flavors/$flavorId\": typeof AuthProjectsProjectIdComputeFlavorsFlavorIdRoute\n \"/_auth/projects/$projectId/compute/images/$imageId\": typeof AuthProjectsProjectIdComputeImagesImageIdRoute\n \"/_auth/projects/$projectId/compute/flavors/\": typeof AuthProjectsProjectIdComputeFlavorsIndexRoute\n \"/_auth/projects/$projectId/compute/images/\": typeof AuthProjectsProjectIdComputeImagesIndexRoute\n \"/_auth/projects/$projectId/network/floatingips/\": typeof AuthProjectsProjectIdNetworkFloatingipsIndexRoute\n \"/_auth/projects/$projectId/network/securitygroups/\": typeof AuthProjectsProjectIdNetworkSecuritygroupsIndexRoute\n \"/_auth/projects/$projectId/services/pca/\": typeof AuthProjectsProjectIdServicesPcaIndexRoute\n \"/_auth/projects/$projectId/services/pca/$pcaId/$certificateId\": typeof AuthProjectsProjectIdServicesPcaPcaIdCertificateIdRoute\n \"/_auth/projects/$projectId/network/floatingips/$floatingIpId/\": typeof AuthProjectsProjectIdNetworkFloatingipsFloatingIpIdIndexRoute\n \"/_auth/projects/$projectId/network/securitygroups/$securityGroupId/\": typeof AuthProjectsProjectIdNetworkSecuritygroupsSecurityGroupIdIndexRoute\n \"/_auth/projects/$projectId/services/pca/$pcaId/\": typeof AuthProjectsProjectIdServicesPcaPcaIdIndexRoute\n \"/_auth/projects/$projectId/storage/$provider/containers/\": typeof AuthProjectsProjectIdStorageProviderContainersIndexRoute\n \"/_auth/projects/$projectId/storage/$provider/containers/$containerName/objects/\": typeof AuthProjectsProjectIdStorageProviderContainersContainerNameObjectsIndexRoute\n}\nexport interface FileRouteTypes {\n fileRoutesByFullPath: FileRoutesByFullPath\n fullPaths:\n | \"/\"\n | \"/about\"\n | \"/aurora\"\n | \"/projects/$projectId\"\n | \"/accounts/\"\n | \"/projects/\"\n | \"/projects/$projectId/network\"\n | \"/projects/$projectId/\"\n | \"/projects/$projectId/compute/flavors\"\n | \"/projects/$projectId/compute/images\"\n | \"/projects/$projectId/compute/overview\"\n | \"/projects/$projectId/network/overview\"\n | \"/projects/$projectId/services/overview\"\n | \"/projects/$projectId/compute/\"\n | \"/projects/$projectId/network/\"\n | \"/projects/$projectId/services/\"\n | \"/projects/$projectId/compute/flavors/$flavorId\"\n | \"/projects/$projectId/compute/images/$imageId\"\n | \"/projects/$projectId/compute/flavors/\"\n | \"/projects/$projectId/compute/images/\"\n | \"/projects/$projectId/network/floatingips/\"\n | \"/projects/$projectId/network/securitygroups/\"\n | \"/projects/$projectId/services/pca/\"\n | \"/projects/$projectId/services/pca/$pcaId/$certificateId\"\n | \"/projects/$projectId/network/floatingips/$floatingIpId/\"\n | \"/projects/$projectId/network/securitygroups/$securityGroupId/\"\n | \"/projects/$projectId/services/pca/$pcaId/\"\n | \"/projects/$projectId/storage/$provider/containers/\"\n | \"/projects/$projectId/storage/$provider/containers/$containerName/objects/\"\n fileRoutesByTo: FileRoutesByTo\n to:\n | \"/\"\n | \"/about\"\n | \"/aurora\"\n | \"/accounts\"\n | \"/projects\"\n | \"/projects/$projectId\"\n | \"/projects/$projectId/compute/overview\"\n | \"/projects/$projectId/network/overview\"\n | \"/projects/$projectId/services/overview\"\n | \"/projects/$projectId/compute\"\n | \"/projects/$projectId/network\"\n | \"/projects/$projectId/services\"\n | \"/projects/$projectId/compute/flavors/$flavorId\"\n | \"/projects/$projectId/compute/images/$imageId\"\n | \"/projects/$projectId/compute/flavors\"\n | \"/projects/$projectId/compute/images\"\n | \"/projects/$projectId/network/floatingips\"\n | \"/projects/$projectId/network/securitygroups\"\n | \"/projects/$projectId/services/pca\"\n | \"/projects/$projectId/services/pca/$pcaId/$certificateId\"\n | \"/projects/$projectId/network/floatingips/$floatingIpId\"\n | \"/projects/$projectId/network/securitygroups/$securityGroupId\"\n | \"/projects/$projectId/services/pca/$pcaId\"\n | \"/projects/$projectId/storage/$provider/containers\"\n | \"/projects/$projectId/storage/$provider/containers/$containerName/objects\"\n id:\n | \"__root__\"\n | \"/\"\n | \"/_auth\"\n | \"/about\"\n | \"/_auth/aurora\"\n | \"/_auth/projects/$projectId\"\n | \"/_auth/accounts/\"\n | \"/_auth/projects/\"\n | \"/_auth/projects/$projectId/network\"\n | \"/_auth/projects/$projectId/\"\n | \"/_auth/projects/$projectId/compute/flavors\"\n | \"/_auth/projects/$projectId/compute/images\"\n | \"/_auth/projects/$projectId/compute/overview\"\n | \"/_auth/projects/$projectId/network/overview\"\n | \"/_auth/projects/$projectId/services/overview\"\n | \"/_auth/projects/$projectId/compute/\"\n | \"/_auth/projects/$projectId/network/\"\n | \"/_auth/projects/$projectId/services/\"\n | \"/_auth/projects/$projectId/compute/flavors/$flavorId\"\n | \"/_auth/projects/$projectId/compute/images/$imageId\"\n | \"/_auth/projects/$projectId/compute/flavors/\"\n | \"/_auth/projects/$projectId/compute/images/\"\n | \"/_auth/projects/$projectId/network/floatingips/\"\n | \"/_auth/projects/$projectId/network/securitygroups/\"\n | \"/_auth/projects/$projectId/services/pca/\"\n | \"/_auth/projects/$projectId/services/pca/$pcaId/$certificateId\"\n | \"/_auth/projects/$projectId/network/floatingips/$floatingIpId/\"\n | \"/_auth/projects/$projectId/network/securitygroups/$securityGroupId/\"\n | \"/_auth/projects/$projectId/services/pca/$pcaId/\"\n | \"/_auth/projects/$projectId/storage/$provider/containers/\"\n | \"/_auth/projects/$projectId/storage/$provider/containers/$containerName/objects/\"\n fileRoutesById: FileRoutesById\n}\nexport interface RootRouteChildren {\n IndexRoute: typeof IndexRoute\n AuthRoute: typeof AuthRouteWithChildren\n AboutRoute: typeof AboutRoute\n}\n\ndeclare module \"@tanstack/react-router\" {\n interface FileRoutesByPath {\n \"/about\": {\n id: \"/about\"\n path: \"/about\"\n fullPath: \"/about\"\n preLoaderRoute: typeof AboutRouteImport\n parentRoute: typeof rootRouteImport\n }\n \"/_auth\": {\n id: \"/_auth\"\n path: \"\"\n fullPath: \"/\"\n preLoaderRoute: typeof AuthRouteImport\n parentRoute: typeof rootRouteImport\n }\n \"/\": {\n id: \"/\"\n path: \"/\"\n fullPath: \"/\"\n preLoaderRoute: typeof IndexRouteImport\n parentRoute: typeof rootRouteImport\n }\n \"/_auth/aurora\": {\n id: \"/_auth/aurora\"\n path: \"/aurora\"\n fullPath: \"/aurora\"\n preLoaderRoute: typeof AuthAuroraRouteImport\n parentRoute: typeof AuthRoute\n }\n \"/_auth/projects/\": {\n id: \"/_auth/projects/\"\n path: \"/projects\"\n fullPath: \"/projects/\"\n preLoaderRoute: typeof AuthProjectsIndexRouteImport\n parentRoute: typeof AuthRoute\n }\n \"/_auth/accounts/\": {\n id: \"/_auth/accounts/\"\n path: \"/accounts\"\n fullPath: \"/accounts/\"\n preLoaderRoute: typeof AuthAccountsIndexRouteImport\n parentRoute: typeof AuthRoute\n }\n \"/_auth/projects/$projectId\": {\n id: \"/_auth/projects/$projectId\"\n path: \"/projects/$projectId\"\n fullPath: \"/projects/$projectId\"\n preLoaderRoute: typeof AuthProjectsProjectIdRouteImport\n parentRoute: typeof AuthRoute\n }\n \"/_auth/projects/$projectId/\": {\n id: \"/_auth/projects/$projectId/\"\n path: \"/\"\n fullPath: \"/projects/$projectId/\"\n preLoaderRoute: typeof AuthProjectsProjectIdIndexRouteImport\n parentRoute: typeof AuthProjectsProjectIdRoute\n }\n \"/_auth/projects/$projectId/network\": {\n id: \"/_auth/projects/$projectId/network\"\n path: \"/network\"\n fullPath: \"/projects/$projectId/network\"\n preLoaderRoute: typeof AuthProjectsProjectIdNetworkRouteImport\n parentRoute: typeof AuthProjectsProjectIdRoute\n }\n \"/_auth/projects/$projectId/services/\": {\n id: \"/_auth/projects/$projectId/services/\"\n path: \"/services\"\n fullPath: \"/projects/$projectId/services/\"\n preLoaderRoute: typeof AuthProjectsProjectIdServicesIndexRouteImport\n parentRoute: typeof AuthProjectsProjectIdRoute\n }\n \"/_auth/projects/$projectId/network/\": {\n id: \"/_auth/projects/$projectId/network/\"\n path: \"/\"\n fullPath: \"/projects/$projectId/network/\"\n preLoaderRoute: typeof AuthProjectsProjectIdNetworkIndexRouteImport\n parentRoute: typeof AuthProjectsProjectIdNetworkRoute\n }\n \"/_auth/projects/$projectId/compute/\": {\n id: \"/_auth/projects/$projectId/compute/\"\n path: \"/compute\"\n fullPath: \"/projects/$projectId/compute/\"\n preLoaderRoute: typeof AuthProjectsProjectIdComputeIndexRouteImport\n parentRoute: typeof AuthProjectsProjectIdRoute\n }\n \"/_auth/projects/$projectId/services/overview\": {\n id: \"/_auth/projects/$projectId/services/overview\"\n path: \"/services/overview\"\n fullPath: \"/projects/$projectId/services/overview\"\n preLoaderRoute: typeof AuthProjectsProjectIdServicesOverviewRouteImport\n parentRoute: typeof AuthProjectsProjectIdRoute\n }\n \"/_auth/projects/$projectId/network/overview\": {\n id: \"/_auth/projects/$projectId/network/overview\"\n path: \"/overview\"\n fullPath: \"/projects/$projectId/network/overview\"\n preLoaderRoute: typeof AuthProjectsProjectIdNetworkOverviewRouteImport\n parentRoute: typeof AuthProjectsProjectIdNetworkRoute\n }\n \"/_auth/projects/$projectId/compute/overview\": {\n id: \"/_auth/projects/$projectId/compute/overview\"\n path: \"/compute/overview\"\n fullPath: \"/projects/$projectId/compute/overview\"\n preLoaderRoute: typeof AuthProjectsProjectIdComputeOverviewRouteImport\n parentRoute: typeof AuthProjectsProjectIdRoute\n }\n \"/_auth/projects/$projectId/compute/images\": {\n id: \"/_auth/projects/$projectId/compute/images\"\n path: \"/compute/images\"\n fullPath: \"/projects/$projectId/compute/images\"\n preLoaderRoute: typeof AuthProjectsProjectIdComputeImagesRouteImport\n parentRoute: typeof AuthProjectsProjectIdRoute\n }\n \"/_auth/projects/$projectId/compute/flavors\": {\n id: \"/_auth/projects/$projectId/compute/flavors\"\n path: \"/compute/flavors\"\n fullPath: \"/projects/$projectId/compute/flavors\"\n preLoaderRoute: typeof AuthProjectsProjectIdComputeFlavorsRouteImport\n parentRoute: typeof AuthProjectsProjectIdRoute\n }\n \"/_auth/projects/$projectId/services/pca/\": {\n id: \"/_auth/projects/$projectId/services/pca/\"\n path: \"/services/pca\"\n fullPath: \"/projects/$projectId/services/pca/\"\n preLoaderRoute: typeof AuthProjectsProjectIdServicesPcaIndexRouteImport\n parentRoute: typeof AuthProjectsProjectIdRoute\n }\n \"/_auth/projects/$projectId/network/securitygroups/\": {\n id: \"/_auth/projects/$projectId/network/securitygroups/\"\n path: \"/securitygroups\"\n fullPath: \"/projects/$projectId/network/securitygroups/\"\n preLoaderRoute: typeof AuthProjectsProjectIdNetworkSecuritygroupsIndexRouteImport\n parentRoute: typeof AuthProjectsProjectIdNetworkRoute\n }\n \"/_auth/projects/$projectId/network/floatingips/\": {\n id: \"/_auth/projects/$projectId/network/floatingips/\"\n path: \"/floatingips\"\n fullPath: \"/projects/$projectId/network/floatingips/\"\n preLoaderRoute: typeof AuthProjectsProjectIdNetworkFloatingipsIndexRouteImport\n parentRoute: typeof AuthProjectsProjectIdNetworkRoute\n }\n \"/_auth/projects/$projectId/compute/images/\": {\n id: \"/_auth/projects/$projectId/compute/images/\"\n path: \"/\"\n fullPath: \"/projects/$projectId/compute/images/\"\n preLoaderRoute: typeof AuthProjectsProjectIdComputeImagesIndexRouteImport\n parentRoute: typeof AuthProjectsProjectIdComputeImagesRoute\n }\n \"/_auth/projects/$projectId/compute/flavors/\": {\n id: \"/_auth/projects/$projectId/compute/flavors/\"\n path: \"/\"\n fullPath: \"/projects/$projectId/compute/flavors/\"\n preLoaderRoute: typeof AuthProjectsProjectIdComputeFlavorsIndexRouteImport\n parentRoute: typeof AuthProjectsProjectIdComputeFlavorsRoute\n }\n \"/_auth/projects/$projectId/compute/images/$imageId\": {\n id: \"/_auth/projects/$projectId/compute/images/$imageId\"\n path: \"/$imageId\"\n fullPath: \"/projects/$projectId/compute/images/$imageId\"\n preLoaderRoute: typeof AuthProjectsProjectIdComputeImagesImageIdRouteImport\n parentRoute: typeof AuthProjectsProjectIdComputeImagesRoute\n }\n \"/_auth/projects/$projectId/compute/flavors/$flavorId\": {\n id: \"/_auth/projects/$projectId/compute/flavors/$flavorId\"\n path: \"/$flavorId\"\n fullPath: \"/projects/$projectId/compute/flavors/$flavorId\"\n preLoaderRoute: typeof AuthProjectsProjectIdComputeFlavorsFlavorIdRouteImport\n parentRoute: typeof AuthProjectsProjectIdComputeFlavorsRoute\n }\n \"/_auth/projects/$projectId/storage/$provider/containers/\": {\n id: \"/_auth/projects/$projectId/storage/$provider/containers/\"\n path: \"/storage/$provider/containers\"\n fullPath: \"/projects/$projectId/storage/$provider/containers/\"\n preLoaderRoute: typeof AuthProjectsProjectIdStorageProviderContainersIndexRouteImport\n parentRoute: typeof AuthProjectsProjectIdRoute\n }\n \"/_auth/projects/$projectId/services/pca/$pcaId/\": {\n id: \"/_auth/projects/$projectId/services/pca/$pcaId/\"\n path: \"/services/pca/$pcaId\"\n fullPath: \"/projects/$projectId/services/pca/$pcaId/\"\n preLoaderRoute: typeof AuthProjectsProjectIdServicesPcaPcaIdIndexRouteImport\n parentRoute: typeof AuthProjectsProjectIdRoute\n }\n \"/_auth/projects/$projectId/network/securitygroups/$securityGroupId/\": {\n id: \"/_auth/projects/$projectId/network/securitygroups/$securityGroupId/\"\n path: \"/securitygroups/$securityGroupId\"\n fullPath: \"/projects/$projectId/network/securitygroups/$securityGroupId/\"\n preLoaderRoute: typeof AuthProjectsProjectIdNetworkSecuritygroupsSecurityGroupIdIndexRouteImport\n parentRoute: typeof AuthProjectsProjectIdNetworkRoute\n }\n \"/_auth/projects/$projectId/network/floatingips/$floatingIpId/\": {\n id: \"/_auth/projects/$projectId/network/floatingips/$floatingIpId/\"\n path: \"/floatingips/$floatingIpId\"\n fullPath: \"/projects/$projectId/network/floatingips/$floatingIpId/\"\n preLoaderRoute: typeof AuthProjectsProjectIdNetworkFloatingipsFloatingIpIdIndexRouteImport\n parentRoute: typeof AuthProjectsProjectIdNetworkRoute\n }\n \"/_auth/projects/$projectId/services/pca/$pcaId/$certificateId\": {\n id: \"/_auth/projects/$projectId/services/pca/$pcaId/$certificateId\"\n path: \"/services/pca/$pcaId/$certificateId\"\n fullPath: \"/projects/$projectId/services/pca/$pcaId/$certificateId\"\n preLoaderRoute: typeof AuthProjectsProjectIdServicesPcaPcaIdCertificateIdRouteImport\n parentRoute: typeof AuthProjectsProjectIdRoute\n }\n \"/_auth/projects/$projectId/storage/$provider/containers/$containerName/objects/\": {\n id: \"/_auth/projects/$projectId/storage/$provider/containers/$containerName/objects/\"\n path: \"/storage/$provider/containers/$containerName/objects\"\n fullPath: \"/projects/$projectId/storage/$provider/containers/$containerName/objects/\"\n preLoaderRoute: typeof AuthProjectsProjectIdStorageProviderContainersContainerNameObjectsIndexRouteImport\n parentRoute: typeof AuthProjectsProjectIdRoute\n }\n }\n}\n\ninterface AuthProjectsProjectIdNetworkRouteChildren {\n AuthProjectsProjectIdNetworkOverviewRoute: typeof AuthProjectsProjectIdNetworkOverviewRoute\n AuthProjectsProjectIdNetworkIndexRoute: typeof AuthProjectsProjectIdNetworkIndexRoute\n AuthProjectsProjectIdNetworkFloatingipsIndexRoute: typeof AuthProjectsProjectIdNetworkFloatingipsIndexRoute\n AuthProjectsProjectIdNetworkSecuritygroupsIndexRoute: typeof AuthProjectsProjectIdNetworkSecuritygroupsIndexRoute\n AuthProjectsProjectIdNetworkFloatingipsFloatingIpIdIndexRoute: typeof AuthProjectsProjectIdNetworkFloatingipsFloatingIpIdIndexRoute\n AuthProjectsProjectIdNetworkSecuritygroupsSecurityGroupIdIndexRoute: typeof AuthProjectsProjectIdNetworkSecuritygroupsSecurityGroupIdIndexRoute\n}\n\nconst AuthProjectsProjectIdNetworkRouteChildren: AuthProjectsProjectIdNetworkRouteChildren =\n {\n AuthProjectsProjectIdNetworkOverviewRoute:\n AuthProjectsProjectIdNetworkOverviewRoute,\n AuthProjectsProjectIdNetworkIndexRoute:\n AuthProjectsProjectIdNetworkIndexRoute,\n AuthProjectsProjectIdNetworkFloatingipsIndexRoute:\n AuthProjectsProjectIdNetworkFloatingipsIndexRoute,\n AuthProjectsProjectIdNetworkSecuritygroupsIndexRoute:\n AuthProjectsProjectIdNetworkSecuritygroupsIndexRoute,\n AuthProjectsProjectIdNetworkFloatingipsFloatingIpIdIndexRoute:\n AuthProjectsProjectIdNetworkFloatingipsFloatingIpIdIndexRoute,\n AuthProjectsProjectIdNetworkSecuritygroupsSecurityGroupIdIndexRoute:\n AuthProjectsProjectIdNetworkSecuritygroupsSecurityGroupIdIndexRoute,\n }\n\nconst AuthProjectsProjectIdNetworkRouteWithChildren =\n AuthProjectsProjectIdNetworkRoute._addFileChildren(\n AuthProjectsProjectIdNetworkRouteChildren,\n )\n\ninterface AuthProjectsProjectIdComputeFlavorsRouteChildren {\n AuthProjectsProjectIdComputeFlavorsFlavorIdRoute: typeof AuthProjectsProjectIdComputeFlavorsFlavorIdRoute\n AuthProjectsProjectIdComputeFlavorsIndexRoute: typeof AuthProjectsProjectIdComputeFlavorsIndexRoute\n}\n\nconst AuthProjectsProjectIdComputeFlavorsRouteChildren: AuthProjectsProjectIdComputeFlavorsRouteChildren =\n {\n AuthProjectsProjectIdComputeFlavorsFlavorIdRoute:\n AuthProjectsProjectIdComputeFlavorsFlavorIdRoute,\n AuthProjectsProjectIdComputeFlavorsIndexRoute:\n AuthProjectsProjectIdComputeFlavorsIndexRoute,\n }\n\nconst AuthProjectsProjectIdComputeFlavorsRouteWithChildren =\n AuthProjectsProjectIdComputeFlavorsRoute._addFileChildren(\n AuthProjectsProjectIdComputeFlavorsRouteChildren,\n )\n\ninterface AuthProjectsProjectIdComputeImagesRouteChildren {\n AuthProjectsProjectIdComputeImagesImageIdRoute: typeof AuthProjectsProjectIdComputeImagesImageIdRoute\n AuthProjectsProjectIdComputeImagesIndexRoute: typeof AuthProjectsProjectIdComputeImagesIndexRoute\n}\n\nconst AuthProjectsProjectIdComputeImagesRouteChildren: AuthProjectsProjectIdComputeImagesRouteChildren =\n {\n AuthProjectsProjectIdComputeImagesImageIdRoute:\n AuthProjectsProjectIdComputeImagesImageIdRoute,\n AuthProjectsProjectIdComputeImagesIndexRoute:\n AuthProjectsProjectIdComputeImagesIndexRoute,\n }\n\nconst AuthProjectsProjectIdComputeImagesRouteWithChildren =\n AuthProjectsProjectIdComputeImagesRoute._addFileChildren(\n AuthProjectsProjectIdComputeImagesRouteChildren,\n )\n\ninterface AuthProjectsProjectIdRouteChildren {\n AuthProjectsProjectIdNetworkRoute: typeof AuthProjectsProjectIdNetworkRouteWithChildren\n AuthProjectsProjectIdIndexRoute: typeof AuthProjectsProjectIdIndexRoute\n AuthProjectsProjectIdComputeFlavorsRoute: typeof AuthProjectsProjectIdComputeFlavorsRouteWithChildren\n AuthProjectsProjectIdComputeImagesRoute: typeof AuthProjectsProjectIdComputeImagesRouteWithChildren\n AuthProjectsProjectIdComputeOverviewRoute: typeof AuthProjectsProjectIdComputeOverviewRoute\n AuthProjectsProjectIdServicesOverviewRoute: typeof AuthProjectsProjectIdServicesOverviewRoute\n AuthProjectsProjectIdComputeIndexRoute: typeof AuthProjectsProjectIdComputeIndexRoute\n AuthProjectsProjectIdServicesIndexRoute: typeof AuthProjectsProjectIdServicesIndexRoute\n AuthProjectsProjectIdServicesPcaIndexRoute: typeof AuthProjectsProjectIdServicesPcaIndexRoute\n AuthProjectsProjectIdServicesPcaPcaIdCertificateIdRoute: typeof AuthProjectsProjectIdServicesPcaPcaIdCertificateIdRoute\n AuthProjectsProjectIdServicesPcaPcaIdIndexRoute: typeof AuthProjectsProjectIdServicesPcaPcaIdIndexRoute\n AuthProjectsProjectIdStorageProviderContainersIndexRoute: typeof AuthProjectsProjectIdStorageProviderContainersIndexRoute\n AuthProjectsProjectIdStorageProviderContainersContainerNameObjectsIndexRoute: typeof AuthProjectsProjectIdStorageProviderContainersContainerNameObjectsIndexRoute\n}\n\nconst AuthProjectsProjectIdRouteChildren: AuthProjectsProjectIdRouteChildren = {\n AuthProjectsProjectIdNetworkRoute:\n AuthProjectsProjectIdNetworkRouteWithChildren,\n AuthProjectsProjectIdIndexRoute: AuthProjectsProjectIdIndexRoute,\n AuthProjectsProjectIdComputeFlavorsRoute:\n AuthProjectsProjectIdComputeFlavorsRouteWithChildren,\n AuthProjectsProjectIdComputeImagesRoute:\n AuthProjectsProjectIdComputeImagesRouteWithChildren,\n AuthProjectsProjectIdComputeOverviewRoute:\n AuthProjectsProjectIdComputeOverviewRoute,\n AuthProjectsProjectIdServicesOverviewRoute:\n AuthProjectsProjectIdServicesOverviewRoute,\n AuthProjectsProjectIdComputeIndexRoute:\n AuthProjectsProjectIdComputeIndexRoute,\n AuthProjectsProjectIdServicesIndexRoute:\n AuthProjectsProjectIdServicesIndexRoute,\n AuthProjectsProjectIdServicesPcaIndexRoute:\n AuthProjectsProjectIdServicesPcaIndexRoute,\n AuthProjectsProjectIdServicesPcaPcaIdCertificateIdRoute:\n AuthProjectsProjectIdServicesPcaPcaIdCertificateIdRoute,\n AuthProjectsProjectIdServicesPcaPcaIdIndexRoute:\n AuthProjectsProjectIdServicesPcaPcaIdIndexRoute,\n AuthProjectsProjectIdStorageProviderContainersIndexRoute:\n AuthProjectsProjectIdStorageProviderContainersIndexRoute,\n AuthProjectsProjectIdStorageProviderContainersContainerNameObjectsIndexRoute:\n AuthProjectsProjectIdStorageProviderContainersContainerNameObjectsIndexRoute,\n}\n\nconst AuthProjectsProjectIdRouteWithChildren =\n AuthProjectsProjectIdRoute._addFileChildren(\n AuthProjectsProjectIdRouteChildren,\n )\n\ninterface AuthRouteChildren {\n AuthAuroraRoute: typeof AuthAuroraRoute\n AuthProjectsProjectIdRoute: typeof AuthProjectsProjectIdRouteWithChildren\n AuthAccountsIndexRoute: typeof AuthAccountsIndexRoute\n AuthProjectsIndexRoute: typeof AuthProjectsIndexRoute\n}\n\nconst AuthRouteChildren: AuthRouteChildren = {\n AuthAuroraRoute: AuthAuroraRoute,\n AuthProjectsProjectIdRoute: AuthProjectsProjectIdRouteWithChildren,\n AuthAccountsIndexRoute: AuthAccountsIndexRoute,\n AuthProjectsIndexRoute: AuthProjectsIndexRoute,\n}\n\nconst AuthRouteWithChildren = AuthRoute._addFileChildren(AuthRouteChildren)\n\nconst rootRouteChildren: RootRouteChildren = {\n IndexRoute: IndexRoute,\n AuthRoute: AuthRouteWithChildren,\n AboutRoute: AboutRoute,\n}\nexport const routeTree = rootRouteImport\n ._addFileChildren(rootRouteChildren)\n ._addFileTypes<FileRouteTypes>()\n","import { createRouter } from \"@tanstack/react-router\"\nimport { routeTree } from \"./routeTree.gen\"\nimport type { TrpcReact, TrpcClient } from \"./trpcClient\"\n\nexport function createAuroraRouter(trpcReact: TrpcReact, trpcClient: TrpcClient) {\n return createRouter({\n routeTree,\n context: {\n trpcReact,\n trpcClient,\n auth: undefined!,\n navItems: [],\n handleThemeToggle: undefined!,\n slots: undefined,\n },\n })\n}\n\n// Type registration — uses the shape of a router instance for global type inference\ndeclare module \"@tanstack/react-router\" {\n interface Register {\n router: ReturnType<typeof createAuroraRouter>\n }\n}\n","/*eslint-disable*/import type{Messages}from\"@lingui/core\";export const messages=JSON.parse(\"{\\\"+0B+ue\\\":[\\\"Projects\\\"],\\\"+1rTEL\\\":[\\\"Import Externally Signed Certificate\\\"],\\\"+1xG4p\\\":[\\\"Click the button below to automatically generate credentials for this project. You only need to do this once.\\\"],\\\"+8m5QE\\\":[\\\"To access S3 Object Storage, you need EC2 credentials (access key + secret key). These credentials authenticate your requests to the Ceph storage backend.\\\"],\\\"+9CXS9\\\":[\\\"Deactivate Images\\\"],\\\"+HVj+D\\\":[\\\"Add a Signed Certificate to your CA to activate it\\\"],\\\"+Jcye3\\\":[\\\"Key Name\\\"],\\\"+Lt5cp\\\":[\\\"You are not authorized to add tenant access. Please log in again.\\\"],\\\"+Nhol2\\\":[\\\"Certificate not found\\\"],\\\"+NwLgN\\\":[\\\"Activating this image will allow it to be used to launch new instances again.\\\"],\\\"+Nx1wc\\\":[\\\"Failed to load Floating IPs\\\"],\\\"+OEi73\\\":[\\\"Object Storage (Swift)\\\"],\\\"+nQTmZ\\\":[\\\"This tenant does not have access to the flavor.\\\"],\\\"+p6nHr\\\":[\\\"Failed to load object metadata: \\\",[\\\"metadataErrorMessage\\\"]],\\\"+pJjJF\\\":[\\\"After restoring, this version's content will become the new latest version.\\\"],\\\"+rtZ8i\\\":[\\\"Version ID:\\\"],\\\"+zy2Nq\\\":[\\\"Type\\\"],\\\"/0+NVm\\\":[\\\"What happens when suspended:\\\"],\\\"/1MfrG\\\":[\\\"Could not download \\\\\\\"\\\",[\\\"objectName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"/9Squ9\\\":[\\\"You don't have permission to view this flavor's details.\\\"],\\\"/BZLRP\\\":[\\\"To confirm this action, type the word <0>“detach”</0> in the field below.\\\"],\\\"/EcdUM\\\":[\\\"Your action is required\\\"],\\\"/HgF9q\\\":[\\\"Sort by\\\"],\\\"/InK0O\\\":[\\\"Total size\\\"],\\\"/LXXlY\\\":[\\\"Properties of \\\\\\\"\\\",[\\\"displayName\\\"],\\\"\\\\\\\" were successfully updated.\\\"],\\\"/LqWNN\\\":[\\\"Could not delete \\\\\\\"\\\",[\\\"objectName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"/NeNjH\\\":[\\\"Container \\\\\\\"\\\",[\\\"containerName\\\"],\\\"\\\\\\\" properties were successfully updated.\\\"],\\\"/Nmxy/\\\":[\\\"No key pairs available.\\\"],\\\"/QIkBY\\\":[\\\"<0>Secure & Reliable:</0> Your data and operations are safeguarded with enterprise-grade security and robust reliability.\\\"],\\\"/Qox3b\\\":[\\\"A folder with this name already exists\\\"],\\\"/Z2leb\\\":[\\\"No containers found.\\\"],\\\"/Z5n1b\\\":[\\\"Create folder below:\\\"],\\\"/bUiYk\\\":[\\\"Router ID\\\"],\\\"/eFtWI\\\":[\\\"RBAC Policies\\\"],\\\"/fwE6J\\\":[\\\"Older\\\"],\\\"/pOQrn\\\":[\\\"This action is irreversible. Deleting a bucket permanently removes it and cannot be undone. The bucket must be empty before deletion.\\\"],\\\"/xnbdQ\\\":[\\\"The specified user has access. A token for the user (scoped to any project) must be included in the request.\\\"],\\\"01/uUD\\\":[\\\"Keep segments (delete manifest only)\\\"],\\\"07WXfc\\\":[\\\"Server returned unexpected data format for extra specs.\\\"],\\\"0BSSYj\\\":[\\\"Server error occurred while removing tenant access. Please try again later.\\\"],\\\"0Gd0NU\\\":[\\\"Shared\\\"],\\\"0NSWq1\\\":[\\\"Once enabled, versioning cannot be fully disabled—it can only be suspended. Existing versions will remain even after suspension.\\\"],\\\"0P2gFy\\\":[\\\"The page you are looking for does not exist.\\\"],\\\"0WsqO0\\\":[\\\"Containers Emptied\\\"],\\\"0XLPG9\\\":[\\\"Type to search buckets...\\\"],\\\"0cVgUw\\\":[\\\"Filter by\\\"],\\\"0cl0a5\\\":[\\\"Search images...\\\"],\\\"0eY8Mz\\\":[\\\"There are no Floating IPs available for this project. Floating IPs allow you to map public IP addresses to instances.\\\"],\\\"0i3NVD\\\":[\\\"Delete Version Permanently\\\"],\\\"0kCt7e\\\":[\\\"The flavor data provided is invalid. Please check your input.\\\"],\\\"0kc0zi\\\":[\\\"Server error occurred while deleting the extra spec. Please try again later.\\\"],\\\"0o0OhW\\\":[\\\"No objects found.\\\"],\\\"0p+s6m\\\":[\\\"Type: \\\",[\\\"typeValue\\\"],\\\", Code: \\\",[\\\"codeValue\\\"]],\\\"0u9jhd\\\":[\\\"Detaching this Floating IP will remove its association with the current port. The instance will no longer be reachable through this address.\\\"],\\\"16085O\\\":[\\\"IP Version\\\"],\\\"1DbiGM\\\":[\\\"Issuing Self-Signed Certificate...\\\"],\\\"1H2g6v\\\":[\\\"Moving object...\\\"],\\\"1NFtQz\\\":[\\\"Failed to Delete Bucket\\\"],\\\"1NS3nd\\\":[[\\\"emptiedCount\\\",\\\"plural\\\",{\\\"one\\\":[\\\"#\\\",\\\" container\\\"],\\\"other\\\":[\\\"#\\\",\\\" containers\\\"]}],\\\" successfully emptied. \\\",[\\\"totalDeleted\\\",\\\"plural\\\",{\\\"one\\\":[\\\"#\\\",\\\" object\\\"],\\\"other\\\":[\\\"#\\\",\\\" objects\\\"]}],\\\" deleted in total.\\\"],\\\"1RwosK\\\":[\\\"Target project ID is required\\\"],\\\"1UzENP\\\":[\\\"No\\\"],\\\"1VDqZj\\\":[\\\"<0>Future-Ready:</0> Aurora is designed to evolve with the latest trends in cloud technology, ensuring your solution is always cutting-edge.\\\"],\\\"1W3TqV\\\":[\\\"No new versions will be created\\\"],\\\"1iQtS2\\\":[\\\"Showing first \\\",[\\\"actualObjectCount\\\"],\\\" of \\\",[\\\"total\\\"],\\\" objects\\\"],\\\"1iUuTT\\\":[\\\"Your session has expired. Please log in again.\\\"],\\\"1ojTVo\\\":[\\\"Select a DNS domain.\\\"],\\\"1pGUZa\\\":[\\\"Session expires in\\\"],\\\"1pdLQw\\\":[\\\"Image not found\\\"],\\\"1rLu3+\\\":[\\\"Could not empty container \\\\\\\"\\\",[\\\"containerName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"1rPB1p\\\":[\\\"The flavor or tenant could not be found. Please verify they exist.\\\"],\\\"1t/NnN\\\":[\\\"Reject\\\"],\\\"1zZ1IK\\\":[\\\"Hi\\\"],\\\"20E+79\\\":[\\\"You need to login to access this page.\\\"],\\\"20Kpaw\\\":[\\\"Flavor \\\\\\\"\\\",[\\\"flavorName\\\"],\\\"\\\\\\\" has been successfully deleted.\\\"],\\\"20axE5\\\":[\\\"Shared by Project\\\"],\\\"23wBCX\\\":[\\\"Public Read Access\\\"],\\\"2G+7C1\\\":[\\\"Enter a name for the new folder.\\\"],\\\"2G6hLq\\\":[\\\"Delete \\\",[\\\"specKey\\\"]],\\\"2Inn83\\\":[\\\"Bulk upload of archive files\\\"],\\\"2PRzsq\\\":[\\\"Could not create folder \\\\\\\"\\\",[\\\"folderPath\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"2TtIL2\\\":[\\\"Stored as X-Object-Meta-* headers. Keys are case-insensitive.\\\"],\\\"2cJIlz\\\":[\\\"Floating Network ID\\\"],\\\"2d/OiW\\\":[\\\"Enter your username\\\"],\\\"2dnZwV\\\":[\\\"Could not delete folder \\\\\\\"\\\",[\\\"folderName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"2gH+i8\\\":[\\\"You are not authorized to delete flavors. Please log in again.\\\"],\\\"2mbisJ\\\":[\\\"Metadata \\\\\\\"\\\",[\\\"trimmedKey\\\"],\\\"\\\\\\\" has been added successfully.\\\"],\\\"2q/Q7x\\\":[\\\"Visibility\\\"],\\\"2tjuGi\\\":[\\\"Recover from accidental deletions\\\"],\\\"2xOCJW\\\":[\\\"This action cannot be undone.\\\"],\\\"2xbYVD\\\":[\\\"Could not update \\\\\\\"\\\",[\\\"displayName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"2ysnjX\\\":[\\\"<0>Enhanced Productivity:</0> By reducing operational complexity, Aurora helps your team focus on what truly matters—innovating and driving business success.\\\"],\\\"2zceEg\\\":[\\\"This action cannot be undone. The image will be permanently deleted.\\\"],\\\"33F2A+\\\":[\\\"Type container name to confirm\\\"],\\\"3AUpb4\\\":[\\\"Delete All (\\\",[\\\"selectedCount\\\"],\\\")\\\"],\\\"3Qn0me\\\":[\\\"Add Member\\\"],\\\"3dBmvU\\\":[\\\"The container cannot be deleted as it contains objects. Empty the container first.\\\"],\\\"3n+vCm\\\":[\\\"Custom duration (minutes)\\\"],\\\"3nWqQW\\\":[\\\"You are not authorized to view extra specs. Please log in again.\\\"],\\\"3nh/7E\\\":[\\\"If checked, this flavor will be available to all tenants. If unchecked, access must be explicitly granted to specific tenants.\\\"],\\\"3oChIh\\\":[\\\"<0>Unified Cloud Management:</0> Consolidates all your cloud assets into one intuitive interface.\\\"],\\\"3oc18/\\\":[\\\"Private flavors could not be loaded. You may be seeing an incomplete list.\\\"],\\\"3q1GLx\\\":[\\\"Pending file upload...\\\"],\\\"3uDz8n\\\":[\\\"Import Signed Certificate\\\"],\\\"3x7Sws\\\":[\\\"Loading Security Group Details...\\\"],\\\"4+2wZO\\\":[\\\"Back to Certificate Authorities Details page\\\"],\\\"47eI0x\\\":[\\\"Description must be at least 1 character.\\\"],\\\"48QXFO\\\":[\\\"Expected format: YYYY-MM-DD HH:mm:ss\\\"],\\\"48bMai\\\":[\\\"Bucket name is required\\\"],\\\"4BITzH\\\":[\\\"Error:\\\"],\\\"4EZrJN\\\":[\\\"Rules\\\"],\\\"4O2AH3\\\":[\\\"Member \\\\\\\"\\\",[\\\"memberIdToRemove\\\"],\\\"\\\\\\\" has been removed successfully.\\\"],\\\"4bLttB\\\":[\\\"Folder name is too long (max 255 characters)\\\"],\\\"4fh0Wj\\\":[\\\"Boot size\\\"],\\\"4fvDRe\\\":[\\\"Images to activate:\\\"],\\\"4fvcmm\\\":[\\\"Object will be uploaded as: <0>\\\",[\\\"selectedObjectName\\\"],\\\"</0>\\\"],\\\"4h3Eyf\\\":[\\\"\\\\\\\"\\\",[\\\"objectName\\\"],\\\"\\\\\\\" was successfully uploaded.\\\"],\\\"4kjaAc\\\":[\\\"No server groups available.\\\"],\\\"4mbrAq\\\":[\\\"1 minute\\\"],\\\"4opp4r\\\":[\\\"Security Groups\\\"],\\\"4pOfUd\\\":[\\\"Our Mission\\\"],\\\"4t33sh\\\":[\\\"Failed to Update Object\\\"],\\\"4uXhtt\\\":[\\\"CIDR\\\"],\\\"4utWB4\\\":[\\\"Server Role:\\\"],\\\"5/wyf8\\\":[\\\"Enter a floating IP\\\"],\\\"50Piuj\\\":[\\\"This bucket contains \\\",[\\\"actualObjectCount\\\"],\\\" \\\",[\\\"actualObjectCount\\\",\\\"plural\\\",{\\\"one\\\":[\\\"object\\\"],\\\"other\\\":[\\\"objects\\\"]}],\\\" and cannot be deleted. Delete all objects first.\\\"],\\\"56IxdF\\\":[\\\"Failed to load container objects: \\\",[\\\"errorMessage\\\"]],\\\"5BLR6Q\\\":[\\\"IPv4\\\"],\\\"5JDSvn\\\":[\\\"Max meta value length\\\"],\\\"5M4Te3\\\":[\\\"DNS\\\"],\\\"5MF8U2\\\":[\\\"Failed to Update Container\\\"],\\\"5Okch2\\\":[\\\"Empty:\\\"],\\\"5TzHG8\\\":[\\\"Warning:\\\"],\\\"5Yrl6N\\\":[\\\"Loading Server Groups...\\\"],\\\"5aNQ3F\\\":[\\\"\\\\\\\"\\\",[\\\"objectName\\\"],\\\"\\\\\\\" was successfully copied to \\\",[\\\"destination\\\"],\\\".\\\"],\\\"5g7owI\\\":[\\\"Updating Floating IP...\\\"],\\\"5y3O+A\\\":[\\\"Deactivate\\\"],\\\"6+7EwD\\\":[\\\"Serve objects as index when file name is:\\\"],\\\"6+OdGi\\\":[\\\"Protocol\\\"],\\\"6/xipy\\\":[\\\"Container Format\\\"],\\\"644xgx\\\":[\\\"Protected\\\"],\\\"66YUKF\\\":[\\\"Failed to Empty Bucket\\\"],\\\"6BDqha\\\":[\\\"Limits\\\"],\\\"6CDYXS\\\":[\\\"Static website serving\\\"],\\\"6E98zF\\\":[\\\"Stored as x-amz-meta-* headers. Keys are case-insensitive.\\\"],\\\"6EcekU\\\":[\\\"Target bucket\\\"],\\\"6GBt0m\\\":[\\\"Metadata\\\"],\\\"6H/Lg1\\\":[\\\"This is a public image. All users have access to it. Explicit sharing is not needed.\\\"],\\\"6KRclz\\\":[\\\"Folder Created\\\"],\\\"6Kjltl\\\":[\\\"Access Control for container:\\\"],\\\"6OopEX\\\":[\\\"Container Emptied\\\"],\\\"6Rnrsz\\\":[\\\"Manage Access - \\\",[\\\"flavorName\\\"]],\\\"6V3Ea3\\\":[\\\"Copied\\\"],\\\"6X/9Di\\\":[\\\"\\\\\\\"\\\",[\\\"objectName\\\"],\\\"\\\\\\\" was successfully moved to \\\",[\\\"destination\\\"],\\\".\\\"],\\\"6YtxFj\\\":[\\\"Name\\\"],\\\"6fuDFZ\\\":[\\\"Empty All Completed with Errors\\\"],\\\"6jAi8c\\\":[\\\"Range\\\"],\\\"6luZQA\\\":[\\\"Object Moved\\\"],\\\"6oolxV\\\":[\\\"This extra spec keys already exist. Please use different keys.\\\"],\\\"6qzsuS\\\":[\\\"Write ACLs\\\"],\\\"6sxz+g\\\":[\\\"Port Name\\\"],\\\"6w+VnM\\\":[\\\"Container Created\\\"],\\\"6z9W13\\\":[\\\"Restart\\\"],\\\"76RKuS\\\":[\\\"ICMP Code\\\"],\\\"78+riR\\\":[\\\"You are not authorized to remove tenant access. Please log in again.\\\"],\\\"7AfIPZ\\\":[\\\"Floating Network\\\"],\\\"7BpykL\\\":[\\\"Failed to create extra specs. Please try again.\\\"],\\\"7L01XJ\\\":[\\\"Actions\\\"],\\\"7NC3vm\\\":[\\\"Subnet\\\"],\\\"7NSdfG\\\":[\\\"Emptying container \\\",[\\\"progressCurrent\\\"],\\\" of \\\",[\\\"progressTotal\\\"],\\\", please wait...\\\"],\\\"7Q24LN\\\":[\\\"Policy\\\"],\\\"7RBR/D\\\":[\\\"Empty Buckets\\\"],\\\"7T1fHv\\\":[\\\"Failed to remove member \\\\\\\"\\\",[\\\"memberIdToRemove\\\"],\\\"\\\\\\\"\\\"],\\\"7UlHhT\\\":[\\\"Metadata \\\\\\\"\\\",[\\\"keyToDelete\\\"],\\\"\\\\\\\" has been deleted successfully.\\\"],\\\"7XQ3QJ\\\":[\\\"Denied referrer: \\\",[\\\"host\\\"]],\\\"7ZnTL8\\\":[\\\"Failed to update object: \\\",[\\\"mutationErrorMessage\\\"]],\\\"7a4DvD\\\":[\\\"No servers available.\\\"],\\\"7d1a0d\\\":[\\\"Public\\\"],\\\"7flw0l\\\":[\\\"Tenant access for \\\\\\\"\\\",[\\\"trimmedTenantId\\\"],\\\"\\\\\\\" has been added successfully.\\\"],\\\"7hLLUk\\\":[\\\"Folder \\\\\\\"\\\",[\\\"folderPath\\\"],\\\"\\\\\\\" was successfully created.\\\"],\\\"7huC4O\\\":[\\\"There are no Certificates available for this Certificate Authority.\\\"],\\\"7sMeHQ\\\":[\\\"Key\\\"],\\\"88kg0+\\\":[\\\"Created At\\\"],\\\"8AriEH\\\":[\\\"Image instance \\\\\\\"\\\",[\\\"imageName\\\"],\\\"\\\\\\\" has been created\\\"],\\\"8BjKi0\\\":[\\\"Last Modified:\\\"],\\\"8HrqL8\\\":[\\\"<0>Are you sure?</0> All \\\",[\\\"bucketCount\\\"],\\\" \\\",[\\\"bucketCount\\\",\\\"plural\\\",{\\\"one\\\":[\\\"object\\\"],\\\"other\\\":[\\\"objects\\\"]}],\\\" in bucket \\\\\\\"\\\",[\\\"bucketName\\\"],\\\"\\\\\\\" will be permanently deleted. This action cannot be undone.\\\"],\\\"8Pcsi8\\\":[\\\"Enter a timestamp like \\\\\\\"YYYY-MM-DD HH:mm:ss\\\\\\\" to schedule automatic deletion.\\\"],\\\"8S2nDL\\\":[\\\"No PCAs found\\\"],\\\"8TSI9h\\\":[\\\"Deactivating this image will prevent it from being used to launch new instances. Existing instances will not be affected.\\\"],\\\"8Tg/JR\\\":[\\\"Custom\\\"],\\\"8ZOb7O\\\":[[\\\"numberDeleted\\\"],\\\" object was permanently deleted.\\\"],\\\"8ZsakT\\\":[\\\"Password\\\"],\\\"8c3/77\\\":[\\\"Max meta name length\\\"],\\\"8erw15\\\":[\\\"Bucket \\\\\\\"\\\",[\\\"bucketName\\\"],\\\"\\\\\\\" was already empty.\\\"],\\\"8jLXs3\\\":[\\\"Versioned writes\\\"],\\\"8s0tOH\\\":[\\\"You don't have permission to add tenant access to this flavor.\\\"],\\\"8t1+HU\\\":[\\\"Deactivated \\\",[\\\"successCount\\\"],\\\" image(s), but \\\",[\\\"failedCount\\\"],\\\" image(s) could not be deactivated.\\\"],\\\"8uPTwT\\\":[[\\\"filteredCount\\\",\\\"plural\\\",{\\\"one\\\":[[\\\"filteredCount\\\"],\\\" of \\\",[\\\"totalCount\\\"],\\\" container\\\"],\\\"other\\\":[[\\\"filteredCount\\\"],\\\" of \\\",[\\\"totalCount\\\"],\\\" containers\\\"]}]],\\\"8wdCNd\\\":[\\\"tcp, udp, icmp, or protocol number\\\"],\\\"8yVjU5\\\":[\\\"Issue Self Signed Certificate\\\"],\\\"8zAn1f\\\":[\\\"Failed to delete flavor. Please try again.\\\"],\\\"97QUV6\\\":[\\\"Delete Folder\\\"],\\\"98Fs4G\\\":[\\\"Creating image...\\\"],\\\"9J93Xr\\\":[\\\"Container name cannot contain slashes\\\"],\\\"9SX0bO\\\":[\\\"The image \\\\\\\"\\\",[\\\"imageName\\\"],\\\"\\\\\\\" could not be updated: \\\"],\\\"9X8lAk\\\":[\\\"Allocate\\\"],\\\"9doWrf\\\":[\\\"Failed to add member\\\"],\\\"9dsDHD\\\":[\\\"The image \\\\\\\"\\\",[\\\"imageId\\\"],\\\"\\\\\\\" could not be re-activated: \\\",[\\\"message\\\"]],\\\"9iz2XW\\\":[\\\"Unable to Update Image\\\"],\\\"9njIiV\\\":[\\\"Failed to Activate Images\\\"],\\\"9rz81C\\\":[\\\"Device ID\\\"],\\\"9v5VLp\\\":[\\\"No custom properties defined\\\"],\\\"9vSW3U\\\":[\\\"Delete Recursively\\\"],\\\"9x6EkK\\\":[\\\"This is a public flavor. All tenants have access to it.\\\"],\\\"A7CVME\\\":[\\\"Select disk format first\\\"],\\\"AB4Tnl\\\":[\\\"Please select a file to upload\\\"],\\\"AGXLLY\\\":[\\\"Unable to Upload Image File\\\"],\\\"AHGd/0\\\":[\\\"⚠️ Warning: Irreversible Action\\\"],\\\"AJRhSM\\\":[\\\"Root Disk must be an integer ≥ 0.\\\"],\\\"AN0DBJ\\\":[\\\"Press Enter to add\\\"],\\\"ANOoeR\\\":[[\\\"totalItemCount\\\",\\\"plural\\\",{\\\"one\\\":[[\\\"totalItemCount\\\"],\\\" item\\\"],\\\"other\\\":[[\\\"totalItemCount\\\"],\\\" items\\\"]}]],\\\"ASJMIw\\\":[\\\"S3 bucket names must be 3-63 characters long and contain only lowercase letters, numbers, periods, and hyphens. They must start and end with a letter or number, and be globally unique within the cluster.\\\"],\\\"AX9Juz\\\":[\\\"ID must only contain alphanumeric characters, hyphens, underscores, and dots.\\\"],\\\"AZyHwC\\\":[\\\"Must be a valid IPv4 or IPv6 address (for example: 172.24.4.228 or 2001:db8::1).\\\"],\\\"Ac6dy9\\\":[\\\"Type name\\\"],\\\"AdtLNV\\\":[\\\"Ensure ACL entries are valid — correct project IDs, user IDs, and formats are your responsibility. Invalid entries may silently grant or deny unintended access.\\\"],\\\"AeP3VC\\\":[\\\"Date:\\\"],\\\"AeXO77\\\":[\\\"Account\\\"],\\\"Af8YL/\\\":[\\\"\\\\\\\"\\\",[\\\"displayName\\\"],\\\"\\\\\\\" was successfully copied to \\\",[\\\"destination\\\"],\\\".\\\"],\\\"Afh/Lb\\\":[\\\"Select destination folder\\\"],\\\"Ag1qjw\\\":[\\\"This will permanently delete this version. This operation cannot be undone. The version will be lost forever.\\\"],\\\"AirKNZ\\\":[\\\"Issue Self-Signed Certificate\\\"],\\\"AlbUVn\\\":[\\\"<0>Optimized Scalability:</0> Built for businesses of all sizes, Aurora grows with you, supporting simple environments and intricate multi-cloud setups alike.\\\"],\\\"Alx2/L\\\":[\\\"Open in new tab\\\"],\\\"AuQtzx\\\":[\\\"Must be a non-negative integer\\\"],\\\"AxZkIr\\\":[\\\"Disk (GiB)\\\"],\\\"B2Czeb\\\":[\\\"Min. RAM\\\"],\\\"B2SpR8\\\":[\\\"Bucket name must not start with reserved prefix \\\\\\\"\\\",[\\\"prefix\\\"],\\\"\\\\\\\"\\\"],\\\"B2i9cQ\\\":[\\\"Objects to be deleted (\\\",[\\\"totalCount\\\"],\\\")\\\"],\\\"B3toQF\\\":[\\\"Objects\\\"],\\\"BCJPTn\\\":[\\\"Grant access to all users from that project.\\\"],\\\"BCXapL\\\":[\\\"Failed to load container properties: \\\",[\\\"errorMessage\\\"]],\\\"BGsuZN\\\":[\\\"Key contains invalid characters (use only letters, digits, hyphens, underscores)\\\"],\\\"BJt+PJ\\\":[\\\"Failed to Delete Container\\\"],\\\"BMTd81\\\":[\\\"This action cannot be undone. The target project will lose access to this security group immediately.\\\"],\\\"BMogtG\\\":[\\\"Issue End Entity Certificate\\\"],\\\"BOQYRn\\\":[\\\"Loading Key Pairs...\\\"],\\\"BOoOLQ\\\":[\\\"All Buckets Emptied\\\"],\\\"BP4Fwj\\\":[\\\"Error Loading Objects: \\\",[\\\"errorMessage\\\"]],\\\"BSaBkZ\\\":[\\\"Objects — \\\",[\\\"containerName\\\"]],\\\"BTsbBe\\\":[\\\"Bucket Name\\\"],\\\"BYH/2L\\\":[\\\"Unable to Deactivate Image\\\"],\\\"BZpsYm\\\":[\\\"Failed to load containers: \\\",[\\\"errorMessage\\\"]],\\\"BgMp/T\\\":[\\\"Invalid format combination for selected disk format\\\"],\\\"Blsc/x\\\":[\\\"Delete Certificate Authority\\\"],\\\"BoIAP6\\\":[\\\"The ID of the network associated with the floating IP.\\\"],\\\"BoPocW\\\":[\\\"MD5 checksum\\\"],\\\"BrrIs8\\\":[\\\"Storage\\\"],\\\"CA8ZeT\\\":[\\\"Image \\\\\\\"\\\",[\\\"imageName\\\"],\\\"\\\\\\\" visibility updated to \\\",[\\\"visibility\\\"]],\\\"CBFSfX\\\":[\\\"Please fix the validation errors below.\\\"],\\\"CFMxC8\\\":[\\\"Images Deleted\\\"],\\\"CMVP7y\\\":[\\\"This action cannot be undone. The rule will be permanently deleted.\\\"],\\\"CfKRC1\\\":[\\\"Empty Bucket\\\"],\\\"CgZxr7\\\":[\\\"Min RAM (MB)\\\"],\\\"ChOuUj\\\":[\\\"Floating IP not found\\\"],\\\"Cj2Gtd\\\":[\\\"Size\\\"],\\\"ClGcRq\\\":[\\\"Containers\\\"],\\\"CongmL\\\":[\\\"Could not delete bucket \\\\\\\"\\\",[\\\"bucketName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"CpZKLR\\\":[\\\"Version ID\\\"],\\\"CtiFDz\\\":[\\\"This will permanently delete all objects from \\\",[\\\"totalCount\\\"],\\\" selected \\\",[\\\"totalCount\\\",\\\"plural\\\",{\\\"one\\\":[\\\"bucket\\\"],\\\"other\\\":[\\\"buckets\\\"]}],\\\". This action cannot be undone.\\\"],\\\"Cu6xuZ\\\":[\\\"This is a <0>dynamic large object (DLO)</0> manifest. Metadata changes apply to the manifest only — segment objects are not affected.\\\"],\\\"CunRry\\\":[\\\"Invalid project ID format. Must be 32 hexadecimal characters (e.g., b90f9c4bc76140e18540b2cec1299e2a) or UUID format (e.g., 12345678-1234-1234-1234-123456789abc)\\\"],\\\"Cxgv2U\\\":[\\\"Min. Disk\\\"],\\\"D/8vkD\\\":[\\\"It will appear in your image list.\\\"],\\\"D3IRXw\\\":[\\\"Detaching Floating IP...\\\"],\\\"D7qT9F\\\":[\\\"Why Choose Aurora?\\\"],\\\"D8ak4F\\\":[[\\\"totalItemCount\\\",\\\"plural\\\",{\\\"one\\\":[[\\\"filteredItemCount\\\"],\\\" of \\\",[\\\"totalItemCount\\\"],\\\" item\\\"],\\\"other\\\":[[\\\"filteredItemCount\\\"],\\\" of \\\",[\\\"totalItemCount\\\"],\\\" items\\\"]}]],\\\"DDRhQm\\\":[\\\"Your session has expired.\\\"],\\\"DHrCY6\\\":[\\\"Common name\\\"],\\\"DIZzgv\\\":[\\\"Failed to load versions\\\"],\\\"DJT9tB\\\":[\\\"Account quotas\\\"],\\\"DKkOPx\\\":[\\\"Extra Specs\\\"],\\\"DNVql8\\\":[\\\"Full lifecycle management of Floating IPs, including attachment, port association/disassociation, DNS settings, and deletion\\\"],\\\"DcMIiu\\\":[\\\"Could not update ACLs for container \\\\\\\"\\\",[\\\"containerName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"Df0YHr\\\":[\\\"Update Security Group\\\"],\\\"Dh1qvV\\\":[\\\"You are about to delete \\\",[\\\"deletableCount\\\"],\\\" image(s). This action cannot be undone.\\\"],\\\"Dia2Ue\\\":[\\\"There are no RBAC policies for this security group\\\"],\\\"Do5/uH\\\":[\\\"The flavor or tenant could not be found. It may have already been removed.\\\"],\\\"Dqnh7K\\\":[\\\"Specific referrer: \\\",[\\\"host\\\"]],\\\"Dt5W9T\\\":[\\\"Remove RBAC Policy\\\"],\\\"DvB4XF\\\":[\\\"Drop your file here\\\"],\\\"E/QGRL\\\":[\\\"Disabled\\\"],\\\"E4QYe7\\\":[\\\"Suggested Images\\\"],\\\"E6nRW7\\\":[\\\"Copy URL\\\"],\\\"E7kdtm\\\":[\\\"Choose Certificate to Import\\\"],\\\"EF2EU9\\\":[\\\"Deleting...\\\"],\\\"EPMHs9\\\":[\\\"You don't have permission to delete flavors in this project.\\\"],\\\"EQnVgi\\\":[\\\"Flavor service is not available for this project.\\\"],\\\"EaVQC6\\\":[\\\"How Restore Works\\\"],\\\"EdQY6l\\\":[\\\"None\\\"],\\\"Ef7StM\\\":[\\\"Unknown\\\"],\\\"Enpdmy\\\":[\\\"Type <0>remove</0> to confirm:\\\"],\\\"EoKe5U\\\":[\\\"Domain\\\"],\\\"Eq5PsT\\\":[\\\"Type \\\\\\\"detach\\\\\\\" to confirm\\\"],\\\"EqSPkP\\\":[\\\"Loading Flavors...\\\"],\\\"Erlvqg\\\":[\\\"Object name cannot have leading or trailing whitespace\\\"],\\\"ExLULX\\\":[\\\"Image Name\\\"],\\\"EztMB8\\\":[\\\"Failed to fetch flavors from server.\\\"],\\\"F02e8I\\\":[\\\"No custom metadata. Click \\\\\\\"Add Property\\\\\\\" to create one.\\\"],\\\"F6YIQe\\\":[\\\"Efficient bulk deletion\\\"],\\\"FAA/qW\\\":[\\\"Paste the code\\\"],\\\"FJO48W\\\":[\\\"Create S3 Credentials\\\"],\\\"FKL6Jv\\\":[\\\"e.g. .r:*,.rlistings\\\"],\\\"FNcMGM\\\":[\\\"Creation Date\\\"],\\\"FOcBn3\\\":[\\\"Detach\\\"],\\\"FQBaXG\\\":[\\\"Activate\\\"],\\\"FRtmJJ\\\":[\\\"Storage container not found\\\"],\\\"FSbpS7\\\":[\\\"CPU\\\"],\\\"FgWsFY\\\":[\\\"Object <0>\\\\\\\"\\\",[\\\"displayName\\\"],\\\"\\\\\\\"</0> will be permanently deleted. This cannot be undone.\\\"],\\\"FjONW3\\\":[\\\"Error Loading Flavor\\\"],\\\"FjPnAE\\\":[\\\"Error loading security group\\\"],\\\"Flugry\\\":[[\\\"progressPct\\\"],\\\"%\\\"],\\\"FrLdVI\\\":[\\\"Bucket to empty:\\\"],\\\"FwSyEp\\\":[\\\"The specified project does not exist or you don't have permission to share with it.\\\"],\\\"Fzrzfe\\\":[\\\"Folder name is required\\\"],\\\"G3pRO8\\\":[\\\"An object with this name already exists at the destination and will be overwritten.\\\"],\\\"G6AP+o\\\":[\\\"Shared:\\\"],\\\"GDx4dP\\\":[\\\"Manage your Certificate\\\"],\\\"GEgjm+\\\":[\\\"Loading Objects...\\\"],\\\"GPuCEo\\\":[\\\"Leave empty for all types\\\"],\\\"GSIPwA\\\":[\\\"Temporary URL\\\"],\\\"GbKqnI\\\":[\\\"Activated \\\",[\\\"successCount\\\"],\\\" image(s), but \\\",[\\\"failedCount\\\"],\\\" image(s) could not be activated.\\\"],\\\"Gfx1qQ\\\":[\\\"Unable to Load Content\\\"],\\\"GxkJXS\\\":[\\\"Uploading...\\\"],\\\"Gyd3No\\\":[\\\"No specific tenant access configured for this private flavor. Click \\\\\\\"Add Tenant Access\\\\\\\" to grant access.\\\"],\\\"H+a5j6\\\":[\\\"Release\\\"],\\\"H4Qwmp\\\":[\\\"No objects match your search. Try adjusting your search term.\\\"],\\\"H7u085\\\":[\\\"No projects have access to this image yet. Click \\\\\\\"Add Project Access\\\\\\\" to grant access.\\\"],\\\"HAcOOW\\\":[\\\"Your credentials are valid but you don't have permission to perform this operation. Please contact your administrator to grant you the necessary permissions.\\\"],\\\"HAkrpK\\\":[\\\"At Aurora, our mission is to provide a centralized platform that unifies cloud management. We aim to simplify the complexities of provisioning, configuring, and scaling resources across diverse cloud environments while enabling seamless growth for your business.\\\"],\\\"HBpi4q\\\":[\\\"Loading Images...\\\"],\\\"HG0uMz\\\":[\\\"Back to Certificate Authorities\\\"],\\\"HM56Bx\\\":[\\\"Creating...\\\"],\\\"HNlEFZ\\\":[\\\"delete\\\"],\\\"HQH8HM\\\":[\\\"Could not update \\\\\\\"\\\",[\\\"objectName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"HVdrr1\\\":[\\\"ANY referrer\\\"],\\\"HiDAFk\\\":[\\\"Create Bucket\\\"],\\\"Hivb/4\\\":[\\\"Server is experiencing issues. Please try again later.\\\"],\\\"Hiw1Ha\\\":[\\\"No containers found\\\"],\\\"HlwgQN\\\":[\\\"Object \\\\\\\"\\\",[\\\"objectName\\\"],\\\"\\\\\\\" was permanently deleted.\\\"],\\\"HuA8iQ\\\":[\\\"Allocating Floating IP...\\\"],\\\"HxTYrE\\\":[\\\"The flavor could not be found. It may have been deleted.\\\"],\\\"I5kZVK\\\":[\\\"Remote Source\\\"],\\\"INUP6f\\\":[\\\"<0>Effortless Resource Provisioning:</0> Quickly provision, configure, and deploy resources like servers, networks, and volumes with just a few clicks.\\\"],\\\"IOkHLC\\\":[\\\"Failed to copy object: \\\",[\\\"errorMessage\\\"]],\\\"IQSLN+\\\":[\\\"Error loading Certificate Authority\\\"],\\\"IQldU4\\\":[\\\"Bucket name must contain only lowercase letters, numbers, periods, and hyphens\\\"],\\\"IUwGEM\\\":[\\\"Save Changes\\\"],\\\"IWF68U\\\":[\\\"Storage Overview\\\"],\\\"IZ6Mh2\\\":[\\\"Enter your domain\\\"],\\\"IbYr/u\\\":[\\\"Content type\\\"],\\\"Io2Dvq\\\":[\\\"Certificate Authority not found\\\"],\\\"Ioblgz\\\":[\\\"This action is permanent. All objects in the container will be deleted and this cannot be undone.\\\"],\\\"Iuyw9j\\\":[\\\"This is a delete marker. Deleting it will \\\\\\\"undelete\\\\\\\" the object and restore the previous version as the current version.\\\"],\\\"IwlPLb\\\":[\\\"Delete Bucket\\\"],\\\"IxsRaQ\\\":[\\\"Enable Versioning\\\"],\\\"J4DKSM\\\":[\\\"Container format is required\\\"],\\\"J6EOll\\\":[\\\"Move/Rename object:\\\"],\\\"J7+bZb\\\":[\\\"Folder Deleted\\\"],\\\"J9QcnV\\\":[\\\"Successfully activated \\\",[\\\"successCount\\\"],\\\" of \\\",[\\\"totalCount\\\"],\\\" image(s)\\\"],\\\"J9cmxx\\\":[\\\"Failed to update visibility to \\\",[\\\"newVisibility\\\"]],\\\"JB0bhm\\\":[\\\"Get Involved\\\"],\\\"JN3Lu1\\\":[\\\"This creates a new latest version with the content from the selected version. All existing versions (including the current latest) are preserved.\\\"],\\\"JNGYAW\\\":[\\\"Container name is required\\\"],\\\"JPWqr2\\\":[\\\"Bucket \\\\\\\"\\\",[\\\"bucketName\\\"],\\\"\\\\\\\" was successfully emptied. \\\",[\\\"deletedCount\\\"],\\\" objects deleted.\\\"],\\\"JT+lLV\\\":[\\\"Delete Object\\\"],\\\"JT3I1g\\\":[\\\"Delete Flavor\\\"],\\\"JeRXll\\\":[\\\"This key is reserved and managed separately\\\"],\\\"JfWCsP\\\":[\\\"Partial Deactivation Success\\\"],\\\"Jh4rAZ\\\":[\\\"Error loading image\\\"],\\\"Jim5X9\\\":[\\\"Stateful\\\"],\\\"JoECY1\\\":[\\\"The extra spec data provided is invalid. Please check your input.\\\"],\\\"JpZn1L\\\":[\\\"Already deactivated (will be skipped)\\\"],\\\"JrmKyf\\\":[\\\"Failed: \\\",[\\\"errorDetails\\\"]],\\\"JtHgVz\\\":[\\\"Delete Images\\\"],\\\"JuOpPY\\\":[\\\"All objects in the selected containers will be permanently deleted. This cannot be undone.\\\"],\\\"K+e/0e\\\":[\\\"RAM (MiB)\\\"],\\\"K3bUTE\\\":[\\\"Minimum disk must be 0 or greater\\\"],\\\"K8Qnlj\\\":[\\\"Moving...\\\"],\\\"K9eC8x\\\":[\\\"This could be due to insufficient permissions or a temporary service issue. Please check your access rights or try refreshing the page.\\\"],\\\"KDw4GX\\\":[\\\"Try again\\\"],\\\"KJC+M7\\\":[\\\"Server error occurred while fetching flavor details. Please try again later.\\\"],\\\"KOpPMt\\\":[\\\"Total size quota\\\"],\\\"KSW/GC\\\":[\\\"There are no flavors available for this project with the current filters applied. Try adjusting your filter criteria or create a new flavor.\\\"],\\\"KZN4Lc\\\":[\\\"Delete All\\\"],\\\"KhNDX4\\\":[\\\"Object Storage (Ceph)\\\"],\\\"Kl2hZ+\\\":[\\\"Delete Version\\\"],\\\"Km4AGG\\\":[\\\"Creating security group...\\\"],\\\"KoQP4F\\\":[\\\"Server error occurred while adding tenant access. Please try again later.\\\"],\\\"KsIM0b\\\":[\\\"Boot RAM\\\"],\\\"KsnZ3m\\\":[\\\"Folder \\\\\\\"\\\",[\\\"folderName\\\"],\\\"\\\\\\\" was successfully created.\\\"],\\\"KzUd7m\\\":[\\\"new-folder-name\\\"],\\\"LASqRM\\\":[\\\"Object \\\\\\\"\\\",[\\\"displayName\\\"],\\\"\\\\\\\" was permanently deleted.\\\"],\\\"LI70tz\\\":[\\\"Error loading Certificate\\\"],\\\"LI8Z2I\\\":[\\\"Download \\\",[\\\"rowDisplayName\\\"]],\\\"LK0pQN\\\":[\\\"Disk format is required\\\"],\\\"LMdsuJ\\\":[\\\"Port (from)\\\"],\\\"LQQCas\\\":[\\\"Folder \\\\\\\"\\\",[\\\"folderName\\\"],\\\"\\\\\\\" and \\\",[\\\"deletedCount\\\"],\\\" object was permanently deleted.\\\"],\\\"La2LYh\\\":[\\\"\\\\\\\"\\\",[\\\"displayName\\\"],\\\"\\\\\\\" was successfully copied to \\\",[\\\"destination\\\"],\\\" (existing object was replaced).\\\"],\\\"Llcakz\\\":[\\\"Updated At\\\"],\\\"LqMb+g\\\":[\\\"To confirm this action, type the word <0>\\\\\\\"release\\\\\\\"</0> in the field below.\\\"],\\\"LtI9AS\\\":[\\\"Owner\\\"],\\\"Lylr9Z\\\":[\\\"Object Copied\\\"],\\\"M3bysB\\\":[\\\"Bucket Created\\\"],\\\"M470oJ\\\":[\\\"The flavor could not be found or has no extra specs.\\\"],\\\"M5Epeo\\\":[\\\"Edit Image Details\\\"],\\\"M5RhXF\\\":[\\\"Removing...\\\"],\\\"M5rEN5\\\":[\\\"Session Expired\\\"],\\\"M8er/5\\\":[\\\"Name:\\\"],\\\"M9H+/G\\\":[\\\"projects\\\"],\\\"MEIAzV\\\":[\\\"Unnamed\\\"],\\\"MI6aae\\\":[\\\"This action will create a self-signed CA certificate.\\\"],\\\"MILoeL\\\":[\\\"Services\\\"],\\\"MJLqeY\\\":[\\\"Failed to check bucket contents: \\\",[\\\"errorMessage\\\"]],\\\"MJtNLd\\\":[\\\"Images to delete:\\\"],\\\"MOug+V\\\":[\\\"Enter a tag and press Enter or click Add\\\"],\\\"MRB7nI\\\":[\\\"Direction\\\"],\\\"MXoA/6\\\":[\\\"Upload Object\\\"],\\\"MXw7Fr\\\":[\\\"Server Name\\\"],\\\"MZGbkp\\\":[\\\"VCPUs\\\"],\\\"MbKJNP\\\":[\\\"You don't have permission to access flavor access information for this flavor.\\\"],\\\"MgZyuJ\\\":[\\\"You are about to activate <0>\\\",[\\\"deactivatedCount\\\"],\\\" image(s)</0>. Activated images will be available for launching new instances.\\\"],\\\"Mj5iQ0\\\":[\\\"YYYY-MM-DD HH:mm:ss\\\"],\\\"MmtQVF\\\":[\\\"Invalid value for public flavor setting.\\\"],\\\"Mt6sRo\\\":[\\\"You are not authorized to access flavor access information. Please log in again.\\\"],\\\"MtzSbv\\\":[\\\"Object name is required\\\"],\\\"MuKU9V\\\":[\\\"Failed to load objects: \\\",[\\\"errorMessage\\\"]],\\\"N2S1rs\\\":[\\\"Empty\\\"],\\\"N5I2RJ\\\":[\\\"Type \\\\\\\"release\\\\\\\" to confirm\\\"],\\\"N5vGcw\\\":[\\\"Enter your credentials to access your account\\\"],\\\"NH2fsP\\\":[\\\"Already deactivated (will be skipped):\\\"],\\\"NM0jNN\\\":[\\\"Showing all versions of this object. The latest version is highlighted. Delete markers indicate when the object was deleted.\\\"],\\\"NNpgo3\\\":[\\\"Bucket name\\\"],\\\"NOdFZR\\\":[\\\"Generating...\\\"],\\\"NQU1Nn\\\":[\\\"Copy container name\\\"],\\\"NRMm0E\\\":[\\\"This tenant already has access to the flavor.\\\"],\\\"NRP2uq\\\":[\\\"Share object:\\\"],\\\"NRVSdy\\\":[\\\"Member ID\\\"],\\\"NW1XEL\\\":[\\\"Emptying bucket \\\",[\\\"progressCurrent\\\"],\\\" of \\\",[\\\"progressTotal\\\"],\\\", please wait...\\\"],\\\"NW4PIb\\\":[\\\"Could not create folder \\\\\\\"\\\",[\\\"folderName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"NZJhro\\\":[\\\"Object name cannot contain slashes\\\"],\\\"Nc7QKU\\\":[\\\"Fixed IP Address\\\"],\\\"NeUjqc\\\":[\\\"Enable file listing\\\"],\\\"Ni6RvO\\\":[\\\"Versioning Suspended\\\"],\\\"NixRmA\\\":[\\\"Min Disk (GB)\\\"],\\\"NlcF/v\\\":[\\\"No flavor selected for deletion.\\\"],\\\"No++00\\\":[\\\"Bucket to delete:\\\"],\\\"NopYGU\\\":[\\\"Disk Format\\\"],\\\"Np28ib\\\":[\\\"or drag and drop\\\"],\\\"Nu4oKW\\\":[\\\"Description\\\"],\\\"Nvfd2b\\\":[\\\"Versioning is enabled\\\"],\\\"O80bQY\\\":[\\\"Loading object properties...\\\"],\\\"O8tK4v\\\":[\\\"Add rule\\\"],\\\"ONWvwQ\\\":[\\\"Upload\\\"],\\\"OR475H\\\":[\\\"Network\\\"],\\\"OSlLnz\\\":[\\\"Image Visibility\\\"],\\\"OYHzN1\\\":[\\\"Tags\\\"],\\\"OZImTR\\\":[\\\"Container listing limit\\\"],\\\"OaSktR\\\":[\\\"Device Owner\\\"],\\\"Oc8Aqv\\\":[\\\"Preview and Edit metadata\\\"],\\\"OlmKCg\\\":[\\\"A flavor with this ID or name already exists. Please use different values.\\\"],\\\"OvEjsP\\\":[\\\"Copying...\\\"],\\\"Ovofy+\\\":[\\\"Release Floating IP \\\",[\\\"floating_ip_address\\\"]],\\\"OxDN2m\\\":[\\\"Failed to create flavor. Please try again.\\\"],\\\"OxaeYj\\\":[\\\"We are building Aurora Dashboard to serve you better. Your feedback is invaluable in shaping a tool that meets the unique needs of businesses like yours. Stay connected and join us as we redefine cloud management.\\\"],\\\"Oxl1UN\\\":[\\\"If there is no index file, the URL displays a list of objects in the container.\\\"],\\\"PAKSdy\\\":[\\\"Enter a floating IP or leave blank to auto-assign one\\\"],\\\"PEGvy+\\\":[\\\"Minimum RAM must be 0 or greater\\\"],\\\"PHsq3v\\\":[\\\"Before proceeding, ensure that the Project ID and User ID you enter are correct. The system cannot validate these values, and incorrect IDs may apply access to wrong projects and users.\\\"],\\\"PHt+EV\\\":[\\\"Type <0>delete</0> to confirm:\\\"],\\\"PIbPRX\\\":[\\\"RX/TX Factor must be an integer ≥ 1.\\\"],\\\"PLwzWR\\\":[\\\"All containers\\\"],\\\"PYQUjU\\\":[\\\"Failed to load metadata configuration.\\\"],\\\"PZnUbs\\\":[\\\"Please log in again to continue.\\\"],\\\"PgNNGl\\\":[\\\"More Actions\\\"],\\\"PiH3UR\\\":[\\\"Copied!\\\"],\\\"PiyQJ/\\\":[\\\"No flavors found\\\"],\\\"PkfPsB\\\":[\\\"Enter the ID of the project you want to share this security group with. You can find project IDs in the account/project switcher or in the Identity service.\\\"],\\\"Pkw7J9\\\":[\\\"This folder is empty.\\\"],\\\"PsEGri\\\":[\\\"Ubuntu 22.04 LTS\\\"],\\\"PtjzS+\\\":[\\\"Associates on the selected port. If the port has multiple IPs, select the desired fixed IP address.\\\"],\\\"PzgYM9\\\":[\\\"Checksum\\\"],\\\"Q1W//7\\\":[\\\"No services available for this project.\\\"],\\\"Q2xmVl\\\":[\\\"Symlinks\\\"],\\\"Q9f2QF\\\":[[\\\"numberDeleted\\\"],\\\" objects were deleted successfully, but some deletions failed.\\\"],\\\"QAUa4B\\\":[\\\"Enter a single port, or define a range by also filling \\\\\\\"Port (to)\\\\\\\". \\\\\\\"Port (to)\\\\\\\" is optional.\\\"],\\\"QEtDlS\\\":[\\\"Copying object...\\\"],\\\"QNHur0\\\":[\\\"Failed to load container ACLs: \\\",[\\\"errorMessage\\\"]],\\\"QQ8wUG\\\":[\\\"This action cannot be undone. The flavor will be permanently deleted.\\\"],\\\"QRlXaL\\\":[\\\"Bucket name must not end with reserved suffix \\\\\\\"\\\",[\\\"suffix\\\"],\\\"\\\\\\\"\\\"],\\\"QV1ZPO\\\":[\\\"Key is required\\\"],\\\"QWdKwH\\\":[\\\"Move\\\"],\\\"QYiqYb\\\":[\\\"Failed to update access status\\\"],\\\"Qb+14I\\\":[\\\"This action cannot be undone. The security group will be permanently deleted.\\\"],\\\"QdGvPV\\\":[\\\"Size:\\\"],\\\"QetsXP\\\":[\\\"Upload failed: \\\",[\\\"uploadError\\\"]],\\\"Qg4EG6\\\":[\\\"Unable to connect to the compute service. Please check your connection and try again.\\\"],\\\"QpbWpf\\\":[\\\"Bucket \\\\\\\"\\\",[\\\"bucketName\\\"],\\\"\\\\\\\" was successfully emptied. \\\",[\\\"deletedCount\\\"],\\\" object deleted.\\\"],\\\"QuJSSl\\\":[\\\"Failed to create the flavor. Please try again.\\\"],\\\"QvqBQa\\\":[\\\"Target container\\\"],\\\"Qx7DM7\\\":[\\\"Capabilities\\\"],\\\"QxBGbh\\\":[\\\"Protected (will be skipped):\\\"],\\\"QytzQr\\\":[\\\"Type \\\\\\\"delete\\\\\\\" to confirm\\\"],\\\"R6kcsL\\\":[\\\"Must be a valid PQDN or FQDN (alphanumeric and hyphens only, cannot start or end with hyphen).\\\"],\\\"R6u5CR\\\":[\\\"Failed to activate \\\",[\\\"failedCount\\\"],\\\" of \\\",[\\\"totalCount\\\"],\\\" image(s). Some images may already be active or in an invalid state.\\\"],\\\"RByeNR\\\":[\\\"Your session expired. Please login again.\\\"],\\\"RCr0yv\\\":[\\\"Failed to load flavor details. Please try again.\\\"],\\\"RFDYCD\\\":[\\\"Minimum disk size required to boot this image\\\"],\\\"RGhYAo\\\":[\\\"RAM\\\"],\\\"RGrgxg\\\":[\\\"Could not delete container \\\\\\\"\\\",[\\\"containerName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"RGwfoL\\\":[\\\"Max meta count\\\"],\\\"RNBvdl\\\":[\\\"Max SLO segments\\\"],\\\"RS0o7b\\\":[\\\"State\\\"],\\\"RSFkXF\\\":[\\\"Activate Image\\\"],\\\"RSMPjT\\\":[\\\"You are currently on the dashboard route.\\\"],\\\"RSg/pq\\\":[\\\"Failed to Delete Object\\\"],\\\"RTQFAw\\\":[\\\"You are not authorized to create extra specs. Please log in again.\\\"],\\\"RWQ6BN\\\":[\\\"Enter Common name (e.g., demo-ca.test.sci)\\\"],\\\"Rih53k\\\":[\\\"Max container name length\\\"],\\\"Rlp5zj\\\":[\\\"Create Flavor\\\"],\\\"RrEEdP\\\":[\\\"Benefits:\\\"],\\\"S0kLOH\\\":[\\\"ID\\\"],\\\"S1iTXO\\\":[\\\"Image instance \\\\\\\"\\\",[\\\"imageName\\\"],\\\"\\\\\\\" has been deleted\\\"],\\\"S3olSf\\\":[\\\"No extra specs found. Click \\\\\\\"Add Metadata\\\\\\\" to create one.\\\"],\\\"S5CUKP\\\":[\\\"Member ID (project UUID) is required.\\\"],\\\"S63NbU\\\":[\\\"The image \\\\\\\"\\\",[\\\"imageId\\\"],\\\"\\\\\\\" could not be deactivated: \\\",[\\\"message\\\"]],\\\"S8/j2h\\\":[\\\"Failed to Empty Container\\\"],\\\"SBGiGm\\\":[\\\"Read ACLs\\\"],\\\"SCY5an\\\":[\\\"Failed to Move Object\\\"],\\\"SFo0kK\\\":[\\\"All Images\\\"],\\\"SIfYq6\\\":[\\\"Edit Metadata\\\"],\\\"SLEH7X\\\":[\\\"Enter DNS name\\\"],\\\"STc+7E\\\":[\\\"Max containers per extraction\\\"],\\\"SU0uxT\\\":[\\\"Upload object to:\\\"],\\\"SUSS9i\\\":[\\\"Container name\\\"],\\\"SVLToM\\\":[\\\"Type \\\\\\\"remove\\\\\\\" to confirm\\\"],\\\"SZw9tS\\\":[\\\"View Details\\\"],\\\"Sb/VT5\\\":[\\\"Container \\\\\\\"\\\",[\\\"containerName\\\"],\\\"\\\\\\\" was successfully emptied. \\\",[\\\"deletedCount\\\"],\\\" objects deleted.\\\"],\\\"Sf3Gvg\\\":[\\\"Failed to load PCAs\\\"],\\\"SfW/3r\\\":[\\\"There are no groups\\\"],\\\"Sgz1vJ\\\":[\\\"Member \\\\\\\"\\\",[\\\"trimmedMemberId\\\"],\\\"\\\\\\\" has been added successfully.\\\"],\\\"Smk7M2\\\":[\\\"Error loading floating IP\\\"],\\\"SuX2Ca\\\":[\\\"Basic Info\\\"],\\\"T/UxKm\\\":[\\\"<0>Edit metadata:</0> <1>\\\",[\\\"displayName\\\"],\\\"</1>\\\"],\\\"T6Gm5y\\\":[\\\"Select an external network\\\"],\\\"T7mgdd\\\":[\\\"Successfully deleted \\\",[\\\"successCount\\\"],\\\" of \\\",[\\\"totalCount\\\"],\\\" image(s)\\\"],\\\"T8N6oi\\\":[\\\"Property Key\\\"],\\\"T9Mtpi\\\":[\\\"Tenant ID\\\"],\\\"T9o/az\\\":[\\\"Loading Certificates issued by Certificate Authority...\\\"],\\\"TM93nK\\\":[\\\"Delete Security Group Rule\\\"],\\\"TPMaxo\\\":[\\\"Type “release” to confirm\\\"],\\\"TQn3hH\\\":[\\\"Failed to create image. Please try again.\\\"],\\\"TSclU4\\\":[\\\"property-key\\\"],\\\"TTX3nV\\\":[\\\"Could not move \\\\\\\"\\\",[\\\"displayName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"TVsqbi\\\":[\\\"Object metadata will be automatically copied during the move operation.\\\"],\\\"TZJiVf\\\":[\\\"Container \\\\\\\"\\\",[\\\"containerName\\\"],\\\"\\\\\\\" was successfully emptied. \\\",[\\\"deletedCount\\\"],\\\" object deleted.\\\"],\\\"TfC9O+\\\":[\\\"Last modified (UTC)\\\"],\\\"TfdeUd\\\":[\\\"Failed to delete the extra spec. Please try again.\\\"],\\\"TpGxnq\\\":[\\\"Enter member ID\\\"],\\\"Tx4Ym+\\\":[\\\"Enter a valid PQDN or FQDN (max 63 characters) to associate with the floating IP. A and PTR records are created automatically.\\\"],\\\"TyODHt\\\":[\\\"Save Metadata\\\"],\\\"U/oahm\\\":[\\\"URL Copied\\\"],\\\"U0sPCo\\\":[\\\"Search flavors...\\\"],\\\"U2wTy/\\\":[\\\"Note: The 'stateful' attribute cannot be changed if this security group is currently in use by one or more ports.\\\"],\\\"U4fmHG\\\":[\\\"The text must match “detach” in lowercase.\\\"],\\\"U6L+P/\\\":[\\\"Inactivity Timeout\\\"],\\\"U9q4M7\\\":[\\\"Back to Security Groups\\\"],\\\"UB+Q8v\\\":[\\\"Loading Certificate Details...\\\"],\\\"UBv8UK\\\":[\\\"Delete Permanently\\\"],\\\"UGhVPl\\\":[\\\"Object Type\\\"],\\\"UJmAAK\\\":[\\\"Subject\\\"],\\\"UK2mpr\\\":[\\\"Generating temporary URL...\\\"],\\\"UKwOYH\\\":[\\\"Image File\\\"],\\\"UO3hJ2\\\":[\\\"Temporary URLs\\\"],\\\"UQ7Wyv\\\":[\\\"Manage Access for Image - \\\",[\\\"imageName\\\"]],\\\"URmyfc\\\":[\\\"Details\\\"],\\\"USiuNX\\\":[\\\"Container quotas\\\"],\\\"UVFHGY\\\":[\\\"e.g. PROJECT_ID:USER_ID\\\"],\\\"UVSFVV\\\":[\\\"Reject Shared Image\\\"],\\\"UYSopm\\\":[\\\"Minimum RAM (MB)\\\"],\\\"UaP7Th\\\":[\\\"Failed to Create Bucket\\\"],\\\"UbRKMZ\\\":[\\\"Pending\\\"],\\\"UbWeJA\\\":[\\\"Duration/validity\\\"],\\\"UdcGJu\\\":[\\\"Activate Images\\\"],\\\"Uj+n/2\\\":[\\\"Failed to Delete Folder\\\"],\\\"UkVkoq\\\":[\\\"Leave empty for all codes\\\"],\\\"UmQ3/m\\\":[\\\"Deactivate Selected\\\"],\\\"Uwo8Xw\\\":[\\\"This image was shared with you by <0>\\\",[\\\"ownerProject\\\"],\\\"</0> on \\\",[\\\"sharedAt\\\"],\\\".\\\"],\\\"Ux/pNd\\\":[[\\\"totalCount\\\",\\\"plural\\\",{\\\"one\\\":[[\\\"totalCount\\\"],\\\" bucket\\\"],\\\"other\\\":[[\\\"totalCount\\\"],\\\" buckets\\\"]}]],\\\"UztfYZ\\\":[\\\"Select port to associate\\\"],\\\"V/8B9A\\\":[\\\"I confirm that all existing versions will also be deleted\\\"],\\\"V/SINY\\\":[\\\"Update object\\\"],\\\"V1TzeS\\\":[\\\"Container \\\\\\\"\\\",[\\\"containerName\\\"],\\\"\\\\\\\" was successfully deleted.\\\"],\\\"V66Jih\\\":[\\\"Access Status\\\"],\\\"V7fN5X\\\":[\\\"Copy object:\\\"],\\\"V8/eES\\\":[\\\"Bucket name must not contain consecutive periods\\\"],\\\"V804LY\\\":[\\\"Updating security group...\\\"],\\\"VCM3KS\\\":[\\\"Add Project Access\\\"],\\\"VG2a+x\\\":[\\\"Bucket name must start and end with a letter or number\\\"],\\\"VKCkZH\\\":[\\\"Bucket \\\\\\\"\\\",[\\\"bucketName\\\"],\\\"\\\\\\\" was successfully created.\\\"],\\\"VKmlZ+\\\":[\\\"Containers to be emptied (\\\",[\\\"totalCount\\\"],\\\")\\\"],\\\"VLI9eO\\\":[\\\"Loading Floating IP Details...\\\"],\\\"VMh1t1\\\":[\\\"The text must match “delete” in lowercase.\\\"],\\\"VTfZPy\\\":[\\\"Access Denied\\\"],\\\"VV1fdg\\\":[\\\"Any user has read access to objects. No token is required in the request.\\\"],\\\"VaA9mu\\\":[\\\"24 hours\\\"],\\\"VakxP/\\\":[\\\"Failed to Upload Object\\\"],\\\"Vg0k6h\\\":[\\\"Showing \\\",[\\\"filteredCount\\\"],\\\" of \\\",[\\\"totalCount\\\"],\\\" \\\",[\\\"itemName\\\"]],\\\"Vh/Uj5\\\":[\\\"Target path\\\"],\\\"Vj8XFg\\\":[\\\"Failed to Create Container\\\"],\\\"Vl4XTj\\\":[\\\"Folder name cannot contain slashes\\\"],\\\"Vmojta\\\":[\\\"Access status updated to \\\\\\\"\\\",[\\\"newStatus\\\"],\\\"\\\\\\\".\\\"],\\\"Vn3sWk\\\":[\\\"Version History: \\\",[\\\"objectKey\\\"]],\\\"VoxR3s\\\":[\\\"Object was copied but could not be deleted from the source: \\\",[\\\"deleteErrorMessage\\\"]],\\\"Vz+7ZA\\\":[\\\"Could not create container \\\\\\\"\\\",[\\\"containerName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"Vzlopx\\\":[\\\"Delete container:\\\"],\\\"W0MCSG\\\":[\\\"Accept access to image\\\"],\\\"W5FkH9\\\":[\\\"Enter container name\\\"],\\\"W8Rb/w\\\":[\\\"Bucket name must not be formatted as an IP address\\\"],\\\"W9PZE0\\\":[\\\"Objects Deleted\\\"],\\\"W9kfjU\\\":[\\\"QoS Policy ID\\\"],\\\"WCKEqI\\\":[\\\"This is a <0>static large object (SLO)</0> manifest. Metadata changes apply to the manifest only — segment objects are not affected.\\\"],\\\"WCLyHI\\\":[\\\"No Floating IPs found\\\"],\\\"WErCZy\\\":[\\\"Minimum RAM required to boot this image\\\"],\\\"WIJz7N\\\":[\\\"Checking if object exists...\\\"],\\\"WIx31g\\\":[\\\"Create Certificate\\\"],\\\"WM+Nm7\\\":[\\\"Keep multiple versions of objects. Cannot be fully disabled once enabled, only suspended.\\\"],\\\"WRZ3Mt\\\":[\\\"Loading container properties...\\\"],\\\"WV/4x1\\\":[\\\"Loading buckets...\\\"],\\\"WYiUDa\\\":[\\\"Loading Containers...\\\"],\\\"WZWHIv\\\":[\\\"Error Loading Containers\\\"],\\\"Wbg1jv\\\":[\\\"Copy \\\",[\\\"text\\\"],\\\" to clipboard\\\"],\\\"Wca9WC\\\":[\\\"Failed to load security groups\\\"],\\\"WefafP\\\":[\\\"This container appears empty — the object count may not have synced yet due to a recent operation.\\\"],\\\"WidMsn\\\":[\\\"Create Certificate Authority\\\"],\\\"WlpcJv\\\":[\\\"DNS Domain\\\"],\\\"WoSkGY\\\":[\\\"Remote IP\\\"],\\\"WrUky8\\\":[\\\"Share (Temporary URL)\\\"],\\\"WyKwnD\\\":[\\\"Store old object versions\\\"],\\\"WzVwU0\\\":[\\\"Target Project ID\\\"],\\\"WzsMfv\\\":[\\\"Start typing to search for a bucket\\\"],\\\"X2OnDx\\\":[\\\"Ephemeral Disk (GiB)\\\"],\\\"X70LXS\\\":[[\\\"numberDeleted\\\"],\\\" objects were permanently deleted.\\\"],\\\"XK0Fqq\\\":[\\\"Maintain object history\\\"],\\\"XLk16/\\\":[\\\"Together, we can unlock the true potential of your cloud infrastructure.\\\"],\\\"XXRutf\\\":[\\\"Folder Name\\\"],\\\"XYZLy9\\\":[\\\"Key contains invalid characters\\\"],\\\"XvjC4F\\\":[\\\"Saving...\\\"],\\\"XwxJJB\\\":[\\\"Container \\\\\\\"\\\",[\\\"containerName\\\"],\\\"\\\\\\\" was successfully created.\\\"],\\\"XxjLdW\\\":[[\\\"emptiedCount\\\",\\\"plural\\\",{\\\"one\\\":[\\\"#\\\",\\\" container was already empty.\\\"],\\\"other\\\":[\\\"#\\\",\\\" containers were already empty.\\\"]}]],\\\"Y+2SDm\\\":[\\\"Delete Security Group \\\\\\\"\\\",[\\\"securityGroupName\\\"],\\\"\\\\\\\"\\\"],\\\"Y1YKad\\\":[\\\"Edit Details\\\"],\\\"Y8M9Uc\\\":[\\\"The container will be deleted. This action is permanent and cannot be undone.\\\"],\\\"YIix5Y\\\":[\\\"Search...\\\"],\\\"YNgcgc\\\":[\\\"Loading Flavor Details...\\\"],\\\"YRexkb\\\":[\\\"Object Updated\\\"],\\\"YUU0QW\\\":[\\\"Flavor ID is required and cannot be empty.\\\"],\\\"YVLcyI\\\":[\\\"Successfully emptied \\\",[\\\"emptiedCount\\\"],\\\" \\\",[\\\"emptiedCount\\\",\\\"plural\\\",{\\\"one\\\":[\\\"bucket\\\"],\\\"other\\\":[\\\"buckets\\\"]}],\\\", deleting \\\",[\\\"totalDeleted\\\"],\\\" \\\",[\\\"totalDeleted\\\",\\\"plural\\\",{\\\"one\\\":[\\\"object\\\"],\\\"other\\\":[\\\"objects\\\"]}],\\\".\\\"],\\\"YZmsaT\\\":[\\\"Partial Activation Success\\\"],\\\"YiMCKk\\\":[\\\"Show ACLs Preview\\\"],\\\"Yin3uB\\\":[\\\"Releasing Floating IP...\\\"],\\\"YjAOtb\\\":[\\\"Create Security Group\\\"],\\\"YrAy/S\\\":[\\\"You don't have permission to delete extra specs for this flavor.\\\"],\\\"YsOJlj\\\":[\\\"Server error occurred while fetching flavor access information. Please try again later.\\\"],\\\"YsrbQh\\\":[\\\"Owner Project ID\\\"],\\\"YuC9dj\\\":[\\\"Associate\\\"],\\\"YuGQWb\\\":[\\\"Rule Type\\\"],\\\"YzUoh9\\\":[\\\"To confirm type <0>delete</0> in the field below.\\\"],\\\"Z/eWPC\\\":[\\\"The object will be copied to this path. Navigate folders above to change the destination.\\\"],\\\"Z2fZGD\\\":[\\\"No project selected\\\"],\\\"Z30x/C\\\":[\\\"Current location:\\\"],\\\"Z3FXyt\\\":[\\\"Loading...\\\"],\\\"Z42tfY\\\":[\\\"Folders in object storage are virtual — they are created as zero-byte placeholder objects with a trailing slash. The folder will appear once created.\\\"],\\\"Z5r9vC\\\":[\\\"Partial Delete Success\\\"],\\\"Z8lGw6\\\":[\\\"Share\\\"],\\\"Z8poQH\\\":[\\\"This will delete the original object after copying it to the destination.\\\"],\\\"ZAx+d1\\\":[\\\"Max meta overall size\\\"],\\\"ZAy0zp\\\":[\\\"Successfully deactivated \\\",[\\\"successCount\\\"],\\\" of \\\",[\\\"totalCount\\\"],\\\" image(s)\\\"],\\\"ZKb0D4\\\":[\\\"Cannot move to the same location. Please select a different bucket, folder, or change the name.\\\"],\\\"ZUmOzn\\\":[\\\"Server returned unexpected data format for flavor details.\\\"],\\\"ZcWMT1\\\":[\\\"Image instance \\\\\\\"\\\",[\\\"imageName\\\"],\\\"\\\\\\\" has been deactivated\\\"],\\\"Zgp2Sm\\\":[\\\"No projects available.\\\"],\\\"ZhVSpK\\\":[\\\"Failed to remove tenant access from flavor. Please try again.\\\"],\\\"ZkxxiR\\\":[\\\"Unknown domain\\\"],\\\"Zq6Y5u\\\":[\\\"DNS name must be at most 63 characters.\\\"],\\\"Zshv0H\\\":[\\\"Buckets to empty:\\\"],\\\"ZvIpwi\\\":[\\\"Select a security group...\\\"],\\\"Zw49f9\\\":[\\\"folder-name\\\"],\\\"Zw8Q49\\\":[\\\"Security group not found\\\"],\\\"a/nTb8\\\":[\\\"Create Image\\\"],\\\"a12lSo\\\":[\\\"Port (to)\\\"],\\\"a13wDR\\\":[\\\"Type to search containers...\\\"],\\\"a3LDKx\\\":[\\\"Security\\\"],\\\"a4A2uB\\\":[\\\"Account listing limit\\\"],\\\"a4N/Bg\\\":[\\\"Load More\\\"],\\\"a7C4YS\\\":[\\\"Container Updated\\\"],\\\"aG9OiI\\\":[\\\"Sharing Details\\\"],\\\"aI8Tgp\\\":[\\\"Owning Project ID\\\"],\\\"aL1w5Z\\\":[\\\"Used\\\"],\\\"aOeFR+\\\":[\\\"Empty Containers\\\"],\\\"aSsVD3\\\":[\\\"Public read access is not enabled. Before configuring static website serving, go to <0>Manage Access</0> and enable public read access.\\\"],\\\"aTqCTq\\\":[\\\"Image file is required\\\"],\\\"aV6KPH\\\":[\\\"Prevent accidental deletion\\\"],\\\"aZGVW7\\\":[\\\"No versions found for this object.\\\"],\\\"an5hVd\\\":[\\\"Images\\\"],\\\"ao/ZJi\\\":[\\\"Deleting folder and all its contents...\\\"],\\\"aqagJH\\\":[\\\"Unable to Update Image Visibility\\\"],\\\"arel2K\\\":[\\\"No objects found\\\"],\\\"azXlY+\\\":[\\\"Access Status:\\\"],\\\"b0uU1G\\\":[\\\"Store old object versions in container:\\\"],\\\"b2BLBa\\\":[\\\"Add Security Group Rule\\\"],\\\"b5aNMO\\\":[\\\"The text must match \\\\\\\"delete\\\\\\\"\\\"],\\\"b95YH9\\\":[\\\"Bucket Emptied\\\"],\\\"bHUarC\\\":[\\\"Bucket Deleted\\\"],\\\"bISG26\\\":[\\\"Failed to fetch flavor access information. Please try again.\\\"],\\\"bM1O3m\\\":[\\\"Image Instance\\\"],\\\"bQBMTH\\\":[\\\"This is a <0>static large object</0>. By default, all associated segment objects will also be permanently deleted.\\\"],\\\"bRgFkJ\\\":[\\\"Failed to upload file \\\\\\\"\\\",[\\\"fileName\\\"],\\\"\\\\\\\": \\\"],\\\"bYRFNi\\\":[\\\"Failed to Delete Objects\\\"],\\\"bc67JN\\\":[\\\"Custom Properties / Metadata\\\"],\\\"bmQLn5\\\":[\\\"Add Rule\\\"],\\\"bnql/K\\\":[\\\"Back to Images\\\"],\\\"boJ+Y1\\\":[\\\"Create Folder\\\"],\\\"boJlGf\\\":[\\\"Page Not Found\\\"],\\\"boefwq\\\":[\\\"Could not create bucket \\\\\\\"\\\",[\\\"bucketName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"bpme7e\\\":[\\\"Flavor Not Found\\\"],\\\"bwRvnp\\\":[\\\"Action\\\"],\\\"bwhBhT\\\":[\\\"Security Group\\\"],\\\"byKna+\\\":[\\\"An unexpected error occurred. Please try again.\\\"],\\\"bzMKg7\\\":[\\\"Accepted\\\"],\\\"bzSI52\\\":[\\\"Discard\\\"],\\\"c+fUtV\\\":[\\\"Start typing to search for a container\\\"],\\\"c+xCSz\\\":[\\\"True\\\"],\\\"c1OE1x\\\":[\\\"CA ID\\\"],\\\"c1uL4p\\\":[\\\"The image \\\\\\\"\\\",[\\\"imageId\\\"],\\\"\\\\\\\" could not be deleted: \\\",[\\\"message\\\"]],\\\"c5i+X0\\\":[\\\"Loading Buckets...\\\"],\\\"c6b6fz\\\":[\\\"Delete Selected\\\"],\\\"cCfxH1\\\":[\\\"Downloading...\\\"],\\\"cJDQIO\\\":[\\\"Root Disk\\\"],\\\"cPKL6O\\\":[\\\"You don't have permission to create flavors in this project.\\\"],\\\"cUKFby\\\":[\\\"Lifecycle action\\\"],\\\"cWbW6w\\\":[\\\"Manage Access\\\"],\\\"cXuXkb\\\":[\\\"User \\\",[\\\"userId\\\"],\\\" from project \\\",[\\\"projectId\\\"]],\\\"chL5IG\\\":[\\\"Community\\\"],\\\"cj17eo\\\":[\\\"Image instance \\\\\\\"\\\",[\\\"imageName\\\"],\\\"\\\\\\\" has been activated\\\"],\\\"cjEOmc\\\":[\\\"Share this security group with another project. The target project will be able to view and use this security group, but will not be able to modify or delete it.\\\"],\\\"cnGeoo\\\":[\\\"Delete\\\"],\\\"cpw++p\\\":[\\\"Static large object support\\\"],\\\"cqQyPB\\\":[\\\"Folder name\\\"],\\\"ctc4XR\\\":[\\\"Delete certificate authority\\\"],\\\"d+F6q9\\\":[\\\"Created\\\"],\\\"d/I0J3\\\":[\\\"Activate Selected\\\"],\\\"d0pLfy\\\":[\\\"Failed to delete security group\\\"],\\\"dEHa3L\\\":[\\\"Type the bucket name to confirm\\\"],\\\"dEgA5A\\\":[\\\"Cancel\\\"],\\\"dFb5Nt\\\":[\\\"Id\\\"],\\\"dLFiER\\\":[\\\"Error Loading Containers: \\\",[\\\"errorMessage\\\"]],\\\"dOevLB\\\":[\\\"Expires in \\\",[\\\"selectedPresetLabel\\\"],\\\" — at \\\",[\\\"expiresAtFormatted\\\"]],\\\"dPBJAJ\\\":[\\\"Empty All (\\\",[\\\"selectedCount\\\"],\\\")\\\"],\\\"dPj4yB\\\":[\\\"Login to Your Account\\\"],\\\"dPoCVe\\\":[\\\"Type “detach” to confirm\\\"],\\\"dTNzBI\\\":[\\\"Key must contain at least one alphanumeric character\\\"],\\\"dVdc7N\\\":[\\\"You are not authorized to delete extra specs. Please log in again.\\\"],\\\"dd2ndz\\\":[\\\"Entries in ACLs are comma-separated. Examples:\\\"],\\\"diFNkW\\\":[\\\"Error loading component\\\"],\\\"dku8RF\\\":[\\\"Type <0>DELETE</0> to confirm:\\\"],\\\"dpGL2Q\\\":[\\\"Source:\\\"],\\\"dxMaZH\\\":[\\\"Manage your Private Certificate Authority infrastructure\\\"],\\\"e0NrBM\\\":[\\\"Project\\\"],\\\"eChIh7\\\":[\\\"Flavor \\\\\\\"\\\",[\\\"flavorName\\\"],\\\"\\\\\\\" has been successfully created.\\\"],\\\"eGEHJE\\\":[\\\"DNS Name\\\"],\\\"eKC+EC\\\":[\\\"-\\\"],\\\"ePK91l\\\":[\\\"Edit\\\"],\\\"eYlnXt\\\":[\\\"No images found\\\"],\\\"eh/k36\\\":[\\\"Select a rule type...\\\"],\\\"ekCRTP\\\":[\\\"Rejected\\\"],\\\"eks7oA\\\":[\\\"Port ID\\\"],\\\"emkxJa\\\":[\\\"There are no buckets available with the current search criteria. Try adjusting your search term.\\\"],\\\"eu70nA\\\":[\\\"Expires at (UTC)\\\"],\\\"eyRsaH\\\":[\\\"Root\\\"],\\\"ezT9KW\\\":[\\\"Container syncing\\\"],\\\"f+Uq1E\\\":[\\\"New object name\\\"],\\\"f0cwjH\\\":[\\\"Object properties\\\"],\\\"fCPhho\\\":[\\\"One or more objects could not be deleted:\\\"],\\\"fFoXXe\\\":[\\\"Authentication Failed\\\"],\\\"fIvd7X\\\":[\\\"Failed to Delete Images\\\"],\\\"fJpv9x\\\":[\\\"Failed to Deactivate Images\\\"],\\\"ffw//c\\\":[\\\"PCA\\\"],\\\"fj5byd\\\":[\\\"N/A\\\"],\\\"fnCEAB\\\":[\\\"Type “delete” to confirm\\\"],\\\"fxnDd7\\\":[\\\"Failed to generate temporary URL: \\\",[\\\"generalError\\\"]],\\\"fzfAAa\\\":[\\\"Ingress\\\"],\\\"g+Jead\\\":[\\\"IPv6\\\"],\\\"g1IxCo\\\":[\\\"RAM must be an integer ≥ 128 MB.\\\"],\\\"g3BSCe\\\":[\\\"Swap Disk must be an integer ≥ 0.\\\"],\\\"g3UF2V\\\":[\\\"Accept\\\"],\\\"g8Yxlg\\\":[\\\"Temporary URL for \\\\\\\"\\\",[\\\"objectName\\\"],\\\"\\\\\\\" was copied to clipboard.\\\"],\\\"g9m7gK\\\":[\\\"ACL entries control who can read from or write to this container. Multiple entries are comma-separated. Changes take effect immediately after saving.\\\"],\\\"gFKJBP\\\":[\\\"Folder name cannot have leading or trailing whitespace\\\"],\\\"gFsjJK\\\":[[\\\"bucketCount\\\",\\\"plural\\\",{\\\"one\\\":[\\\"object\\\"],\\\"other\\\":[\\\"objects\\\"]}]],\\\"gGdfWx\\\":[\\\"The compute service is currently unavailable for this project. Please try again later.\\\"],\\\"gJKQwG\\\":[\\\"Are you sure you want to delete this folder?\\\"],\\\"gMYsdZ\\\":[\\\"Set to \\\\\\\"Shared\\\\\\\"\\\"],\\\"gU7JFm\\\":[\\\"Creating security group rule...\\\"],\\\"gYe+hC\\\":[\\\"Click to upload\\\"],\\\"gjop1H\\\":[\\\"Bucket name must be at least 3 characters\\\"],\\\"go0J2x\\\":[\\\"Failed to copy the temporary URL to the clipboard\\\"],\\\"go9U+C\\\":[\\\"To confirm, type <0>\\\\\\\"delete\\\\\\\"</0> in the field below.\\\"],\\\"grs4+e\\\":[\\\"Compute Overview\\\"],\\\"gy6L1u\\\":[\\\"Must be a valid common name (FQDN).\\\"],\\\"gztCjq\\\":[\\\"The tenant ID provided is invalid. Please check your input.\\\"],\\\"h3P8z+\\\":[\\\"Failed to delete the flavor. Please try again.\\\"],\\\"h47p9L\\\":[\\\"—\\\"],\\\"h6JDtI\\\":[\\\"Paste CSR code\\\"],\\\"h8h6oz\\\":[\\\"Images Deactivated\\\"],\\\"h99+4y\\\":[\\\"Allocate Floating IP\\\"],\\\"hH3kDo\\\":[\\\"Loading Image Details...\\\"],\\\"hHL/wm\\\":[\\\"Image instance \\\\\\\"\\\",[\\\"imageName\\\"],\\\"\\\\\\\" has been updated\\\"],\\\"hLp49h\\\":[\\\"Type <0>\\\",[\\\"deleteWord\\\"],\\\"</0> to confirm:\\\"],\\\"hPz54a\\\":[\\\"Failed to Download\\\"],\\\"hQdfmR\\\":[\\\"Bucket \\\\\\\"\\\",[\\\"bucketName\\\"],\\\"\\\\\\\" was successfully deleted.\\\"],\\\"hQr1Cr\\\":[\\\"Deactivate Image\\\"],\\\"hXUWyd\\\":[\\\"Value is required\\\"],\\\"hYgDIe\\\":[\\\"Create\\\"],\\\"he3ygx\\\":[\\\"Copy\\\"],\\\"he4q+i\\\":[\\\"e.g., b90f9c4bc76140e18540b2cec1299e2a\\\"],\\\"hgpMHD\\\":[\\\"Total Size\\\"],\\\"hkjZ7P\\\":[\\\"Failed to update visibility for \\\\\\\"\\\",[\\\"imageName\\\"],\\\"\\\\\\\": \\\"],\\\"hrBow7\\\":[\\\"Network ID\\\"],\\\"huQgXa\\\":[\\\"Versioning allows you to keep multiple variants of an object in the same bucket. This protects against accidental overwrites and deletions.\\\"],\\\"hueclm\\\":[\\\"Folder <0>\\\\\\\"\\\",[\\\"folderDisplayName\\\"],\\\"\\\\\\\"</0> and all objects within it will be permanently deleted. This cannot be undone.\\\"],\\\"hz9da7\\\":[\\\"Failed to load Certificates issued by Certificate Authority.\\\"],\\\"i0qMbr\\\":[\\\"Home\\\"],\\\"i41Xuw\\\":[\\\"Select a fixed IP address\\\"],\\\"i5MEDc\\\":[\\\"Failed to move object: \\\",[\\\"copyErrorMessage\\\"]],\\\"i6/ygf\\\":[\\\"A property with this key already exists\\\"],\\\"i9TIyi\\\":[\\\"Remote Security Group\\\"],\\\"i9qiyR\\\":[\\\"Expires in\\\"],\\\"iH8pgl\\\":[\\\"Back\\\"],\\\"ifQSTI\\\":[\\\"Enable versioning\\\"],\\\"igVDFt\\\":[\\\"Attach\\\"],\\\"ih2lfP\\\":[\\\"No buckets found\\\"],\\\"iqUvrS\\\":[\\\"User C/D/I\\\"],\\\"is0Bhk\\\":[\\\"Bucket name must be 63 characters or fewer\\\"],\\\"izMhIO\\\":[\\\"User \\\",[\\\"userId\\\"],\\\" (any project)\\\"],\\\"j9hkgJ\\\":[\\\"rules\\\"],\\\"jBIkmi\\\":[\\\"QCOW2, Raw, VMDK, VHD, VHDX, VDI, AMI, ARI, AKI, ISO, PLOOP\\\"],\\\"jIPNJG\\\":[\\\"Basic Information\\\"],\\\"jK6wqe\\\":[\\\"Folder \\\\\\\"\\\",[\\\"folderName\\\"],\\\"\\\\\\\" and \\\",[\\\"deletedCount\\\"],\\\" objects were permanently deleted.\\\"],\\\"jKopCP\\\":[\\\"Network & Routing\\\"],\\\"jMc/mo\\\":[\\\"Server error occurred while creating extra specs. Please try again later.\\\"],\\\"jNm/qL\\\":[\\\"This container is already empty.\\\"],\\\"jNzyQo\\\":[\\\"Object versioning\\\"],\\\"jPxavx\\\":[\\\"Failed to update security group\\\"],\\\"jS4B2+\\\":[\\\"Container name does not match\\\"],\\\"jSG7wx\\\":[\\\"Please enter a valid number of minutes greater than 0\\\"],\\\"jVjr9h\\\":[\\\"Enter a valid common name in FQDN format (e.g., demo-ca.test.sci).\\\"],\\\"jhU93c\\\":[\\\"The image \\\\\\\"\\\",[\\\"imageName\\\"],\\\"\\\\\\\" could not be created: \\\"],\\\"js24f6\\\":[\\\"Delete folder:\\\"],\\\"jtnAf8\\\":[\\\"Protected images (cannot be deleted)\\\"],\\\"jyVMod\\\":[\\\"Restore Version\\\"],\\\"jyqLKs\\\":[\\\"This member already has access to this image.\\\"],\\\"k/zHK7\\\":[\\\"Creating Credentials...\\\"],\\\"k0vAWv\\\":[\\\"Object count quota\\\"],\\\"k5nYwm\\\":[\\\"vCPU\\\"],\\\"k7ENJG\\\":[\\\"Preview \\\",[\\\"rowDisplayName\\\"]],\\\"k99j0U\\\":[\\\"Cancel upload\\\"],\\\"kA2lMP\\\":[\\\"External Network\\\"],\\\"kCLnJG\\\":[\\\"Empty All\\\"],\\\"kGmM/p\\\":[\\\"You don't have permission to create extra specs for this flavor.\\\"],\\\"kIuDMT\\\":[\\\"Configure the ingress and egress rules that control which traffic is allowed for this security group.\\\"],\\\"kKK8AH\\\":[\\\"Remaining Quota:\\\"],\\\"kNeZrV\\\":[\\\"No Certificates issued by this Certificate Authority found\\\"],\\\"kQYfgO\\\":[\\\"One or more containers could not be emptied: \\\",[\\\"errorMessage\\\"]],\\\"kRiVnR\\\":[\\\"New uploads will overwrite the current version\\\"],\\\"kdcrma\\\":[\\\"Existing versions remain accessible\\\"],\\\"khxtMT\\\":[\\\"Issuing End Entity Certificate...\\\"],\\\"kiRrtv\\\":[\\\"<0>Please note:</0> for <1>dynamic</1> and <2>static large objects</2> only the manifests will be deleted. The related segments will not be deleted.\\\"],\\\"kqJVBO\\\":[\\\"You don't have permission to share this security group.\\\"],\\\"kuYWaD\\\":[\\\"Reserved keys: web-index, web-listings, quota-count, quota-bytes\\\"],\\\"l+fhn1\\\":[\\\"I understand that enabling versioning is permanent\\\"],\\\"l75CjT\\\":[\\\"Yes\\\"],\\\"lAsm87\\\":[\\\"Protect this image from being deleted\\\"],\\\"lBVhQs\\\":[\\\"Something went wrong:\\\"],\\\"lN/Z9n\\\":[\\\"Security group name is required\\\"],\\\"lN3xvy\\\":[\\\"Delete Rule\\\"],\\\"lQ3EIe\\\":[\\\"Max deletes per request\\\"],\\\"lRoPjj\\\":[\\\"ETag\\\"],\\\"lWTy+Y\\\":[\\\"Unable to Create Image\\\"],\\\"lWxDDh\\\":[\\\"Flavor Name\\\"],\\\"lZvIXd\\\":[\\\"Description must be at most 255 characters.\\\"],\\\"lhIa6x\\\":[\\\"Failed to load extra specs. Please try again.\\\"],\\\"lq/mBZ\\\":[\\\"Loading object info...\\\"],\\\"lw1412\\\":[\\\"You have been logged out due to inactivity.\\\"],\\\"lxentK\\\":[\\\"An unexpected error occurred\\\"],\\\"m16xKo\\\":[\\\"Add\\\"],\\\"m6X3ro\\\":[\\\"Group Name\\\"],\\\"mMHJ/+\\\":[\\\"Suspend Versioning\\\"],\\\"mQSO1Y\\\":[\\\"Port Forwarding\\\"],\\\"mSLePW\\\":[\\\"You don't have permission to access flavors for this project.\\\"],\\\"mSfwLL\\\":[\\\"Project ID\\\"],\\\"mYnJeY\\\":[\\\"The text must match “release” in lowercase.\\\"],\\\"miy5mb\\\":[\\\"PCA (Clavis)\\\"],\\\"mqljvE\\\":[\\\"Copy metadata\\\"],\\\"mvz5Eo\\\":[\\\"URL for public access\\\"],\\\"mxPfpY\\\":[\\\"Create new folder here\\\"],\\\"mzI/c+\\\":[\\\"Download\\\"],\\\"n0ZttO\\\":[\\\"Root Disk (GiB)\\\"],\\\"n1ekoW\\\":[\\\"Sign In\\\"],\\\"n1gB0L\\\":[\\\"Edit Floating IP \\\",[\\\"floating_ip_address\\\"]],\\\"n22YIM\\\":[\\\"Edit Description\\\"],\\\"n2IuBI\\\":[\\\"A temporary URL grants time-limited read access to this object without requiring authentication. Anyone with the link can download it until it expires.\\\"],\\\"n3eQzA\\\":[\\\"This property is reserved and cannot be modified\\\"],\\\"n46oLW\\\":[\\\"Failed to remove member\\\"],\\\"n9jJG6\\\":[\\\"Remove member access\\\"],\\\"nETBrc\\\":[\\\"Egress\\\"],\\\"nLvo6K\\\":[\\\"RBAC Policy Details:\\\"],\\\"nNKXt7\\\":[\\\"Deleting this Certificate Authority is permanent, and all the associated certificates will no longer apply to entities.\\\"],\\\"nU1mHK\\\":[\\\"Versioning Enabled\\\"],\\\"nUuaq8\\\":[\\\"Failed to update container: \\\",[\\\"errorMessage\\\"]],\\\"nW/hX9\\\":[\\\"General Image Data\\\"],\\\"nWNviN\\\":[\\\"Deleting certificate authority...\\\"],\\\"nYab6d\\\":[\\\"\\\\\\\"\\\",[\\\"displayName\\\"],\\\"\\\\\\\" was successfully moved to \\\",[\\\"destination\\\"],\\\".\\\"],\\\"nZbdB+\\\":[\\\"Upload Cancelled\\\"],\\\"ne/GWZ\\\":[\\\"Inside a project, objects are stored in containers. Containers are where you define access permissions and quotas.\\\"],\\\"neiJm0\\\":[\\\"Flavors\\\"],\\\"ng+PCh\\\":[\\\"There are no PCAs available for this project.\\\"],\\\"nkpZyk\\\":[\\\"Container \\\\\\\"\\\",[\\\"containerName\\\"],\\\"\\\\\\\" was already empty.\\\"],\\\"nnxwBn\\\":[\\\"There are no rules for this security group\\\"],\\\"ntNlXu\\\":[\\\"Listing access\\\"],\\\"nzFJqC\\\":[\\\"Delete CA\\\"],\\\"o/VDOG\\\":[\\\"Unable to Delete Image\\\"],\\\"o6M6l0\\\":[\\\"Failed to create security group\\\"],\\\"oAMLhA\\\":[\\\"Full path:\\\"],\\\"oDkgME\\\":[\\\"You are not authorized to create flavors. Please log in again.\\\"],\\\"oEGiW3\\\":[\\\"Uploading... \\\",[\\\"progressPct\\\"],\\\"%\\\"],\\\"oJVmWq\\\":[\\\"Could not delete \\\\\\\"\\\",[\\\"displayName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"ocUvR+\\\":[\\\"False\\\"],\\\"odVI9Y\\\":[\\\"Container Deleted\\\"],\\\"og1m+J\\\":[\\\"Loading Certificate Authority Details...\\\"],\\\"okXQSt\\\":[\\\"Subject information\\\"],\\\"olfSYj\\\":[\\\"Access Control Updated\\\"],\\\"onHi/J\\\":[\\\"It will be removed from your image list.\\\"],\\\"p4nMut\\\":[\\\"Swap (MiB)\\\"],\\\"p6CSHM\\\":[\\\"Delete Objects\\\"],\\\"p7DzCB\\\":[\\\"Failed to Update Access Control\\\"],\\\"pD/2BQ\\\":[\\\"Successfully emptied \\\",[\\\"emptiedCount\\\"],\\\" of \\\",[\\\"totalBuckets\\\"],\\\" \\\",[\\\"totalBuckets\\\",\\\"plural\\\",{\\\"one\\\":[\\\"bucket\\\"],\\\"other\\\":[\\\"buckets\\\"]}],\\\", deleting \\\",[\\\"totalDeleted\\\"],\\\" \\\",[\\\"totalDeleted\\\",\\\"plural\\\",{\\\"one\\\":[\\\"object\\\"],\\\"other\\\":[\\\"objects\\\"]}],\\\". \\\",[\\\"errorsLength\\\"],\\\" \\\",[\\\"errorsLength\\\",\\\"plural\\\",{\\\"one\\\":[\\\"bucket\\\"],\\\"other\\\":[\\\"buckets\\\"]}],\\\" failed.\\\"],\\\"pFg+7w\\\":[\\\"Updated:\\\"],\\\"pOPvlj\\\":[\\\"Already active (will be skipped)\\\"],\\\"pU25+T\\\":[\\\"Upload of \\\\\\\"\\\",[\\\"objectName\\\"],\\\"\\\\\\\" was cancelled.\\\"],\\\"pYR76U\\\":[\\\"Importing Certificate...\\\"],\\\"pbzA+s\\\":[\\\"Optional description\\\"],\\\"pebLmQ\\\":[\\\"Remove access for \\\",[\\\"memberIdDisplay\\\"]],\\\"plnnns\\\":[\\\"Deleted \\\",[\\\"successCount\\\"],\\\" image(s), but \\\",[\\\"failedCount\\\"],\\\" image(s) could not be deleted.\\\"],\\\"poCbZw\\\":[\\\"Loading ACLs...\\\"],\\\"podzPY\\\":[\\\"Project id\\\"],\\\"psPHye\\\":[\\\"Accept Shared Image\\\"],\\\"pubQie\\\":[\\\"Enter value\\\"],\\\"q0Rla3\\\":[\\\"Add Tenant Access\\\"],\\\"q44uUq\\\":[\\\"Containers Partially Emptied\\\"],\\\"q5sTNZ\\\":[\\\"<0>No Temp URL key configured.</0> A temporary URL key must be set at the account or container level before temporary URLs can be generated. Contact your administrator to configure <1>X-Account-Meta-Temp-URL-Key</1> or <2>X-Container-Meta-Temp-URL-Key</2>.\\\"],\\\"q6K46F\\\":[\\\"Key already exists\\\"],\\\"q88/6A\\\":[\\\"Failed to Create Folder\\\"],\\\"qAkkjP\\\":[\\\"Max object name length\\\"],\\\"qEDO1j\\\":[\\\"This is a <0>dynamic large object</0>. Only the manifest will be deleted — its segment objects (stored under the manifest prefix) are <1>not</1> automatically removed and must be deleted separately.\\\"],\\\"qFDA8L\\\":[\\\"Reject access to image\\\"],\\\"qJb6G2\\\":[\\\"Try Again\\\"],\\\"qQ1QBh\\\":[\\\"Hardware Specifications\\\"],\\\"qUlxA+\\\":[\\\"Folder \\\\\\\"\\\",[\\\"folderName\\\"],\\\"\\\\\\\" was permanently deleted.\\\"],\\\"qaAo9Y\\\":[\\\"Server error occurred while creating the flavor. Please try again later.\\\"],\\\"qh5W8q\\\":[\\\"Remove Policy\\\"],\\\"qhDo93\\\":[\\\"Common name is required.\\\"],\\\"qs+BrU\\\":[\\\"You don't have permission to remove tenant access from this flavor.\\\"],\\\"qtoOYG\\\":[\\\"No limit\\\"],\\\"quU9wK\\\":[\\\"Failed to deactivate \\\",[\\\"failedCount\\\"],\\\" of \\\",[\\\"totalCount\\\"],\\\" image(s). Some images may already be deactivated or in an invalid state.\\\"],\\\"qvF2D8\\\":[\\\"There are no images available for this project with the current filters applied. Try adjusting your filter criteria or create a new image.\\\"],\\\"qxxo7y\\\":[\\\"No policies match your search\\\"],\\\"qzIZOL\\\":[\\\"Invalid file format. Supported formats: \\\",[\\\"supportedFileFormats\\\"]],\\\"qzhUb9\\\":[\\\"Showing first \\\",[\\\"maxOptions\\\"],\\\" of \\\",[\\\"totalCount\\\"],\\\" — refine your search to narrow results\\\"],\\\"r5SQFW\\\":[\\\"Container name must be \\\",[\\\"maxContainerNameLength\\\"],\\\" characters or fewer\\\"],\\\"r9Aac8\\\":[\\\"Ephemeral Disk\\\"],\\\"rAtQcX\\\":[\\\"You can rename the object by changing the name here.\\\"],\\\"rD9yV1\\\":[\\\"Images to deactivate:\\\"],\\\"rIe0oV\\\":[\\\"Failed to add tenant access to flavor. Please try again.\\\"],\\\"rIi6x4\\\":[\\\"The flavor could not be found. It may have already been deleted.\\\"],\\\"rJe6vw\\\":[\\\"7 days\\\"],\\\"rPuPb+\\\":[\\\"Checking bucket contents...\\\"],\\\"rbuO5A\\\":[\\\"This security group is already shared with the specified project.\\\"],\\\"rcBt6T\\\":[\\\"Failed to create credential: \\\",[\\\"errorMessage\\\"]],\\\"rdUucN\\\":[\\\"Preview\\\"],\\\"rhaNn7\\\":[\\\"Loading containers...\\\"],\\\"riR9oD\\\":[\\\"Note: for <0>static and dynamic large objects</0> only the manifests are deleted — their segments outside this folder prefix are not affected.\\\"],\\\"rlgAtt\\\":[\\\"The object will be moved to this path. Navigate folders above to change the destination.\\\"],\\\"rp0Bd0\\\":[\\\"Compute\\\"],\\\"rrjuul\\\":[\\\"For more details, have a look at the <0>documentation</0>.\\\"],\\\"rvT6l1\\\":[\\\"Services Overview\\\"],\\\"rvXsSb\\\":[\\\"Tenant access for \\\\\\\"\\\",[\\\"tenantIdToRemove\\\"],\\\"\\\\\\\" has been removed successfully.\\\"],\\\"rwBVXS\\\":[\\\"Images to be deleted (\\\",[\\\"deletableCount\\\"],\\\")\\\"],\\\"rx4T2i\\\":[\\\"Issue Certificate\\\"],\\\"ryf/ee\\\":[\\\"Images Activated\\\"],\\\"ryxYVo\\\":[\\\"Images to be deactivated (\\\",[\\\"activeCount\\\"],\\\")\\\"],\\\"s/s1lz\\\":[\\\"Any user can perform a HEAD or GET operation on the container provided the user also has read access on objects. No token is required.\\\"],\\\"s2ubkU\\\":[\\\"Flavor ID\\\"],\\\"s4Vnq2\\\":[\\\"Emptying...\\\"],\\\"sCPiLi\\\":[\\\"Type DELETE to confirm\\\"],\\\"sNVNmf\\\":[\\\"MAC Address\\\"],\\\"sPFHpI\\\":[\\\"Disk\\\"],\\\"sSNyf3\\\":[\\\"Welcome to <0>Aurora Dashboard</0>, your next-generation cloud management solution. We are dedicated to simplifying how you interact with and manage your cloud infrastructure. Designed with efficiency, scalability, and usability at its core, Aurora empowers you to streamline operations and unlock the full potential of your cloud resources.\\\"],\\\"sWBLli\\\":[\\\"Add Property\\\"],\\\"sXd+qS\\\":[\\\"Properties of \\\\\\\"\\\",[\\\"objectName\\\"],\\\"\\\\\\\" were successfully updated.\\\"],\\\"sYJvnu\\\":[\\\"Create New Folder\\\"],\\\"sa4CV6\\\":[\\\"All users from project \\\",[\\\"projectId\\\"]],\\\"sgra3S\\\":[\\\"You can re-enable versioning at any time\\\"],\\\"shKIZu\\\":[\\\"Images to be activated (\\\",[\\\"deactivatedCount\\\"],\\\")\\\"],\\\"sheDTJ\\\":[\\\"Please note: for <0>dynamic</0> and <1>static large objects</1> only the manifests are deleted. The related segments are not deleted.\\\"],\\\"sihD20\\\":[\\\"Loading images...\\\"],\\\"sjMCOP\\\":[\\\"Last Modified\\\"],\\\"sl2P3q\\\":[\\\"Object:\\\"],\\\"slWh5C\\\":[\\\"Associate Floating IP \\\",[\\\"floating_ip_address\\\"],\\\" with Port\\\"],\\\"sxbP3b\\\":[\\\"Object Count\\\"],\\\"t/YqKh\\\":[\\\"Remove\\\"],\\\"t/cZdQ\\\":[\\\"Full Path:\\\"],\\\"t0X9+8\\\":[\\\"Container Name\\\"],\\\"t1POAD\\\":[\\\"No custom metadata properties found. Click \\\\\\\"Add Property\\\\\\\" to create one.\\\"],\\\"t1fq6V\\\":[\\\"Server returned unexpected data format.\\\"],\\\"t7ewhH\\\":[\\\"Could not empty bucket \\\\\\\"\\\",[\\\"bucketName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"t7ff15\\\":[\\\"valid token required: false\\\"],\\\"t95VRV\\\":[\\\"About Aurora Dashboard\\\"],\\\"tASa/P\\\":[\\\"Server error occurred while deleting the flavor. Please try again later.\\\"],\\\"tIc6vY\\\":[\\\"Could not copy \\\\\\\"\\\",[\\\"displayName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"tIrNgH\\\":[\\\"Server error occurred while fetching extra specs. Please try again later.\\\"],\\\"tL9it8\\\":[\\\"Nothing to do. Bucket is already empty.\\\"],\\\"tLerHy\\\":[\\\"Ephemeral Disk must be an integer ≥ 0.\\\"],\\\"tM5SEI\\\":[\\\"ACLs for container \\\\\\\"\\\",[\\\"containerName\\\"],\\\"\\\\\\\" were successfully updated.\\\"],\\\"tOkmLM\\\":[\\\"Failed to Copy Object\\\"],\\\"tV/Ozb\\\":[\\\"Port Range\\\"],\\\"tVSmFT\\\":[\\\"Loading more...\\\"],\\\"tX5yOZ\\\":[\\\"New Folder\\\"],\\\"tasfos\\\":[\\\"remove\\\"],\\\"tbwGSx\\\":[\\\"Minimum Disk (GB)\\\"],\\\"tejJLY\\\":[\\\"Associating Floating IP...\\\"],\\\"tfAKBU\\\":[\\\"Could not upload \\\\\\\"\\\",[\\\"objectName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"tfDRzk\\\":[\\\"Save\\\"],\\\"tfxu04\\\":[\\\"Remove access for \\\",[\\\"tenantId\\\"]],\\\"thHAVL\\\":[\\\"Accepted Images\\\"],\\\"tiflqy\\\":[\\\"Unable to Re-activate Image\\\"],\\\"tkRT08\\\":[\\\"Metadata size exceeds the 2KB limit. Please remove or shorten some entries before saving.\\\"],\\\"tlfxPP\\\":[\\\"Could not copy \\\\\\\"\\\",[\\\"objectName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"tmpGvt\\\":[\\\"production, linux\\\"],\\\"u+VWhB\\\":[\\\"Copied to clipboard!\\\"],\\\"u2xIeO\\\":[\\\"Failed to update ACLs: \\\",[\\\"errorMessage\\\"]],\\\"u4UFLi\\\":[\\\"Retrieve older versions of objects\\\"],\\\"u5HztT\\\":[\\\"RX/TX Factor\\\"],\\\"u77/s4\\\":[\\\"Floating IPs\\\"],\\\"u7En0V\\\":[\\\"Add Metadata\\\"],\\\"uAI0yI\\\":[\\\"Delete object:\\\"],\\\"uAQUqI\\\":[\\\"Status\\\"],\\\"uAZE7K\\\":[\\\"Delete bucket\\\"],\\\"uFQALo\\\":[\\\"Are you sure you want to delete this object?\\\"],\\\"uLtFAr\\\":[\\\"Could not update container \\\\\\\"\\\",[\\\"containerName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"uSdnuQ\\\":[\\\"VCPUs must be an integer ≥ 1.\\\"],\\\"ujK/QN\\\":[\\\"Loading objects...\\\"],\\\"uly9ET\\\":[\\\"Rule Details:\\\"],\\\"up0ZSW\\\":[\\\"Fingerprint\\\"],\\\"uuKb0T\\\":[\\\"Description must be less than 65535 characters.\\\"],\\\"v0hPHE\\\":[\\\"Show Details\\\"],\\\"v3djpU\\\":[\\\"Move/Rename\\\"],\\\"v9Dn8m\\\":[\\\"Aurora Dashboard is more than just a tool—it's your partner in navigating the cloud. Whether you're a small startup or a global enterprise, Aurora provides the flexibility, power, and simplicity you need to achieve your goals.\\\"],\\\"vBUQNE\\\":[\\\"The extra spec could not be found. It may have already been deleted.\\\"],\\\"vEkTR9\\\":[\\\"Quota\\\"],\\\"vH2C/2\\\":[\\\"Swap\\\"],\\\"vIxhHW\\\":[\\\"Showing first \\\",[\\\"MAX_COMBO_OPTIONS\\\"],\\\" of \\\",[\\\"totalBuckets\\\"],\\\" — refine your search to narrow results\\\"],\\\"vR4HmN\\\":[\\\"Loading Instances...\\\"],\\\"vTh35P\\\":[\\\"Create Container\\\"],\\\"vXmL4D\\\":[\\\"Drop your image file here\\\"],\\\"vZUKSz\\\":[\\\"Detach Floating IP \\\",[\\\"floating_ip_address\\\"]],\\\"vbajgL\\\":[\\\"Public Flavor\\\"],\\\"vcQSZh\\\":[\\\"This folder is empty — use New Folder to create one.\\\"],\\\"vcXmqy\\\":[\\\"Network Overview\\\"],\\\"vmRPFm\\\":[\\\"Share Security Group\\\"],\\\"vmYyLY\\\":[\\\"Remote IP Prefix\\\"],\\\"vp5vfW\\\":[\\\"1 hour\\\"],\\\"vpt8cE\\\":[\\\"Generate URL\\\"],\\\"vrPCbw\\\":[\\\"Image ID\\\"],\\\"w3bAcf\\\":[\\\"This action is permanent. The address will be removed from your project and returned to the public pool. This action cannot be undone.\\\"],\\\"w9+8d7\\\":[\\\"Remove tenant access\\\"],\\\"wEfZld\\\":[\\\"Create New Flavor\\\"],\\\"wFaT8w\\\":[\\\"Failed to Empty Containers\\\"],\\\"wHhJRb\\\":[\\\"Loading versions...\\\"],\\\"wL3cK8\\\":[\\\"Latest\\\"],\\\"wMHvYH\\\":[\\\"Value\\\"],\\\"wPrtGF\\\":[\\\"Enter key\\\"],\\\"wTg+FY\\\":[\\\"Max file size\\\"],\\\"wXxPjv\\\":[\\\"S3 Object Storage — Setup Required\\\"],\\\"wa1Bcq\\\":[\\\"Enter tenant ID\\\"],\\\"wbqM4L\\\":[[\\\"customMinutes\\\"],\\\" minutes\\\"],\\\"wcUecy\\\":[\\\"You don't have permission to view extra specs for this flavor.\\\"],\\\"wdUvGT\\\":[\\\"Creating Certificate Authority...\\\"],\\\"we28Pq\\\":[\\\"Hide ACLs Preview\\\"],\\\"wlQNTg\\\":[\\\"Members\\\"],\\\"wlUDbB\\\":[\\\"Last updated: \\\",[\\\"formattedDate\\\"]],\\\"wrXcuy\\\":[\\\"Object Name\\\"],\\\"wxVsr5\\\":[\\\"Bucket name does not match\\\"],\\\"wyIOMP\\\":[\\\"Image name is required\\\"],\\\"wzqqS+\\\":[\\\"Key Features\\\"],\\\"x/XQrD\\\":[\\\"Any file type\\\"],\\\"x1bK0h\\\":[\\\"There are no containers available with the current search criteria. Try adjusting your search term.\\\"],\\\"x3T4pq\\\":[\\\"The container metadata reports objects but none were listed. This may be a temporary synchronization delay — please wait a moment and try again.\\\"],\\\"x5DnMs\\\":[\\\"Last modified\\\"],\\\"x5l/TK\\\":[\\\"Already active (will be skipped):\\\"],\\\"x9AdZ8\\\":[\\\"property_key\\\"],\\\"xIXYTK\\\":[\\\"Your S3 credentials are invalid or expired. Please try creating new credentials or contact your administrator.\\\"],\\\"xNG/3n\\\":[\\\"Floating IP Address\\\"],\\\"xNZKYy\\\":[\\\"Failed to delete \\\",[\\\"failedCount\\\"],\\\" of \\\",[\\\"totalCount\\\"],\\\" image(s). Some images may be protected or in use.\\\"],\\\"xOvKAE\\\":[[\\\"totalCount\\\",\\\"plural\\\",{\\\"one\\\":[[\\\"filteredCount\\\"],\\\" of \\\",[\\\"totalCount\\\"],\\\" bucket\\\"],\\\"other\\\":[[\\\"filteredCount\\\"],\\\" of \\\",[\\\"totalCount\\\"],\\\" buckets\\\"]}]],\\\"xYrGVV\\\":[\\\"The selected objects will be permanently deleted. This cannot be undone.\\\"],\\\"xqhyRT\\\":[\\\"Object Uploaded\\\"],\\\"xw2UtT\\\":[\\\"Create New Image\\\"],\\\"y+KBOY\\\":[\\\"e.g., production, linux, ubuntu\\\"],\\\"y02Bu1\\\":[\\\"Container:\\\"],\\\"y0u86k\\\":[\\\"The requested flavor could not be found. It may have been deleted or you may not have access to it.\\\"],\\\"y1GYnY\\\":[\\\"Could not move \\\\\\\"\\\",[\\\"objectName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"yDHGP+\\\":[\\\"my-bucket-name\\\"],\\\"yKu/3Y\\\":[\\\"Restore\\\"],\\\"yPWFWy\\\":[\\\"ICMP Type\\\"],\\\"yTtJTy\\\":[\\\"Edit Image Metadata\\\"],\\\"yYxB17\\\":[\\\"Clear all\\\"],\\\"ylfbpz\\\":[\\\"Extra spec key is required and cannot be empty.\\\"],\\\"yp0UjB\\\":[\\\"Ethertype\\\"],\\\"yqPflB\\\":[\\\"... and \\\",[\\\"hiddenCount\\\"],\\\" more\\\"],\\\"yu9G3x\\\":[\\\"Edit Security Group\\\"],\\\"ywe1H/\\\":[[\\\"totalCount\\\",\\\"plural\\\",{\\\"one\\\":[[\\\"totalCount\\\"],\\\" container\\\"],\\\"other\\\":[[\\\"totalCount\\\"],\\\" containers\\\"]}]],\\\"yz7wBu\\\":[\\\"Close\\\"],\\\"z+zpLP\\\":[\\\"valid token required: true\\\"],\\\"z1JceR\\\":[\\\"Back to Floating IPs\\\"],\\\"z45o5B\\\":[\\\"Object count\\\"],\\\"z9NAjZ\\\":[\\\"Object Deleted\\\"],\\\"zCD96i\\\":[\\\"You are not authorized to view flavor details. Please log in again.\\\"],\\\"zDS0JC\\\":[\\\"Name must be 2-50 characters long.\\\"],\\\"zWb/Nn\\\":[\\\"Max header size\\\"],\\\"zc5dcw\\\":[\\\"Login failed. Please check your credentials and try again.\\\"],\\\"zemvbh\\\":[\\\"View Versions\\\"],\\\"zga9sT\\\":[\\\"OK\\\"],\\\"zhM8FP\\\":[\\\"Grant access to a user from a different project.\\\"],\\\"zm7+/D\\\":[\\\"You are about to deactivate <0>\\\",[\\\"activeCount\\\"],\\\" image(s)</0>. Deactivated images cannot be used to launch new instances.\\\"],\\\"zsqy/h\\\":[\\\"Delete Marker\\\"],\\\"zwBp5t\\\":[\\\"Private\\\"]}\")as Messages;","import { AppShellProvider } from \"@cloudoperators/juno-ui-components\"\nimport { RouterProvider } from \"@tanstack/react-router\"\nimport { AuthProvider, useAuth } from \"./store/AuthProvider\"\nimport { QueryClient, QueryClientProvider, hashKey } from \"@tanstack/react-query\"\nimport { trpcReact, trpcReactClient, trpcClient, setBffEndpoint } from \"./trpcClient\"\nimport { createAuroraRouter } from \"./router\"\nimport { useState, useEffect } from \"react\"\nimport { i18n } from \"@lingui/core\"\nimport { I18nProvider } from \"@lingui/react\"\nimport { ErrorBoundary } from \"react-error-boundary\"\nimport { Trans } from \"@lingui/react/macro\"\nimport { NavigationItem } from \"./components/navigation/types\"\nimport type { Slots } from \"./AuroraApp\"\nimport { messages as enMessages } from \"../locales/en/messages\"\n\n// Initialise i18n here so AuroraApp is self-contained and consumers don't need\n// to set up Lingui before mounting the component.\ni18n.load({ en: enMessages })\ni18n.activate(\"en\")\n\ntype AppProps = {\n theme?: \"theme-dark\" | \"theme-light\"\n bffEndpoint?: string\n onThemeChange?: (theme: \"theme-dark\" | \"theme-light\") => void\n slots?: Slots\n}\n\n// Additional navigation items can be added here and will be passed to the layout via context\n// The items will appear in the main navigation bar and use internal routing (TanStack Router)\nconst navItems: NavigationItem[] = []\n\nconst App = (props: AppProps) => {\n useEffect(() => {\n setBffEndpoint(props.bffEndpoint ?? \"/polaris-bff\")\n }, [props.bffEndpoint])\n\n const [router] = useState(() => createAuroraRouter(trpcReact, trpcClient))\n\n const [currentTheme, setCurrentTheme] = useState<\"theme-dark\" | \"theme-light\">(props.theme ?? \"theme-light\")\n\n const [queryClient] = useState(\n () =>\n new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: 60 * 1000,\n refetchOnWindowFocus: false,\n // Prepend the active projectId to every query hash so that\n // switching projects never returns cached data from a previous project.\n queryKeyHashFn: (queryKey) => {\n const match = router.state.matches.findLast((m) => \"projectId\" in (m.params ?? {}))\n const projectId = (match?.params as { projectId?: string })?.projectId ?? \"\"\n return hashKey([projectId, ...queryKey])\n },\n },\n },\n })\n )\n const [reactClient] = useState(() => trpcReactClient)\n\n const handleThemeToggle = (newTheme: string) => {\n const theme = newTheme as \"theme-dark\" | \"theme-light\"\n setCurrentTheme(theme)\n props.onThemeChange?.(theme)\n }\n\n return (\n <ErrorBoundary\n fallbackRender={({ error, resetErrorBoundary }) => {\n const { message } = error as Error\n\n return (\n <div role=\"alert\" style={{ padding: 24 }}>\n <p>\n <Trans>Something went wrong:</Trans>\n </p>\n {message && <pre style={{ color: \"red\" }}>{message}</pre>}\n <button onClick={resetErrorBoundary}>\n <Trans>Try again</Trans>\n </button>\n </div>\n )\n }}\n >\n <I18nProvider i18n={i18n}>\n <AppShellProvider shadowRoot={false} theme={currentTheme}>\n <trpcReact.Provider client={reactClient} queryClient={queryClient}>\n <QueryClientProvider client={queryClient}>\n <AuthProvider>\n <AppInner\n router={router}\n navItems={navItems}\n handleThemeToggle={handleThemeToggle}\n slots={props.slots}\n />\n </AuthProvider>\n </QueryClientProvider>\n </trpcReact.Provider>\n </AppShellProvider>\n </I18nProvider>\n </ErrorBoundary>\n )\n}\n\nfunction AppInner({\n router,\n navItems,\n handleThemeToggle,\n slots,\n}: {\n router: ReturnType<typeof createAuroraRouter>\n navItems: NavigationItem[]\n handleThemeToggle: (theme: string) => void\n slots?: Slots\n}) {\n const auth = useAuth()\n\n const routerContext = {\n trpcReact,\n trpcClient,\n auth,\n navItems,\n handleThemeToggle,\n slots,\n }\n\n return <RouterProvider router={router} context={routerContext} />\n}\n\nexport default App\n","import type { FC } from \"react\"\nimport type { TrpcClient } from \"./trpcClient\"\nimport App from \"./App\"\n\nexport type SlotProps = {\n auroraContext: {\n client: TrpcClient\n }\n}\n\nexport type Slots = {\n sideNavBanner?: FC<SlotProps>\n}\n\nexport type AuroraAppProps = {\n theme?: \"theme-dark\" | \"theme-light\"\n bffEndpoint?: string\n onThemeChange?: (theme: \"theme-dark\" | \"theme-light\") => void\n slots?: Slots\n}\n\nexport const AuroraApp: FC<AuroraAppProps> = App\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["useEffect","useState","useNavigate","useRouterState","cn","SessionExpirationTimer","props","timeLeft","setTimeLeft","navigate","pathname","select","s","location","updateCountdown","now","Date","timeDiff","sessionExpired","getTime","seconds","Math","floor","minutes","hours","days","formatted","filter","Boolean","join","intervalId","setInterval","delay","handleExpiration","logout","error","console","to","search","redirect","undefined","logoutTimer","setTimeout","clearInterval","clearTimeout","div","className","trpcClient","PopupMenu","PopupMenuOptions","PopupMenuItem","PopupMenuSection","PopupMenuSectionHeading","PopupMenuSectionSeparator","useAuth","useNavigate","SessionExpirationTimer","useState","UserMenu","isLoading","setIsLoading","isAuthenticated","user","logout","expiresAt","navigate","handleLogin","to","handleLogout","auth","terminateUserSession","mutate","error","console","icon","div","className","name","domain","label","disabled","onClick","sessionExpired","Logo","isMatch","Link","useRouterState","UserMenu","PageHeader","ThemeToggle","cn","Slot","textColorClass","textHoverClass","textMutedClass","getDomain","matches","domainMatch","filter","match","name","loaderData","crumbDomain","path","getProject","projectMatch","domain","projectId","crumbProject","id","undefined","MainNavigation","items","handleThemeToggle","appName","slots","select","s","project","displayName","logo","component","useShadowDOM","className","title","applicationName","div","to","span","data-testid","map","route","label","index","onToggleTheme","newTheme","Modal","useAuth","InactivityModal","useLingui","showInactivityModal","closeInactivityModal","logoutReason","title","t","message","open","onConfirm","confirmButtonLabel","disableCancelButton","size","p","createRootRouteWithContext","Outlet","useRouter","HeadContent","AppShell","Spinner","Stack","MainNavigation","styles","InactivityModal","RouteError","StatusError","Slot","Route","component","RootComponent","notFoundComponent","PageNotFound","errorComponent","RootErrorComponent","pendingComponent","PendingComponent","AuroraLayout","children","navItems","handleThemeToggle","appName","slots","useRouteContext","style","toString","pageHeader","items","pageFooter","useShadowDOM","undefined","fullWidthContent","error","useLingui","navigateTo","useNavigate","router","message","t","title","onHomeClick","to","onBackClick","history","back","statusCode","className","distribution","alignment","div","variant","size","createFileRoute","Route","component","lazyRouteComponent","$$splitComponentImporter","createFileRoute","redirect","Route","component","lazyRouteComponent","$$splitComponentImporter","beforeLoad","context","location","auth","isAuthenticated","token","trpcClient","getCurrentUserSession","query","redirectPath","pathname","to","search","login","user","expires_at","useState","useCallback","useEffect","useRef","createFileRoute","redirect","useRouterState","useAuth","z","trpcClient","Button","ContentHeading","Message","useErrorTranslation","isSafeRedirect","path","startsWith","Route","validateSearch","object","string","optional","catch","beforeLoad","context","search","isAuthenticated","auth","token","getCurrentUserSession","query","login","user","expires_at","savedRedirect","sessionStorage","getItem","redirectTo","removeItem","to","component","AuthLoginPage","textinputstyles","logoutReason","isLoading","select","s","navigate","useNavigate","useSearch","useLingui","translateError","form","setForm","domainName","password","isSubmitting","setIsSubmitting","loginError","setLoginError","skipAutoRedirectRef","signin","createUserSession","mutate","searchRedirect","defaultRedirect","current","replace","error","console","errorMessage","message","t","dismissError","isLoggingIn","wasInactive","div","className","onDismiss","text","variant","p","onSubmit","e","preventDefault","label","htmlFor","input","id","type","placeholder","onChange","target","value","required","disabled","createFileRoute","Route","component","lazyRouteComponent","$$splitComponentImporter","createFileRoute","redirect","Route","beforeLoad","context","auth","isAuthenticated","user","domain","id","to","createFileRoute","Route","component","lazyRouteComponent","$$splitComponentImporter","ServiceCardProps","title","links","label","to","createFileRoute","redirect","getServiceIndex","Route","loader","context","trpcClient","availableServices","auth","getAvailableServices","query","beforeLoad","params","projectId","serviceIndex","to","component","lazyRouteComponent","$$splitComponentImporter","createFileRoute","redirect","Route","beforeLoad","params","to","createFileRoute","redirect","Route","beforeLoad","params","to","createFileRoute","redirect","Route","beforeLoad","params","to","createFileRoute","redirect","Route","beforeLoad","params","to","createFileRoute","redirect","getServiceIndex","z","multiValueEnum","allowedValues","string","refine","val","values","startsWith","replace","split","every","v","includes","imagesSearchFields","status","optional","visibility","enum","disk_format","container_format","protected","search","sortBy","sortDirection","memberStatus","page","number","int","positive","imagesSearchSchema","object","passthrough","Route","staticData","section","service","sectionCrumb","labelKey","crumb","RouteInfo","errorComponent","lazyRouteComponent","$$splitErrorComponentImporter","validateSearch","result","safeParse","success","data","undefined","beforeLoad","context","params","trpcClient","projectId","Error","availableServices","auth","getAvailableServices","query","serviceIndex","to","component","$$splitComponentImporter","createFileRoute","redirect","getServiceIndex","z","flavorsSearchFields","search","string","optional","sortBy","enum","sortDirection","page","number","int","positive","flavorsSearchSchema","object","passthrough","Route","staticData","section","service","sectionCrumb","labelKey","crumb","RouteInfo","validateSearch","result","safeParse","success","data","undefined","beforeLoad","context","params","trpcClient","projectId","availableServices","auth","getAvailableServices","query","serviceIndex","to","component","lazyRouteComponent","$$splitComponentImporter","createFileRoute","t","Route","staticData","section","service","sectionCrumb","labelKey","crumb","RouteInfo","head","meta","title","component","lazyRouteComponent","$$splitComponentImporter","createFileRoute","t","Route","staticData","section","service","sectionCrumb","labelKey","crumb","RouteInfo","head","meta","title","component","lazyRouteComponent","$$splitComponentImporter","createFileRoute","redirect","z","getServiceIndex","GlanceImage","MemberStatus","Route","staticData","section","service","isDetail","sectionCrumb","labelKey","crumb","to","RouteInfo","validateSearch","object","tab","enum","optional","loader","context","params","image","trpcClient","compute","getImageById","query","project_id","projectId","imageId","imageTitle","name","id","head","loaderData","meta","title","component","lazyRouteComponent","$$splitComponentImporter","beforeLoad","availableServices","auth","getAvailableServices","serviceIndex","createFileRoute","useNavigate","trpcReact","Button","DescriptionDefinition","DescriptionList","DescriptionTerm","Divider","Spinner","Stack","MdContentCopy","MdDownload","Fragment","Route","staticData","section","service","isDetail","sectionCrumb","labelKey","crumb","to","loader","context","params","cert","trpcClient","services","pca","getByIdCertificate","query","project_id","projectId","certificate_authority_id","pcaId","certificate_id","certificateId","certTitle","id","head","loaderData","meta","title","component","RouteComponent","useLingui","navigate","useParams","isLoading","isError","error","data","certificate","useQuery","className","distribution","alignment","direction","variant","size","handleBack","errorMessage","message","gap","p","onClick","basicInfo","label","t","value","configuration","validity","not_before","undefined","not_after","Math","round","div","alignTerms","map","csr","Route","rootRouteImport","AboutRouteImport","AuthRouteImport","IndexRouteImport","AuthAuroraRouteImport","AuthProjectsIndexRouteImport","AuthAccountsIndexRouteImport","AuthProjectsProjectIdRouteImport","AuthProjectsProjectIdIndexRouteImport","AuthProjectsProjectIdNetworkRouteImport","AuthProjectsProjectIdStorageIndexRouteImport","AuthProjectsProjectIdServicesIndexRouteImport","AuthProjectsProjectIdNetworkIndexRouteImport","AuthProjectsProjectIdComputeIndexRouteImport","AuthProjectsProjectIdComputeImagesRouteImport","AuthProjectsProjectIdComputeFlavorsRouteImport","AuthProjectsProjectIdServicesPcaIndexRouteImport","AuthProjectsProjectIdNetworkSecuritygroupsIndexRouteImport","AuthProjectsProjectIdNetworkFloatingipsIndexRouteImport","AuthProjectsProjectIdComputeImagesIndexRouteImport","AuthProjectsProjectIdComputeFlavorsIndexRouteImport","AuthProjectsProjectIdComputeImagesImageIdRouteImport","AuthProjectsProjectIdComputeFlavorsFlavorIdRouteImport","AuthProjectsProjectIdStorageProviderContainersIndexRouteImport","AuthProjectsProjectIdServicesPcaPcaIdIndexRouteImport","AuthProjectsProjectIdNetworkSecuritygroupsSecurityGroupIdIndexRouteImport","AuthProjectsProjectIdNetworkFloatingipsFloatingIpIdIndexRouteImport","AuthProjectsProjectIdServicesPcaPcaIdCertificateIdRouteImport","AuthProjectsProjectIdStorageProviderContainersContainerNameObjectsIndexRouteImport","AboutRoute","update","id","path","getParentRoute","AuthRoute","IndexRoute","AuthAuroraRoute","AuthProjectsIndexRoute","AuthAccountsIndexRoute","AuthProjectsProjectIdRoute","AuthProjectsProjectIdIndexRoute","AuthProjectsProjectIdNetworkRoute","AuthProjectsProjectIdStorageIndexRoute","AuthProjectsProjectIdServicesIndexRoute","AuthProjectsProjectIdNetworkIndexRoute","AuthProjectsProjectIdComputeIndexRoute","AuthProjectsProjectIdComputeImagesRoute","AuthProjectsProjectIdComputeFlavorsRoute","AuthProjectsProjectIdServicesPcaIndexRoute","AuthProjectsProjectIdNetworkSecuritygroupsIndexRoute","AuthProjectsProjectIdNetworkFloatingipsIndexRoute","AuthProjectsProjectIdComputeImagesIndexRoute","AuthProjectsProjectIdComputeFlavorsIndexRoute","AuthProjectsProjectIdComputeImagesImageIdRoute","AuthProjectsProjectIdComputeFlavorsFlavorIdRoute","AuthProjectsProjectIdStorageProviderContainersIndexRoute","AuthProjectsProjectIdServicesPcaPcaIdIndexRoute","AuthProjectsProjectIdNetworkSecuritygroupsSecurityGroupIdIndexRoute","AuthProjectsProjectIdNetworkFloatingipsFloatingIpIdIndexRoute","AuthProjectsProjectIdServicesPcaPcaIdCertificateIdRoute","AuthProjectsProjectIdStorageProviderContainersContainerNameObjectsIndexRoute","AuthProjectsProjectIdNetworkRouteChildren","AuthProjectsProjectIdNetworkRouteWithChildren","_addFileChildren","AuthProjectsProjectIdComputeFlavorsRouteChildren","AuthProjectsProjectIdComputeFlavorsRouteWithChildren","AuthProjectsProjectIdComputeImagesRouteChildren","AuthProjectsProjectIdComputeImagesRouteWithChildren","AuthProjectsProjectIdRouteChildren","AuthProjectsProjectIdRouteWithChildren","AuthRouteChildren","AuthRouteWithChildren","rootRouteChildren","routeTree","_addFileTypes","createRouter","routeTree","createAuroraRouter","trpcReact","trpcClient","context","auth","undefined","navItems","handleThemeToggle","slots","messages","JSON","parse","AppShellProvider","RouterProvider","AuthProvider","useAuth","QueryClient","QueryClientProvider","hashKey","trpcReact","trpcReactClient","trpcClient","setBffEndpoint","createAuroraRouter","useState","useEffect","i18n","I18nProvider","ErrorBoundary","messages","enMessages","load","en","activate","navItems","App","props","bffEndpoint","router","currentTheme","setCurrentTheme","theme","queryClient","defaultOptions","queries","staleTime","refetchOnWindowFocus","queryKeyHashFn","queryKey","match","state","matches","findLast","m","params","projectId","reactClient","handleThemeToggle","newTheme","onThemeChange","fallbackRender","error","resetErrorBoundary","message","div","role","style","padding","p","pre","color","button","onClick","shadowRoot","Provider","client","AppInner","slots","appName","auth","routerContext","context","App","AuroraApp"],"sources":["../../src/client/assets/logo.svg?react","../../src/client/components/Auth/SessionExpirationTimer.tsx","../../src/client/components/navigation/UserMenu.tsx","../../src/client/components/navigation/MainNavigation.tsx","../../src/client/index.css?inline","../../src/client/components/Auth/InactivityModal.tsx","../../src/client/routes/__root.tsx","../../src/client/routes/about.tsx","../../src/client/routes/_auth.tsx","../../src/client/routes/index.tsx","../../src/client/routes/_auth/aurora.tsx","../../src/client/routes/_auth/accounts/index.tsx","../../src/client/routes/_auth/projects/$projectId/index.tsx","../../src/client/routes/_auth/projects/$projectId/network.tsx","../../src/client/routes/_auth/projects/$projectId/storage/index.tsx","../../src/client/routes/_auth/projects/$projectId/services/index.tsx","../../src/client/routes/_auth/projects/$projectId/network/index.tsx","../../src/client/routes/_auth/projects/$projectId/compute/index.tsx","../../src/client/routes/_auth/projects/$projectId/compute/images.tsx","../../src/client/routes/_auth/projects/$projectId/compute/flavors.tsx","../../src/client/routes/_auth/projects/$projectId/network/securitygroups/index.tsx","../../src/client/routes/_auth/projects/$projectId/network/floatingips/index.tsx","../../src/client/routes/_auth/projects/$projectId/compute/images/$imageId.tsx","../../src/client/routes/_auth/projects/$projectId/services/pca/$pcaId/$certificateId.tsx","../../src/client/routeTree.gen.ts","../../src/client/router.ts","../../src/locales/en/messages.ts","../../src/client/App.tsx","../../src/client/AuroraApp.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst SvgLogo = (props) => /* @__PURE__ */ _jsxs(\"svg\", {\n\tviewBox: \"0 0 500 500\",\n\txmlns: \"http://www.w3.org/2000/svg\",\n\tdesc: \"Created with imagetracer.js version 1.2.6\",\n\t...props,\n\tchildren: [\n\t\t/* @__PURE__ */ _jsx(\"path\", {\n\t\t\tclassName: \"shape-1\",\n\t\t\tstrokeWidth: 1,\n\t\t\topacity: .9215686274509803,\n\t\t\td: \"M 67.5 0 L 204.5 0 L 207 2.5 L 273 116.5 L 273 119.5 L 205 237 L 67.5 237 L 67 235.5 L 0 120.5 L 0 116.5 L 67.5 0 Z M 78 15 L 18 117 L 18 120 L 76 220 L 78 221 L 195 221 L 254 120 L 252 113 L 219 58 L 197 18 L 195 15 L 78 15 Z \"\n\t\t}),\n\t\t/* @__PURE__ */ _jsx(\"path\", {\n\t\t\tclassName: \"shape-2\",\n\t\t\tstrokeWidth: 1,\n\t\t\topacity: .9215686274509803,\n\t\t\td: \"M 295.5 131 L 432.5 131 L 433 132.5 L 471 196.5 L 483 219.5 L 486 222.5 L 486 224.5 L 500 247.5 L 500 251.5 L 433 368 L 295.5 368 L 294 366.5 L 234 263.5 L 227 248.5 L 295.5 131 Z M 304 147 L 286 181 L 246 248 L 246 252 L 304 351 L 305 352 L 424 352 L 427 345 L 482 251 L 482 249 L 424 149 L 423 147 L 304 147 Z \"\n\t\t}),\n\t\t/* @__PURE__ */ _jsx(\"path\", {\n\t\t\tclassName: \"shape-3\",\n\t\t\tstrokeWidth: 1,\n\t\t\topacity: .9215686274509803,\n\t\t\td: \"M 67 256 L 204.5 256 L 205 257.5 L 268 364.5 L 273 375.5 L 213 478.5 L 206 493 L 67.5 493 L 67 491.5 L 64 488.5 L 64 486.5 L 42 450.5 L 22 413.5 L 19 410.5 L 19 408.5 L 3 382.5 L 0 376.5 L 0 372.5 L 57 275.5 L 67 256 Z M 78 272 L 18 374 L 18 377 L 36 406 L 76 477 L 78 478 L 195 478 L 254 377 L 254 374 L 247 361 L 196 274 L 196 272 L 78 272 Z \"\n\t\t}),\n\t\t/* @__PURE__ */ _jsx(\"path\", {\n\t\t\tclassName: \"shape-4\",\n\t\t\tstrokeWidth: 1,\n\t\t\topacity: 0,\n\t\t\td: \"M 0 0 L 67 0.5 L 0.5 116 L 0 0 Z \"\n\t\t}),\n\t\t/* @__PURE__ */ _jsx(\"path\", {\n\t\t\tclassName: \"shape-5\",\n\t\t\tstrokeWidth: 1,\n\t\t\topacity: 0,\n\t\t\td: \"M 205.5 0 L 500 0 L 500 246.5 L 498 245.5 L 433 131 L 295.5 131 L 294 132.5 L 247 215.5 L 229 244.5 L 227 250.5 L 295.5 368 L 432.5 368 L 433 366.5 L 499.5 252 L 500 493 L 206.5 493 L 206 491.5 L 266 388.5 L 273 373.5 L 205 256 L 67.5 256 L 67 257.5 L 0.5 372 L 0 121.5 L 2 122.5 L 67 237 L 204.5 237 L 205 235.5 L 273 119.5 L 273 116.5 L 205.5 0 Z \"\n\t\t}),\n\t\t/* @__PURE__ */ _jsx(\"path\", {\n\t\t\tclassName: \"shape-6\",\n\t\t\tstrokeWidth: 1,\n\t\t\topacity: 0,\n\t\t\td: \"M 77.5 15 L 194.5 15 L 197 17.5 L 219 57.5 L 252 112.5 L 254 119.5 L 194.5 221 L 77.5 221 L 76 219.5 L 18 119.5 L 18 116.5 L 77.5 15 Z \"\n\t\t}),\n\t\t/* @__PURE__ */ _jsx(\"path\", {\n\t\t\tclassName: \"shape-7\",\n\t\t\tstrokeWidth: 1,\n\t\t\topacity: 0,\n\t\t\td: \"M 304 147 L 422.5 147 L 424 148.5 L 482 248.5 L 482 250.5 L 427 344.5 L 424 352 L 304.5 352 L 304 350.5 L 246 251.5 L 246 247.5 L 286 180.5 L 304 147 Z \"\n\t\t}),\n\t\t/* @__PURE__ */ _jsx(\"path\", {\n\t\t\tclassName: \"shape-8\",\n\t\t\tstrokeWidth: 1,\n\t\t\topacity: 0,\n\t\t\td: \"M 77.5 272 L 195.5 272 L 196 273.5 L 247 360.5 L 254 373.5 L 254 376.5 L 194.5 478 L 77.5 478 L 76 476.5 L 36 405.5 L 18 376.5 L 18 373.5 L 77.5 272 Z \"\n\t\t}),\n\t\t/* @__PURE__ */ _jsx(\"path\", {\n\t\t\tclassName: \"shape-9\",\n\t\t\tstrokeWidth: 1,\n\t\t\topacity: 0,\n\t\t\td: \"M 0.5 377 L 67 493 L 0 493 L 0.5 377 Z \"\n\t\t})\n\t]\n});\nexport default SvgLogo;\n","import { useEffect, useState } from \"react\"\nimport { useNavigate, useRouterState } from \"@tanstack/react-router\"\nimport { cn } from \"@/client/utils/cn\"\nimport { Trans } from \"@lingui/react/macro\"\n\nexport function SessionExpirationTimer(props: {\n className?: string\n sessionExpired: Date\n logout: () => Promise<void>\n}) {\n const [timeLeft, setTimeLeft] = useState<string>(\"\")\n const navigate = useNavigate()\n const pathname = useRouterState({ select: (s) => s.location.pathname })\n\n useEffect(() => {\n const updateCountdown = () => {\n const now = new Date()\n const timeDiff = props.sessionExpired.getTime() - now.getTime()\n\n if (timeDiff <= 0) {\n setTimeLeft(`expired!`)\n return\n }\n\n const seconds = Math.floor(timeDiff / 1000) % 60\n const minutes = Math.floor(timeDiff / (1000 * 60)) % 60\n const hours = Math.floor(timeDiff / (1000 * 60 * 60)) % 24\n const days = Math.floor(timeDiff / (1000 * 60 * 60 * 24))\n\n const formatted = [days > 0 && `${days}d`, hours > 0 && `${hours}h`, minutes > 0 && `${minutes}m`, `${seconds}s`]\n .filter(Boolean)\n .join(\" \")\n\n setTimeLeft(formatted)\n }\n\n updateCountdown()\n const intervalId = setInterval(updateCountdown, 1000)\n\n const delay = props.sessionExpired.getTime() - Date.now()\n\n const handleExpiration = async () => {\n try {\n await props.logout()\n } catch (error) {\n console.error(\"Error during session expiration logout: \", error)\n }\n\n // Only navigate if not already on login page\n if (pathname !== \"/\") {\n navigate({\n to: \"/\",\n search: {\n redirect: pathname || undefined,\n },\n })\n }\n }\n\n let logoutTimer: NodeJS.Timeout | undefined\n\n if (delay <= 0) {\n handleExpiration()\n } else {\n logoutTimer = setTimeout(handleExpiration, delay)\n }\n\n return () => {\n clearInterval(intervalId)\n if (logoutTimer) clearTimeout(logoutTimer)\n }\n }, [props.sessionExpired, props.logout, navigate, pathname])\n\n return (\n <div className={cn(\"text-theme-light pt-2 pb-2 text-xs\", props.className)}>\n <Trans>Session expires in</Trans> {timeLeft}\n </div>\n )\n}\n","import { trpcClient } from \"../../trpcClient\"\nimport {\n PopupMenu,\n PopupMenuOptions,\n PopupMenuItem,\n PopupMenuSection,\n PopupMenuSectionHeading,\n PopupMenuSectionSeparator,\n} from \"@cloudoperators/juno-ui-components\"\nimport { useAuth } from \"../../store/AuthProvider\"\nimport { useNavigate } from \"@tanstack/react-router\"\nimport { SessionExpirationTimer } from \"../Auth/SessionExpirationTimer\"\nimport { useState } from \"react\"\n\nexport function UserMenu() {\n const [isLoading, setIsLoading] = useState(false)\n const { isAuthenticated, user, logout, expiresAt } = useAuth()\n const navigate = useNavigate()\n\n const handleLogin = () => {\n navigate({ to: \"/\" })\n }\n\n const handleLogout = async () => {\n setIsLoading(true)\n try {\n await trpcClient.auth.terminateUserSession.mutate()\n } catch (error) {\n console.error(\"Error logging out: \", error)\n } finally {\n try {\n await logout(\"manual\")\n } catch (error) {\n console.error(\"Error during logout: \", error)\n }\n setIsLoading(false)\n await navigate({ to: \"/\" })\n }\n }\n\n return (\n <PopupMenu icon=\"accountCircle\">\n <PopupMenuOptions>\n {isAuthenticated ? (\n <>\n <PopupMenuSection>\n <PopupMenuSectionHeading>\n <div className=\"font-semibold\">{user?.name}</div>\n {user?.domain?.name && <div className=\"text-xs opacity-60\">{user.domain.name}</div>}\n </PopupMenuSectionHeading>\n </PopupMenuSection>\n <PopupMenuSectionSeparator />\n <PopupMenuSection>\n <PopupMenuItem\n icon=\"exitToApp\"\n label={isLoading ? \"Signing out…\" : \"Log Out\"}\n disabled={isLoading}\n onClick={handleLogout}\n />\n {expiresAt && (\n <PopupMenuSectionHeading>\n <SessionExpirationTimer sessionExpired={expiresAt} logout={() => logout(\"expired\")} />\n </PopupMenuSectionHeading>\n )}\n </PopupMenuSection>\n </>\n ) : (\n <PopupMenuSection>\n <PopupMenuItem icon=\"manageAccounts\" label=\"Sign In\" onClick={handleLogin} />\n </PopupMenuSection>\n )}\n </PopupMenuOptions>\n </PopupMenu>\n )\n}\n","import Logo from \"../../assets/logo.svg?react\"\nimport { NavigationItem } from \"./types\"\nimport { isMatch, Link, MakeRouteMatchUnion, useRouterState } from \"@tanstack/react-router\"\nimport { UserMenu } from \"./UserMenu\"\nimport { PageHeader, ThemeToggle } from \"@cloudoperators/juno-ui-components/index\"\nimport { cn } from \"@/client/utils/cn\"\nimport type { Slots } from \"../../AuroraApp\"\nimport { Slot } from \"../Slot\"\n\ninterface NavigationProps {\n items: NavigationItem[]\n handleThemeToggle?: (theme: string) => void\n appName?: string\n slots?: Slots\n}\n\nconst textColorClass = \"text-theme-pageheader-appname-default\"\nconst textHoverClass = \"hover:text-theme-pageheader-appname-hover\"\nconst textMutedClass = \"text-theme-pageheader-appname-default/40\"\n\nfunction getDomain(matches: MakeRouteMatchUnion[]) {\n const domainMatch = matches.filter((match) => isMatch(match, \"loaderData.crumbDomain\"))[0]\n if (!domainMatch) {\n return null\n }\n return {\n name: domainMatch?.loaderData?.crumbDomain?.name,\n path: domainMatch?.loaderData?.crumbDomain?.path,\n }\n}\n\nfunction getProject(matches: MakeRouteMatchUnion[]) {\n const projectMatch = matches.filter((match) => isMatch(match, \"loaderData.crumbProject\"))[0]\n if (!projectMatch) {\n return null\n }\n const domain = getDomain(matches)\n const projectId = projectMatch.loaderData?.crumbProject?.id\n return {\n name: projectMatch.loaderData?.crumbProject?.name || undefined,\n path: domain?.path && projectId ? `${domain.path}/${projectId}` : undefined,\n }\n}\n\nexport function MainNavigation({ items, handleThemeToggle, appName, slots }: NavigationProps) {\n const matches = useRouterState({ select: (s) => s.matches })\n const domain = getDomain(matches)\n const project = getProject(matches)\n const displayName = appName ?? \"Aurora\"\n\n return (\n <PageHeader\n logo={\n slots?.logo ? (\n <Slot component={slots.logo} useShadowDOM={false} />\n ) : (\n <Logo className={cn(\"h-6 w-6 shrink-0 fill-current\", textColorClass)} title={displayName} />\n )\n }\n applicationName={\n <div className=\"flex flex-nowrap items-center space-x-2\">\n <Link to=\"/projects\" className={cn(\"shrink-0\", textColorClass, textHoverClass)}>\n {displayName}\n </Link>\n {domain && (\n <>\n <span className={cn(\"shrink-0\", textMutedClass)}>|</span>\n <span data-testid=\"domain-name\" className={cn(\"shrink-0\", textColorClass)}>\n {domain.name}\n </span>\n </>\n )}\n {project && (\n <>\n <span className={cn(\"shrink-0\", textMutedClass)}>|</span>\n <Link\n to={project.path ?? \"/projects\"}\n data-testid=\"project-link\"\n className={cn(\"shrink-0\", textColorClass, textHoverClass)}\n >\n {project.name}\n </Link>\n </>\n )}\n </div>\n }\n >\n {items.map(({ route, label }, index) => (\n <Link className={cn(\"shrink-0\", textColorClass, textHoverClass)} key={index} to={route}>\n {label}\n </Link>\n ))}\n <ThemeToggle onToggleTheme={(newTheme: string) => handleThemeToggle?.(newTheme)} />\n <UserMenu />\n </PageHeader>\n )\n}\n","/* Do not remove these tailwind directives. Without them styles won't work as expected */\n@import \"tailwindcss\";\n@import \"@cloudoperators/juno-ui-components/theme.css\";\n@import \"./theme.css\";\n/* Tell Tailwind to scan this directory for class names. Needed because routes are code-split (lazy loaded) and won't be in Vite's module graph when CSS is first generated. */\n@source \".\";\nhtml,\nbody {\n height: 100%;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n}\n\n#app {\n flex-grow: 1;\n /* This pushes the footer down */\n}\n","import { Modal } from \"@cloudoperators/juno-ui-components\"\nimport { Trans, useLingui } from \"@lingui/react/macro\"\nimport { useAuth } from \"../../store/AuthProvider\"\n\nexport function InactivityModal() {\n const { t } = useLingui()\n const { showInactivityModal, closeInactivityModal, logoutReason } = useAuth()\n\n if (!showInactivityModal) return null\n\n const title = logoutReason === \"expired\" ? t`Session Expired` : t`Inactivity Timeout`\n const message =\n logoutReason === \"expired\" ? t`Your session has expired.` : t`You have been logged out due to inactivity.`\n\n return (\n <Modal\n open={showInactivityModal}\n title={title}\n onConfirm={closeInactivityModal}\n confirmButtonLabel={t`OK`}\n disableCancelButton\n size=\"small\"\n >\n <p>{message}</p>\n <p>\n <Trans>Please log in again to continue.</Trans>\n </p>\n </Modal>\n )\n}\n","import { createRootRouteWithContext, Outlet, useRouter, HeadContent } from \"@tanstack/react-router\"\nimport { AppShell, Spinner, Stack } from \"@cloudoperators/juno-ui-components\"\nimport { MainNavigation } from \"../components/navigation/MainNavigation\"\nimport { TrpcClient, TrpcReact } from \"../trpcClient\"\nimport { AuthContext } from \"../store/AuthProvider\"\nimport { NavigationItem } from \"../components/navigation/types\"\nimport type { Slots } from \"../AuroraApp\"\nimport styles from \"../index.css?inline\"\nimport { InactivityModal } from \"../components/Auth/InactivityModal\"\nimport { RouteError } from \"../components/Error/RouteError\"\nimport { useLingui } from \"@lingui/react/macro\"\nimport { StatusError } from \"../components/Error/StatusError\"\nimport { Slot } from \"../components/Slot\"\n\nexport interface RouterContext {\n trpcReact: TrpcReact\n trpcClient: TrpcClient\n auth: AuthContext\n navItems: NavigationItem[]\n handleThemeToggle?: (theme: string) => void\n slots?: Slots\n appName?: string\n}\n\nexport const Route = createRootRouteWithContext<RouterContext>()({\n component: RootComponent,\n notFoundComponent: PageNotFound,\n errorComponent: RootErrorComponent,\n pendingComponent: PendingComponent,\n})\n\nfunction AuroraLayout({ children }: { children: React.ReactNode }) {\n const { navItems, handleThemeToggle, appName, slots } = Route.useRouteContext()\n\n return (\n <>\n <HeadContent />\n <style>{styles.toString()}</style>\n\n <AppShell\n pageHeader={\n <MainNavigation items={navItems} handleThemeToggle={handleThemeToggle} appName={appName} slots={slots} />\n }\n pageFooter={slots?.pageFooter ? <Slot component={slots.pageFooter} useShadowDOM={false} /> : undefined}\n fullWidthContent\n >\n <InactivityModal />\n {children}\n </AppShell>\n </>\n )\n}\n\nfunction RootComponent() {\n return (\n <AuroraLayout>\n <Outlet />\n </AuroraLayout>\n )\n}\n\nfunction RootErrorComponent({ error }: { error: Error }) {\n return (\n <AuroraLayout>\n <RouteError error={error} />\n </AuroraLayout>\n )\n}\n\nfunction PageNotFound() {\n const { t } = useLingui()\n const navigateTo = Route.useNavigate()\n const router = useRouter()\n\n return (\n <StatusError\n message={t`The page you are looking for does not exist.`}\n title={t`Page Not Found`}\n onHomeClick={() => navigateTo({ to: \"/\" })}\n onBackClick={() => router.history.back()}\n statusCode={404}\n />\n )\n}\n\nfunction PendingComponent() {\n return (\n <AuroraLayout>\n <Stack className=\"fixed inset-0\" distribution=\"center\" alignment=\"center\">\n <div className=\"absolute inset-0 backdrop-blur-sm\" />\n <Spinner variant=\"primary\" size=\"large\" />\n </Stack>\n </AuroraLayout>\n )\n}\n","import { createFileRoute } from \"@tanstack/react-router\"\nimport { Trans } from \"@lingui/react/macro\"\nimport { Container, ContentHeading } from \"@cloudoperators/juno-ui-components/index\"\n\nexport const Route = createFileRoute(\"/about\")({\n component: About,\n})\n\nfunction About() {\n return (\n <Container className=\"flex flex-col items-center justify-center px-6 py-12 sm:px-12 md:px-20\">\n <div className=\"mx-auto w-full lg:w-2/3\">\n <ContentHeading className=\"mb-6 text-center\">\n <Trans>About Aurora Dashboard</Trans>\n </ContentHeading>\n <p className=\"mb-8 text-center\">\n <Trans>\n Welcome to <strong>Aurora Dashboard</strong>, your next-generation cloud management solution. We are\n dedicated to simplifying how you interact with and manage your cloud infrastructure. Designed with\n efficiency, scalability, and usability at its core, Aurora empowers you to streamline operations and unlock\n the full potential of your cloud resources.\n </Trans>\n </p>\n <ContentHeading className=\"mb-4 text-center\">\n <Trans>Our Mission</Trans>\n </ContentHeading>\n <p className=\"mb-8 text-center\">\n <Trans>\n At Aurora, our mission is to provide a centralized platform that unifies cloud management. We aim to\n simplify the complexities of provisioning, configuring, and scaling resources across diverse cloud\n environments while enabling seamless growth for your business.\n </Trans>\n </p>\n <ContentHeading className=\"mb-4 text-center\">\n <Trans>Key Features</Trans>\n </ContentHeading>\n <ul className=\"mb-8 list-disc space-y-4 pl-6\">\n <li>\n <p>\n <Trans>\n <strong>Unified Cloud Management:</strong> Consolidates all your cloud assets into one intuitive\n interface.\n </Trans>\n </p>\n </li>\n <li>\n <p>\n <Trans>\n <strong>Effortless Resource Provisioning:</strong> Quickly provision, configure, and deploy resources\n like servers, networks, and volumes with just a few clicks.\n </Trans>\n </p>\n </li>\n <li>\n <p>\n <Trans>\n <strong>Optimized Scalability:</strong> Built for businesses of all sizes, Aurora grows with you,\n supporting simple environments and intricate multi-cloud setups alike.\n </Trans>\n </p>\n </li>\n <li>\n <p>\n <Trans>\n <strong>Enhanced Productivity:</strong> By reducing operational complexity, Aurora helps your team focus\n on what truly matters—innovating and driving business success.\n </Trans>\n </p>\n </li>\n </ul>\n <ContentHeading className=\"mb-4 text-center\">\n <Trans>Why Choose Aurora?</Trans>\n </ContentHeading>\n <p className=\"mb-8 text-center\">\n <Trans>\n Aurora Dashboard is more than just a tool—it's your partner in navigating the cloud. Whether you're a small\n startup or a global enterprise, Aurora provides the flexibility, power, and simplicity you need to achieve\n your goals.\n </Trans>\n </p>\n <ul className=\"mb-8 list-disc space-y-4 pl-6\">\n <li>\n <p>\n <Trans>\n <strong>Secure & Reliable:</strong> Your data and operations are safeguarded with enterprise-grade\n security and robust reliability.\n </Trans>\n </p>\n </li>\n <li>\n <p>\n <Trans>\n <strong>Future-Ready:</strong> Aurora is designed to evolve with the latest trends in cloud technology,\n ensuring your solution is always cutting-edge.\n </Trans>\n </p>\n </li>\n </ul>\n <ContentHeading className=\"mb-4 text-center\">\n <Trans>Get Involved</Trans>\n </ContentHeading>\n <p className=\"mb-6 text-center\">\n <Trans>\n We are building Aurora Dashboard to serve you better. Your feedback is invaluable in shaping a tool that\n meets the unique needs of businesses like yours. Stay connected and join us as we redefine cloud management.\n </Trans>\n </p>\n <p className=\"text-center\">\n <Trans>Together, we can unlock the true potential of your cloud infrastructure.</Trans>\n </p>\n </div>\n </Container>\n )\n}\n","import { createFileRoute, Outlet, redirect } from \"@tanstack/react-router\"\nimport { useAuth } from \"../store/AuthProvider\"\n\nexport const Route = createFileRoute(\"/_auth\")({\n component: RouteComponent,\n beforeLoad: async ({ context, location }) => {\n if (!context.auth?.isAuthenticated) {\n const token = await context.trpcClient?.auth.getCurrentUserSession.query()\n if (!token) {\n const redirectPath = location.pathname ? location.pathname : \"\"\n\n throw redirect({\n to: \"/\",\n search: { redirect: redirectPath },\n })\n }\n context.auth?.login(token.user, token.expires_at)\n }\n },\n})\n\nfunction RouteComponent() {\n useAuth()\n\n return <Outlet />\n}\n","import { useState, useCallback, useEffect, useRef } from \"react\"\nimport { createFileRoute, redirect, useRouterState } from \"@tanstack/react-router\"\nimport { useAuth } from \"../store/AuthProvider\"\nimport { z } from \"zod\"\nimport { trpcClient } from \"../trpcClient\"\nimport { Trans, useLingui } from \"@lingui/react/macro\"\nimport { Button, ContentHeading, Message } from \"@cloudoperators/juno-ui-components\"\nimport { useErrorTranslation } from \"../utils/useErrorTranslation\"\n\nfunction isSafeRedirect(path: unknown): path is string {\n return typeof path === \"string\" && path.startsWith(\"/\") && !path.startsWith(\"//\")\n}\n\nexport const Route = createFileRoute(\"/\")({\n validateSearch: z.object({\n redirect: z.string().optional().catch(\"\"),\n }),\n beforeLoad: async ({ context, search }) => {\n let isAuthenticated = context.auth?.isAuthenticated\n\n if (!isAuthenticated && context.trpcClient) {\n try {\n const token = await context.trpcClient.auth.getCurrentUserSession.query()\n if (token) {\n context.auth?.login(token.user, token.expires_at)\n isAuthenticated = true\n }\n } catch {\n // Session probe failed — treat as unauthenticated so the login route can render\n }\n }\n\n if (isAuthenticated) {\n const savedRedirect = sessionStorage.getItem(\"redirect_after_login\")\n\n let redirectTo = `/projects`\n\n if (isSafeRedirect(savedRedirect)) {\n redirectTo = savedRedirect\n } else if (isSafeRedirect(search.redirect)) {\n redirectTo = search.redirect\n }\n\n sessionStorage.removeItem(\"redirect_after_login\")\n throw redirect({ to: redirectTo })\n }\n },\n component: AuthLoginPage,\n})\n\nconst textinputstyles = `\n jn-bg-theme-textinput\n jn-text-theme-textinput\n jn-text-base\n jn-leading-4\n jn-px-4\n jn-h-textinput\n jn-rounded-3px\n focus:jn-outline-none\n focus:jn-ring-2\n focus:jn-ring-theme-focus\n disabled:jn-opacity-50\n autofill:jn-bg-theme-textinput-autofill\n autofill:jn-text-theme-textinput-autofill\n peer\n`\n\nexport function AuthLoginPage() {\n const { isAuthenticated, login, logoutReason } = useAuth()\n const isLoading = useRouterState({ select: (s) => s.isLoading })\n const navigate = Route.useNavigate()\n const search = Route.useSearch()\n const { t } = useLingui()\n const { translateError } = useErrorTranslation()\n\n const [form, setForm] = useState({ domainName: \"\", user: \"\", password: \"\" })\n const [isSubmitting, setIsSubmitting] = useState(false)\n const [loginError, setLoginError] = useState<string | null>(null)\n const skipAutoRedirectRef = useRef(false)\n\n const signin = useCallback(async () => {\n setIsSubmitting(true)\n setLoginError(null)\n\n try {\n const token = await trpcClient.auth.createUserSession.mutate(form)\n\n await login(token.user, token.expires_at)\n\n const savedRedirect = sessionStorage.getItem(\"redirect_after_login\")\n const searchRedirect = search.redirect\n const defaultRedirect = `/projects`\n\n let redirectTo = defaultRedirect\n\n if (isSafeRedirect(savedRedirect)) {\n redirectTo = savedRedirect\n } else if (isSafeRedirect(searchRedirect)) {\n redirectTo = searchRedirect\n }\n\n sessionStorage.removeItem(\"redirect_after_login\")\n skipAutoRedirectRef.current = true\n\n await navigate({\n to: redirectTo,\n replace: true,\n })\n } catch (error) {\n await login(null)\n console.error(\"Error logging in: \", error)\n\n const errorMessage = (error as Error)?.message\n ? translateError((error as Error).message)\n : t`Login failed. Please check your credentials and try again.`\n\n setLoginError(errorMessage)\n } finally {\n setIsSubmitting(false)\n }\n }, [form, login, navigate, search.redirect, t, translateError])\n\n const dismissError = () => {\n setLoginError(null)\n }\n\n // Redirect effect: Handle race condition where isAuthenticated becomes true after component mounts\n // (e.g., during login flow). The beforeLoad guard handles direct navigation to / while\n // already authenticated, but this effect handles the case where authentication completes mid-render.\n useEffect(() => {\n if (!isAuthenticated || isLoading) return\n\n if (skipAutoRedirectRef.current) {\n skipAutoRedirectRef.current = false\n return\n }\n\n const savedRedirect = sessionStorage.getItem(\"redirect_after_login\")\n const searchRedirect = search.redirect\n\n let redirectTo = `/projects`\n\n if (isSafeRedirect(savedRedirect)) {\n redirectTo = savedRedirect\n } else if (isSafeRedirect(searchRedirect)) {\n redirectTo = searchRedirect\n }\n\n sessionStorage.removeItem(\"redirect_after_login\")\n\n navigate({\n to: redirectTo,\n replace: true,\n })\n }, [isAuthenticated, isLoading, search.redirect, navigate])\n\n const isLoggingIn = isLoading || isSubmitting\n\n const wasInactive = logoutReason === \"inactive\" || logoutReason === \"expired\"\n\n return (\n <div className=\"mt-8 flex justify-center\">\n <div className=\"border-theme-light relative w-full max-w-md rounded-lg border p-6 shadow-lg\">\n {loginError && (\n <Message\n onDismiss={dismissError}\n text={loginError}\n variant=\"error\"\n className=\"absolute -top-14 right-0 left-0 z-50\"\n />\n )}\n <ContentHeading className=\"text-center\">\n <Trans>Login to Your Account</Trans>\n </ContentHeading>\n <p className=\"mb-6 text-center\">\n <Trans>Enter your credentials to access your account</Trans>\n </p>\n {(search.redirect || wasInactive) && (\n <p className=\"mb-4 text-center text-sm text-red-500\">\n {wasInactive ? (\n <Trans>Your session expired. Please login again.</Trans>\n ) : (\n <Trans>You need to login to access this page.</Trans>\n )}\n </p>\n )}\n <form\n className=\"space-y-4\"\n onSubmit={(e) => {\n e.preventDefault()\n signin()\n }}\n >\n <div className=\"flex flex-col\">\n <label htmlFor=\"domain\" className=\"font-medium text-gray-300\">\n <Trans>Domain</Trans>\n </label>\n <input\n id=\"domain\"\n type=\"text\"\n placeholder={t`Enter your domain`}\n className={textinputstyles}\n onChange={(e) => {\n setForm({ ...form, domainName: e.target.value })\n if (loginError) setLoginError(null)\n }}\n required\n />\n </div>\n\n <div className=\"flex flex-col\">\n <label htmlFor=\"user\" className=\"font-medium text-gray-300\">\n <Trans>User C/D/I</Trans>\n </label>\n <input\n id=\"user\"\n type=\"text\"\n placeholder={t`Enter your username`}\n className={textinputstyles}\n onChange={(e) => {\n setForm({ ...form, user: e.target.value })\n if (loginError) setLoginError(null)\n }}\n required\n />\n </div>\n\n <div className=\"flex flex-col\">\n <label htmlFor=\"password\" className=\"font-medium text-gray-300\">\n <Trans>Password</Trans>\n </label>\n <input\n id=\"password\"\n type=\"password\"\n required\n className={textinputstyles}\n onChange={(e) => {\n setForm({ ...form, password: e.target.value })\n if (loginError) setLoginError(null)\n }}\n />\n </div>\n\n <Button type=\"submit\" className=\"w-full\" disabled={isLoggingIn}>\n {isLoggingIn ? <Trans>Loading...</Trans> : <Trans>Sign In</Trans>}\n </Button>\n </form>\n </div>\n </div>\n )\n}\n","import { createFileRoute } from \"@tanstack/react-router\"\n\nimport { useAuth } from \"../../store/AuthProvider\"\nimport { Trans } from \"@lingui/react/macro\"\n\nexport const Route = createFileRoute(\"/_auth/aurora\")({\n component: DashboardPage,\n})\n\nfunction DashboardPage() {\n const { user } = useAuth()\n\n return (\n <div className=\"grid gap-2 p-2\">\n <p>\n <Trans>Hi</Trans> {user?.name}\n </p>\n <p>\n <Trans>You are currently on the dashboard route.</Trans>\n </p>\n </div>\n )\n}\n","import { createFileRoute, redirect } from \"@tanstack/react-router\"\n\nexport const Route = createFileRoute(\"/_auth/accounts/\")({\n beforeLoad: ({ context }) => {\n if (context.auth?.isAuthenticated && context.auth.user?.domain?.id) {\n throw redirect({\n to: `/projects`,\n })\n } else {\n throw redirect({ to: \"/\" })\n }\n },\n})\n","import { createFileRoute, Link, useLoaderData } from \"@tanstack/react-router\"\nimport { Box, Stack } from \"@cloudoperators/juno-ui-components\"\nimport { getServiceIndex } from \"@/server/Authentication/helpers\"\nimport { Trans } from \"@lingui/react/macro\"\nimport { useLingui } from \"@lingui/react/macro\"\nimport { ContentHeader } from \"@/client/components/ContentHeader/ContentHeader\"\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/\")({\n component: RouteComponent,\n})\n\ninterface ServiceCardProps {\n title: string\n links: { label: string; to: string }[]\n}\n\nfunction ServiceCard({ title, links }: ServiceCardProps) {\n return (\n <Box className=\"p-5\">\n <h3 className=\"text-theme-high mb-3 text-base font-semibold\">{title}</h3>\n <ul className=\"space-y-1.5\">\n {links.map(({ label, to }) => (\n <li key={label}>\n <Link to={to} className=\"text-theme-accent hover:text-theme-accent/80 text-sm\">\n {label}\n </Link>\n </li>\n ))}\n </ul>\n </Box>\n )\n}\n\nfunction RouteComponent() {\n const { crumbProject, availableServices, projectId } = useLoaderData({\n from: \"/_auth/projects/$projectId\",\n })\n const { t } = useLingui()\n\n const serviceIndex = getServiceIndex(availableServices ?? [])\n const base = `/projects/${projectId}`\n\n const cards: ServiceCardProps[] = []\n\n if (serviceIndex[\"image\"]?.[\"glance\"] || serviceIndex[\"compute\"]?.[\"nova\"]) {\n const links: { label: string; to: string }[] = []\n if (serviceIndex[\"image\"]?.[\"glance\"]) links.push({ label: \"Images\", to: `${base}/compute/images` })\n if (serviceIndex[\"compute\"]?.[\"nova\"]) links.push({ label: \"Flavors\", to: `${base}/compute/flavors` })\n cards.push({ title: \"Compute\", links })\n }\n\n if (serviceIndex[\"network\"]) {\n cards.push({\n title: \"Network\",\n links: [\n { label: \"Security Groups\", to: `${base}/network/securitygroups` },\n { label: \"Floating IPs\", to: `${base}/network/floatingips` },\n ],\n })\n }\n\n // Storage section - always show Ceph, optionally add Swift\n const storageLinks: { label: string; to: string }[] = []\n if (serviceIndex[\"object-store\"]?.[\"swift\"]) {\n storageLinks.push({ label: \"Swift\", to: `${base}/storage/swift/containers` })\n }\n storageLinks.push({ label: \"Ceph\", to: `${base}/storage/ceph/containers` })\n cards.push({ title: \"Storage\", links: storageLinks })\n\n // temporary as clavis is not fully GA, after GA replace with [\"pca\"]?.[\"clavis\"]\n if (serviceIndex[\"pca\"]?.[\"clavis-dev\"] || serviceIndex[\"pca\"]?.[\"clavis-beta\"]) {\n cards.push({\n title: \"Services\",\n links: [{ label: \"PCA (Clavis)\", to: `${base}/services/pca` }],\n })\n }\n\n return (\n <Stack direction=\"vertical\" gap=\"6\" className=\"pb-4\">\n <ContentHeader title={crumbProject?.name ?? t`Project`} projectId={projectId} />\n {cards.length > 0 ? (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {cards.map((card) => (\n <ServiceCard key={card.title} {...card} />\n ))}\n </div>\n ) : (\n <p className=\"text-theme-light text-sm\">\n <Trans>No services available for this project.</Trans>\n </p>\n )}\n </Stack>\n )\n}\n","import { createFileRoute, Outlet, redirect } from \"@tanstack/react-router\"\nimport { getServiceIndex } from \"@/server/Authentication/helpers\"\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/network\")({\n loader: async ({ context }) => {\n const { trpcClient } = context\n const availableServices = await trpcClient?.auth.getAvailableServices.query()\n return { availableServices }\n },\n beforeLoad: async ({ context, params }) => {\n const { trpcClient } = context\n const { projectId } = params\n const availableServices = await trpcClient?.auth.getAvailableServices.query()\n const serviceIndex = getServiceIndex(availableServices!)\n\n if (!serviceIndex[\"network\"]) {\n throw redirect({\n to: \"/projects/$projectId\",\n params: { projectId },\n })\n }\n },\n component: () => <Outlet />,\n})\n","import { createFileRoute, redirect } from \"@tanstack/react-router\"\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/storage/\")({\n beforeLoad: ({ params }) => {\n throw redirect({ to: \"/projects/$projectId\", params })\n },\n})\n","import { createFileRoute, redirect } from \"@tanstack/react-router\"\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/services/\")({\n beforeLoad: ({ params }) => {\n throw redirect({ to: \"/projects/$projectId\", params })\n },\n})\n","import { createFileRoute, redirect } from \"@tanstack/react-router\"\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/network/\")({\n beforeLoad: ({ params }) => {\n throw redirect({ to: \"/projects/$projectId\", params })\n },\n})\n","import { createFileRoute, redirect } from \"@tanstack/react-router\"\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/compute/\")({\n beforeLoad: ({ params }) => {\n throw redirect({ to: \"/projects/$projectId\", params })\n },\n})\n","import { createFileRoute, Outlet, redirect } from \"@tanstack/react-router\"\nimport { getServiceIndex } from \"@/server/Authentication/helpers\"\nimport { z } from \"zod\"\nimport type { RouteInfo } from \"@/client/routes/routeInfo\"\nimport { RouteError } from \"@/client/components/Error/RouteError\"\n\nconst multiValueEnum = (allowedValues: string[]) => {\n return z.string().refine((val) => {\n const values = val.startsWith(\"in:\") ? val.replace(\"in:\", \"\").split(\",\") : [val]\n return values.every((v) => allowedValues.includes(v))\n })\n}\n\nconst imagesSearchFields = {\n status: multiValueEnum([\n \"queued\",\n \"saving\",\n \"active\",\n \"deactivated\",\n \"killed\",\n \"deleted\",\n \"pending_delete\",\n ]).optional(),\n visibility: z.enum([\"public\", \"private\", \"shared\", \"community\", \"all\"]).optional(),\n disk_format: multiValueEnum([\n \"ami\",\n \"ari\",\n \"aki\",\n \"vhd\",\n \"vhdx\",\n \"vmdk\",\n \"raw\",\n \"qcow2\",\n \"vdi\",\n \"iso\",\n \"ploop\",\n ]).optional(),\n container_format: multiValueEnum([\"ami\", \"ari\", \"aki\", \"bare\", \"ovf\", \"ova\", \"docker\"]).optional(),\n protected: z.enum([\"true\", \"false\"]).optional(),\n search: z.string().optional(),\n sortBy: z.enum([\"created_at\", \"updated_at\", \"name\", \"size\", \"status\"]).optional(),\n sortDirection: z.enum([\"asc\", \"desc\"]).optional(),\n memberStatus: z.enum([\"all\", \"accepted\", \"pending\"]).optional(),\n page: z.number().int().positive().optional(),\n}\n\nconst imagesSearchSchema = z.object(imagesSearchFields).passthrough()\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/compute/images\")({\n staticData: {\n section: \"compute\",\n service: \"images\",\n sectionCrumb: { labelKey: \"Compute\" },\n crumb: { labelKey: \"Images\" },\n } satisfies RouteInfo,\n errorComponent: ({ error }) => <RouteError error={error} />,\n validateSearch: (search) => {\n const result = imagesSearchSchema.safeParse(search)\n if (result.success) return result.data\n return {\n ...search,\n status: imagesSearchFields.status.safeParse(search.status).success ? search.status : undefined,\n visibility: imagesSearchFields.visibility.safeParse(search.visibility).success ? search.visibility : undefined,\n disk_format: imagesSearchFields.disk_format.safeParse(search.disk_format).success\n ? search.disk_format\n : undefined,\n container_format: imagesSearchFields.container_format.safeParse(search.container_format).success\n ? search.container_format\n : undefined,\n protected: imagesSearchFields.protected.safeParse(search.protected).success ? search.protected : undefined,\n search: imagesSearchFields.search.safeParse(search.search).success ? search.search : undefined,\n sortBy: imagesSearchFields.sortBy.safeParse(search.sortBy).success ? search.sortBy : undefined,\n sortDirection: imagesSearchFields.sortDirection.safeParse(search.sortDirection).success\n ? search.sortDirection\n : undefined,\n memberStatus: imagesSearchFields.memberStatus.safeParse(search.memberStatus).success\n ? search.memberStatus\n : undefined,\n page: imagesSearchFields.page.safeParse(search.page).success ? (search.page as number) : undefined,\n }\n },\n beforeLoad: async ({ context, params }) => {\n const { trpcClient } = context\n const { projectId } = params\n\n if (!trpcClient) {\n throw new Error(\"trpcClient is not available in route context\")\n }\n\n const availableServices = await trpcClient.auth.getAvailableServices.query()\n const serviceIndex = getServiceIndex(availableServices)\n\n if (!serviceIndex[\"image\"]?.[\"glance\"]) {\n throw redirect({\n to: \"/projects/$projectId\",\n params: { projectId },\n })\n }\n },\n component: () => <Outlet />,\n})\n","import { createFileRoute, Outlet, redirect } from \"@tanstack/react-router\"\nimport { getServiceIndex } from \"@/server/Authentication/helpers\"\nimport { z } from \"zod\"\nimport type { RouteInfo } from \"@/client/routes/routeInfo\"\n\nconst flavorsSearchFields = {\n search: z.string().optional(),\n sortBy: z.enum([\"name\", \"vcpus\", \"ram\", \"disk\", \"swap\"]).optional(),\n sortDirection: z.enum([\"asc\", \"desc\"]).optional(),\n page: z.number().int().positive().optional(),\n}\n\nconst flavorsSearchSchema = z.object(flavorsSearchFields).passthrough()\n\nexport type FlavorsSearchParams = z.infer<typeof flavorsSearchSchema>\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/compute/flavors\")({\n staticData: {\n section: \"compute\",\n service: \"flavors\",\n sectionCrumb: { labelKey: \"Compute\" },\n crumb: { labelKey: \"Flavors\" },\n } satisfies RouteInfo,\n validateSearch: (search) => {\n const result = flavorsSearchSchema.safeParse(search)\n if (result.success) return result.data\n return {\n ...search,\n search: flavorsSearchFields.search.safeParse(search.search).success ? search.search : undefined,\n sortBy: flavorsSearchFields.sortBy.safeParse(search.sortBy).success ? search.sortBy : undefined,\n sortDirection: flavorsSearchFields.sortDirection.safeParse(search.sortDirection).success\n ? search.sortDirection\n : undefined,\n page: flavorsSearchFields.page.safeParse(search.page).success ? (search.page as number) : undefined,\n }\n },\n beforeLoad: async ({ context, params }) => {\n const { trpcClient } = context\n const { projectId } = params\n const availableServices = await trpcClient?.auth.getAvailableServices.query()\n const serviceIndex = getServiceIndex(availableServices!)\n\n if (!serviceIndex[\"compute\"]?.[\"nova\"]) {\n throw redirect({\n to: \"/projects/$projectId\",\n params: { projectId },\n })\n }\n },\n component: () => <Outlet />,\n})\n","import { createFileRoute } from \"@tanstack/react-router\"\nimport { t } from \"@lingui/core/macro\"\nimport { useLingui } from \"@lingui/react/macro\"\nimport { SecurityGroups } from \"./-components/SecurityGroupsList\"\nimport type { RouteInfo } from \"@/client/routes/routeInfo\"\nimport { ContentHeading } from \"@cloudoperators/juno-ui-components\"\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/network/securitygroups/\")({\n staticData: {\n section: \"network\",\n service: \"securitygroups\",\n sectionCrumb: { labelKey: \"Network\" },\n crumb: { labelKey: \"Security Groups\" },\n } satisfies RouteInfo,\n head: () => ({ meta: [{ title: t`Security Groups` }] }),\n component: RouteComponent,\n})\n\nfunction RouteComponent() {\n const { t } = useLingui()\n return (\n <>\n <ContentHeading>{t`Security Groups`}</ContentHeading>\n <SecurityGroups />\n </>\n )\n}\n","import { createFileRoute } from \"@tanstack/react-router\"\nimport { t } from \"@lingui/core/macro\"\nimport { useLingui } from \"@lingui/react/macro\"\nimport { FloatingIpsList } from \"./-components/FloatingIpsList\"\nimport type { RouteInfo } from \"@/client/routes/routeInfo\"\nimport { ContentHeading } from \"@cloudoperators/juno-ui-components\"\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/network/floatingips/\")({\n staticData: {\n section: \"network\",\n service: \"floatingips\",\n sectionCrumb: { labelKey: \"Network\" },\n crumb: { labelKey: \"Floating IPs\" },\n } satisfies RouteInfo,\n head: () => ({ meta: [{ title: t`Floating IPs` }] }),\n component: RouteComponent,\n})\n\nfunction RouteComponent() {\n const { t } = useLingui()\n return (\n <>\n <ContentHeading>{t`Floating IPs`}</ContentHeading>\n <FloatingIpsList />\n </>\n )\n}\n","import {\n Button,\n ButtonRow,\n Stack,\n Spinner,\n PopupMenu,\n PopupMenuToggle,\n PopupMenuOptions,\n PopupMenuItem,\n Toast,\n ToastProps,\n} from \"@cloudoperators/juno-ui-components/index\"\nimport { createFileRoute, redirect, useNavigate, useParams, useSearch } from \"@tanstack/react-router\"\nimport { z } from \"zod\"\nimport type { RouteInfo } from \"@/client/routes/routeInfo\"\nimport { Trans, useLingui } from \"@lingui/react/macro\"\nimport { getServiceIndex } from \"@/server/Authentication/helpers\"\nimport { trpcReact } from \"@/client/trpcClient\"\nimport { ImageDetailsView } from \"../-components/Images/-components/ImageDetailsView\"\nimport { EditImageDetailsModal } from \"../-components/Images/-components/EditImageDetailsModal\"\nimport { EditImageMetadataModal } from \"../-components/Images/-components/EditImageMetadataModal\"\nimport { DeleteImageModal } from \"../-components/Images/-components/DeleteImageModal\"\nimport { ActivateImageModal } from \"../-components/Images/-components/ActivateImageModal\"\nimport { DeactivateImageModal } from \"../-components/Images/-components/DeactivateImageModal\"\nimport { IMAGE_STATUSES, IMAGE_VISIBILITY } from \"../-constants/filters\"\nimport { GlanceImage, MemberStatus } from \"@/server/Compute/types/image\"\nimport { TRPCClientError } from \"@trpc/client\"\nimport { InferrableClientTypes } from \"@trpc/server/unstable-core-do-not-import\"\nimport {\n getImageAccessStatusUpdatedToast,\n getImageAccessStatusErrorToast,\n} from \"../-components/Images/-components/ImageToastNotifications\"\nimport { useState } from \"react\"\nimport { ContentHeader } from \"@/client/components/ContentHeader/ContentHeader\"\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/compute/images/$imageId\")({\n staticData: {\n section: \"compute\",\n service: \"images\",\n isDetail: true,\n sectionCrumb: { labelKey: \"Compute\" },\n crumb: { labelKey: \"Images\", to: \"/projects/$projectId/compute/images\" },\n } satisfies RouteInfo,\n validateSearch: z.object({\n tab: z.enum([\"details\", \"sharing\"]).optional(),\n }),\n loader: async ({ context, params }) => {\n try {\n const image = await context.trpcClient?.compute.getImageById.query({\n project_id: params.projectId,\n imageId: params.imageId,\n })\n return { imageTitle: (image?.name as string | undefined) ?? image?.id ?? null }\n } catch {\n return { imageTitle: null }\n }\n },\n head: ({ loaderData }) => ({\n meta: [{ title: loaderData?.imageTitle ?? \"Image Details\" }],\n }),\n component: RouteComponent,\n beforeLoad: async ({ context, params }) => {\n const { trpcClient } = context\n const { projectId } = params\n\n const availableServices = (await trpcClient?.auth.getAvailableServices.query()) || []\n\n const serviceIndex = getServiceIndex(availableServices)\n\n // Redirect to the \"Projects Overview\" page if none of compute services available\n if (!serviceIndex[\"image\"] && !serviceIndex[\"compute\"]) {\n throw redirect({\n to: \"/projects/$projectId\",\n params: { projectId },\n })\n }\n\n if (!serviceIndex[\"image\"][\"glance\"]) {\n // Redirect to the \"Compute Services Overview\" page if the \"Glance\" service is not available\n throw redirect({\n to: \"/projects/$projectId\",\n params: { projectId: params.projectId },\n })\n }\n },\n})\n\nfunction RouteComponent() {\n const { projectId, imageId } = useParams({\n from: \"/_auth/projects/$projectId/compute/images/$imageId\",\n })\n const { tab } = useSearch({\n from: \"/_auth/projects/$projectId/compute/images/$imageId\",\n })\n\n const navigate = useNavigate()\n const { t } = useLingui()\n\n const {\n data: image,\n status,\n error,\n } = trpcReact.compute.getImageById.useQuery({ project_id: projectId, imageId: imageId })\n\n const { data: permissionsData } = trpcReact.compute.canUser.useQuery({\n project_id: projectId,\n permission: [\n \"images:delete\",\n \"images:update\",\n \"images:create_member\",\n \"images:delete_member\",\n \"images:update_member\",\n ],\n })\n\n const permissions = {\n canDelete: permissionsData?.[0] ?? false,\n canUpdate: permissionsData?.[1] ?? false,\n canCreateMember: permissionsData?.[2] ?? false,\n canDeleteMember: permissionsData?.[3] ?? false,\n canUpdateMember: permissionsData?.[4] ?? false,\n }\n\n const utils = trpcReact.useUtils()\n\n const [editDetailsModalOpen, setEditDetailsModalOpen] = useState(false)\n const [editMetadataModalOpen, setEditMetadataModalOpen] = useState(false)\n const [deleteModalOpen, setDeleteModalOpen] = useState(false)\n const [activateModalOpen, setActivateModalOpen] = useState(false)\n const [deactivateModalOpen, setDeactivateModalOpen] = useState(false)\n const [toastData, setToastData] = useState<ToastProps | null>(null)\n\n const updateImageMutation = trpcReact.compute.updateImage.useMutation({\n onSuccess: (updatedImage) => {\n utils.compute.getImageById.setData({ project_id: projectId, imageId }, updatedImage)\n utils.compute.listImagesWithPagination.invalidate()\n },\n })\n\n const deleteImageMutation = trpcReact.compute.deleteImage.useMutation({\n onSuccess: () => {\n utils.compute.listImagesWithPagination.invalidate()\n },\n })\n\n const deactivateImageMutation = trpcReact.compute.deactivateImage.useMutation({\n onSuccess: () => {\n utils.compute.getImageById.invalidate({ project_id: projectId, imageId })\n },\n })\n\n const reactivateImageMutation = trpcReact.compute.reactivateImage.useMutation({\n onSuccess: () => {\n utils.compute.getImageById.invalidate({ project_id: projectId, imageId })\n },\n })\n\n const updateImageVisibilityMutation = trpcReact.compute.updateImageVisibility.useMutation({\n onSuccess: (updatedImage) => {\n utils.compute.getImageById.setData({ project_id: projectId, imageId }, updatedImage)\n },\n })\n\n const isSharedWithMe =\n image?.visibility === IMAGE_VISIBILITY.SHARED && image?.owner !== undefined && image?.owner !== projectId\n\n const { data: myMemberData } = trpcReact.compute.getImageMember.useQuery(\n { project_id: projectId, imageId: imageId, memberId: projectId },\n { enabled: isSharedWithMe && !!imageId && !!projectId }\n )\n\n const updateMemberMutation = trpcReact.compute.updateImageMember.useMutation({\n onSuccess: () => {\n utils.compute.getImageMember.invalidate({ project_id: projectId, imageId: imageId, memberId: projectId })\n utils.compute.listImageMembers.invalidate({ project_id: projectId, imageId: imageId })\n utils.compute.listImagesWithPagination.invalidate()\n utils.compute.listSharedImagesByMemberStatus.invalidate()\n },\n })\n\n const handleMemberStatusChange = async (newStatus: MemberStatus) => {\n try {\n await updateMemberMutation.mutateAsync({ project_id: projectId, imageId, memberId: projectId, status: newStatus })\n setToastData(getImageAccessStatusUpdatedToast(newStatus, { onDismiss: () => setToastData(null) }))\n } catch (error) {\n const errorMessage = (error as TRPCClientError<InferrableClientTypes>)?.message\n setToastData(getImageAccessStatusErrorToast(errorMessage, { onDismiss: () => setToastData(null) }))\n }\n }\n\n const handleBack = () => {\n navigate({\n to: \"/projects/$projectId/compute/images\",\n params: { projectId },\n })\n }\n\n const isLoading =\n updateImageMutation.isPending ||\n deleteImageMutation.isPending ||\n deactivateImageMutation.isPending ||\n reactivateImageMutation.isPending ||\n updateImageVisibilityMutation.isPending\n\n const convertToJsonPatchOperations = (\n updatedProperties: Partial<GlanceImage>,\n originalImage: GlanceImage\n ): Array<{ op: \"add\" | \"replace\" | \"remove\"; path: string; value?: unknown }> => {\n const operations: Array<{ op: \"add\" | \"replace\" | \"remove\"; path: string; value?: unknown }> = []\n Object.entries(updatedProperties).forEach(([key, value]) => {\n const path = `/${key}`\n if (value === null || value === undefined) {\n if (key in originalImage) operations.push({ op: \"remove\", path })\n } else {\n const propertyExists = key in originalImage\n operations.push({ op: propertyExists ? \"replace\" : \"add\", path, value })\n }\n })\n return operations\n }\n\n const handleSaveEdit = async (updatedProperties: Partial<GlanceImage>): Promise<boolean> => {\n if (!image) return false\n const operations = convertToJsonPatchOperations(updatedProperties, image)\n try {\n await updateImageMutation.mutateAsync({ project_id: projectId, imageId, operations })\n setEditDetailsModalOpen(false)\n return true\n } catch {\n return false\n }\n }\n\n const handleDelete = async (deletedImage: GlanceImage) => {\n try {\n await deleteImageMutation.mutateAsync({ project_id: projectId, imageId: deletedImage.id })\n setDeleteModalOpen(false)\n handleBack()\n } catch {\n setDeleteModalOpen(false)\n }\n }\n\n const handleActivate = async (img: GlanceImage) => {\n try {\n await reactivateImageMutation.mutateAsync({ project_id: projectId, imageId: img.id })\n setActivateModalOpen(false)\n } catch {\n setActivateModalOpen(false)\n }\n }\n\n const handleDeactivate = async (img: GlanceImage) => {\n try {\n await deactivateImageMutation.mutateAsync({ project_id: projectId, imageId: img.id })\n setDeactivateModalOpen(false)\n } catch {\n setDeactivateModalOpen(false)\n }\n }\n\n const handleUpdateVisibility = async (newVisibility: \"public\" | \"private\" | \"shared\" | \"community\") => {\n if (!image) return\n try {\n await updateImageVisibilityMutation.mutateAsync({\n project_id: projectId,\n imageId: image.id,\n visibility: newVisibility,\n })\n } catch {\n // error handled by mutation state\n }\n }\n\n // Handle loading state\n if (status === \"pending\") {\n return (\n <Stack className=\"fixed inset-0\" distribution=\"center\" alignment=\"center\" direction=\"vertical\">\n <Spinner variant=\"primary\" size=\"large\" className=\"mb-2\" />\n <Trans>Loading Image Details...</Trans>\n </Stack>\n )\n }\n\n // Handle error state\n if (status === \"error\") {\n const errorMessage = error?.message || \"Unknown error\"\n\n return (\n <Stack className=\"fixed inset-0\" distribution=\"center\" alignment=\"center\" direction=\"vertical\" gap=\"5\">\n <p className=\"text-theme-error font-semibold\">\n <Trans>Error loading image</Trans>\n </p>\n <p className=\"text-theme-highest\">{errorMessage}</p>\n <Button onClick={handleBack} variant=\"primary\">\n <Trans>Back to Images</Trans>\n </Button>\n </Stack>\n )\n }\n\n // Handle no data state\n if (!image) {\n return (\n <Stack className=\"fixed inset-0\" distribution=\"center\" alignment=\"center\" direction=\"vertical\" gap=\"5\">\n <p className=\"text-theme-highest\">\n <Trans>Image not found</Trans>\n </p>\n <Button onClick={handleBack} variant=\"primary\">\n <Trans>Back to Images</Trans>\n </Button>\n </Stack>\n )\n }\n\n const isDeactivated = image.status === IMAGE_STATUSES.DEACTIVATED\n const isPrivate = image.visibility === IMAGE_VISIBILITY.PRIVATE\n const isMemberAccepted = myMemberData?.status === \"accepted\"\n const isImageOwner = image.owner === projectId\n\n const canRejectSharedImage = isSharedWithMe && isMemberAccepted && permissions.canUpdateMember\n const canUpdateOwnImage = !isSharedWithMe && permissions.canUpdate\n const canDeleteOwnImage = !isSharedWithMe && permissions.canDelete && !image.protected\n const canManageSharing =\n !isSharedWithMe &&\n isImageOwner &&\n image.visibility === IMAGE_VISIBILITY.SHARED &&\n (permissions.canCreateMember || permissions.canDeleteMember)\n\n const hasMoreActions = canRejectSharedImage || canUpdateOwnImage || canDeleteOwnImage || canManageSharing\n\n const headerActions =\n hasMoreActions || (!isSharedWithMe && permissions.canUpdate) ? (\n <ButtonRow>\n {hasMoreActions && (\n <PopupMenu>\n <PopupMenuToggle as=\"div\">\n <Button icon=\"moreVert\" disabled={isLoading}>\n <Trans>More Actions</Trans>\n </Button>\n </PopupMenuToggle>\n <PopupMenuOptions>\n {canRejectSharedImage && (\n <PopupMenuItem label={t`Reject`} onClick={() => handleMemberStatusChange(\"rejected\")} />\n )}\n {!isSharedWithMe && permissions.canUpdate && (\n <PopupMenuItem\n label={isDeactivated ? t`Activate` : t`Deactivate`}\n onClick={() => (isDeactivated ? setActivateModalOpen(true) : setDeactivateModalOpen(true))}\n />\n )}\n {!isSharedWithMe && permissions.canUpdate && isPrivate && (\n <PopupMenuItem label={t`Set to \"Shared\"`} onClick={() => handleUpdateVisibility(\"shared\")} />\n )}\n {!isSharedWithMe &&\n isImageOwner &&\n image.visibility === IMAGE_VISIBILITY.SHARED &&\n (permissions.canCreateMember || permissions.canDeleteMember) && (\n <PopupMenuItem\n label={t`Manage Access`}\n onClick={() =>\n navigate({\n to: \"/projects/$projectId/compute/images/$imageId\",\n params: { projectId, imageId: image.id },\n search: { tab: \"sharing\" },\n })\n }\n />\n )}\n {!isSharedWithMe && permissions.canDelete && !image.protected && (\n <PopupMenuItem label={t`Delete`} onClick={() => setDeleteModalOpen(true)} />\n )}\n </PopupMenuOptions>\n </PopupMenu>\n )}\n {!isSharedWithMe && permissions.canUpdate && (\n <Button onClick={() => setEditMetadataModalOpen(true)} disabled={isLoading}>\n <Trans>Edit Metadata</Trans>\n </Button>\n )}\n {!isSharedWithMe && permissions.canUpdate && (\n <Button onClick={() => setEditDetailsModalOpen(true)} variant=\"primary\" disabled={isLoading}>\n <Trans>Edit Details</Trans>\n </Button>\n )}\n </ButtonRow>\n ) : undefined\n\n // Render success state\n return (\n <>\n <ContentHeader title={String(image.name ?? image.id)} projectId={projectId} actions={headerActions} />\n <div className=\"mt-3\">\n <ImageDetailsView\n key={image.id}\n image={image}\n currentProjectId={projectId}\n activeTab={tab ?? \"details\"}\n onTabChange={(newTab) =>\n navigate({\n search: { tab: newTab === \"details\" ? undefined : newTab } as unknown as true,\n })\n }\n permissions={{\n canCreateMember: permissions.canCreateMember,\n canDeleteMember: permissions.canDeleteMember,\n canUpdateMember: permissions.canUpdateMember,\n }}\n myMemberData={myMemberData}\n onMemberStatusChange={handleMemberStatusChange}\n isMemberStatusChanging={updateMemberMutation.isPending}\n />\n </div>\n\n {toastData && <Toast {...toastData} />}\n\n {editDetailsModalOpen && (\n <EditImageDetailsModal\n image={image}\n isOpen={editDetailsModalOpen}\n isLoading={updateImageMutation.isPending}\n onClose={() => setEditDetailsModalOpen(false)}\n onSave={handleSaveEdit}\n />\n )}\n\n {editMetadataModalOpen && (\n <EditImageMetadataModal\n image={image}\n isOpen={editMetadataModalOpen}\n isLoading={updateImageMutation.isPending}\n onClose={() => setEditMetadataModalOpen(false)}\n onSave={handleSaveEdit}\n />\n )}\n\n {deleteModalOpen && (\n <DeleteImageModal\n image={image}\n isOpen={deleteModalOpen}\n isLoading={deleteImageMutation.isPending}\n isDisabled={!!image.protected}\n onClose={() => setDeleteModalOpen(false)}\n onDelete={handleDelete}\n />\n )}\n\n {activateModalOpen && (\n <ActivateImageModal\n image={image}\n isOpen={activateModalOpen}\n isLoading={reactivateImageMutation.isPending}\n onClose={() => setActivateModalOpen(false)}\n onActivate={handleActivate}\n />\n )}\n\n {deactivateModalOpen && (\n <DeactivateImageModal\n image={image}\n isOpen={deactivateModalOpen}\n isLoading={deactivateImageMutation.isPending}\n onClose={() => setDeactivateModalOpen(false)}\n onDeactivate={handleDeactivate}\n />\n )}\n </>\n )\n}\n","import { createFileRoute, useNavigate } from \"@tanstack/react-router\"\nimport type { RouteInfo } from \"@/client/routes/routeInfo\"\nimport { trpcReact } from \"@/client/trpcClient\"\nimport {\n Button,\n DescriptionDefinition,\n DescriptionList,\n DescriptionTerm,\n Divider,\n Spinner,\n Stack,\n} from \"@cloudoperators/juno-ui-components/index\"\nimport { Trans, useLingui } from \"@lingui/react/macro\"\nimport { MdContentCopy, MdDownload } from \"react-icons/md\"\nimport { Fragment } from \"react/jsx-runtime\"\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/services/pca/$pcaId/$certificateId\")({\n staticData: {\n section: \"services\",\n service: \"pca\",\n isDetail: true,\n sectionCrumb: { labelKey: \"Services\" },\n crumb: { labelKey: \"PCA (Clavis)\", to: \"/projects/$projectId/services/pca\" },\n } satisfies RouteInfo,\n loader: async ({ context, params }) => {\n const cert = await context.trpcClient?.services.pca.getByIdCertificate.query({\n project_id: params.projectId,\n certificate_authority_id: params.pcaId,\n certificate_id: params.certificateId,\n })\n return { certTitle: cert ? `Certificate ${cert.id}` : null }\n },\n head: ({ loaderData }) => ({\n meta: [{ title: loaderData?.certTitle ?? \"Certificate\" }],\n }),\n component: RouteComponent,\n})\n\nexport function RouteComponent() {\n const { t } = useLingui()\n const navigate = useNavigate()\n const { projectId, pcaId, certificateId } = Route.useParams()\n\n const {\n isLoading,\n isError,\n error,\n data: certificate,\n } = trpcReact.services.pca.getByIdCertificate.useQuery({\n project_id: projectId,\n certificate_authority_id: pcaId,\n certificate_id: certificateId,\n })\n\n // Loading state\n if (isLoading) {\n return (\n <Stack className=\"fixed inset-0\" distribution=\"center\" alignment=\"center\" direction=\"vertical\">\n <Spinner variant=\"primary\" size=\"large\" className=\"mb-2\" />\n <Trans>Loading Certificate Details...</Trans>\n </Stack>\n )\n }\n\n const handleBack = () =>\n navigate({\n to: \"/projects/$projectId/services/pca/$pcaId\",\n params: { projectId, pcaId },\n })\n\n // Error state\n if (isError) {\n const errorMessage = error?.message || \"Unknown error\"\n return (\n <Stack className=\"fixed inset-0\" distribution=\"center\" alignment=\"center\" direction=\"vertical\" gap=\"5\">\n <p className=\"text-theme-error font-semibold\">\n <Trans>Error loading Certificate</Trans>\n </p>\n <p className=\"text-theme-highest\">{errorMessage}</p>\n <Button onClick={handleBack} variant=\"primary\">\n <Trans>Back to Certificate Authorities Details page</Trans>\n </Button>\n </Stack>\n )\n }\n\n // No data state\n if (!certificate) {\n return (\n <Stack className=\"fixed inset-0\" distribution=\"center\" alignment=\"center\" direction=\"vertical\" gap=\"5\">\n <p className=\"text-theme-secondary\">\n <Trans>Certificate not found</Trans>\n </p>\n <Button onClick={handleBack} variant=\"primary\">\n <Trans>Back to Certificate Authorities Details page</Trans>\n </Button>\n </Stack>\n )\n }\n\n const basicInfo = [\n { label: t`CA ID`, value: certificate.certificate_authority_id },\n { label: t`ID`, value: certificate.id },\n {\n label: t`Duration/validity`,\n value:\n certificate.configuration?.validity.not_before !== undefined &&\n certificate.configuration?.validity.not_after !== undefined\n ? `${Math.round(\n (certificate.configuration.validity.not_after - certificate.configuration.validity.not_before) /\n (60 * 60 * 24)\n )} days`\n : undefined,\n },\n ] as const\n\n return (\n <Stack direction=\"vertical\" gap=\"3\">\n <div className=\"text-theme-default text-2xl font-semibold\">{`${certificate.id} Certificate Details`}</div>\n\n <p className=\"text-theme-highest text-sm\">\n <Trans>Manage your Certificate</Trans>\n </p>\n\n <Stack gap=\"4\" className=\"grid grid-cols-2 items-start\">\n <DescriptionList alignTerms=\"right\" className=\"w-full\">\n {basicInfo.map(({ label, value }) => (\n <Fragment key={label}>\n <DescriptionTerm>{label}</DescriptionTerm>\n <DescriptionDefinition>{value || \"—\"}</DescriptionDefinition>\n </Fragment>\n ))}\n </DescriptionList>\n\n <div className=\"bg-dt-background w-full rounded-sm\">\n <div className=\"text-theme-default p-4 text-xl font-bold\">Certificate {`${certificate.id}`}</div>\n <Divider />\n\n <div className=\"p-4 text-sm break-all whitespace-pre-wrap\">{certificate?.csr}</div>\n\n {/* I will implement downloading-copying functionality at issue/import part of the epic as I need to clarify some stuff with design-clavis team */}\n <Divider />\n <Stack gap=\"2\" distribution=\"end\" className=\"p-4\">\n <Button>\n <MdDownload />\n </Button>\n <Button>\n <MdContentCopy />\n </Button>\n </Stack>\n </div>\n </Stack>\n </Stack>\n )\n}\n","/* eslint-disable */\n\n// @ts-nocheck\n\n// noinspection JSUnusedGlobalSymbols\n\n// This file was automatically generated by TanStack Router.\n// You should NOT make any changes in this file as it will be overwritten.\n// Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified.\n\nimport { Route as rootRouteImport } from \"./routes/__root\"\nimport { Route as AboutRouteImport } from \"./routes/about\"\nimport { Route as AuthRouteImport } from \"./routes/_auth\"\nimport { Route as IndexRouteImport } from \"./routes/index\"\nimport { Route as AuthAuroraRouteImport } from \"./routes/_auth/aurora\"\nimport { Route as AuthProjectsIndexRouteImport } from \"./routes/_auth/projects/index\"\nimport { Route as AuthAccountsIndexRouteImport } from \"./routes/_auth/accounts/index\"\nimport { Route as AuthProjectsProjectIdRouteImport } from \"./routes/_auth/projects/$projectId\"\nimport { Route as AuthProjectsProjectIdIndexRouteImport } from \"./routes/_auth/projects/$projectId/index\"\nimport { Route as AuthProjectsProjectIdNetworkRouteImport } from \"./routes/_auth/projects/$projectId/network\"\nimport { Route as AuthProjectsProjectIdStorageIndexRouteImport } from \"./routes/_auth/projects/$projectId/storage/index\"\nimport { Route as AuthProjectsProjectIdServicesIndexRouteImport } from \"./routes/_auth/projects/$projectId/services/index\"\nimport { Route as AuthProjectsProjectIdNetworkIndexRouteImport } from \"./routes/_auth/projects/$projectId/network/index\"\nimport { Route as AuthProjectsProjectIdComputeIndexRouteImport } from \"./routes/_auth/projects/$projectId/compute/index\"\nimport { Route as AuthProjectsProjectIdComputeImagesRouteImport } from \"./routes/_auth/projects/$projectId/compute/images\"\nimport { Route as AuthProjectsProjectIdComputeFlavorsRouteImport } from \"./routes/_auth/projects/$projectId/compute/flavors\"\nimport { Route as AuthProjectsProjectIdServicesPcaIndexRouteImport } from \"./routes/_auth/projects/$projectId/services/pca/index\"\nimport { Route as AuthProjectsProjectIdNetworkSecuritygroupsIndexRouteImport } from \"./routes/_auth/projects/$projectId/network/securitygroups/index\"\nimport { Route as AuthProjectsProjectIdNetworkFloatingipsIndexRouteImport } from \"./routes/_auth/projects/$projectId/network/floatingips/index\"\nimport { Route as AuthProjectsProjectIdComputeImagesIndexRouteImport } from \"./routes/_auth/projects/$projectId/compute/images/index\"\nimport { Route as AuthProjectsProjectIdComputeFlavorsIndexRouteImport } from \"./routes/_auth/projects/$projectId/compute/flavors/index\"\nimport { Route as AuthProjectsProjectIdComputeImagesImageIdRouteImport } from \"./routes/_auth/projects/$projectId/compute/images/$imageId\"\nimport { Route as AuthProjectsProjectIdComputeFlavorsFlavorIdRouteImport } from \"./routes/_auth/projects/$projectId/compute/flavors/$flavorId\"\nimport { Route as AuthProjectsProjectIdStorageProviderContainersIndexRouteImport } from \"./routes/_auth/projects/$projectId/storage/$provider/containers/index\"\nimport { Route as AuthProjectsProjectIdServicesPcaPcaIdIndexRouteImport } from \"./routes/_auth/projects/$projectId/services/pca/$pcaId/index\"\nimport { Route as AuthProjectsProjectIdNetworkSecuritygroupsSecurityGroupIdIndexRouteImport } from \"./routes/_auth/projects/$projectId/network/securitygroups/$securityGroupId/index\"\nimport { Route as AuthProjectsProjectIdNetworkFloatingipsFloatingIpIdIndexRouteImport } from \"./routes/_auth/projects/$projectId/network/floatingips/$floatingIpId/index\"\nimport { Route as AuthProjectsProjectIdServicesPcaPcaIdCertificateIdRouteImport } from \"./routes/_auth/projects/$projectId/services/pca/$pcaId/$certificateId\"\nimport { Route as AuthProjectsProjectIdStorageProviderContainersContainerNameObjectsIndexRouteImport } from \"./routes/_auth/projects/$projectId/storage/$provider/containers/$containerName/objects/index\"\n\nconst AboutRoute = AboutRouteImport.update({\n id: \"/about\",\n path: \"/about\",\n getParentRoute: () => rootRouteImport,\n} as any)\nconst AuthRoute = AuthRouteImport.update({\n id: \"/_auth\",\n getParentRoute: () => rootRouteImport,\n} as any)\nconst IndexRoute = IndexRouteImport.update({\n id: \"/\",\n path: \"/\",\n getParentRoute: () => rootRouteImport,\n} as any)\nconst AuthAuroraRoute = AuthAuroraRouteImport.update({\n id: \"/aurora\",\n path: \"/aurora\",\n getParentRoute: () => AuthRoute,\n} as any)\nconst AuthProjectsIndexRoute = AuthProjectsIndexRouteImport.update({\n id: \"/projects/\",\n path: \"/projects/\",\n getParentRoute: () => AuthRoute,\n} as any)\nconst AuthAccountsIndexRoute = AuthAccountsIndexRouteImport.update({\n id: \"/accounts/\",\n path: \"/accounts/\",\n getParentRoute: () => AuthRoute,\n} as any)\nconst AuthProjectsProjectIdRoute = AuthProjectsProjectIdRouteImport.update({\n id: \"/projects/$projectId\",\n path: \"/projects/$projectId\",\n getParentRoute: () => AuthRoute,\n} as any)\nconst AuthProjectsProjectIdIndexRoute =\n AuthProjectsProjectIdIndexRouteImport.update({\n id: \"/\",\n path: \"/\",\n getParentRoute: () => AuthProjectsProjectIdRoute,\n } as any)\nconst AuthProjectsProjectIdNetworkRoute =\n AuthProjectsProjectIdNetworkRouteImport.update({\n id: \"/network\",\n path: \"/network\",\n getParentRoute: () => AuthProjectsProjectIdRoute,\n } as any)\nconst AuthProjectsProjectIdStorageIndexRoute =\n AuthProjectsProjectIdStorageIndexRouteImport.update({\n id: \"/storage/\",\n path: \"/storage/\",\n getParentRoute: () => AuthProjectsProjectIdRoute,\n } as any)\nconst AuthProjectsProjectIdServicesIndexRoute =\n AuthProjectsProjectIdServicesIndexRouteImport.update({\n id: \"/services/\",\n path: \"/services/\",\n getParentRoute: () => AuthProjectsProjectIdRoute,\n } as any)\nconst AuthProjectsProjectIdNetworkIndexRoute =\n AuthProjectsProjectIdNetworkIndexRouteImport.update({\n id: \"/\",\n path: \"/\",\n getParentRoute: () => AuthProjectsProjectIdNetworkRoute,\n } as any)\nconst AuthProjectsProjectIdComputeIndexRoute =\n AuthProjectsProjectIdComputeIndexRouteImport.update({\n id: \"/compute/\",\n path: \"/compute/\",\n getParentRoute: () => AuthProjectsProjectIdRoute,\n } as any)\nconst AuthProjectsProjectIdComputeImagesRoute =\n AuthProjectsProjectIdComputeImagesRouteImport.update({\n id: \"/compute/images\",\n path: \"/compute/images\",\n getParentRoute: () => AuthProjectsProjectIdRoute,\n } as any)\nconst AuthProjectsProjectIdComputeFlavorsRoute =\n AuthProjectsProjectIdComputeFlavorsRouteImport.update({\n id: \"/compute/flavors\",\n path: \"/compute/flavors\",\n getParentRoute: () => AuthProjectsProjectIdRoute,\n } as any)\nconst AuthProjectsProjectIdServicesPcaIndexRoute =\n AuthProjectsProjectIdServicesPcaIndexRouteImport.update({\n id: \"/services/pca/\",\n path: \"/services/pca/\",\n getParentRoute: () => AuthProjectsProjectIdRoute,\n } as any)\nconst AuthProjectsProjectIdNetworkSecuritygroupsIndexRoute =\n AuthProjectsProjectIdNetworkSecuritygroupsIndexRouteImport.update({\n id: \"/securitygroups/\",\n path: \"/securitygroups/\",\n getParentRoute: () => AuthProjectsProjectIdNetworkRoute,\n } as any)\nconst AuthProjectsProjectIdNetworkFloatingipsIndexRoute =\n AuthProjectsProjectIdNetworkFloatingipsIndexRouteImport.update({\n id: \"/floatingips/\",\n path: \"/floatingips/\",\n getParentRoute: () => AuthProjectsProjectIdNetworkRoute,\n } as any)\nconst AuthProjectsProjectIdComputeImagesIndexRoute =\n AuthProjectsProjectIdComputeImagesIndexRouteImport.update({\n id: \"/\",\n path: \"/\",\n getParentRoute: () => AuthProjectsProjectIdComputeImagesRoute,\n } as any)\nconst AuthProjectsProjectIdComputeFlavorsIndexRoute =\n AuthProjectsProjectIdComputeFlavorsIndexRouteImport.update({\n id: \"/\",\n path: \"/\",\n getParentRoute: () => AuthProjectsProjectIdComputeFlavorsRoute,\n } as any)\nconst AuthProjectsProjectIdComputeImagesImageIdRoute =\n AuthProjectsProjectIdComputeImagesImageIdRouteImport.update({\n id: \"/$imageId\",\n path: \"/$imageId\",\n getParentRoute: () => AuthProjectsProjectIdComputeImagesRoute,\n } as any)\nconst AuthProjectsProjectIdComputeFlavorsFlavorIdRoute =\n AuthProjectsProjectIdComputeFlavorsFlavorIdRouteImport.update({\n id: \"/$flavorId\",\n path: \"/$flavorId\",\n getParentRoute: () => AuthProjectsProjectIdComputeFlavorsRoute,\n } as any)\nconst AuthProjectsProjectIdStorageProviderContainersIndexRoute =\n AuthProjectsProjectIdStorageProviderContainersIndexRouteImport.update({\n id: \"/storage/$provider/containers/\",\n path: \"/storage/$provider/containers/\",\n getParentRoute: () => AuthProjectsProjectIdRoute,\n } as any)\nconst AuthProjectsProjectIdServicesPcaPcaIdIndexRoute =\n AuthProjectsProjectIdServicesPcaPcaIdIndexRouteImport.update({\n id: \"/services/pca/$pcaId/\",\n path: \"/services/pca/$pcaId/\",\n getParentRoute: () => AuthProjectsProjectIdRoute,\n } as any)\nconst AuthProjectsProjectIdNetworkSecuritygroupsSecurityGroupIdIndexRoute =\n AuthProjectsProjectIdNetworkSecuritygroupsSecurityGroupIdIndexRouteImport.update(\n {\n id: \"/securitygroups/$securityGroupId/\",\n path: \"/securitygroups/$securityGroupId/\",\n getParentRoute: () => AuthProjectsProjectIdNetworkRoute,\n } as any,\n )\nconst AuthProjectsProjectIdNetworkFloatingipsFloatingIpIdIndexRoute =\n AuthProjectsProjectIdNetworkFloatingipsFloatingIpIdIndexRouteImport.update({\n id: \"/floatingips/$floatingIpId/\",\n path: \"/floatingips/$floatingIpId/\",\n getParentRoute: () => AuthProjectsProjectIdNetworkRoute,\n } as any)\nconst AuthProjectsProjectIdServicesPcaPcaIdCertificateIdRoute =\n AuthProjectsProjectIdServicesPcaPcaIdCertificateIdRouteImport.update({\n id: \"/services/pca/$pcaId/$certificateId\",\n path: \"/services/pca/$pcaId/$certificateId\",\n getParentRoute: () => AuthProjectsProjectIdRoute,\n } as any)\nconst AuthProjectsProjectIdStorageProviderContainersContainerNameObjectsIndexRoute =\n AuthProjectsProjectIdStorageProviderContainersContainerNameObjectsIndexRouteImport.update(\n {\n id: \"/storage/$provider/containers/$containerName/objects/\",\n path: \"/storage/$provider/containers/$containerName/objects/\",\n getParentRoute: () => AuthProjectsProjectIdRoute,\n } as any,\n )\n\nexport interface FileRoutesByFullPath {\n \"/\": typeof IndexRoute\n \"/about\": typeof AboutRoute\n \"/aurora\": typeof AuthAuroraRoute\n \"/projects/$projectId\": typeof AuthProjectsProjectIdRouteWithChildren\n \"/accounts/\": typeof AuthAccountsIndexRoute\n \"/projects/\": typeof AuthProjectsIndexRoute\n \"/projects/$projectId/network\": typeof AuthProjectsProjectIdNetworkRouteWithChildren\n \"/projects/$projectId/\": typeof AuthProjectsProjectIdIndexRoute\n \"/projects/$projectId/compute/flavors\": typeof AuthProjectsProjectIdComputeFlavorsRouteWithChildren\n \"/projects/$projectId/compute/images\": typeof AuthProjectsProjectIdComputeImagesRouteWithChildren\n \"/projects/$projectId/compute/\": typeof AuthProjectsProjectIdComputeIndexRoute\n \"/projects/$projectId/network/\": typeof AuthProjectsProjectIdNetworkIndexRoute\n \"/projects/$projectId/services/\": typeof AuthProjectsProjectIdServicesIndexRoute\n \"/projects/$projectId/storage/\": typeof AuthProjectsProjectIdStorageIndexRoute\n \"/projects/$projectId/compute/flavors/$flavorId\": typeof AuthProjectsProjectIdComputeFlavorsFlavorIdRoute\n \"/projects/$projectId/compute/images/$imageId\": typeof AuthProjectsProjectIdComputeImagesImageIdRoute\n \"/projects/$projectId/compute/flavors/\": typeof AuthProjectsProjectIdComputeFlavorsIndexRoute\n \"/projects/$projectId/compute/images/\": typeof AuthProjectsProjectIdComputeImagesIndexRoute\n \"/projects/$projectId/network/floatingips/\": typeof AuthProjectsProjectIdNetworkFloatingipsIndexRoute\n \"/projects/$projectId/network/securitygroups/\": typeof AuthProjectsProjectIdNetworkSecuritygroupsIndexRoute\n \"/projects/$projectId/services/pca/\": typeof AuthProjectsProjectIdServicesPcaIndexRoute\n \"/projects/$projectId/services/pca/$pcaId/$certificateId\": typeof AuthProjectsProjectIdServicesPcaPcaIdCertificateIdRoute\n \"/projects/$projectId/network/floatingips/$floatingIpId/\": typeof AuthProjectsProjectIdNetworkFloatingipsFloatingIpIdIndexRoute\n \"/projects/$projectId/network/securitygroups/$securityGroupId/\": typeof AuthProjectsProjectIdNetworkSecuritygroupsSecurityGroupIdIndexRoute\n \"/projects/$projectId/services/pca/$pcaId/\": typeof AuthProjectsProjectIdServicesPcaPcaIdIndexRoute\n \"/projects/$projectId/storage/$provider/containers/\": typeof AuthProjectsProjectIdStorageProviderContainersIndexRoute\n \"/projects/$projectId/storage/$provider/containers/$containerName/objects/\": typeof AuthProjectsProjectIdStorageProviderContainersContainerNameObjectsIndexRoute\n}\nexport interface FileRoutesByTo {\n \"/\": typeof IndexRoute\n \"/about\": typeof AboutRoute\n \"/aurora\": typeof AuthAuroraRoute\n \"/accounts\": typeof AuthAccountsIndexRoute\n \"/projects\": typeof AuthProjectsIndexRoute\n \"/projects/$projectId\": typeof AuthProjectsProjectIdIndexRoute\n \"/projects/$projectId/compute\": typeof AuthProjectsProjectIdComputeIndexRoute\n \"/projects/$projectId/network\": typeof AuthProjectsProjectIdNetworkIndexRoute\n \"/projects/$projectId/services\": typeof AuthProjectsProjectIdServicesIndexRoute\n \"/projects/$projectId/storage\": typeof AuthProjectsProjectIdStorageIndexRoute\n \"/projects/$projectId/compute/flavors/$flavorId\": typeof AuthProjectsProjectIdComputeFlavorsFlavorIdRoute\n \"/projects/$projectId/compute/images/$imageId\": typeof AuthProjectsProjectIdComputeImagesImageIdRoute\n \"/projects/$projectId/compute/flavors\": typeof AuthProjectsProjectIdComputeFlavorsIndexRoute\n \"/projects/$projectId/compute/images\": typeof AuthProjectsProjectIdComputeImagesIndexRoute\n \"/projects/$projectId/network/floatingips\": typeof AuthProjectsProjectIdNetworkFloatingipsIndexRoute\n \"/projects/$projectId/network/securitygroups\": typeof AuthProjectsProjectIdNetworkSecuritygroupsIndexRoute\n \"/projects/$projectId/services/pca\": typeof AuthProjectsProjectIdServicesPcaIndexRoute\n \"/projects/$projectId/services/pca/$pcaId/$certificateId\": typeof AuthProjectsProjectIdServicesPcaPcaIdCertificateIdRoute\n \"/projects/$projectId/network/floatingips/$floatingIpId\": typeof AuthProjectsProjectIdNetworkFloatingipsFloatingIpIdIndexRoute\n \"/projects/$projectId/network/securitygroups/$securityGroupId\": typeof AuthProjectsProjectIdNetworkSecuritygroupsSecurityGroupIdIndexRoute\n \"/projects/$projectId/services/pca/$pcaId\": typeof AuthProjectsProjectIdServicesPcaPcaIdIndexRoute\n \"/projects/$projectId/storage/$provider/containers\": typeof AuthProjectsProjectIdStorageProviderContainersIndexRoute\n \"/projects/$projectId/storage/$provider/containers/$containerName/objects\": typeof AuthProjectsProjectIdStorageProviderContainersContainerNameObjectsIndexRoute\n}\nexport interface FileRoutesById {\n __root__: typeof rootRouteImport\n \"/\": typeof IndexRoute\n \"/_auth\": typeof AuthRouteWithChildren\n \"/about\": typeof AboutRoute\n \"/_auth/aurora\": typeof AuthAuroraRoute\n \"/_auth/projects/$projectId\": typeof AuthProjectsProjectIdRouteWithChildren\n \"/_auth/accounts/\": typeof AuthAccountsIndexRoute\n \"/_auth/projects/\": typeof AuthProjectsIndexRoute\n \"/_auth/projects/$projectId/network\": typeof AuthProjectsProjectIdNetworkRouteWithChildren\n \"/_auth/projects/$projectId/\": typeof AuthProjectsProjectIdIndexRoute\n \"/_auth/projects/$projectId/compute/flavors\": typeof AuthProjectsProjectIdComputeFlavorsRouteWithChildren\n \"/_auth/projects/$projectId/compute/images\": typeof AuthProjectsProjectIdComputeImagesRouteWithChildren\n \"/_auth/projects/$projectId/compute/\": typeof AuthProjectsProjectIdComputeIndexRoute\n \"/_auth/projects/$projectId/network/\": typeof AuthProjectsProjectIdNetworkIndexRoute\n \"/_auth/projects/$projectId/services/\": typeof AuthProjectsProjectIdServicesIndexRoute\n \"/_auth/projects/$projectId/storage/\": typeof AuthProjectsProjectIdStorageIndexRoute\n \"/_auth/projects/$projectId/compute/flavors/$flavorId\": typeof AuthProjectsProjectIdComputeFlavorsFlavorIdRoute\n \"/_auth/projects/$projectId/compute/images/$imageId\": typeof AuthProjectsProjectIdComputeImagesImageIdRoute\n \"/_auth/projects/$projectId/compute/flavors/\": typeof AuthProjectsProjectIdComputeFlavorsIndexRoute\n \"/_auth/projects/$projectId/compute/images/\": typeof AuthProjectsProjectIdComputeImagesIndexRoute\n \"/_auth/projects/$projectId/network/floatingips/\": typeof AuthProjectsProjectIdNetworkFloatingipsIndexRoute\n \"/_auth/projects/$projectId/network/securitygroups/\": typeof AuthProjectsProjectIdNetworkSecuritygroupsIndexRoute\n \"/_auth/projects/$projectId/services/pca/\": typeof AuthProjectsProjectIdServicesPcaIndexRoute\n \"/_auth/projects/$projectId/services/pca/$pcaId/$certificateId\": typeof AuthProjectsProjectIdServicesPcaPcaIdCertificateIdRoute\n \"/_auth/projects/$projectId/network/floatingips/$floatingIpId/\": typeof AuthProjectsProjectIdNetworkFloatingipsFloatingIpIdIndexRoute\n \"/_auth/projects/$projectId/network/securitygroups/$securityGroupId/\": typeof AuthProjectsProjectIdNetworkSecuritygroupsSecurityGroupIdIndexRoute\n \"/_auth/projects/$projectId/services/pca/$pcaId/\": typeof AuthProjectsProjectIdServicesPcaPcaIdIndexRoute\n \"/_auth/projects/$projectId/storage/$provider/containers/\": typeof AuthProjectsProjectIdStorageProviderContainersIndexRoute\n \"/_auth/projects/$projectId/storage/$provider/containers/$containerName/objects/\": typeof AuthProjectsProjectIdStorageProviderContainersContainerNameObjectsIndexRoute\n}\nexport interface FileRouteTypes {\n fileRoutesByFullPath: FileRoutesByFullPath\n fullPaths:\n | \"/\"\n | \"/about\"\n | \"/aurora\"\n | \"/projects/$projectId\"\n | \"/accounts/\"\n | \"/projects/\"\n | \"/projects/$projectId/network\"\n | \"/projects/$projectId/\"\n | \"/projects/$projectId/compute/flavors\"\n | \"/projects/$projectId/compute/images\"\n | \"/projects/$projectId/compute/\"\n | \"/projects/$projectId/network/\"\n | \"/projects/$projectId/services/\"\n | \"/projects/$projectId/storage/\"\n | \"/projects/$projectId/compute/flavors/$flavorId\"\n | \"/projects/$projectId/compute/images/$imageId\"\n | \"/projects/$projectId/compute/flavors/\"\n | \"/projects/$projectId/compute/images/\"\n | \"/projects/$projectId/network/floatingips/\"\n | \"/projects/$projectId/network/securitygroups/\"\n | \"/projects/$projectId/services/pca/\"\n | \"/projects/$projectId/services/pca/$pcaId/$certificateId\"\n | \"/projects/$projectId/network/floatingips/$floatingIpId/\"\n | \"/projects/$projectId/network/securitygroups/$securityGroupId/\"\n | \"/projects/$projectId/services/pca/$pcaId/\"\n | \"/projects/$projectId/storage/$provider/containers/\"\n | \"/projects/$projectId/storage/$provider/containers/$containerName/objects/\"\n fileRoutesByTo: FileRoutesByTo\n to:\n | \"/\"\n | \"/about\"\n | \"/aurora\"\n | \"/accounts\"\n | \"/projects\"\n | \"/projects/$projectId\"\n | \"/projects/$projectId/compute\"\n | \"/projects/$projectId/network\"\n | \"/projects/$projectId/services\"\n | \"/projects/$projectId/storage\"\n | \"/projects/$projectId/compute/flavors/$flavorId\"\n | \"/projects/$projectId/compute/images/$imageId\"\n | \"/projects/$projectId/compute/flavors\"\n | \"/projects/$projectId/compute/images\"\n | \"/projects/$projectId/network/floatingips\"\n | \"/projects/$projectId/network/securitygroups\"\n | \"/projects/$projectId/services/pca\"\n | \"/projects/$projectId/services/pca/$pcaId/$certificateId\"\n | \"/projects/$projectId/network/floatingips/$floatingIpId\"\n | \"/projects/$projectId/network/securitygroups/$securityGroupId\"\n | \"/projects/$projectId/services/pca/$pcaId\"\n | \"/projects/$projectId/storage/$provider/containers\"\n | \"/projects/$projectId/storage/$provider/containers/$containerName/objects\"\n id:\n | \"__root__\"\n | \"/\"\n | \"/_auth\"\n | \"/about\"\n | \"/_auth/aurora\"\n | \"/_auth/projects/$projectId\"\n | \"/_auth/accounts/\"\n | \"/_auth/projects/\"\n | \"/_auth/projects/$projectId/network\"\n | \"/_auth/projects/$projectId/\"\n | \"/_auth/projects/$projectId/compute/flavors\"\n | \"/_auth/projects/$projectId/compute/images\"\n | \"/_auth/projects/$projectId/compute/\"\n | \"/_auth/projects/$projectId/network/\"\n | \"/_auth/projects/$projectId/services/\"\n | \"/_auth/projects/$projectId/storage/\"\n | \"/_auth/projects/$projectId/compute/flavors/$flavorId\"\n | \"/_auth/projects/$projectId/compute/images/$imageId\"\n | \"/_auth/projects/$projectId/compute/flavors/\"\n | \"/_auth/projects/$projectId/compute/images/\"\n | \"/_auth/projects/$projectId/network/floatingips/\"\n | \"/_auth/projects/$projectId/network/securitygroups/\"\n | \"/_auth/projects/$projectId/services/pca/\"\n | \"/_auth/projects/$projectId/services/pca/$pcaId/$certificateId\"\n | \"/_auth/projects/$projectId/network/floatingips/$floatingIpId/\"\n | \"/_auth/projects/$projectId/network/securitygroups/$securityGroupId/\"\n | \"/_auth/projects/$projectId/services/pca/$pcaId/\"\n | \"/_auth/projects/$projectId/storage/$provider/containers/\"\n | \"/_auth/projects/$projectId/storage/$provider/containers/$containerName/objects/\"\n fileRoutesById: FileRoutesById\n}\nexport interface RootRouteChildren {\n IndexRoute: typeof IndexRoute\n AuthRoute: typeof AuthRouteWithChildren\n AboutRoute: typeof AboutRoute\n}\n\ndeclare module \"@tanstack/react-router\" {\n interface FileRoutesByPath {\n \"/about\": {\n id: \"/about\"\n path: \"/about\"\n fullPath: \"/about\"\n preLoaderRoute: typeof AboutRouteImport\n parentRoute: typeof rootRouteImport\n }\n \"/_auth\": {\n id: \"/_auth\"\n path: \"\"\n fullPath: \"/\"\n preLoaderRoute: typeof AuthRouteImport\n parentRoute: typeof rootRouteImport\n }\n \"/\": {\n id: \"/\"\n path: \"/\"\n fullPath: \"/\"\n preLoaderRoute: typeof IndexRouteImport\n parentRoute: typeof rootRouteImport\n }\n \"/_auth/aurora\": {\n id: \"/_auth/aurora\"\n path: \"/aurora\"\n fullPath: \"/aurora\"\n preLoaderRoute: typeof AuthAuroraRouteImport\n parentRoute: typeof AuthRoute\n }\n \"/_auth/projects/\": {\n id: \"/_auth/projects/\"\n path: \"/projects\"\n fullPath: \"/projects/\"\n preLoaderRoute: typeof AuthProjectsIndexRouteImport\n parentRoute: typeof AuthRoute\n }\n \"/_auth/accounts/\": {\n id: \"/_auth/accounts/\"\n path: \"/accounts\"\n fullPath: \"/accounts/\"\n preLoaderRoute: typeof AuthAccountsIndexRouteImport\n parentRoute: typeof AuthRoute\n }\n \"/_auth/projects/$projectId\": {\n id: \"/_auth/projects/$projectId\"\n path: \"/projects/$projectId\"\n fullPath: \"/projects/$projectId\"\n preLoaderRoute: typeof AuthProjectsProjectIdRouteImport\n parentRoute: typeof AuthRoute\n }\n \"/_auth/projects/$projectId/\": {\n id: \"/_auth/projects/$projectId/\"\n path: \"/\"\n fullPath: \"/projects/$projectId/\"\n preLoaderRoute: typeof AuthProjectsProjectIdIndexRouteImport\n parentRoute: typeof AuthProjectsProjectIdRoute\n }\n \"/_auth/projects/$projectId/network\": {\n id: \"/_auth/projects/$projectId/network\"\n path: \"/network\"\n fullPath: \"/projects/$projectId/network\"\n preLoaderRoute: typeof AuthProjectsProjectIdNetworkRouteImport\n parentRoute: typeof AuthProjectsProjectIdRoute\n }\n \"/_auth/projects/$projectId/storage/\": {\n id: \"/_auth/projects/$projectId/storage/\"\n path: \"/storage\"\n fullPath: \"/projects/$projectId/storage/\"\n preLoaderRoute: typeof AuthProjectsProjectIdStorageIndexRouteImport\n parentRoute: typeof AuthProjectsProjectIdRoute\n }\n \"/_auth/projects/$projectId/services/\": {\n id: \"/_auth/projects/$projectId/services/\"\n path: \"/services\"\n fullPath: \"/projects/$projectId/services/\"\n preLoaderRoute: typeof AuthProjectsProjectIdServicesIndexRouteImport\n parentRoute: typeof AuthProjectsProjectIdRoute\n }\n \"/_auth/projects/$projectId/network/\": {\n id: \"/_auth/projects/$projectId/network/\"\n path: \"/\"\n fullPath: \"/projects/$projectId/network/\"\n preLoaderRoute: typeof AuthProjectsProjectIdNetworkIndexRouteImport\n parentRoute: typeof AuthProjectsProjectIdNetworkRoute\n }\n \"/_auth/projects/$projectId/compute/\": {\n id: \"/_auth/projects/$projectId/compute/\"\n path: \"/compute\"\n fullPath: \"/projects/$projectId/compute/\"\n preLoaderRoute: typeof AuthProjectsProjectIdComputeIndexRouteImport\n parentRoute: typeof AuthProjectsProjectIdRoute\n }\n \"/_auth/projects/$projectId/compute/images\": {\n id: \"/_auth/projects/$projectId/compute/images\"\n path: \"/compute/images\"\n fullPath: \"/projects/$projectId/compute/images\"\n preLoaderRoute: typeof AuthProjectsProjectIdComputeImagesRouteImport\n parentRoute: typeof AuthProjectsProjectIdRoute\n }\n \"/_auth/projects/$projectId/compute/flavors\": {\n id: \"/_auth/projects/$projectId/compute/flavors\"\n path: \"/compute/flavors\"\n fullPath: \"/projects/$projectId/compute/flavors\"\n preLoaderRoute: typeof AuthProjectsProjectIdComputeFlavorsRouteImport\n parentRoute: typeof AuthProjectsProjectIdRoute\n }\n \"/_auth/projects/$projectId/services/pca/\": {\n id: \"/_auth/projects/$projectId/services/pca/\"\n path: \"/services/pca\"\n fullPath: \"/projects/$projectId/services/pca/\"\n preLoaderRoute: typeof AuthProjectsProjectIdServicesPcaIndexRouteImport\n parentRoute: typeof AuthProjectsProjectIdRoute\n }\n \"/_auth/projects/$projectId/network/securitygroups/\": {\n id: \"/_auth/projects/$projectId/network/securitygroups/\"\n path: \"/securitygroups\"\n fullPath: \"/projects/$projectId/network/securitygroups/\"\n preLoaderRoute: typeof AuthProjectsProjectIdNetworkSecuritygroupsIndexRouteImport\n parentRoute: typeof AuthProjectsProjectIdNetworkRoute\n }\n \"/_auth/projects/$projectId/network/floatingips/\": {\n id: \"/_auth/projects/$projectId/network/floatingips/\"\n path: \"/floatingips\"\n fullPath: \"/projects/$projectId/network/floatingips/\"\n preLoaderRoute: typeof AuthProjectsProjectIdNetworkFloatingipsIndexRouteImport\n parentRoute: typeof AuthProjectsProjectIdNetworkRoute\n }\n \"/_auth/projects/$projectId/compute/images/\": {\n id: \"/_auth/projects/$projectId/compute/images/\"\n path: \"/\"\n fullPath: \"/projects/$projectId/compute/images/\"\n preLoaderRoute: typeof AuthProjectsProjectIdComputeImagesIndexRouteImport\n parentRoute: typeof AuthProjectsProjectIdComputeImagesRoute\n }\n \"/_auth/projects/$projectId/compute/flavors/\": {\n id: \"/_auth/projects/$projectId/compute/flavors/\"\n path: \"/\"\n fullPath: \"/projects/$projectId/compute/flavors/\"\n preLoaderRoute: typeof AuthProjectsProjectIdComputeFlavorsIndexRouteImport\n parentRoute: typeof AuthProjectsProjectIdComputeFlavorsRoute\n }\n \"/_auth/projects/$projectId/compute/images/$imageId\": {\n id: \"/_auth/projects/$projectId/compute/images/$imageId\"\n path: \"/$imageId\"\n fullPath: \"/projects/$projectId/compute/images/$imageId\"\n preLoaderRoute: typeof AuthProjectsProjectIdComputeImagesImageIdRouteImport\n parentRoute: typeof AuthProjectsProjectIdComputeImagesRoute\n }\n \"/_auth/projects/$projectId/compute/flavors/$flavorId\": {\n id: \"/_auth/projects/$projectId/compute/flavors/$flavorId\"\n path: \"/$flavorId\"\n fullPath: \"/projects/$projectId/compute/flavors/$flavorId\"\n preLoaderRoute: typeof AuthProjectsProjectIdComputeFlavorsFlavorIdRouteImport\n parentRoute: typeof AuthProjectsProjectIdComputeFlavorsRoute\n }\n \"/_auth/projects/$projectId/storage/$provider/containers/\": {\n id: \"/_auth/projects/$projectId/storage/$provider/containers/\"\n path: \"/storage/$provider/containers\"\n fullPath: \"/projects/$projectId/storage/$provider/containers/\"\n preLoaderRoute: typeof AuthProjectsProjectIdStorageProviderContainersIndexRouteImport\n parentRoute: typeof AuthProjectsProjectIdRoute\n }\n \"/_auth/projects/$projectId/services/pca/$pcaId/\": {\n id: \"/_auth/projects/$projectId/services/pca/$pcaId/\"\n path: \"/services/pca/$pcaId\"\n fullPath: \"/projects/$projectId/services/pca/$pcaId/\"\n preLoaderRoute: typeof AuthProjectsProjectIdServicesPcaPcaIdIndexRouteImport\n parentRoute: typeof AuthProjectsProjectIdRoute\n }\n \"/_auth/projects/$projectId/network/securitygroups/$securityGroupId/\": {\n id: \"/_auth/projects/$projectId/network/securitygroups/$securityGroupId/\"\n path: \"/securitygroups/$securityGroupId\"\n fullPath: \"/projects/$projectId/network/securitygroups/$securityGroupId/\"\n preLoaderRoute: typeof AuthProjectsProjectIdNetworkSecuritygroupsSecurityGroupIdIndexRouteImport\n parentRoute: typeof AuthProjectsProjectIdNetworkRoute\n }\n \"/_auth/projects/$projectId/network/floatingips/$floatingIpId/\": {\n id: \"/_auth/projects/$projectId/network/floatingips/$floatingIpId/\"\n path: \"/floatingips/$floatingIpId\"\n fullPath: \"/projects/$projectId/network/floatingips/$floatingIpId/\"\n preLoaderRoute: typeof AuthProjectsProjectIdNetworkFloatingipsFloatingIpIdIndexRouteImport\n parentRoute: typeof AuthProjectsProjectIdNetworkRoute\n }\n \"/_auth/projects/$projectId/services/pca/$pcaId/$certificateId\": {\n id: \"/_auth/projects/$projectId/services/pca/$pcaId/$certificateId\"\n path: \"/services/pca/$pcaId/$certificateId\"\n fullPath: \"/projects/$projectId/services/pca/$pcaId/$certificateId\"\n preLoaderRoute: typeof AuthProjectsProjectIdServicesPcaPcaIdCertificateIdRouteImport\n parentRoute: typeof AuthProjectsProjectIdRoute\n }\n \"/_auth/projects/$projectId/storage/$provider/containers/$containerName/objects/\": {\n id: \"/_auth/projects/$projectId/storage/$provider/containers/$containerName/objects/\"\n path: \"/storage/$provider/containers/$containerName/objects\"\n fullPath: \"/projects/$projectId/storage/$provider/containers/$containerName/objects/\"\n preLoaderRoute: typeof AuthProjectsProjectIdStorageProviderContainersContainerNameObjectsIndexRouteImport\n parentRoute: typeof AuthProjectsProjectIdRoute\n }\n }\n}\n\ninterface AuthProjectsProjectIdNetworkRouteChildren {\n AuthProjectsProjectIdNetworkIndexRoute: typeof AuthProjectsProjectIdNetworkIndexRoute\n AuthProjectsProjectIdNetworkFloatingipsIndexRoute: typeof AuthProjectsProjectIdNetworkFloatingipsIndexRoute\n AuthProjectsProjectIdNetworkSecuritygroupsIndexRoute: typeof AuthProjectsProjectIdNetworkSecuritygroupsIndexRoute\n AuthProjectsProjectIdNetworkFloatingipsFloatingIpIdIndexRoute: typeof AuthProjectsProjectIdNetworkFloatingipsFloatingIpIdIndexRoute\n AuthProjectsProjectIdNetworkSecuritygroupsSecurityGroupIdIndexRoute: typeof AuthProjectsProjectIdNetworkSecuritygroupsSecurityGroupIdIndexRoute\n}\n\nconst AuthProjectsProjectIdNetworkRouteChildren: AuthProjectsProjectIdNetworkRouteChildren =\n {\n AuthProjectsProjectIdNetworkIndexRoute:\n AuthProjectsProjectIdNetworkIndexRoute,\n AuthProjectsProjectIdNetworkFloatingipsIndexRoute:\n AuthProjectsProjectIdNetworkFloatingipsIndexRoute,\n AuthProjectsProjectIdNetworkSecuritygroupsIndexRoute:\n AuthProjectsProjectIdNetworkSecuritygroupsIndexRoute,\n AuthProjectsProjectIdNetworkFloatingipsFloatingIpIdIndexRoute:\n AuthProjectsProjectIdNetworkFloatingipsFloatingIpIdIndexRoute,\n AuthProjectsProjectIdNetworkSecuritygroupsSecurityGroupIdIndexRoute:\n AuthProjectsProjectIdNetworkSecuritygroupsSecurityGroupIdIndexRoute,\n }\n\nconst AuthProjectsProjectIdNetworkRouteWithChildren =\n AuthProjectsProjectIdNetworkRoute._addFileChildren(\n AuthProjectsProjectIdNetworkRouteChildren,\n )\n\ninterface AuthProjectsProjectIdComputeFlavorsRouteChildren {\n AuthProjectsProjectIdComputeFlavorsFlavorIdRoute: typeof AuthProjectsProjectIdComputeFlavorsFlavorIdRoute\n AuthProjectsProjectIdComputeFlavorsIndexRoute: typeof AuthProjectsProjectIdComputeFlavorsIndexRoute\n}\n\nconst AuthProjectsProjectIdComputeFlavorsRouteChildren: AuthProjectsProjectIdComputeFlavorsRouteChildren =\n {\n AuthProjectsProjectIdComputeFlavorsFlavorIdRoute:\n AuthProjectsProjectIdComputeFlavorsFlavorIdRoute,\n AuthProjectsProjectIdComputeFlavorsIndexRoute:\n AuthProjectsProjectIdComputeFlavorsIndexRoute,\n }\n\nconst AuthProjectsProjectIdComputeFlavorsRouteWithChildren =\n AuthProjectsProjectIdComputeFlavorsRoute._addFileChildren(\n AuthProjectsProjectIdComputeFlavorsRouteChildren,\n )\n\ninterface AuthProjectsProjectIdComputeImagesRouteChildren {\n AuthProjectsProjectIdComputeImagesImageIdRoute: typeof AuthProjectsProjectIdComputeImagesImageIdRoute\n AuthProjectsProjectIdComputeImagesIndexRoute: typeof AuthProjectsProjectIdComputeImagesIndexRoute\n}\n\nconst AuthProjectsProjectIdComputeImagesRouteChildren: AuthProjectsProjectIdComputeImagesRouteChildren =\n {\n AuthProjectsProjectIdComputeImagesImageIdRoute:\n AuthProjectsProjectIdComputeImagesImageIdRoute,\n AuthProjectsProjectIdComputeImagesIndexRoute:\n AuthProjectsProjectIdComputeImagesIndexRoute,\n }\n\nconst AuthProjectsProjectIdComputeImagesRouteWithChildren =\n AuthProjectsProjectIdComputeImagesRoute._addFileChildren(\n AuthProjectsProjectIdComputeImagesRouteChildren,\n )\n\ninterface AuthProjectsProjectIdRouteChildren {\n AuthProjectsProjectIdNetworkRoute: typeof AuthProjectsProjectIdNetworkRouteWithChildren\n AuthProjectsProjectIdIndexRoute: typeof AuthProjectsProjectIdIndexRoute\n AuthProjectsProjectIdComputeFlavorsRoute: typeof AuthProjectsProjectIdComputeFlavorsRouteWithChildren\n AuthProjectsProjectIdComputeImagesRoute: typeof AuthProjectsProjectIdComputeImagesRouteWithChildren\n AuthProjectsProjectIdComputeIndexRoute: typeof AuthProjectsProjectIdComputeIndexRoute\n AuthProjectsProjectIdServicesIndexRoute: typeof AuthProjectsProjectIdServicesIndexRoute\n AuthProjectsProjectIdStorageIndexRoute: typeof AuthProjectsProjectIdStorageIndexRoute\n AuthProjectsProjectIdServicesPcaIndexRoute: typeof AuthProjectsProjectIdServicesPcaIndexRoute\n AuthProjectsProjectIdServicesPcaPcaIdCertificateIdRoute: typeof AuthProjectsProjectIdServicesPcaPcaIdCertificateIdRoute\n AuthProjectsProjectIdServicesPcaPcaIdIndexRoute: typeof AuthProjectsProjectIdServicesPcaPcaIdIndexRoute\n AuthProjectsProjectIdStorageProviderContainersIndexRoute: typeof AuthProjectsProjectIdStorageProviderContainersIndexRoute\n AuthProjectsProjectIdStorageProviderContainersContainerNameObjectsIndexRoute: typeof AuthProjectsProjectIdStorageProviderContainersContainerNameObjectsIndexRoute\n}\n\nconst AuthProjectsProjectIdRouteChildren: AuthProjectsProjectIdRouteChildren = {\n AuthProjectsProjectIdNetworkRoute:\n AuthProjectsProjectIdNetworkRouteWithChildren,\n AuthProjectsProjectIdIndexRoute: AuthProjectsProjectIdIndexRoute,\n AuthProjectsProjectIdComputeFlavorsRoute:\n AuthProjectsProjectIdComputeFlavorsRouteWithChildren,\n AuthProjectsProjectIdComputeImagesRoute:\n AuthProjectsProjectIdComputeImagesRouteWithChildren,\n AuthProjectsProjectIdComputeIndexRoute:\n AuthProjectsProjectIdComputeIndexRoute,\n AuthProjectsProjectIdServicesIndexRoute:\n AuthProjectsProjectIdServicesIndexRoute,\n AuthProjectsProjectIdStorageIndexRoute:\n AuthProjectsProjectIdStorageIndexRoute,\n AuthProjectsProjectIdServicesPcaIndexRoute:\n AuthProjectsProjectIdServicesPcaIndexRoute,\n AuthProjectsProjectIdServicesPcaPcaIdCertificateIdRoute:\n AuthProjectsProjectIdServicesPcaPcaIdCertificateIdRoute,\n AuthProjectsProjectIdServicesPcaPcaIdIndexRoute:\n AuthProjectsProjectIdServicesPcaPcaIdIndexRoute,\n AuthProjectsProjectIdStorageProviderContainersIndexRoute:\n AuthProjectsProjectIdStorageProviderContainersIndexRoute,\n AuthProjectsProjectIdStorageProviderContainersContainerNameObjectsIndexRoute:\n AuthProjectsProjectIdStorageProviderContainersContainerNameObjectsIndexRoute,\n}\n\nconst AuthProjectsProjectIdRouteWithChildren =\n AuthProjectsProjectIdRoute._addFileChildren(\n AuthProjectsProjectIdRouteChildren,\n )\n\ninterface AuthRouteChildren {\n AuthAuroraRoute: typeof AuthAuroraRoute\n AuthProjectsProjectIdRoute: typeof AuthProjectsProjectIdRouteWithChildren\n AuthAccountsIndexRoute: typeof AuthAccountsIndexRoute\n AuthProjectsIndexRoute: typeof AuthProjectsIndexRoute\n}\n\nconst AuthRouteChildren: AuthRouteChildren = {\n AuthAuroraRoute: AuthAuroraRoute,\n AuthProjectsProjectIdRoute: AuthProjectsProjectIdRouteWithChildren,\n AuthAccountsIndexRoute: AuthAccountsIndexRoute,\n AuthProjectsIndexRoute: AuthProjectsIndexRoute,\n}\n\nconst AuthRouteWithChildren = AuthRoute._addFileChildren(AuthRouteChildren)\n\nconst rootRouteChildren: RootRouteChildren = {\n IndexRoute: IndexRoute,\n AuthRoute: AuthRouteWithChildren,\n AboutRoute: AboutRoute,\n}\nexport const routeTree = rootRouteImport\n ._addFileChildren(rootRouteChildren)\n ._addFileTypes<FileRouteTypes>()\n","import { createRouter } from \"@tanstack/react-router\"\nimport { routeTree } from \"./routeTree.gen\"\nimport type { TrpcReact, TrpcClient } from \"./trpcClient\"\n\nexport function createAuroraRouter(trpcReact: TrpcReact, trpcClient: TrpcClient) {\n return createRouter({\n routeTree,\n context: {\n trpcReact,\n trpcClient,\n auth: undefined!,\n navItems: [],\n handleThemeToggle: undefined!,\n slots: undefined,\n },\n })\n}\n\n// Type registration — uses the shape of a router instance for global type inference\ndeclare module \"@tanstack/react-router\" {\n interface Register {\n router: ReturnType<typeof createAuroraRouter>\n }\n}\n","/*eslint-disable*/import type{Messages}from\"@lingui/core\";export const messages=JSON.parse(\"{\\\"+0B+ue\\\":[\\\"Projects\\\"],\\\"+1rTEL\\\":[\\\"Import Externally Signed Certificate\\\"],\\\"+1xG4p\\\":[\\\"Click the button below to automatically generate credentials for this project. You only need to do this once.\\\"],\\\"+8m5QE\\\":[\\\"To access S3 Object Storage, you need EC2 credentials (access key + secret key). These credentials authenticate your requests to the Ceph storage backend.\\\"],\\\"+9CXS9\\\":[\\\"Deactivate Images\\\"],\\\"+HVj+D\\\":[\\\"Add a Signed Certificate to your CA to activate it\\\"],\\\"+Jcye3\\\":[\\\"Key Name\\\"],\\\"+Lt5cp\\\":[\\\"You are not authorized to add tenant access. Please log in again.\\\"],\\\"+Nhol2\\\":[\\\"Certificate not found\\\"],\\\"+NwLgN\\\":[\\\"Activating this image will allow it to be used to launch new instances again.\\\"],\\\"+Nx1wc\\\":[\\\"Failed to load Floating IPs\\\"],\\\"+OEi73\\\":[\\\"Object Storage (Swift)\\\"],\\\"+nQTmZ\\\":[\\\"This tenant does not have access to the flavor.\\\"],\\\"+p6nHr\\\":[\\\"Failed to load object metadata: \\\",[\\\"metadataErrorMessage\\\"]],\\\"+pJjJF\\\":[\\\"After restoring, this version's content will become the new latest version.\\\"],\\\"+rtZ8i\\\":[\\\"Version ID:\\\"],\\\"+zy2Nq\\\":[\\\"Type\\\"],\\\"/0+NVm\\\":[\\\"What happens when suspended:\\\"],\\\"/1MfrG\\\":[\\\"Could not download \\\\\\\"\\\",[\\\"objectName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"/9Squ9\\\":[\\\"You don't have permission to view this flavor's details.\\\"],\\\"/BZLRP\\\":[\\\"To confirm this action, type the word <0>“detach”</0> in the field below.\\\"],\\\"/EcdUM\\\":[\\\"Your action is required\\\"],\\\"/HgF9q\\\":[\\\"Sort by\\\"],\\\"/InK0O\\\":[\\\"Total size\\\"],\\\"/LXXlY\\\":[\\\"Properties of \\\\\\\"\\\",[\\\"displayName\\\"],\\\"\\\\\\\" were successfully updated.\\\"],\\\"/LqWNN\\\":[\\\"Could not delete \\\\\\\"\\\",[\\\"objectName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"/NeNjH\\\":[\\\"Container \\\\\\\"\\\",[\\\"containerName\\\"],\\\"\\\\\\\" properties were successfully updated.\\\"],\\\"/Nmxy/\\\":[\\\"No key pairs available.\\\"],\\\"/QIkBY\\\":[\\\"<0>Secure & Reliable:</0> Your data and operations are safeguarded with enterprise-grade security and robust reliability.\\\"],\\\"/Qox3b\\\":[\\\"A folder with this name already exists\\\"],\\\"/Z2leb\\\":[\\\"No containers found.\\\"],\\\"/Z5n1b\\\":[\\\"Create folder below:\\\"],\\\"/bUiYk\\\":[\\\"Router ID\\\"],\\\"/bjBg/\\\":[\\\"Error Loading Buckets\\\"],\\\"/eFtWI\\\":[\\\"RBAC Policies\\\"],\\\"/fwE6J\\\":[\\\"Older\\\"],\\\"/pOQrn\\\":[\\\"This action is irreversible. Deleting a bucket permanently removes it and cannot be undone. The bucket must be empty before deletion.\\\"],\\\"/tejov\\\":[[\\\"totalCount\\\",\\\"plural\\\",{\\\"one\\\":[\\\"Empty Container\\\"],\\\"other\\\":[\\\"Empty Containers\\\"]}]],\\\"/xnbdQ\\\":[\\\"The specified user has access. A token for the user (scoped to any project) must be included in the request.\\\"],\\\"01/uUD\\\":[\\\"Keep segments (delete manifest only)\\\"],\\\"07WXfc\\\":[\\\"Server returned unexpected data format for extra specs.\\\"],\\\"0BSSYj\\\":[\\\"Server error occurred while removing tenant access. Please try again later.\\\"],\\\"0Gd0NU\\\":[\\\"Shared\\\"],\\\"0NSWq1\\\":[\\\"Once enabled, versioning cannot be fully disabled—it can only be suspended. Existing versions will remain even after suspension.\\\"],\\\"0P2gFy\\\":[\\\"The page you are looking for does not exist.\\\"],\\\"0WsqO0\\\":[\\\"Containers Emptied\\\"],\\\"0XLPG9\\\":[\\\"Type to search buckets...\\\"],\\\"0cVgUw\\\":[\\\"Filter by\\\"],\\\"0cl0a5\\\":[\\\"Search images...\\\"],\\\"0eY8Mz\\\":[\\\"There are no Floating IPs available for this project. Floating IPs allow you to map public IP addresses to instances.\\\"],\\\"0i3NVD\\\":[\\\"Delete Version Permanently\\\"],\\\"0kCt7e\\\":[\\\"The flavor data provided is invalid. Please check your input.\\\"],\\\"0kc0zi\\\":[\\\"Server error occurred while deleting the extra spec. Please try again later.\\\"],\\\"0o0OhW\\\":[\\\"No objects found.\\\"],\\\"0p+s6m\\\":[\\\"Type: \\\",[\\\"typeValue\\\"],\\\", Code: \\\",[\\\"codeValue\\\"]],\\\"0u9jhd\\\":[\\\"Detaching this Floating IP will remove its association with the current port. The instance will no longer be reachable through this address.\\\"],\\\"16085O\\\":[\\\"IP Version\\\"],\\\"1DbiGM\\\":[\\\"Issuing Self-Signed Certificate...\\\"],\\\"1H2g6v\\\":[\\\"Moving object...\\\"],\\\"1NFtQz\\\":[\\\"Failed to Delete Bucket\\\"],\\\"1NS3nd\\\":[[\\\"emptiedCount\\\",\\\"plural\\\",{\\\"one\\\":[\\\"#\\\",\\\" container\\\"],\\\"other\\\":[\\\"#\\\",\\\" containers\\\"]}],\\\" successfully emptied. \\\",[\\\"totalDeleted\\\",\\\"plural\\\",{\\\"one\\\":[\\\"#\\\",\\\" object\\\"],\\\"other\\\":[\\\"#\\\",\\\" objects\\\"]}],\\\" deleted in total.\\\"],\\\"1RwosK\\\":[\\\"Target project ID is required\\\"],\\\"1UzENP\\\":[\\\"No\\\"],\\\"1VDqZj\\\":[\\\"<0>Future-Ready:</0> Aurora is designed to evolve with the latest trends in cloud technology, ensuring your solution is always cutting-edge.\\\"],\\\"1W3TqV\\\":[\\\"No new versions will be created\\\"],\\\"1iQtS2\\\":[\\\"Showing first \\\",[\\\"actualObjectCount\\\"],\\\" of \\\",[\\\"total\\\"],\\\" objects\\\"],\\\"1iUuTT\\\":[\\\"Your session has expired. Please log in again.\\\"],\\\"1ojTVo\\\":[\\\"Select a DNS domain.\\\"],\\\"1pGUZa\\\":[\\\"Session expires in\\\"],\\\"1pdLQw\\\":[\\\"Image not found\\\"],\\\"1rLu3+\\\":[\\\"Could not empty container \\\\\\\"\\\",[\\\"containerName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"1rPB1p\\\":[\\\"The flavor or tenant could not be found. Please verify they exist.\\\"],\\\"1t/NnN\\\":[\\\"Reject\\\"],\\\"1zZ1IK\\\":[\\\"Hi\\\"],\\\"20E+79\\\":[\\\"You need to login to access this page.\\\"],\\\"20Kpaw\\\":[\\\"Flavor \\\\\\\"\\\",[\\\"flavorName\\\"],\\\"\\\\\\\" has been successfully deleted.\\\"],\\\"20axE5\\\":[\\\"Shared by Project\\\"],\\\"23wBCX\\\":[\\\"Public Read Access\\\"],\\\"2G+7C1\\\":[\\\"Enter a name for the new folder.\\\"],\\\"2G6hLq\\\":[\\\"Delete \\\",[\\\"specKey\\\"]],\\\"2Inn83\\\":[\\\"Bulk upload of archive files\\\"],\\\"2PRzsq\\\":[\\\"Could not create folder \\\\\\\"\\\",[\\\"folderPath\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"2TtIL2\\\":[\\\"Stored as X-Object-Meta-* headers. Keys are case-insensitive.\\\"],\\\"2cJIlz\\\":[\\\"Floating Network ID\\\"],\\\"2d/OiW\\\":[\\\"Enter your username\\\"],\\\"2dnZwV\\\":[\\\"Could not delete folder \\\\\\\"\\\",[\\\"folderName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"2gH+i8\\\":[\\\"You are not authorized to delete flavors. Please log in again.\\\"],\\\"2mbisJ\\\":[\\\"Metadata \\\\\\\"\\\",[\\\"trimmedKey\\\"],\\\"\\\\\\\" has been added successfully.\\\"],\\\"2q/Q7x\\\":[\\\"Visibility\\\"],\\\"2tjuGi\\\":[\\\"Recover from accidental deletions\\\"],\\\"2xOCJW\\\":[\\\"This action cannot be undone.\\\"],\\\"2xbYVD\\\":[\\\"Could not update \\\\\\\"\\\",[\\\"displayName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"2ysnjX\\\":[\\\"<0>Enhanced Productivity:</0> By reducing operational complexity, Aurora helps your team focus on what truly matters—innovating and driving business success.\\\"],\\\"2zceEg\\\":[\\\"This action cannot be undone. The image will be permanently deleted.\\\"],\\\"33F2A+\\\":[\\\"Type container name to confirm\\\"],\\\"3Qn0me\\\":[\\\"Add Member\\\"],\\\"3dBmvU\\\":[\\\"The container cannot be deleted as it contains objects. Empty the container first.\\\"],\\\"3n+vCm\\\":[\\\"Custom duration (minutes)\\\"],\\\"3nWqQW\\\":[\\\"You are not authorized to view extra specs. Please log in again.\\\"],\\\"3nh/7E\\\":[\\\"If checked, this flavor will be available to all tenants. If unchecked, access must be explicitly granted to specific tenants.\\\"],\\\"3oChIh\\\":[\\\"<0>Unified Cloud Management:</0> Consolidates all your cloud assets into one intuitive interface.\\\"],\\\"3oc18/\\\":[\\\"Private flavors could not be loaded. You may be seeing an incomplete list.\\\"],\\\"3q1GLx\\\":[\\\"Pending file upload...\\\"],\\\"3uDz8n\\\":[\\\"Import Signed Certificate\\\"],\\\"3x7Sws\\\":[\\\"Loading Security Group Details...\\\"],\\\"4+2wZO\\\":[\\\"Back to Certificate Authorities Details page\\\"],\\\"47eI0x\\\":[\\\"Description must be at least 1 character.\\\"],\\\"48QXFO\\\":[\\\"Expected format: YYYY-MM-DD HH:mm:ss\\\"],\\\"48bMai\\\":[\\\"Bucket name is required\\\"],\\\"4BITzH\\\":[\\\"Error:\\\"],\\\"4EZrJN\\\":[\\\"Rules\\\"],\\\"4O2AH3\\\":[\\\"Member \\\\\\\"\\\",[\\\"memberIdToRemove\\\"],\\\"\\\\\\\" has been removed successfully.\\\"],\\\"4bLttB\\\":[\\\"Folder name is too long (max 255 characters)\\\"],\\\"4fh0Wj\\\":[\\\"Boot size\\\"],\\\"4fvDRe\\\":[\\\"Images to activate:\\\"],\\\"4fvcmm\\\":[\\\"Object will be uploaded as: <0>\\\",[\\\"selectedObjectName\\\"],\\\"</0>\\\"],\\\"4h3Eyf\\\":[\\\"\\\\\\\"\\\",[\\\"objectName\\\"],\\\"\\\\\\\" was successfully uploaded.\\\"],\\\"4kjaAc\\\":[\\\"No server groups available.\\\"],\\\"4mbrAq\\\":[\\\"1 minute\\\"],\\\"4opp4r\\\":[\\\"Security Groups\\\"],\\\"4pOfUd\\\":[\\\"Our Mission\\\"],\\\"4t33sh\\\":[\\\"Failed to Update Object\\\"],\\\"4uXhtt\\\":[\\\"CIDR\\\"],\\\"4utWB4\\\":[\\\"Server Role:\\\"],\\\"5/wyf8\\\":[\\\"Enter a floating IP\\\"],\\\"50Piuj\\\":[\\\"This bucket contains \\\",[\\\"actualObjectCount\\\"],\\\" \\\",[\\\"actualObjectCount\\\",\\\"plural\\\",{\\\"one\\\":[\\\"object\\\"],\\\"other\\\":[\\\"objects\\\"]}],\\\" and cannot be deleted. Delete all objects first.\\\"],\\\"56IxdF\\\":[\\\"Failed to load container objects: \\\",[\\\"errorMessage\\\"]],\\\"5BLR6Q\\\":[\\\"IPv4\\\"],\\\"5JDSvn\\\":[\\\"Max meta value length\\\"],\\\"5M4Te3\\\":[\\\"DNS\\\"],\\\"5MF8U2\\\":[\\\"Failed to Update Container\\\"],\\\"5Okch2\\\":[\\\"Empty:\\\"],\\\"5TzHG8\\\":[\\\"Warning:\\\"],\\\"5Yrl6N\\\":[\\\"Loading Server Groups...\\\"],\\\"5aNQ3F\\\":[\\\"\\\\\\\"\\\",[\\\"objectName\\\"],\\\"\\\\\\\" was successfully copied to \\\",[\\\"destination\\\"],\\\".\\\"],\\\"5g7owI\\\":[\\\"Updating Floating IP...\\\"],\\\"5y3O+A\\\":[\\\"Deactivate\\\"],\\\"6+7EwD\\\":[\\\"Serve objects as index when file name is:\\\"],\\\"6+OdGi\\\":[\\\"Protocol\\\"],\\\"6/xipy\\\":[\\\"Container Format\\\"],\\\"644xgx\\\":[\\\"Protected\\\"],\\\"66YUKF\\\":[\\\"Failed to Empty Bucket\\\"],\\\"6BDqha\\\":[\\\"Limits\\\"],\\\"6CDYXS\\\":[\\\"Static website serving\\\"],\\\"6E98zF\\\":[\\\"Stored as x-amz-meta-* headers. Keys are case-insensitive.\\\"],\\\"6EcekU\\\":[\\\"Target bucket\\\"],\\\"6GBt0m\\\":[\\\"Metadata\\\"],\\\"6H/Lg1\\\":[\\\"This is a public image. All users have access to it. Explicit sharing is not needed.\\\"],\\\"6KRclz\\\":[\\\"Folder Created\\\"],\\\"6Kjltl\\\":[\\\"Access Control for container:\\\"],\\\"6OopEX\\\":[\\\"Container Emptied\\\"],\\\"6Rnrsz\\\":[\\\"Manage Access - \\\",[\\\"flavorName\\\"]],\\\"6V3Ea3\\\":[\\\"Copied\\\"],\\\"6X/9Di\\\":[\\\"\\\\\\\"\\\",[\\\"objectName\\\"],\\\"\\\\\\\" was successfully moved to \\\",[\\\"destination\\\"],\\\".\\\"],\\\"6YtxFj\\\":[\\\"Name\\\"],\\\"6fuDFZ\\\":[\\\"Empty All Completed with Errors\\\"],\\\"6jAi8c\\\":[\\\"Range\\\"],\\\"6luZQA\\\":[\\\"Object Moved\\\"],\\\"6oolxV\\\":[\\\"This extra spec keys already exist. Please use different keys.\\\"],\\\"6qzsuS\\\":[\\\"Write ACLs\\\"],\\\"6sxz+g\\\":[\\\"Port Name\\\"],\\\"6w+VnM\\\":[\\\"Container Created\\\"],\\\"6z9W13\\\":[\\\"Restart\\\"],\\\"76RKuS\\\":[\\\"ICMP Code\\\"],\\\"78+riR\\\":[\\\"You are not authorized to remove tenant access. Please log in again.\\\"],\\\"7AfIPZ\\\":[\\\"Floating Network\\\"],\\\"7BpykL\\\":[\\\"Failed to create extra specs. Please try again.\\\"],\\\"7L01XJ\\\":[\\\"Actions\\\"],\\\"7NC3vm\\\":[\\\"Subnet\\\"],\\\"7NSdfG\\\":[\\\"Emptying container \\\",[\\\"progressCurrent\\\"],\\\" of \\\",[\\\"progressTotal\\\"],\\\", please wait...\\\"],\\\"7Q24LN\\\":[\\\"Policy\\\"],\\\"7SGcZS\\\":[\\\"Search objects...\\\"],\\\"7T1fHv\\\":[\\\"Failed to remove member \\\\\\\"\\\",[\\\"memberIdToRemove\\\"],\\\"\\\\\\\"\\\"],\\\"7UlHhT\\\":[\\\"Metadata \\\\\\\"\\\",[\\\"keyToDelete\\\"],\\\"\\\\\\\" has been deleted successfully.\\\"],\\\"7XQ3QJ\\\":[\\\"Denied referrer: \\\",[\\\"host\\\"]],\\\"7ZnTL8\\\":[\\\"Failed to update object: \\\",[\\\"mutationErrorMessage\\\"]],\\\"7a4DvD\\\":[\\\"No servers available.\\\"],\\\"7d1a0d\\\":[\\\"Public\\\"],\\\"7flw0l\\\":[\\\"Tenant access for \\\\\\\"\\\",[\\\"trimmedTenantId\\\"],\\\"\\\\\\\" has been added successfully.\\\"],\\\"7hLLUk\\\":[\\\"Folder \\\\\\\"\\\",[\\\"folderPath\\\"],\\\"\\\\\\\" was successfully created.\\\"],\\\"7huC4O\\\":[\\\"There are no Certificates available for this Certificate Authority.\\\"],\\\"7sMeHQ\\\":[\\\"Key\\\"],\\\"88kg0+\\\":[\\\"Created At\\\"],\\\"8AriEH\\\":[\\\"Image instance \\\\\\\"\\\",[\\\"imageName\\\"],\\\"\\\\\\\" has been created\\\"],\\\"8BjKi0\\\":[\\\"Last Modified:\\\"],\\\"8HrqL8\\\":[\\\"<0>Are you sure?</0> All \\\",[\\\"bucketCount\\\"],\\\" \\\",[\\\"bucketCount\\\",\\\"plural\\\",{\\\"one\\\":[\\\"object\\\"],\\\"other\\\":[\\\"objects\\\"]}],\\\" in bucket \\\\\\\"\\\",[\\\"bucketName\\\"],\\\"\\\\\\\" will be permanently deleted. This action cannot be undone.\\\"],\\\"8Pcsi8\\\":[\\\"Enter a timestamp like \\\\\\\"YYYY-MM-DD HH:mm:ss\\\\\\\" to schedule automatic deletion.\\\"],\\\"8S2nDL\\\":[\\\"No PCAs found\\\"],\\\"8TSI9h\\\":[\\\"Deactivating this image will prevent it from being used to launch new instances. Existing instances will not be affected.\\\"],\\\"8Tg/JR\\\":[\\\"Custom\\\"],\\\"8ZOb7O\\\":[[\\\"numberDeleted\\\"],\\\" object was permanently deleted.\\\"],\\\"8ZsakT\\\":[\\\"Password\\\"],\\\"8c3/77\\\":[\\\"Max meta name length\\\"],\\\"8erw15\\\":[\\\"Bucket \\\\\\\"\\\",[\\\"bucketName\\\"],\\\"\\\\\\\" was already empty.\\\"],\\\"8jLXs3\\\":[\\\"Versioned writes\\\"],\\\"8s0tOH\\\":[\\\"You don't have permission to add tenant access to this flavor.\\\"],\\\"8t1+HU\\\":[\\\"Deactivated \\\",[\\\"successCount\\\"],\\\" image(s), but \\\",[\\\"failedCount\\\"],\\\" image(s) could not be deactivated.\\\"],\\\"8uPTwT\\\":[[\\\"filteredCount\\\",\\\"plural\\\",{\\\"one\\\":[[\\\"filteredCount\\\"],\\\" of \\\",[\\\"totalCount\\\"],\\\" container\\\"],\\\"other\\\":[[\\\"filteredCount\\\"],\\\" of \\\",[\\\"totalCount\\\"],\\\" containers\\\"]}]],\\\"8wdCNd\\\":[\\\"tcp, udp, icmp, or protocol number\\\"],\\\"8yVjU5\\\":[\\\"Issue Self Signed Certificate\\\"],\\\"8zAn1f\\\":[\\\"Failed to delete flavor. Please try again.\\\"],\\\"97QUV6\\\":[\\\"Delete Folder\\\"],\\\"98Fs4G\\\":[\\\"Creating image...\\\"],\\\"9J93Xr\\\":[\\\"Container name cannot contain slashes\\\"],\\\"9SX0bO\\\":[\\\"The image \\\\\\\"\\\",[\\\"imageName\\\"],\\\"\\\\\\\" could not be updated: \\\"],\\\"9X8lAk\\\":[\\\"Allocate\\\"],\\\"9doWrf\\\":[\\\"Failed to add member\\\"],\\\"9dsDHD\\\":[\\\"The image \\\\\\\"\\\",[\\\"imageId\\\"],\\\"\\\\\\\" could not be re-activated: \\\",[\\\"message\\\"]],\\\"9iz2XW\\\":[\\\"Unable to Update Image\\\"],\\\"9njIiV\\\":[\\\"Failed to Activate Images\\\"],\\\"9rz81C\\\":[\\\"Device ID\\\"],\\\"9v5VLp\\\":[\\\"No custom properties defined\\\"],\\\"9vSW3U\\\":[\\\"Delete Recursively\\\"],\\\"9x6EkK\\\":[\\\"This is a public flavor. All tenants have access to it.\\\"],\\\"A7CVME\\\":[\\\"Select disk format first\\\"],\\\"AB4Tnl\\\":[\\\"Please select a file to upload\\\"],\\\"AGXLLY\\\":[\\\"Unable to Upload Image File\\\"],\\\"AHGd/0\\\":[\\\"⚠️ Warning: Irreversible Action\\\"],\\\"AJRhSM\\\":[\\\"Root Disk must be an integer ≥ 0.\\\"],\\\"AN0DBJ\\\":[\\\"Press Enter to add\\\"],\\\"ANOoeR\\\":[[\\\"totalItemCount\\\",\\\"plural\\\",{\\\"one\\\":[[\\\"totalItemCount\\\"],\\\" item\\\"],\\\"other\\\":[[\\\"totalItemCount\\\"],\\\" items\\\"]}]],\\\"ASJMIw\\\":[\\\"S3 bucket names must be 3-63 characters long and contain only lowercase letters, numbers, periods, and hyphens. They must start and end with a letter or number, and be globally unique within the cluster.\\\"],\\\"AX9Juz\\\":[\\\"ID must only contain alphanumeric characters, hyphens, underscores, and dots.\\\"],\\\"AZyHwC\\\":[\\\"Must be a valid IPv4 or IPv6 address (for example: 172.24.4.228 or 2001:db8::1).\\\"],\\\"Ac6dy9\\\":[\\\"Type name\\\"],\\\"AdtLNV\\\":[\\\"Ensure ACL entries are valid — correct project IDs, user IDs, and formats are your responsibility. Invalid entries may silently grant or deny unintended access.\\\"],\\\"AeP3VC\\\":[\\\"Date:\\\"],\\\"AeXO77\\\":[\\\"Account\\\"],\\\"Af8YL/\\\":[\\\"\\\\\\\"\\\",[\\\"displayName\\\"],\\\"\\\\\\\" was successfully copied to \\\",[\\\"destination\\\"],\\\".\\\"],\\\"Afh/Lb\\\":[\\\"Select destination folder\\\"],\\\"Ag1qjw\\\":[\\\"This will permanently delete this version. This operation cannot be undone. The version will be lost forever.\\\"],\\\"AirKNZ\\\":[\\\"Issue Self-Signed Certificate\\\"],\\\"AlbUVn\\\":[\\\"<0>Optimized Scalability:</0> Built for businesses of all sizes, Aurora grows with you, supporting simple environments and intricate multi-cloud setups alike.\\\"],\\\"Alx2/L\\\":[\\\"Open in new tab\\\"],\\\"AuQtzx\\\":[\\\"Must be a non-negative integer\\\"],\\\"AxZkIr\\\":[\\\"Disk (GiB)\\\"],\\\"B2Czeb\\\":[\\\"Min. RAM\\\"],\\\"B2SpR8\\\":[\\\"Bucket name must not start with reserved prefix \\\\\\\"\\\",[\\\"prefix\\\"],\\\"\\\\\\\"\\\"],\\\"B2i9cQ\\\":[\\\"Objects to be deleted (\\\",[\\\"totalCount\\\"],\\\")\\\"],\\\"B3toQF\\\":[\\\"Objects\\\"],\\\"BCJPTn\\\":[\\\"Grant access to all users from that project.\\\"],\\\"BCXapL\\\":[\\\"Failed to load container properties: \\\",[\\\"errorMessage\\\"]],\\\"BGsuZN\\\":[\\\"Key contains invalid characters (use only letters, digits, hyphens, underscores)\\\"],\\\"BJt+PJ\\\":[\\\"Failed to Delete Container\\\"],\\\"BMTd81\\\":[\\\"This action cannot be undone. The target project will lose access to this security group immediately.\\\"],\\\"BMogtG\\\":[\\\"Issue End Entity Certificate\\\"],\\\"BOQYRn\\\":[\\\"Loading Key Pairs...\\\"],\\\"BOoOLQ\\\":[\\\"All Buckets Emptied\\\"],\\\"BP4Fwj\\\":[\\\"Error Loading Objects: \\\",[\\\"errorMessage\\\"]],\\\"BSaBkZ\\\":[\\\"Objects — \\\",[\\\"containerName\\\"]],\\\"BTsbBe\\\":[\\\"Bucket Name\\\"],\\\"BYH/2L\\\":[\\\"Unable to Deactivate Image\\\"],\\\"BZpsYm\\\":[\\\"Failed to load containers: \\\",[\\\"errorMessage\\\"]],\\\"BgMp/T\\\":[\\\"Invalid format combination for selected disk format\\\"],\\\"Blsc/x\\\":[\\\"Delete Certificate Authority\\\"],\\\"BoIAP6\\\":[\\\"The ID of the network associated with the floating IP.\\\"],\\\"BoPocW\\\":[\\\"MD5 checksum\\\"],\\\"BrrIs8\\\":[\\\"Storage\\\"],\\\"CA8ZeT\\\":[\\\"Image \\\\\\\"\\\",[\\\"imageName\\\"],\\\"\\\\\\\" visibility updated to \\\",[\\\"visibility\\\"]],\\\"CBFSfX\\\":[\\\"Please fix the validation errors below.\\\"],\\\"CFMxC8\\\":[\\\"Images Deleted\\\"],\\\"CMVP7y\\\":[\\\"This action cannot be undone. The rule will be permanently deleted.\\\"],\\\"CfKRC1\\\":[\\\"Empty Bucket\\\"],\\\"CgZxr7\\\":[\\\"Min RAM (MB)\\\"],\\\"ChOuUj\\\":[\\\"Floating IP not found\\\"],\\\"Cj2Gtd\\\":[\\\"Size\\\"],\\\"ClGcRq\\\":[\\\"Containers\\\"],\\\"CongmL\\\":[\\\"Could not delete bucket \\\\\\\"\\\",[\\\"bucketName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"CpZKLR\\\":[\\\"Version ID\\\"],\\\"CtiFDz\\\":[\\\"This will permanently delete all objects from \\\",[\\\"totalCount\\\"],\\\" selected \\\",[\\\"totalCount\\\",\\\"plural\\\",{\\\"one\\\":[\\\"bucket\\\"],\\\"other\\\":[\\\"buckets\\\"]}],\\\". This action cannot be undone.\\\"],\\\"Cu6xuZ\\\":[\\\"This is a <0>dynamic large object (DLO)</0> manifest. Metadata changes apply to the manifest only — segment objects are not affected.\\\"],\\\"CunRry\\\":[\\\"Invalid project ID format. Must be 32 hexadecimal characters (e.g., b90f9c4bc76140e18540b2cec1299e2a) or UUID format (e.g., 12345678-1234-1234-1234-123456789abc)\\\"],\\\"Cxgv2U\\\":[\\\"Min. Disk\\\"],\\\"D3IRXw\\\":[\\\"Detaching Floating IP...\\\"],\\\"D7qT9F\\\":[\\\"Why Choose Aurora?\\\"],\\\"D8ak4F\\\":[[\\\"totalItemCount\\\",\\\"plural\\\",{\\\"one\\\":[[\\\"filteredItemCount\\\"],\\\" of \\\",[\\\"totalItemCount\\\"],\\\" item\\\"],\\\"other\\\":[[\\\"filteredItemCount\\\"],\\\" of \\\",[\\\"totalItemCount\\\"],\\\" items\\\"]}]],\\\"DDRhQm\\\":[\\\"Your session has expired.\\\"],\\\"DHrCY6\\\":[\\\"Common name\\\"],\\\"DIZzgv\\\":[\\\"Failed to load versions\\\"],\\\"DJT9tB\\\":[\\\"Account quotas\\\"],\\\"DKkOPx\\\":[\\\"Extra Specs\\\"],\\\"DNVql8\\\":[\\\"Full lifecycle management of Floating IPs, including attachment, port association/disassociation, DNS settings, and deletion\\\"],\\\"DWBWmW\\\":[[\\\"totalCount\\\",\\\"plural\\\",{\\\"one\\\":[\\\"Empty Bucket\\\"],\\\"other\\\":[\\\"Empty Buckets\\\"]}]],\\\"DcMIiu\\\":[\\\"Could not update ACLs for container \\\\\\\"\\\",[\\\"containerName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"Df0YHr\\\":[\\\"Update Security Group\\\"],\\\"Dh1qvV\\\":[\\\"You are about to delete \\\",[\\\"deletableCount\\\"],\\\" image(s). This action cannot be undone.\\\"],\\\"Dia2Ue\\\":[\\\"There are no RBAC policies for this security group\\\"],\\\"Do5/uH\\\":[\\\"The flavor or tenant could not be found. It may have already been removed.\\\"],\\\"Dqnh7K\\\":[\\\"Specific referrer: \\\",[\\\"host\\\"]],\\\"Dt5W9T\\\":[\\\"Remove RBAC Policy\\\"],\\\"DvB4XF\\\":[\\\"Drop your file here\\\"],\\\"E/QGRL\\\":[\\\"Disabled\\\"],\\\"E4QYe7\\\":[\\\"Suggested Images\\\"],\\\"E6nRW7\\\":[\\\"Copy URL\\\"],\\\"E7kdtm\\\":[\\\"Choose Certificate to Import\\\"],\\\"EF2EU9\\\":[\\\"Deleting...\\\"],\\\"EPMHs9\\\":[\\\"You don't have permission to delete flavors in this project.\\\"],\\\"EQnVgi\\\":[\\\"Flavor service is not available for this project.\\\"],\\\"EaVQC6\\\":[\\\"How Restore Works\\\"],\\\"EdQY6l\\\":[\\\"None\\\"],\\\"Ef7StM\\\":[\\\"Unknown\\\"],\\\"Enpdmy\\\":[\\\"Type <0>remove</0> to confirm:\\\"],\\\"EoKe5U\\\":[\\\"Domain\\\"],\\\"Eq5PsT\\\":[\\\"Type \\\\\\\"detach\\\\\\\" to confirm\\\"],\\\"EqSPkP\\\":[\\\"Loading Flavors...\\\"],\\\"Erlvqg\\\":[\\\"Object name cannot have leading or trailing whitespace\\\"],\\\"ExLULX\\\":[\\\"Image Name\\\"],\\\"EztMB8\\\":[\\\"Failed to fetch flavors from server.\\\"],\\\"F02e8I\\\":[\\\"No custom metadata. Click \\\\\\\"Add Property\\\\\\\" to create one.\\\"],\\\"F6YIQe\\\":[\\\"Efficient bulk deletion\\\"],\\\"FAA/qW\\\":[\\\"Paste the code\\\"],\\\"FJO48W\\\":[\\\"Create S3 Credentials\\\"],\\\"FKL6Jv\\\":[\\\"e.g. .r:*,.rlistings\\\"],\\\"FNcMGM\\\":[\\\"Creation Date\\\"],\\\"FOcBn3\\\":[\\\"Detach\\\"],\\\"FQBaXG\\\":[\\\"Activate\\\"],\\\"FRtmJJ\\\":[\\\"Storage container not found\\\"],\\\"FSbpS7\\\":[\\\"CPU\\\"],\\\"FgWsFY\\\":[\\\"Object <0>\\\\\\\"\\\",[\\\"displayName\\\"],\\\"\\\\\\\"</0> will be permanently deleted. This cannot be undone.\\\"],\\\"FjONW3\\\":[\\\"Error Loading Flavor\\\"],\\\"FjPnAE\\\":[\\\"Error loading security group\\\"],\\\"Flugry\\\":[[\\\"progressPct\\\"],\\\"%\\\"],\\\"FrLdVI\\\":[\\\"Bucket to empty:\\\"],\\\"FwSyEp\\\":[\\\"The specified project does not exist or you don't have permission to share with it.\\\"],\\\"Fzrzfe\\\":[\\\"Folder name is required\\\"],\\\"G3pRO8\\\":[\\\"An object with this name already exists at the destination and will be overwritten.\\\"],\\\"G6AP+o\\\":[\\\"Shared:\\\"],\\\"GDx4dP\\\":[\\\"Manage your Certificate\\\"],\\\"GEgjm+\\\":[\\\"Loading Objects...\\\"],\\\"GPuCEo\\\":[\\\"Leave empty for all types\\\"],\\\"GSIPwA\\\":[\\\"Temporary URL\\\"],\\\"GbKqnI\\\":[\\\"Activated \\\",[\\\"successCount\\\"],\\\" image(s), but \\\",[\\\"failedCount\\\"],\\\" image(s) could not be activated.\\\"],\\\"Gfx1qQ\\\":[\\\"Unable to Load Content\\\"],\\\"Ghp863\\\":[\\\"Type \\\\\\\"empty\\\\\\\" to confirm\\\"],\\\"GxkJXS\\\":[\\\"Uploading...\\\"],\\\"Gyd3No\\\":[\\\"No specific tenant access configured for this private flavor. Click \\\\\\\"Add Tenant Access\\\\\\\" to grant access.\\\"],\\\"H+a5j6\\\":[\\\"Release\\\"],\\\"H4Qwmp\\\":[\\\"No objects match your search. Try adjusting your search term.\\\"],\\\"H7u085\\\":[\\\"No projects have access to this image yet. Click \\\\\\\"Add Project Access\\\\\\\" to grant access.\\\"],\\\"HAcOOW\\\":[\\\"Your credentials are valid but you don't have permission to perform this operation. Please contact your administrator to grant you the necessary permissions.\\\"],\\\"HAkrpK\\\":[\\\"At Aurora, our mission is to provide a centralized platform that unifies cloud management. We aim to simplify the complexities of provisioning, configuring, and scaling resources across diverse cloud environments while enabling seamless growth for your business.\\\"],\\\"HBpi4q\\\":[\\\"Loading Images...\\\"],\\\"HG0uMz\\\":[\\\"Back to Certificate Authorities\\\"],\\\"HM56Bx\\\":[\\\"Creating...\\\"],\\\"HNlEFZ\\\":[\\\"delete\\\"],\\\"HQH8HM\\\":[\\\"Could not update \\\\\\\"\\\",[\\\"objectName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"HVdrr1\\\":[\\\"ANY referrer\\\"],\\\"HiDAFk\\\":[\\\"Create Bucket\\\"],\\\"Hivb/4\\\":[\\\"Server is experiencing issues. Please try again later.\\\"],\\\"Hiw1Ha\\\":[\\\"No containers found\\\"],\\\"HlwgQN\\\":[\\\"Object \\\\\\\"\\\",[\\\"objectName\\\"],\\\"\\\\\\\" was permanently deleted.\\\"],\\\"HuA8iQ\\\":[\\\"Allocating Floating IP...\\\"],\\\"HxTYrE\\\":[\\\"The flavor could not be found. It may have been deleted.\\\"],\\\"HyyJ83\\\":[\\\"Access Type\\\"],\\\"I5kZVK\\\":[\\\"Remote Source\\\"],\\\"INUP6f\\\":[\\\"<0>Effortless Resource Provisioning:</0> Quickly provision, configure, and deploy resources like servers, networks, and volumes with just a few clicks.\\\"],\\\"IOkHLC\\\":[\\\"Failed to copy object: \\\",[\\\"errorMessage\\\"]],\\\"IQSLN+\\\":[\\\"Error loading Certificate Authority\\\"],\\\"IQldU4\\\":[\\\"Bucket name must contain only lowercase letters, numbers, periods, and hyphens\\\"],\\\"IUwGEM\\\":[\\\"Save Changes\\\"],\\\"IWF68U\\\":[\\\"Storage Overview\\\"],\\\"IZ6Mh2\\\":[\\\"Enter your domain\\\"],\\\"IbYr/u\\\":[\\\"Content type\\\"],\\\"Io2Dvq\\\":[\\\"Certificate Authority not found\\\"],\\\"Ioblgz\\\":[\\\"This action is permanent. All objects in the container will be deleted and this cannot be undone.\\\"],\\\"Iuyw9j\\\":[\\\"This is a delete marker. Deleting it will \\\\\\\"undelete\\\\\\\" the object and restore the previous version as the current version.\\\"],\\\"IwlPLb\\\":[\\\"Delete Bucket\\\"],\\\"IxsRaQ\\\":[\\\"Enable Versioning\\\"],\\\"J4DKSM\\\":[\\\"Container format is required\\\"],\\\"J6EOll\\\":[\\\"Move/Rename object:\\\"],\\\"J7+bZb\\\":[\\\"Folder Deleted\\\"],\\\"J9QcnV\\\":[\\\"Successfully activated \\\",[\\\"successCount\\\"],\\\" of \\\",[\\\"totalCount\\\"],\\\" image(s)\\\"],\\\"J9cmxx\\\":[\\\"Failed to update visibility to \\\",[\\\"newVisibility\\\"]],\\\"JB0bhm\\\":[\\\"Get Involved\\\"],\\\"JN3Lu1\\\":[\\\"This creates a new latest version with the content from the selected version. All existing versions (including the current latest) are preserved.\\\"],\\\"JNGYAW\\\":[\\\"Container name is required\\\"],\\\"JPWqr2\\\":[\\\"Bucket \\\\\\\"\\\",[\\\"bucketName\\\"],\\\"\\\\\\\" was successfully emptied. \\\",[\\\"deletedCount\\\"],\\\" objects deleted.\\\"],\\\"JT+lLV\\\":[\\\"Delete Object\\\"],\\\"JT3I1g\\\":[\\\"Delete Flavor\\\"],\\\"JeRXll\\\":[\\\"This key is reserved and managed separately\\\"],\\\"JfWCsP\\\":[\\\"Partial Deactivation Success\\\"],\\\"Jh4rAZ\\\":[\\\"Error loading image\\\"],\\\"Jim5X9\\\":[\\\"Stateful\\\"],\\\"JoECY1\\\":[\\\"The extra spec data provided is invalid. Please check your input.\\\"],\\\"JpZn1L\\\":[\\\"Already deactivated (will be skipped)\\\"],\\\"JrmKyf\\\":[\\\"Failed: \\\",[\\\"errorDetails\\\"]],\\\"JtHgVz\\\":[\\\"Delete Images\\\"],\\\"JuOpPY\\\":[\\\"All objects in the selected containers will be permanently deleted. This cannot be undone.\\\"],\\\"K+e/0e\\\":[\\\"RAM (MiB)\\\"],\\\"K3bUTE\\\":[\\\"Minimum disk must be 0 or greater\\\"],\\\"K8Qnlj\\\":[\\\"Moving...\\\"],\\\"K9eC8x\\\":[\\\"This could be due to insufficient permissions or a temporary service issue. Please check your access rights or try refreshing the page.\\\"],\\\"KDw4GX\\\":[\\\"Try again\\\"],\\\"KJC+M7\\\":[\\\"Server error occurred while fetching flavor details. Please try again later.\\\"],\\\"KOpPMt\\\":[\\\"Total size quota\\\"],\\\"KSW/GC\\\":[\\\"There are no flavors available for this project with the current filters applied. Try adjusting your filter criteria or create a new flavor.\\\"],\\\"KhNDX4\\\":[\\\"Object Storage (Ceph)\\\"],\\\"Kl2hZ+\\\":[\\\"Delete Version\\\"],\\\"Km4AGG\\\":[\\\"Creating security group...\\\"],\\\"KoQP4F\\\":[\\\"Server error occurred while adding tenant access. Please try again later.\\\"],\\\"KsIM0b\\\":[\\\"Boot RAM\\\"],\\\"KsnZ3m\\\":[\\\"Folder \\\\\\\"\\\",[\\\"folderName\\\"],\\\"\\\\\\\" was successfully created.\\\"],\\\"KzUd7m\\\":[\\\"new-folder-name\\\"],\\\"LASqRM\\\":[\\\"Object \\\\\\\"\\\",[\\\"displayName\\\"],\\\"\\\\\\\" was permanently deleted.\\\"],\\\"LI70tz\\\":[\\\"Error loading Certificate\\\"],\\\"LI8Z2I\\\":[\\\"Download \\\",[\\\"rowDisplayName\\\"]],\\\"LK0pQN\\\":[\\\"Disk format is required\\\"],\\\"LMdsuJ\\\":[\\\"Port (from)\\\"],\\\"LQQCas\\\":[\\\"Folder \\\\\\\"\\\",[\\\"folderName\\\"],\\\"\\\\\\\" and \\\",[\\\"deletedCount\\\"],\\\" object was permanently deleted.\\\"],\\\"La2LYh\\\":[\\\"\\\\\\\"\\\",[\\\"displayName\\\"],\\\"\\\\\\\" was successfully copied to \\\",[\\\"destination\\\"],\\\" (existing object was replaced).\\\"],\\\"Llcakz\\\":[\\\"Updated At\\\"],\\\"LqMb+g\\\":[\\\"To confirm this action, type the word <0>\\\\\\\"release\\\\\\\"</0> in the field below.\\\"],\\\"LtI9AS\\\":[\\\"Owner\\\"],\\\"Lylr9Z\\\":[\\\"Object Copied\\\"],\\\"M3bysB\\\":[\\\"Bucket Created\\\"],\\\"M470oJ\\\":[\\\"The flavor could not be found or has no extra specs.\\\"],\\\"M5Epeo\\\":[\\\"Edit Image Details\\\"],\\\"M5RhXF\\\":[\\\"Removing...\\\"],\\\"M5rEN5\\\":[\\\"Session Expired\\\"],\\\"M8er/5\\\":[\\\"Name:\\\"],\\\"M9H+/G\\\":[\\\"projects\\\"],\\\"MEIAzV\\\":[\\\"Unnamed\\\"],\\\"MI6aae\\\":[\\\"This action will create a self-signed CA certificate.\\\"],\\\"MILoeL\\\":[\\\"Services\\\"],\\\"MJLqeY\\\":[\\\"Failed to check bucket contents: \\\",[\\\"errorMessage\\\"]],\\\"MJtNLd\\\":[\\\"Images to delete:\\\"],\\\"MOug+V\\\":[\\\"Enter a tag and press Enter or click Add\\\"],\\\"MRB7nI\\\":[\\\"Direction\\\"],\\\"MXoA/6\\\":[\\\"Upload Object\\\"],\\\"MXw7Fr\\\":[\\\"Server Name\\\"],\\\"MZGbkp\\\":[\\\"VCPUs\\\"],\\\"MbKJNP\\\":[\\\"You don't have permission to access flavor access information for this flavor.\\\"],\\\"MgZyuJ\\\":[\\\"You are about to activate <0>\\\",[\\\"deactivatedCount\\\"],\\\" image(s)</0>. Activated images will be available for launching new instances.\\\"],\\\"Mj5iQ0\\\":[\\\"YYYY-MM-DD HH:mm:ss\\\"],\\\"MmtQVF\\\":[\\\"Invalid value for public flavor setting.\\\"],\\\"Mt6sRo\\\":[\\\"You are not authorized to access flavor access information. Please log in again.\\\"],\\\"MtzSbv\\\":[\\\"Object name is required\\\"],\\\"N2S1rs\\\":[\\\"Empty\\\"],\\\"N5I2RJ\\\":[\\\"Type \\\\\\\"release\\\\\\\" to confirm\\\"],\\\"N5vGcw\\\":[\\\"Enter your credentials to access your account\\\"],\\\"NH2fsP\\\":[\\\"Already deactivated (will be skipped):\\\"],\\\"NM0jNN\\\":[\\\"Showing all versions of this object. The latest version is highlighted. Delete markers indicate when the object was deleted.\\\"],\\\"NNpgo3\\\":[\\\"Bucket name\\\"],\\\"NOdFZR\\\":[\\\"Generating...\\\"],\\\"NQU1Nn\\\":[\\\"Copy container name\\\"],\\\"NRMm0E\\\":[\\\"This tenant already has access to the flavor.\\\"],\\\"NRP2uq\\\":[\\\"Share object:\\\"],\\\"NRVSdy\\\":[\\\"Member ID\\\"],\\\"NW1XEL\\\":[\\\"Emptying bucket \\\",[\\\"progressCurrent\\\"],\\\" of \\\",[\\\"progressTotal\\\"],\\\", please wait...\\\"],\\\"NW4PIb\\\":[\\\"Could not create folder \\\\\\\"\\\",[\\\"folderName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"NZJhro\\\":[\\\"Object name cannot contain slashes\\\"],\\\"NZpF16\\\":[\\\"Confirm deletion of \\\",[\\\"displayName\\\"],\\\". This action cannot be undone and object will be permanently deleted.\\\"],\\\"Nc7QKU\\\":[\\\"Fixed IP Address\\\"],\\\"NeUjqc\\\":[\\\"Enable file listing\\\"],\\\"Ni6RvO\\\":[\\\"Versioning Suspended\\\"],\\\"NixRmA\\\":[\\\"Min Disk (GB)\\\"],\\\"NlcF/v\\\":[\\\"No flavor selected for deletion.\\\"],\\\"No++00\\\":[\\\"Bucket to delete:\\\"],\\\"NopYGU\\\":[\\\"Disk Format\\\"],\\\"Np28ib\\\":[\\\"or drag and drop\\\"],\\\"Nu4oKW\\\":[\\\"Description\\\"],\\\"Nvfd2b\\\":[\\\"Versioning is enabled\\\"],\\\"O80bQY\\\":[\\\"Loading object properties...\\\"],\\\"O8tK4v\\\":[\\\"Add rule\\\"],\\\"ONWvwQ\\\":[\\\"Upload\\\"],\\\"OR475H\\\":[\\\"Network\\\"],\\\"OSlLnz\\\":[\\\"Image Visibility\\\"],\\\"OYHzN1\\\":[\\\"Tags\\\"],\\\"OZImTR\\\":[\\\"Container listing limit\\\"],\\\"OaSktR\\\":[\\\"Device Owner\\\"],\\\"Oc8Aqv\\\":[\\\"Preview and Edit metadata\\\"],\\\"OlmKCg\\\":[\\\"A flavor with this ID or name already exists. Please use different values.\\\"],\\\"OvEjsP\\\":[\\\"Copying...\\\"],\\\"Ovofy+\\\":[\\\"Release Floating IP \\\",[\\\"floating_ip_address\\\"]],\\\"OxDN2m\\\":[\\\"Failed to create flavor. Please try again.\\\"],\\\"OxaeYj\\\":[\\\"We are building Aurora Dashboard to serve you better. Your feedback is invaluable in shaping a tool that meets the unique needs of businesses like yours. Stay connected and join us as we redefine cloud management.\\\"],\\\"Oxl1UN\\\":[\\\"If there is no index file, the URL displays a list of objects in the container.\\\"],\\\"P2tWBZ\\\":[[\\\"selectedCount\\\",\\\"plural\\\",{\\\"one\\\":[\\\"Empty Bucket\\\"],\\\"other\\\":[\\\"Empty Buckets\\\"]}]],\\\"PAKSdy\\\":[\\\"Enter a floating IP or leave blank to auto-assign one\\\"],\\\"PEGvy+\\\":[\\\"Minimum RAM must be 0 or greater\\\"],\\\"PHsq3v\\\":[\\\"Before proceeding, ensure that the Project ID and User ID you enter are correct. The system cannot validate these values, and incorrect IDs may apply access to wrong projects and users.\\\"],\\\"PHt+EV\\\":[\\\"Type <0>delete</0> to confirm:\\\"],\\\"PIbPRX\\\":[\\\"RX/TX Factor must be an integer ≥ 1.\\\"],\\\"PLwzWR\\\":[\\\"All containers\\\"],\\\"PYQUjU\\\":[\\\"Failed to load metadata configuration.\\\"],\\\"PZnUbs\\\":[\\\"Please log in again to continue.\\\"],\\\"PgNNGl\\\":[\\\"More Actions\\\"],\\\"PiH3UR\\\":[\\\"Copied!\\\"],\\\"PiyQJ/\\\":[\\\"No flavors found\\\"],\\\"PkfPsB\\\":[\\\"Enter the ID of the project you want to share this security group with. You can find project IDs in the account/project switcher or in the Identity service.\\\"],\\\"Pkw7J9\\\":[\\\"This folder is empty.\\\"],\\\"PsEGri\\\":[\\\"Ubuntu 22.04 LTS\\\"],\\\"PtjzS+\\\":[\\\"Associates on the selected port. If the port has multiple IPs, select the desired fixed IP address.\\\"],\\\"PzgYM9\\\":[\\\"Checksum\\\"],\\\"Q1W//7\\\":[\\\"No services available for this project.\\\"],\\\"Q2xmVl\\\":[\\\"Symlinks\\\"],\\\"Q9f2QF\\\":[[\\\"numberDeleted\\\"],\\\" objects were deleted successfully, but some deletions failed.\\\"],\\\"QAUa4B\\\":[\\\"Enter a single port, or define a range by also filling \\\\\\\"Port (to)\\\\\\\". \\\\\\\"Port (to)\\\\\\\" is optional.\\\"],\\\"QEtDlS\\\":[\\\"Copying object...\\\"],\\\"QNHur0\\\":[\\\"Failed to load container ACLs: \\\",[\\\"errorMessage\\\"]],\\\"QQ8wUG\\\":[\\\"This action cannot be undone. The flavor will be permanently deleted.\\\"],\\\"QRlXaL\\\":[\\\"Bucket name must not end with reserved suffix \\\\\\\"\\\",[\\\"suffix\\\"],\\\"\\\\\\\"\\\"],\\\"QV1ZPO\\\":[\\\"Key is required\\\"],\\\"QWdKwH\\\":[\\\"Move\\\"],\\\"QYiqYb\\\":[\\\"Failed to update access status\\\"],\\\"Qb+14I\\\":[\\\"This action cannot be undone. The security group will be permanently deleted.\\\"],\\\"QdGvPV\\\":[\\\"Size:\\\"],\\\"QetsXP\\\":[\\\"Upload failed: \\\",[\\\"uploadError\\\"]],\\\"Qg4EG6\\\":[\\\"Unable to connect to the compute service. Please check your connection and try again.\\\"],\\\"QpbWpf\\\":[\\\"Bucket \\\\\\\"\\\",[\\\"bucketName\\\"],\\\"\\\\\\\" was successfully emptied. \\\",[\\\"deletedCount\\\"],\\\" object deleted.\\\"],\\\"QuJSSl\\\":[\\\"Failed to create the flavor. Please try again.\\\"],\\\"QvqBQa\\\":[\\\"Target container\\\"],\\\"Qx7DM7\\\":[\\\"Capabilities\\\"],\\\"QxBGbh\\\":[\\\"Protected (will be skipped):\\\"],\\\"QytzQr\\\":[\\\"Type \\\\\\\"delete\\\\\\\" to confirm\\\"],\\\"R6kcsL\\\":[\\\"Must be a valid PQDN or FQDN (alphanumeric and hyphens only, cannot start or end with hyphen).\\\"],\\\"R6u5CR\\\":[\\\"Failed to activate \\\",[\\\"failedCount\\\"],\\\" of \\\",[\\\"totalCount\\\"],\\\" image(s). Some images may already be active or in an invalid state.\\\"],\\\"RByeNR\\\":[\\\"Your session expired. Please login again.\\\"],\\\"RCr0yv\\\":[\\\"Failed to load flavor details. Please try again.\\\"],\\\"RFDYCD\\\":[\\\"Minimum disk size required to boot this image\\\"],\\\"RGhYAo\\\":[\\\"RAM\\\"],\\\"RGrgxg\\\":[\\\"Could not delete container \\\\\\\"\\\",[\\\"containerName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"RGwfoL\\\":[\\\"Max meta count\\\"],\\\"RNBvdl\\\":[\\\"Max SLO segments\\\"],\\\"RS0o7b\\\":[\\\"State\\\"],\\\"RSFkXF\\\":[\\\"Activate Image\\\"],\\\"RSMPjT\\\":[\\\"You are currently on the dashboard route.\\\"],\\\"RSg/pq\\\":[\\\"Failed to Delete Object\\\"],\\\"RTQFAw\\\":[\\\"You are not authorized to create extra specs. Please log in again.\\\"],\\\"RWQ6BN\\\":[\\\"Enter Common name (e.g., demo-ca.test.sci)\\\"],\\\"Rih53k\\\":[\\\"Max container name length\\\"],\\\"Rlp5zj\\\":[\\\"Create Flavor\\\"],\\\"RrEEdP\\\":[\\\"Benefits:\\\"],\\\"S0kLOH\\\":[\\\"ID\\\"],\\\"S1iTXO\\\":[\\\"Image instance \\\\\\\"\\\",[\\\"imageName\\\"],\\\"\\\\\\\" has been deleted\\\"],\\\"S3olSf\\\":[\\\"No extra specs found. Click \\\\\\\"Add Metadata\\\\\\\" to create one.\\\"],\\\"S5CUKP\\\":[\\\"Member ID (project UUID) is required.\\\"],\\\"S63NbU\\\":[\\\"The image \\\\\\\"\\\",[\\\"imageId\\\"],\\\"\\\\\\\" could not be deactivated: \\\",[\\\"message\\\"]],\\\"S8/j2h\\\":[\\\"Failed to Empty Container\\\"],\\\"SBGiGm\\\":[\\\"Read ACLs\\\"],\\\"SCY5an\\\":[\\\"Failed to Move Object\\\"],\\\"SFo0kK\\\":[\\\"All Images\\\"],\\\"SIfYq6\\\":[\\\"Edit Metadata\\\"],\\\"SLEH7X\\\":[\\\"Enter DNS name\\\"],\\\"STc+7E\\\":[\\\"Max containers per extraction\\\"],\\\"SU0uxT\\\":[\\\"Upload object to:\\\"],\\\"SUSS9i\\\":[\\\"Container name\\\"],\\\"SVLToM\\\":[\\\"Type \\\\\\\"remove\\\\\\\" to confirm\\\"],\\\"SZw9tS\\\":[\\\"View Details\\\"],\\\"Sb/VT5\\\":[\\\"Container \\\\\\\"\\\",[\\\"containerName\\\"],\\\"\\\\\\\" was successfully emptied. \\\",[\\\"deletedCount\\\"],\\\" objects deleted.\\\"],\\\"Sf3Gvg\\\":[\\\"Failed to load PCAs\\\"],\\\"SfW/3r\\\":[\\\"There are no groups\\\"],\\\"Sgz1vJ\\\":[\\\"Member \\\\\\\"\\\",[\\\"trimmedMemberId\\\"],\\\"\\\\\\\" has been added successfully.\\\"],\\\"Smk7M2\\\":[\\\"Error loading floating IP\\\"],\\\"SuX2Ca\\\":[\\\"Basic Info\\\"],\\\"T/UxKm\\\":[\\\"<0>Edit metadata:</0> <1>\\\",[\\\"displayName\\\"],\\\"</1>\\\"],\\\"T6Gm5y\\\":[\\\"Select an external network\\\"],\\\"T7mgdd\\\":[\\\"Successfully deleted \\\",[\\\"successCount\\\"],\\\" of \\\",[\\\"totalCount\\\"],\\\" image(s)\\\"],\\\"T8N6oi\\\":[\\\"Property Key\\\"],\\\"T9Mtpi\\\":[\\\"Tenant ID\\\"],\\\"T9o/az\\\":[\\\"Loading Certificates issued by Certificate Authority...\\\"],\\\"TM93nK\\\":[\\\"Delete Security Group Rule\\\"],\\\"TPMaxo\\\":[\\\"Type “release” to confirm\\\"],\\\"TQn3hH\\\":[\\\"Failed to create image. Please try again.\\\"],\\\"TSclU4\\\":[\\\"property-key\\\"],\\\"TTX3nV\\\":[\\\"Could not move \\\\\\\"\\\",[\\\"displayName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"TVsqbi\\\":[\\\"Object metadata will be automatically copied during the move operation.\\\"],\\\"TZJiVf\\\":[\\\"Container \\\\\\\"\\\",[\\\"containerName\\\"],\\\"\\\\\\\" was successfully emptied. \\\",[\\\"deletedCount\\\"],\\\" object deleted.\\\"],\\\"TfC9O+\\\":[\\\"Last modified (UTC)\\\"],\\\"TfdeUd\\\":[\\\"Failed to delete the extra spec. Please try again.\\\"],\\\"TipzDp\\\":[\\\"Search containers...\\\"],\\\"TpGxnq\\\":[\\\"Enter member ID\\\"],\\\"Tx4Ym+\\\":[\\\"Enter a valid PQDN or FQDN (max 63 characters) to associate with the floating IP. A and PTR records are created automatically.\\\"],\\\"TyODHt\\\":[\\\"Save Metadata\\\"],\\\"U/oahm\\\":[\\\"URL Copied\\\"],\\\"U0sPCo\\\":[\\\"Search flavors...\\\"],\\\"U2wTy/\\\":[\\\"Note: The 'stateful' attribute cannot be changed if this security group is currently in use by one or more ports.\\\"],\\\"U4fmHG\\\":[\\\"The text must match “detach” in lowercase.\\\"],\\\"U6L+P/\\\":[\\\"Inactivity Timeout\\\"],\\\"U9q4M7\\\":[\\\"Back to Security Groups\\\"],\\\"UB+Q8v\\\":[\\\"Loading Certificate Details...\\\"],\\\"UBv8UK\\\":[\\\"Delete Permanently\\\"],\\\"UGhVPl\\\":[\\\"Object Type\\\"],\\\"UJmAAK\\\":[\\\"Subject\\\"],\\\"UK2mpr\\\":[\\\"Generating temporary URL...\\\"],\\\"UKwOYH\\\":[\\\"Image File\\\"],\\\"UO3hJ2\\\":[\\\"Temporary URLs\\\"],\\\"UQ7Wyv\\\":[\\\"Manage Access for Image - \\\",[\\\"imageName\\\"]],\\\"URmyfc\\\":[\\\"Details\\\"],\\\"USiuNX\\\":[\\\"Container quotas\\\"],\\\"UVFHGY\\\":[\\\"e.g. PROJECT_ID:USER_ID\\\"],\\\"UYSopm\\\":[\\\"Minimum RAM (MB)\\\"],\\\"UaP7Th\\\":[\\\"Failed to Create Bucket\\\"],\\\"UbRKMZ\\\":[\\\"Pending\\\"],\\\"UbWeJA\\\":[\\\"Duration/validity\\\"],\\\"UdcGJu\\\":[\\\"Activate Images\\\"],\\\"Uj+n/2\\\":[\\\"Failed to Delete Folder\\\"],\\\"UkVkoq\\\":[\\\"Leave empty for all codes\\\"],\\\"UmQ3/m\\\":[\\\"Deactivate Selected\\\"],\\\"Uwo8Xw\\\":[\\\"This image was shared with you by <0>\\\",[\\\"ownerProject\\\"],\\\"</0> on \\\",[\\\"sharedAt\\\"],\\\".\\\"],\\\"Ux/pNd\\\":[[\\\"totalCount\\\",\\\"plural\\\",{\\\"one\\\":[[\\\"totalCount\\\"],\\\" bucket\\\"],\\\"other\\\":[[\\\"totalCount\\\"],\\\" buckets\\\"]}]],\\\"UztfYZ\\\":[\\\"Select port to associate\\\"],\\\"V/8B9A\\\":[\\\"I confirm that all existing versions will also be deleted\\\"],\\\"V/SINY\\\":[\\\"Update object\\\"],\\\"V1TzeS\\\":[\\\"Container \\\\\\\"\\\",[\\\"containerName\\\"],\\\"\\\\\\\" was successfully deleted.\\\"],\\\"V66Jih\\\":[\\\"Access Status\\\"],\\\"V7fN5X\\\":[\\\"Copy object:\\\"],\\\"V8/eES\\\":[\\\"Bucket name must not contain consecutive periods\\\"],\\\"V804LY\\\":[\\\"Updating security group...\\\"],\\\"VCM3KS\\\":[\\\"Add Project Access\\\"],\\\"VG2a+x\\\":[\\\"Bucket name must start and end with a letter or number\\\"],\\\"VKCkZH\\\":[\\\"Bucket \\\\\\\"\\\",[\\\"bucketName\\\"],\\\"\\\\\\\" was successfully created.\\\"],\\\"VKmlZ+\\\":[\\\"Containers to be emptied (\\\",[\\\"totalCount\\\"],\\\")\\\"],\\\"VLI9eO\\\":[\\\"Loading Floating IP Details...\\\"],\\\"VMh1t1\\\":[\\\"The text must match “delete” in lowercase.\\\"],\\\"VTfZPy\\\":[\\\"Access Denied\\\"],\\\"VV1fdg\\\":[\\\"Any user has read access to objects. No token is required in the request.\\\"],\\\"VaA9mu\\\":[\\\"24 hours\\\"],\\\"VakxP/\\\":[\\\"Failed to Upload Object\\\"],\\\"VeDAv2\\\":[\\\"Search buckets...\\\"],\\\"Vg0k6h\\\":[\\\"Showing \\\",[\\\"filteredCount\\\"],\\\" of \\\",[\\\"totalCount\\\"],\\\" \\\",[\\\"itemName\\\"]],\\\"Vh/Uj5\\\":[\\\"Target path\\\"],\\\"Vj8XFg\\\":[\\\"Failed to Create Container\\\"],\\\"Vl4XTj\\\":[\\\"Folder name cannot contain slashes\\\"],\\\"Vmojta\\\":[\\\"Access status updated to \\\\\\\"\\\",[\\\"newStatus\\\"],\\\"\\\\\\\".\\\"],\\\"Vn3sWk\\\":[\\\"Version History: \\\",[\\\"objectKey\\\"]],\\\"VoxR3s\\\":[\\\"Object was copied but could not be deleted from the source: \\\",[\\\"deleteErrorMessage\\\"]],\\\"Vz+7ZA\\\":[\\\"Could not create container \\\\\\\"\\\",[\\\"containerName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"Vzlopx\\\":[\\\"Delete container:\\\"],\\\"W5A0Ly\\\":[\\\"An unexpected error occurred.\\\"],\\\"W5FkH9\\\":[\\\"Enter container name\\\"],\\\"W8Rb/w\\\":[\\\"Bucket name must not be formatted as an IP address\\\"],\\\"W9PZE0\\\":[\\\"Objects Deleted\\\"],\\\"W9kfjU\\\":[\\\"QoS Policy ID\\\"],\\\"WCKEqI\\\":[\\\"This is a <0>static large object (SLO)</0> manifest. Metadata changes apply to the manifest only — segment objects are not affected.\\\"],\\\"WCLyHI\\\":[\\\"No Floating IPs found\\\"],\\\"WErCZy\\\":[\\\"Minimum RAM required to boot this image\\\"],\\\"WIJz7N\\\":[\\\"Checking if object exists...\\\"],\\\"WIx31g\\\":[\\\"Create Certificate\\\"],\\\"WM+Nm7\\\":[\\\"Keep multiple versions of objects. Cannot be fully disabled once enabled, only suspended.\\\"],\\\"WRZ3Mt\\\":[\\\"Loading container properties...\\\"],\\\"WV/4x1\\\":[\\\"Loading buckets...\\\"],\\\"WYiUDa\\\":[\\\"Loading Containers...\\\"],\\\"Wbg1jv\\\":[\\\"Copy \\\",[\\\"text\\\"],\\\" to clipboard\\\"],\\\"Wca9WC\\\":[\\\"Failed to load security groups\\\"],\\\"WefafP\\\":[\\\"This container appears empty — the object count may not have synced yet due to a recent operation.\\\"],\\\"WidMsn\\\":[\\\"Create Certificate Authority\\\"],\\\"WlpcJv\\\":[\\\"DNS Domain\\\"],\\\"WoSkGY\\\":[\\\"Remote IP\\\"],\\\"WrUky8\\\":[\\\"Share (Temporary URL)\\\"],\\\"WyKwnD\\\":[\\\"Store old object versions\\\"],\\\"WzVwU0\\\":[\\\"Target Project ID\\\"],\\\"WzsMfv\\\":[\\\"Start typing to search for a bucket\\\"],\\\"X2OnDx\\\":[\\\"Ephemeral Disk (GiB)\\\"],\\\"X70LXS\\\":[[\\\"numberDeleted\\\"],\\\" objects were permanently deleted.\\\"],\\\"XK0Fqq\\\":[\\\"Maintain object history\\\"],\\\"XLk16/\\\":[\\\"Together, we can unlock the true potential of your cloud infrastructure.\\\"],\\\"XXRutf\\\":[\\\"Folder Name\\\"],\\\"XYZLy9\\\":[\\\"Key contains invalid characters\\\"],\\\"XvjC4F\\\":[\\\"Saving...\\\"],\\\"XwxJJB\\\":[\\\"Container \\\\\\\"\\\",[\\\"containerName\\\"],\\\"\\\\\\\" was successfully created.\\\"],\\\"XxjLdW\\\":[[\\\"emptiedCount\\\",\\\"plural\\\",{\\\"one\\\":[\\\"#\\\",\\\" container was already empty.\\\"],\\\"other\\\":[\\\"#\\\",\\\" containers were already empty.\\\"]}]],\\\"Y+2SDm\\\":[\\\"Delete Security Group \\\\\\\"\\\",[\\\"securityGroupName\\\"],\\\"\\\\\\\"\\\"],\\\"Y1YKad\\\":[\\\"Edit Details\\\"],\\\"Y8M9Uc\\\":[\\\"The container will be deleted. This action is permanent and cannot be undone.\\\"],\\\"YDG2mQ\\\":[\\\"Confirm deletion of \\\",[\\\"displayName\\\"],\\\". This action cannot be undone and folder will be permanently deleted.\\\"],\\\"YIix5Y\\\":[\\\"Search...\\\"],\\\"YNgcgc\\\":[\\\"Loading Flavor Details...\\\"],\\\"YRexkb\\\":[\\\"Object Updated\\\"],\\\"YUU0QW\\\":[\\\"Flavor ID is required and cannot be empty.\\\"],\\\"YVLcyI\\\":[\\\"Successfully emptied \\\",[\\\"emptiedCount\\\"],\\\" \\\",[\\\"emptiedCount\\\",\\\"plural\\\",{\\\"one\\\":[\\\"bucket\\\"],\\\"other\\\":[\\\"buckets\\\"]}],\\\", deleting \\\",[\\\"totalDeleted\\\"],\\\" \\\",[\\\"totalDeleted\\\",\\\"plural\\\",{\\\"one\\\":[\\\"object\\\"],\\\"other\\\":[\\\"objects\\\"]}],\\\".\\\"],\\\"YZmsaT\\\":[\\\"Partial Activation Success\\\"],\\\"YiMCKk\\\":[\\\"Show ACLs Preview\\\"],\\\"Yin3uB\\\":[\\\"Releasing Floating IP...\\\"],\\\"YjAOtb\\\":[\\\"Create Security Group\\\"],\\\"YrAy/S\\\":[\\\"You don't have permission to delete extra specs for this flavor.\\\"],\\\"YsOJlj\\\":[\\\"Server error occurred while fetching flavor access information. Please try again later.\\\"],\\\"YsrbQh\\\":[\\\"Owner Project ID\\\"],\\\"YuC9dj\\\":[\\\"Associate\\\"],\\\"YuGQWb\\\":[\\\"Rule Type\\\"],\\\"YzUoh9\\\":[\\\"To confirm type <0>delete</0> in the field below.\\\"],\\\"Z/eWPC\\\":[\\\"The object will be copied to this path. Navigate folders above to change the destination.\\\"],\\\"Z2fZGD\\\":[\\\"No project selected\\\"],\\\"Z30x/C\\\":[\\\"Current location:\\\"],\\\"Z3FXyt\\\":[\\\"Loading...\\\"],\\\"Z42tfY\\\":[\\\"Folders in object storage are virtual — they are created as zero-byte placeholder objects with a trailing slash. The folder will appear once created.\\\"],\\\"Z5r9vC\\\":[\\\"Partial Delete Success\\\"],\\\"Z8lGw6\\\":[\\\"Share\\\"],\\\"Z8poQH\\\":[\\\"This will delete the original object after copying it to the destination.\\\"],\\\"ZAx+d1\\\":[\\\"Max meta overall size\\\"],\\\"ZAy0zp\\\":[\\\"Successfully deactivated \\\",[\\\"successCount\\\"],\\\" of \\\",[\\\"totalCount\\\"],\\\" image(s)\\\"],\\\"ZKb0D4\\\":[\\\"Cannot move to the same location. Please select a different bucket, folder, or change the name.\\\"],\\\"ZUmOzn\\\":[\\\"Server returned unexpected data format for flavor details.\\\"],\\\"ZcWMT1\\\":[\\\"Image instance \\\\\\\"\\\",[\\\"imageName\\\"],\\\"\\\\\\\" has been deactivated\\\"],\\\"Zgp2Sm\\\":[\\\"No projects available.\\\"],\\\"ZhVSpK\\\":[\\\"Failed to remove tenant access from flavor. Please try again.\\\"],\\\"ZkxxiR\\\":[\\\"Unknown domain\\\"],\\\"Zq6Y5u\\\":[\\\"DNS name must be at most 63 characters.\\\"],\\\"Zshv0H\\\":[\\\"Buckets to empty:\\\"],\\\"ZvIpwi\\\":[\\\"Select a security group...\\\"],\\\"Zw49f9\\\":[\\\"folder-name\\\"],\\\"Zw8Q49\\\":[\\\"Security group not found\\\"],\\\"a/nTb8\\\":[\\\"Create Image\\\"],\\\"a12lSo\\\":[\\\"Port (to)\\\"],\\\"a13wDR\\\":[\\\"Type to search containers...\\\"],\\\"a3LDKx\\\":[\\\"Security\\\"],\\\"a4A2uB\\\":[\\\"Account listing limit\\\"],\\\"a4N/Bg\\\":[\\\"Load More\\\"],\\\"a7C4YS\\\":[\\\"Container Updated\\\"],\\\"aG9OiI\\\":[\\\"Sharing Details\\\"],\\\"aI8Tgp\\\":[\\\"Owning Project ID\\\"],\\\"aL1w5Z\\\":[\\\"Used\\\"],\\\"aSsVD3\\\":[\\\"Public read access is not enabled. Before configuring static website serving, go to <0>Manage Access</0> and enable public read access.\\\"],\\\"aTqCTq\\\":[\\\"Image file is required\\\"],\\\"aV6KPH\\\":[\\\"Prevent accidental deletion\\\"],\\\"aZGVW7\\\":[\\\"No versions found for this object.\\\"],\\\"an5hVd\\\":[\\\"Images\\\"],\\\"ao/ZJi\\\":[\\\"Deleting folder and all its contents...\\\"],\\\"aqagJH\\\":[\\\"Unable to Update Image Visibility\\\"],\\\"arel2K\\\":[\\\"No objects found\\\"],\\\"azXlY+\\\":[\\\"Access Status:\\\"],\\\"b0uU1G\\\":[\\\"Store old object versions in container:\\\"],\\\"b2BLBa\\\":[\\\"Add Security Group Rule\\\"],\\\"b5aNMO\\\":[\\\"The text must match \\\\\\\"delete\\\\\\\"\\\"],\\\"b95YH9\\\":[\\\"Bucket Emptied\\\"],\\\"bHUarC\\\":[\\\"Bucket Deleted\\\"],\\\"bISG26\\\":[\\\"Failed to fetch flavor access information. Please try again.\\\"],\\\"bM1O3m\\\":[\\\"Image Instance\\\"],\\\"bQBMTH\\\":[\\\"This is a <0>static large object</0>. By default, all associated segment objects will also be permanently deleted.\\\"],\\\"bRgFkJ\\\":[\\\"Failed to upload file \\\\\\\"\\\",[\\\"fileName\\\"],\\\"\\\\\\\": \\\"],\\\"bYRFNi\\\":[\\\"Failed to Delete Objects\\\"],\\\"bc67JN\\\":[\\\"Custom Properties / Metadata\\\"],\\\"bmQLn5\\\":[\\\"Add Rule\\\"],\\\"bnql/K\\\":[\\\"Back to Images\\\"],\\\"boJ+Y1\\\":[\\\"Create Folder\\\"],\\\"boJlGf\\\":[\\\"Page Not Found\\\"],\\\"boefwq\\\":[\\\"Could not create bucket \\\\\\\"\\\",[\\\"bucketName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"bpme7e\\\":[\\\"Flavor Not Found\\\"],\\\"bwRvnp\\\":[\\\"Action\\\"],\\\"bwhBhT\\\":[\\\"Security Group\\\"],\\\"byKna+\\\":[\\\"An unexpected error occurred. Please try again.\\\"],\\\"bzMKg7\\\":[\\\"Accepted\\\"],\\\"bzSI52\\\":[\\\"Discard\\\"],\\\"c+fUtV\\\":[\\\"Start typing to search for a container\\\"],\\\"c+xCSz\\\":[\\\"True\\\"],\\\"c1OE1x\\\":[\\\"CA ID\\\"],\\\"c1uL4p\\\":[\\\"The image \\\\\\\"\\\",[\\\"imageId\\\"],\\\"\\\\\\\" could not be deleted: \\\",[\\\"message\\\"]],\\\"c5i+X0\\\":[\\\"Loading Buckets...\\\"],\\\"c6b6fz\\\":[\\\"Delete Selected\\\"],\\\"cCfxH1\\\":[\\\"Downloading...\\\"],\\\"cJDQIO\\\":[\\\"Root Disk\\\"],\\\"cPKL6O\\\":[\\\"You don't have permission to create flavors in this project.\\\"],\\\"cUKFby\\\":[\\\"Lifecycle action\\\"],\\\"cWbW6w\\\":[\\\"Manage Access\\\"],\\\"cXuXkb\\\":[\\\"User \\\",[\\\"userId\\\"],\\\" from project \\\",[\\\"projectId\\\"]],\\\"chL5IG\\\":[\\\"Community\\\"],\\\"cj17eo\\\":[\\\"Image instance \\\\\\\"\\\",[\\\"imageName\\\"],\\\"\\\\\\\" has been activated\\\"],\\\"cjEOmc\\\":[\\\"Share this security group with another project. The target project will be able to view and use this security group, but will not be able to modify or delete it.\\\"],\\\"cnGeoo\\\":[\\\"Delete\\\"],\\\"cpw++p\\\":[\\\"Static large object support\\\"],\\\"cqQyPB\\\":[\\\"Folder name\\\"],\\\"ctc4XR\\\":[\\\"Delete certificate authority\\\"],\\\"d+F6q9\\\":[\\\"Created\\\"],\\\"d/I0J3\\\":[\\\"Activate Selected\\\"],\\\"d0pLfy\\\":[\\\"Failed to delete security group\\\"],\\\"dBrBc5\\\":[[\\\"selectedCount\\\",\\\"plural\\\",{\\\"one\\\":[\\\"Empty Container\\\"],\\\"other\\\":[\\\"Empty Containers\\\"]}]],\\\"dEHa3L\\\":[\\\"Type the bucket name to confirm\\\"],\\\"dEgA5A\\\":[\\\"Cancel\\\"],\\\"dFb5Nt\\\":[\\\"Id\\\"],\\\"dLFiER\\\":[\\\"Error Loading Containers: \\\",[\\\"errorMessage\\\"]],\\\"dOevLB\\\":[\\\"Expires in \\\",[\\\"selectedPresetLabel\\\"],\\\" — at \\\",[\\\"expiresAtFormatted\\\"]],\\\"dPj4yB\\\":[\\\"Login to Your Account\\\"],\\\"dPoCVe\\\":[\\\"Type “detach” to confirm\\\"],\\\"dTNzBI\\\":[\\\"Key must contain at least one alphanumeric character\\\"],\\\"dVdc7N\\\":[\\\"You are not authorized to delete extra specs. Please log in again.\\\"],\\\"dd2ndz\\\":[\\\"Entries in ACLs are comma-separated. Examples:\\\"],\\\"ddf7GN\\\":[\\\"Failed to load objects\\\"],\\\"diFNkW\\\":[\\\"Error loading component\\\"],\\\"dku8RF\\\":[\\\"Type <0>DELETE</0> to confirm:\\\"],\\\"dpGL2Q\\\":[\\\"Source:\\\"],\\\"dxMaZH\\\":[\\\"Manage your Private Certificate Authority infrastructure\\\"],\\\"e0NrBM\\\":[\\\"Project\\\"],\\\"e74tCo\\\":[[\\\"selectedCount\\\",\\\"plural\\\",{\\\"one\\\":[\\\"Delete Object\\\"],\\\"other\\\":[\\\"Delete Objects\\\"]}]],\\\"eChIh7\\\":[\\\"Flavor \\\\\\\"\\\",[\\\"flavorName\\\"],\\\"\\\\\\\" has been successfully created.\\\"],\\\"eGEHJE\\\":[\\\"DNS Name\\\"],\\\"eKC+EC\\\":[\\\"-\\\"],\\\"ePK91l\\\":[\\\"Edit\\\"],\\\"eYlnXt\\\":[\\\"No images found\\\"],\\\"eh/k36\\\":[\\\"Select a rule type...\\\"],\\\"ekCRTP\\\":[\\\"Rejected\\\"],\\\"eks7oA\\\":[\\\"Port ID\\\"],\\\"emkxJa\\\":[\\\"There are no buckets available with the current search criteria. Try adjusting your search term.\\\"],\\\"eu70nA\\\":[\\\"Expires at (UTC)\\\"],\\\"eyRsaH\\\":[\\\"Root\\\"],\\\"ezT9KW\\\":[\\\"Container syncing\\\"],\\\"f+Uq1E\\\":[\\\"New object name\\\"],\\\"f0cwjH\\\":[\\\"Object properties\\\"],\\\"fCPhho\\\":[\\\"One or more objects could not be deleted:\\\"],\\\"fFoXXe\\\":[\\\"Authentication Failed\\\"],\\\"fIvd7X\\\":[\\\"Failed to Delete Images\\\"],\\\"fJpv9x\\\":[\\\"Failed to Deactivate Images\\\"],\\\"ffw//c\\\":[\\\"PCA\\\"],\\\"fj5byd\\\":[\\\"N/A\\\"],\\\"fnCEAB\\\":[\\\"Type “delete” to confirm\\\"],\\\"fxnDd7\\\":[\\\"Failed to generate temporary URL: \\\",[\\\"generalError\\\"]],\\\"fzfAAa\\\":[\\\"Ingress\\\"],\\\"g+Jead\\\":[\\\"IPv6\\\"],\\\"g1IxCo\\\":[\\\"RAM must be an integer ≥ 128 MB.\\\"],\\\"g3BSCe\\\":[\\\"Swap Disk must be an integer ≥ 0.\\\"],\\\"g3UF2V\\\":[\\\"Accept\\\"],\\\"g8Yxlg\\\":[\\\"Temporary URL for \\\\\\\"\\\",[\\\"objectName\\\"],\\\"\\\\\\\" was copied to clipboard.\\\"],\\\"g9m7gK\\\":[\\\"ACL entries control who can read from or write to this container. Multiple entries are comma-separated. Changes take effect immediately after saving.\\\"],\\\"gFKJBP\\\":[\\\"Folder name cannot have leading or trailing whitespace\\\"],\\\"gFsjJK\\\":[[\\\"bucketCount\\\",\\\"plural\\\",{\\\"one\\\":[\\\"object\\\"],\\\"other\\\":[\\\"objects\\\"]}]],\\\"gGdfWx\\\":[\\\"The compute service is currently unavailable for this project. Please try again later.\\\"],\\\"gMYsdZ\\\":[\\\"Set to \\\\\\\"Shared\\\\\\\"\\\"],\\\"gU7JFm\\\":[\\\"Creating security group rule...\\\"],\\\"gYe+hC\\\":[\\\"Click to upload\\\"],\\\"gjop1H\\\":[\\\"Bucket name must be at least 3 characters\\\"],\\\"go0J2x\\\":[\\\"Failed to copy the temporary URL to the clipboard\\\"],\\\"go9U+C\\\":[\\\"To confirm, type <0>\\\\\\\"delete\\\\\\\"</0> in the field below.\\\"],\\\"gy6L1u\\\":[\\\"Must be a valid common name (FQDN).\\\"],\\\"gztCjq\\\":[\\\"The tenant ID provided is invalid. Please check your input.\\\"],\\\"h3P8z+\\\":[\\\"Failed to delete the flavor. Please try again.\\\"],\\\"h47p9L\\\":[\\\"—\\\"],\\\"h6JDtI\\\":[\\\"Paste CSR code\\\"],\\\"h8h6oz\\\":[\\\"Images Deactivated\\\"],\\\"h99+4y\\\":[\\\"Allocate Floating IP\\\"],\\\"hH3kDo\\\":[\\\"Loading Image Details...\\\"],\\\"hHL/wm\\\":[\\\"Image instance \\\\\\\"\\\",[\\\"imageName\\\"],\\\"\\\\\\\" has been updated\\\"],\\\"hLp49h\\\":[\\\"Type <0>\\\",[\\\"deleteWord\\\"],\\\"</0> to confirm:\\\"],\\\"hPz54a\\\":[\\\"Failed to Download\\\"],\\\"hQdfmR\\\":[\\\"Bucket \\\\\\\"\\\",[\\\"bucketName\\\"],\\\"\\\\\\\" was successfully deleted.\\\"],\\\"hQr1Cr\\\":[\\\"Deactivate Image\\\"],\\\"hXUWyd\\\":[\\\"Value is required\\\"],\\\"hYgDIe\\\":[\\\"Create\\\"],\\\"he3ygx\\\":[\\\"Copy\\\"],\\\"he4q+i\\\":[\\\"e.g., b90f9c4bc76140e18540b2cec1299e2a\\\"],\\\"hgpMHD\\\":[\\\"Total Size\\\"],\\\"hkjZ7P\\\":[\\\"Failed to update visibility for \\\\\\\"\\\",[\\\"imageName\\\"],\\\"\\\\\\\": \\\"],\\\"hrBow7\\\":[\\\"Network ID\\\"],\\\"huQgXa\\\":[\\\"Versioning allows you to keep multiple variants of an object in the same bucket. This protects against accidental overwrites and deletions.\\\"],\\\"hueclm\\\":[\\\"Folder <0>\\\\\\\"\\\",[\\\"folderDisplayName\\\"],\\\"\\\\\\\"</0> and all objects within it will be permanently deleted. This cannot be undone.\\\"],\\\"hz9da7\\\":[\\\"Failed to load Certificates issued by Certificate Authority.\\\"],\\\"i0qMbr\\\":[\\\"Home\\\"],\\\"i41Xuw\\\":[\\\"Select a fixed IP address\\\"],\\\"i5MEDc\\\":[\\\"Failed to move object: \\\",[\\\"copyErrorMessage\\\"]],\\\"i6/ygf\\\":[\\\"A property with this key already exists\\\"],\\\"i9TIyi\\\":[\\\"Remote Security Group\\\"],\\\"i9qiyR\\\":[\\\"Expires in\\\"],\\\"iH8pgl\\\":[\\\"Back\\\"],\\\"ifQSTI\\\":[\\\"Enable versioning\\\"],\\\"igVDFt\\\":[\\\"Attach\\\"],\\\"ih2lfP\\\":[\\\"No buckets found\\\"],\\\"iqUvrS\\\":[\\\"User C/D/I\\\"],\\\"is0Bhk\\\":[\\\"Bucket name must be 63 characters or fewer\\\"],\\\"izMhIO\\\":[\\\"User \\\",[\\\"userId\\\"],\\\" (any project)\\\"],\\\"j9hkgJ\\\":[\\\"rules\\\"],\\\"jBIkmi\\\":[\\\"QCOW2, Raw, VMDK, VHD, VHDX, VDI, AMI, ARI, AKI, ISO, PLOOP\\\"],\\\"jIPNJG\\\":[\\\"Basic Information\\\"],\\\"jK6wqe\\\":[\\\"Folder \\\\\\\"\\\",[\\\"folderName\\\"],\\\"\\\\\\\" and \\\",[\\\"deletedCount\\\"],\\\" objects were permanently deleted.\\\"],\\\"jKopCP\\\":[\\\"Network & Routing\\\"],\\\"jMc/mo\\\":[\\\"Server error occurred while creating extra specs. Please try again later.\\\"],\\\"jNm/qL\\\":[\\\"This container is already empty.\\\"],\\\"jNzyQo\\\":[\\\"Object versioning\\\"],\\\"jPxavx\\\":[\\\"Failed to update security group\\\"],\\\"jS4B2+\\\":[\\\"Container name does not match\\\"],\\\"jSG7wx\\\":[\\\"Please enter a valid number of minutes greater than 0\\\"],\\\"jVjr9h\\\":[\\\"Enter a valid common name in FQDN format (e.g., demo-ca.test.sci).\\\"],\\\"jhU93c\\\":[\\\"The image \\\\\\\"\\\",[\\\"imageName\\\"],\\\"\\\\\\\" could not be created: \\\"],\\\"js24f6\\\":[\\\"Delete folder:\\\"],\\\"jtnAf8\\\":[\\\"Protected images (cannot be deleted)\\\"],\\\"jyVMod\\\":[\\\"Restore Version\\\"],\\\"jyqLKs\\\":[\\\"This member already has access to this image.\\\"],\\\"k/zHK7\\\":[\\\"Creating Credentials...\\\"],\\\"k0vAWv\\\":[\\\"Object count quota\\\"],\\\"k5nYwm\\\":[\\\"vCPU\\\"],\\\"k7ENJG\\\":[\\\"Preview \\\",[\\\"rowDisplayName\\\"]],\\\"k99j0U\\\":[\\\"Cancel upload\\\"],\\\"kA2lMP\\\":[\\\"External Network\\\"],\\\"kGmM/p\\\":[\\\"You don't have permission to create extra specs for this flavor.\\\"],\\\"kIuDMT\\\":[\\\"Configure the ingress and egress rules that control which traffic is allowed for this security group.\\\"],\\\"kKK8AH\\\":[\\\"Remaining Quota:\\\"],\\\"kNeZrV\\\":[\\\"No Certificates issued by this Certificate Authority found\\\"],\\\"kQYfgO\\\":[\\\"One or more containers could not be emptied: \\\",[\\\"errorMessage\\\"]],\\\"kRiVnR\\\":[\\\"New uploads will overwrite the current version\\\"],\\\"kdcrma\\\":[\\\"Existing versions remain accessible\\\"],\\\"khxtMT\\\":[\\\"Issuing End Entity Certificate...\\\"],\\\"kiRrtv\\\":[\\\"<0>Please note:</0> for <1>dynamic</1> and <2>static large objects</2> only the manifests will be deleted. The related segments will not be deleted.\\\"],\\\"kqJVBO\\\":[\\\"You don't have permission to share this security group.\\\"],\\\"kuYWaD\\\":[\\\"Reserved keys: web-index, web-listings, quota-count, quota-bytes\\\"],\\\"l+fhn1\\\":[\\\"I understand that enabling versioning is permanent\\\"],\\\"l75CjT\\\":[\\\"Yes\\\"],\\\"lAsm87\\\":[\\\"Protect this image from being deleted\\\"],\\\"lBVhQs\\\":[\\\"Something went wrong:\\\"],\\\"lN/Z9n\\\":[\\\"Security group name is required\\\"],\\\"lN3xvy\\\":[\\\"Delete Rule\\\"],\\\"lQ3EIe\\\":[\\\"Max deletes per request\\\"],\\\"lRoPjj\\\":[\\\"ETag\\\"],\\\"lWTy+Y\\\":[\\\"Unable to Create Image\\\"],\\\"lWxDDh\\\":[\\\"Flavor Name\\\"],\\\"lZvIXd\\\":[\\\"Description must be at most 255 characters.\\\"],\\\"lhIa6x\\\":[\\\"Failed to load extra specs. Please try again.\\\"],\\\"lq/mBZ\\\":[\\\"Loading object info...\\\"],\\\"lw1412\\\":[\\\"You have been logged out due to inactivity.\\\"],\\\"lxentK\\\":[\\\"An unexpected error occurred\\\"],\\\"m16xKo\\\":[\\\"Add\\\"],\\\"m6X3ro\\\":[\\\"Group Name\\\"],\\\"mMHJ/+\\\":[\\\"Suspend Versioning\\\"],\\\"mQSO1Y\\\":[\\\"Port Forwarding\\\"],\\\"mSLePW\\\":[\\\"You don't have permission to access flavors for this project.\\\"],\\\"mSfwLL\\\":[\\\"Project ID\\\"],\\\"mYnJeY\\\":[\\\"The text must match “release” in lowercase.\\\"],\\\"miy5mb\\\":[\\\"PCA (Clavis)\\\"],\\\"mqljvE\\\":[\\\"Copy metadata\\\"],\\\"mvz5Eo\\\":[\\\"URL for public access\\\"],\\\"mxPfpY\\\":[\\\"Create new folder here\\\"],\\\"mzI/c+\\\":[\\\"Download\\\"],\\\"n0ZttO\\\":[\\\"Root Disk (GiB)\\\"],\\\"n1ekoW\\\":[\\\"Sign In\\\"],\\\"n1gB0L\\\":[\\\"Edit Floating IP \\\",[\\\"floating_ip_address\\\"]],\\\"n22YIM\\\":[\\\"Edit Description\\\"],\\\"n2IuBI\\\":[\\\"A temporary URL grants time-limited read access to this object without requiring authentication. Anyone with the link can download it until it expires.\\\"],\\\"n3eQzA\\\":[\\\"This property is reserved and cannot be modified\\\"],\\\"n46oLW\\\":[\\\"Failed to remove member\\\"],\\\"n9jJG6\\\":[\\\"Remove member access\\\"],\\\"nETBrc\\\":[\\\"Egress\\\"],\\\"nLvo6K\\\":[\\\"RBAC Policy Details:\\\"],\\\"nNKXt7\\\":[\\\"Deleting this Certificate Authority is permanent, and all the associated certificates will no longer apply to entities.\\\"],\\\"nU1mHK\\\":[\\\"Versioning Enabled\\\"],\\\"nUuaq8\\\":[\\\"Failed to update container: \\\",[\\\"errorMessage\\\"]],\\\"nW/hX9\\\":[\\\"General Image Data\\\"],\\\"nWNviN\\\":[\\\"Deleting certificate authority...\\\"],\\\"nYab6d\\\":[\\\"\\\\\\\"\\\",[\\\"displayName\\\"],\\\"\\\\\\\" was successfully moved to \\\",[\\\"destination\\\"],\\\".\\\"],\\\"nZbdB+\\\":[\\\"Upload Cancelled\\\"],\\\"ne/GWZ\\\":[\\\"Inside a project, objects are stored in containers. Containers are where you define access permissions and quotas.\\\"],\\\"neiJm0\\\":[\\\"Flavors\\\"],\\\"ng+PCh\\\":[\\\"There are no PCAs available for this project.\\\"],\\\"nkpZyk\\\":[\\\"Container \\\\\\\"\\\",[\\\"containerName\\\"],\\\"\\\\\\\" was already empty.\\\"],\\\"nnxwBn\\\":[\\\"There are no rules for this security group\\\"],\\\"ntNlXu\\\":[\\\"Listing access\\\"],\\\"nzFJqC\\\":[\\\"Delete CA\\\"],\\\"o/VDOG\\\":[\\\"Unable to Delete Image\\\"],\\\"o6M6l0\\\":[\\\"Failed to create security group\\\"],\\\"oAMLhA\\\":[\\\"Full path:\\\"],\\\"oDkgME\\\":[\\\"You are not authorized to create flavors. Please log in again.\\\"],\\\"oEGiW3\\\":[\\\"Uploading... \\\",[\\\"progressPct\\\"],\\\"%\\\"],\\\"oJVmWq\\\":[\\\"Could not delete \\\\\\\"\\\",[\\\"displayName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"ocUvR+\\\":[\\\"False\\\"],\\\"odVI9Y\\\":[\\\"Container Deleted\\\"],\\\"og1m+J\\\":[\\\"Loading Certificate Authority Details...\\\"],\\\"okXQSt\\\":[\\\"Subject information\\\"],\\\"olfSYj\\\":[\\\"Access Control Updated\\\"],\\\"p4nMut\\\":[\\\"Swap (MiB)\\\"],\\\"p7DzCB\\\":[\\\"Failed to Update Access Control\\\"],\\\"pD/2BQ\\\":[\\\"Successfully emptied \\\",[\\\"emptiedCount\\\"],\\\" of \\\",[\\\"totalBuckets\\\"],\\\" \\\",[\\\"totalBuckets\\\",\\\"plural\\\",{\\\"one\\\":[\\\"bucket\\\"],\\\"other\\\":[\\\"buckets\\\"]}],\\\", deleting \\\",[\\\"totalDeleted\\\"],\\\" \\\",[\\\"totalDeleted\\\",\\\"plural\\\",{\\\"one\\\":[\\\"object\\\"],\\\"other\\\":[\\\"objects\\\"]}],\\\". \\\",[\\\"errorsLength\\\"],\\\" \\\",[\\\"errorsLength\\\",\\\"plural\\\",{\\\"one\\\":[\\\"bucket\\\"],\\\"other\\\":[\\\"buckets\\\"]}],\\\" failed.\\\"],\\\"pFg+7w\\\":[\\\"Updated:\\\"],\\\"pOPvlj\\\":[\\\"Already active (will be skipped)\\\"],\\\"pU25+T\\\":[\\\"Upload of \\\\\\\"\\\",[\\\"objectName\\\"],\\\"\\\\\\\" was cancelled.\\\"],\\\"pYR76U\\\":[\\\"Importing Certificate...\\\"],\\\"pbzA+s\\\":[\\\"Optional description\\\"],\\\"pebLmQ\\\":[\\\"Remove access for \\\",[\\\"memberIdDisplay\\\"]],\\\"plnnns\\\":[\\\"Deleted \\\",[\\\"successCount\\\"],\\\" image(s), but \\\",[\\\"failedCount\\\"],\\\" image(s) could not be deleted.\\\"],\\\"poCbZw\\\":[\\\"Loading ACLs...\\\"],\\\"podzPY\\\":[\\\"Project id\\\"],\\\"pubQie\\\":[\\\"Enter value\\\"],\\\"q0Rla3\\\":[\\\"Add Tenant Access\\\"],\\\"q44uUq\\\":[\\\"Containers Partially Emptied\\\"],\\\"q5sTNZ\\\":[\\\"<0>No Temp URL key configured.</0> A temporary URL key must be set at the account or container level before temporary URLs can be generated. Contact your administrator to configure <1>X-Account-Meta-Temp-URL-Key</1> or <2>X-Container-Meta-Temp-URL-Key</2>.\\\"],\\\"q6K46F\\\":[\\\"Key already exists\\\"],\\\"q88/6A\\\":[\\\"Failed to Create Folder\\\"],\\\"qAkkjP\\\":[\\\"Max object name length\\\"],\\\"qEDO1j\\\":[\\\"This is a <0>dynamic large object</0>. Only the manifest will be deleted — its segment objects (stored under the manifest prefix) are <1>not</1> automatically removed and must be deleted separately.\\\"],\\\"qJb6G2\\\":[\\\"Try Again\\\"],\\\"qQ1QBh\\\":[\\\"Hardware Specifications\\\"],\\\"qUlxA+\\\":[\\\"Folder \\\\\\\"\\\",[\\\"folderName\\\"],\\\"\\\\\\\" was permanently deleted.\\\"],\\\"qaAo9Y\\\":[\\\"Server error occurred while creating the flavor. Please try again later.\\\"],\\\"qh5W8q\\\":[\\\"Remove Policy\\\"],\\\"qhDo93\\\":[\\\"Common name is required.\\\"],\\\"qs+BrU\\\":[\\\"You don't have permission to remove tenant access from this flavor.\\\"],\\\"qtoOYG\\\":[\\\"No limit\\\"],\\\"quU9wK\\\":[\\\"Failed to deactivate \\\",[\\\"failedCount\\\"],\\\" of \\\",[\\\"totalCount\\\"],\\\" image(s). Some images may already be deactivated or in an invalid state.\\\"],\\\"qvF2D8\\\":[\\\"There are no images available for this project with the current filters applied. Try adjusting your filter criteria or create a new image.\\\"],\\\"qxxo7y\\\":[\\\"No policies match your search\\\"],\\\"qzIZOL\\\":[\\\"Invalid file format. Supported formats: \\\",[\\\"supportedFileFormats\\\"]],\\\"qzhUb9\\\":[\\\"Showing first \\\",[\\\"maxOptions\\\"],\\\" of \\\",[\\\"totalCount\\\"],\\\" — refine your search to narrow results\\\"],\\\"r5SQFW\\\":[\\\"Container name must be \\\",[\\\"maxContainerNameLength\\\"],\\\" characters or fewer\\\"],\\\"r9Aac8\\\":[\\\"Ephemeral Disk\\\"],\\\"rAtQcX\\\":[\\\"You can rename the object by changing the name here.\\\"],\\\"rD9yV1\\\":[\\\"Images to deactivate:\\\"],\\\"rIe0oV\\\":[\\\"Failed to add tenant access to flavor. Please try again.\\\"],\\\"rIi6x4\\\":[\\\"The flavor could not be found. It may have already been deleted.\\\"],\\\"rJe6vw\\\":[\\\"7 days\\\"],\\\"rPuPb+\\\":[\\\"Checking bucket contents...\\\"],\\\"rbuO5A\\\":[\\\"This security group is already shared with the specified project.\\\"],\\\"rcBt6T\\\":[\\\"Failed to create credential: \\\",[\\\"errorMessage\\\"]],\\\"rdUucN\\\":[\\\"Preview\\\"],\\\"rhaNn7\\\":[\\\"Loading containers...\\\"],\\\"riR9oD\\\":[\\\"Note: for <0>static and dynamic large objects</0> only the manifests are deleted — their segments outside this folder prefix are not affected.\\\"],\\\"rlgAtt\\\":[\\\"The object will be moved to this path. Navigate folders above to change the destination.\\\"],\\\"rp0Bd0\\\":[\\\"Compute\\\"],\\\"rrjuul\\\":[\\\"For more details, have a look at the <0>documentation</0>.\\\"],\\\"rvXsSb\\\":[\\\"Tenant access for \\\\\\\"\\\",[\\\"tenantIdToRemove\\\"],\\\"\\\\\\\" has been removed successfully.\\\"],\\\"rwBVXS\\\":[\\\"Images to be deleted (\\\",[\\\"deletableCount\\\"],\\\")\\\"],\\\"rx4T2i\\\":[\\\"Issue Certificate\\\"],\\\"ryf/ee\\\":[\\\"Images Activated\\\"],\\\"ryxYVo\\\":[\\\"Images to be deactivated (\\\",[\\\"activeCount\\\"],\\\")\\\"],\\\"s/s1lz\\\":[\\\"Any user can perform a HEAD or GET operation on the container provided the user also has read access on objects. No token is required.\\\"],\\\"s2ubkU\\\":[\\\"Flavor ID\\\"],\\\"s4Vnq2\\\":[\\\"Emptying...\\\"],\\\"sCPiLi\\\":[\\\"Type DELETE to confirm\\\"],\\\"sNVNmf\\\":[\\\"MAC Address\\\"],\\\"sPFHpI\\\":[\\\"Disk\\\"],\\\"sSNyf3\\\":[\\\"Welcome to <0>Aurora Dashboard</0>, your next-generation cloud management solution. We are dedicated to simplifying how you interact with and manage your cloud infrastructure. Designed with efficiency, scalability, and usability at its core, Aurora empowers you to streamline operations and unlock the full potential of your cloud resources.\\\"],\\\"sWBLli\\\":[\\\"Add Property\\\"],\\\"sXd+qS\\\":[\\\"Properties of \\\\\\\"\\\",[\\\"objectName\\\"],\\\"\\\\\\\" were successfully updated.\\\"],\\\"sYJvnu\\\":[\\\"Create New Folder\\\"],\\\"sa4CV6\\\":[\\\"All users from project \\\",[\\\"projectId\\\"]],\\\"sgra3S\\\":[\\\"You can re-enable versioning at any time\\\"],\\\"shKIZu\\\":[\\\"Images to be activated (\\\",[\\\"deactivatedCount\\\"],\\\")\\\"],\\\"sheDTJ\\\":[\\\"Please note: for <0>dynamic</0> and <1>static large objects</1> only the manifests are deleted. The related segments are not deleted.\\\"],\\\"sihD20\\\":[\\\"Loading images...\\\"],\\\"sjMCOP\\\":[\\\"Last Modified\\\"],\\\"sl2P3q\\\":[\\\"Object:\\\"],\\\"slWh5C\\\":[\\\"Associate Floating IP \\\",[\\\"floating_ip_address\\\"],\\\" with Port\\\"],\\\"sxbP3b\\\":[\\\"Object Count\\\"],\\\"t/YqKh\\\":[\\\"Remove\\\"],\\\"t/cZdQ\\\":[\\\"Full Path:\\\"],\\\"t0X9+8\\\":[\\\"Container Name\\\"],\\\"t1POAD\\\":[\\\"No custom metadata properties found. Click \\\\\\\"Add Property\\\\\\\" to create one.\\\"],\\\"t1fq6V\\\":[\\\"Server returned unexpected data format.\\\"],\\\"t7ewhH\\\":[\\\"Could not empty bucket \\\\\\\"\\\",[\\\"bucketName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"t7ff15\\\":[\\\"valid token required: false\\\"],\\\"t95VRV\\\":[\\\"About Aurora Dashboard\\\"],\\\"tASa/P\\\":[\\\"Server error occurred while deleting the flavor. Please try again later.\\\"],\\\"tIc6vY\\\":[\\\"Could not copy \\\\\\\"\\\",[\\\"displayName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"tIrNgH\\\":[\\\"Server error occurred while fetching extra specs. Please try again later.\\\"],\\\"tL9it8\\\":[\\\"Nothing to do. Bucket is already empty.\\\"],\\\"tLerHy\\\":[\\\"Ephemeral Disk must be an integer ≥ 0.\\\"],\\\"tM5SEI\\\":[\\\"ACLs for container \\\\\\\"\\\",[\\\"containerName\\\"],\\\"\\\\\\\" were successfully updated.\\\"],\\\"tOkmLM\\\":[\\\"Failed to Copy Object\\\"],\\\"tV/Ozb\\\":[\\\"Port Range\\\"],\\\"tVSmFT\\\":[\\\"Loading more...\\\"],\\\"tX5yOZ\\\":[\\\"New Folder\\\"],\\\"tasfos\\\":[\\\"remove\\\"],\\\"tbwGSx\\\":[\\\"Minimum Disk (GB)\\\"],\\\"tejJLY\\\":[\\\"Associating Floating IP...\\\"],\\\"tfAKBU\\\":[\\\"Could not upload \\\\\\\"\\\",[\\\"objectName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"tfDRzk\\\":[\\\"Save\\\"],\\\"tfxu04\\\":[\\\"Remove access for \\\",[\\\"tenantId\\\"]],\\\"thHAVL\\\":[\\\"Accepted Images\\\"],\\\"tiflqy\\\":[\\\"Unable to Re-activate Image\\\"],\\\"tkRT08\\\":[\\\"Metadata size exceeds the 2KB limit. Please remove or shorten some entries before saving.\\\"],\\\"tlfxPP\\\":[\\\"Could not copy \\\\\\\"\\\",[\\\"objectName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"tmpGvt\\\":[\\\"production, linux\\\"],\\\"u+VWhB\\\":[\\\"Copied to clipboard!\\\"],\\\"u2xIeO\\\":[\\\"Failed to update ACLs: \\\",[\\\"errorMessage\\\"]],\\\"u4UFLi\\\":[\\\"Retrieve older versions of objects\\\"],\\\"u5HztT\\\":[\\\"RX/TX Factor\\\"],\\\"u77/s4\\\":[\\\"Floating IPs\\\"],\\\"u7En0V\\\":[\\\"Add Metadata\\\"],\\\"uAI0yI\\\":[\\\"Delete object:\\\"],\\\"uAQUqI\\\":[\\\"Status\\\"],\\\"uAZE7K\\\":[\\\"Delete bucket\\\"],\\\"uLtFAr\\\":[\\\"Could not update container \\\\\\\"\\\",[\\\"containerName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"uSdnuQ\\\":[\\\"VCPUs must be an integer ≥ 1.\\\"],\\\"ujK/QN\\\":[\\\"Loading objects...\\\"],\\\"uly9ET\\\":[\\\"Rule Details:\\\"],\\\"up0ZSW\\\":[\\\"Fingerprint\\\"],\\\"uuKb0T\\\":[\\\"Description must be less than 65535 characters.\\\"],\\\"v0hPHE\\\":[\\\"Show Details\\\"],\\\"v3djpU\\\":[\\\"Move/Rename\\\"],\\\"v9Dn8m\\\":[\\\"Aurora Dashboard is more than just a tool—it's your partner in navigating the cloud. Whether you're a small startup or a global enterprise, Aurora provides the flexibility, power, and simplicity you need to achieve your goals.\\\"],\\\"vASHsu\\\":[[\\\"totalCount\\\",\\\"plural\\\",{\\\"one\\\":[\\\"Delete Object\\\"],\\\"other\\\":[\\\"Delete Objects\\\"]}]],\\\"vBUQNE\\\":[\\\"The extra spec could not be found. It may have already been deleted.\\\"],\\\"vEkTR9\\\":[\\\"Quota\\\"],\\\"vH2C/2\\\":[\\\"Swap\\\"],\\\"vIxhHW\\\":[\\\"Showing first \\\",[\\\"MAX_COMBO_OPTIONS\\\"],\\\" of \\\",[\\\"totalBuckets\\\"],\\\" — refine your search to narrow results\\\"],\\\"vR4HmN\\\":[\\\"Loading Instances...\\\"],\\\"vTh35P\\\":[\\\"Create Container\\\"],\\\"vXmL4D\\\":[\\\"Drop your image file here\\\"],\\\"vZUKSz\\\":[\\\"Detach Floating IP \\\",[\\\"floating_ip_address\\\"]],\\\"vbajgL\\\":[\\\"Public Flavor\\\"],\\\"vcQSZh\\\":[\\\"This folder is empty — use New Folder to create one.\\\"],\\\"vmRPFm\\\":[\\\"Share Security Group\\\"],\\\"vmYyLY\\\":[\\\"Remote IP Prefix\\\"],\\\"vp5vfW\\\":[\\\"1 hour\\\"],\\\"vpt8cE\\\":[\\\"Generate URL\\\"],\\\"vrPCbw\\\":[\\\"Image ID\\\"],\\\"w3bAcf\\\":[\\\"This action is permanent. The address will be removed from your project and returned to the public pool. This action cannot be undone.\\\"],\\\"w9+8d7\\\":[\\\"Remove tenant access\\\"],\\\"wEfZld\\\":[\\\"Create New Flavor\\\"],\\\"wFaT8w\\\":[\\\"Failed to Empty Containers\\\"],\\\"wHhJRb\\\":[\\\"Loading versions...\\\"],\\\"wL3cK8\\\":[\\\"Latest\\\"],\\\"wMHvYH\\\":[\\\"Value\\\"],\\\"wPrtGF\\\":[\\\"Enter key\\\"],\\\"wTg+FY\\\":[\\\"Max file size\\\"],\\\"wXxPjv\\\":[\\\"S3 Object Storage — Setup Required\\\"],\\\"wa1Bcq\\\":[\\\"Enter tenant ID\\\"],\\\"wbqM4L\\\":[[\\\"customMinutes\\\"],\\\" minutes\\\"],\\\"wcUecy\\\":[\\\"You don't have permission to view extra specs for this flavor.\\\"],\\\"wdUvGT\\\":[\\\"Creating Certificate Authority...\\\"],\\\"we28Pq\\\":[\\\"Hide ACLs Preview\\\"],\\\"wlQNTg\\\":[\\\"Members\\\"],\\\"wlUDbB\\\":[\\\"Last updated: \\\",[\\\"formattedDate\\\"]],\\\"wrXcuy\\\":[\\\"Object Name\\\"],\\\"wxVsr5\\\":[\\\"Bucket name does not match\\\"],\\\"wyIOMP\\\":[\\\"Image name is required\\\"],\\\"wzqqS+\\\":[\\\"Key Features\\\"],\\\"x/XQrD\\\":[\\\"Any file type\\\"],\\\"x1bK0h\\\":[\\\"There are no containers available with the current search criteria. Try adjusting your search term.\\\"],\\\"x3T4pq\\\":[\\\"The container metadata reports objects but none were listed. This may be a temporary synchronization delay — please wait a moment and try again.\\\"],\\\"x5DnMs\\\":[\\\"Last modified\\\"],\\\"x5l/TK\\\":[\\\"Already active (will be skipped):\\\"],\\\"x9AdZ8\\\":[\\\"property_key\\\"],\\\"xIXYTK\\\":[\\\"Your S3 credentials are invalid or expired. Please try creating new credentials or contact your administrator.\\\"],\\\"xNG/3n\\\":[\\\"Floating IP Address\\\"],\\\"xNZKYy\\\":[\\\"Failed to delete \\\",[\\\"failedCount\\\"],\\\" of \\\",[\\\"totalCount\\\"],\\\" image(s). Some images may be protected or in use.\\\"],\\\"xOvKAE\\\":[[\\\"totalCount\\\",\\\"plural\\\",{\\\"one\\\":[[\\\"filteredCount\\\"],\\\" of \\\",[\\\"totalCount\\\"],\\\" bucket\\\"],\\\"other\\\":[[\\\"filteredCount\\\"],\\\" of \\\",[\\\"totalCount\\\"],\\\" buckets\\\"]}]],\\\"xYrGVV\\\":[\\\"The selected objects will be permanently deleted. This cannot be undone.\\\"],\\\"xqhyRT\\\":[\\\"Object Uploaded\\\"],\\\"xw2UtT\\\":[\\\"Create New Image\\\"],\\\"y+KBOY\\\":[\\\"e.g., production, linux, ubuntu\\\"],\\\"y02Bu1\\\":[\\\"Container:\\\"],\\\"y0u86k\\\":[\\\"The requested flavor could not be found. It may have been deleted or you may not have access to it.\\\"],\\\"y1GYnY\\\":[\\\"Could not move \\\\\\\"\\\",[\\\"objectName\\\"],\\\"\\\\\\\": \\\",[\\\"errorMessage\\\"]],\\\"yDHGP+\\\":[\\\"my-bucket-name\\\"],\\\"yKu/3Y\\\":[\\\"Restore\\\"],\\\"yPWFWy\\\":[\\\"ICMP Type\\\"],\\\"yTtJTy\\\":[\\\"Edit Image Metadata\\\"],\\\"yYxB17\\\":[\\\"Clear all\\\"],\\\"ylfbpz\\\":[\\\"Extra spec key is required and cannot be empty.\\\"],\\\"yp0UjB\\\":[\\\"Ethertype\\\"],\\\"yqPflB\\\":[\\\"... and \\\",[\\\"hiddenCount\\\"],\\\" more\\\"],\\\"yu9G3x\\\":[\\\"Edit Security Group\\\"],\\\"ywe1H/\\\":[[\\\"totalCount\\\",\\\"plural\\\",{\\\"one\\\":[[\\\"totalCount\\\"],\\\" container\\\"],\\\"other\\\":[[\\\"totalCount\\\"],\\\" containers\\\"]}]],\\\"yz7wBu\\\":[\\\"Close\\\"],\\\"z+zpLP\\\":[\\\"valid token required: true\\\"],\\\"z1JceR\\\":[\\\"Back to Floating IPs\\\"],\\\"z45o5B\\\":[\\\"Object count\\\"],\\\"z9NAjZ\\\":[\\\"Object Deleted\\\"],\\\"zCD96i\\\":[\\\"You are not authorized to view flavor details. Please log in again.\\\"],\\\"zDS0JC\\\":[\\\"Name must be 2-50 characters long.\\\"],\\\"zWb/Nn\\\":[\\\"Max header size\\\"],\\\"zc5dcw\\\":[\\\"Login failed. Please check your credentials and try again.\\\"],\\\"zemvbh\\\":[\\\"View Versions\\\"],\\\"zga9sT\\\":[\\\"OK\\\"],\\\"zhM8FP\\\":[\\\"Grant access to a user from a different project.\\\"],\\\"zm7+/D\\\":[\\\"You are about to deactivate <0>\\\",[\\\"activeCount\\\"],\\\" image(s)</0>. Deactivated images cannot be used to launch new instances.\\\"],\\\"zsqy/h\\\":[\\\"Delete Marker\\\"],\\\"zwBp5t\\\":[\\\"Private\\\"]}\")as Messages;","import { AppShellProvider } from \"@cloudoperators/juno-ui-components\"\nimport { RouterProvider } from \"@tanstack/react-router\"\nimport { AuthProvider, useAuth } from \"./store/AuthProvider\"\nimport { QueryClient, QueryClientProvider, hashKey } from \"@tanstack/react-query\"\nimport { trpcReact, trpcReactClient, trpcClient, setBffEndpoint } from \"./trpcClient\"\nimport { createAuroraRouter } from \"./router\"\nimport { useState, useEffect } from \"react\"\nimport { i18n } from \"@lingui/core\"\nimport { I18nProvider } from \"@lingui/react\"\nimport { ErrorBoundary } from \"react-error-boundary\"\nimport { Trans } from \"@lingui/react/macro\"\nimport { NavigationItem } from \"./components/navigation/types\"\nimport type { Slots } from \"./AuroraApp\"\nimport { messages as enMessages } from \"../locales/en/messages\"\n\n// Initialise i18n here so AuroraApp is self-contained and consumers don't need\n// to set up Lingui before mounting the component.\ni18n.load({ en: enMessages })\ni18n.activate(\"en\")\n\ntype AppProps = {\n theme?: \"theme-dark\" | \"theme-light\"\n bffEndpoint?: string\n onThemeChange?: (theme: \"theme-dark\" | \"theme-light\") => void\n slots?: Slots\n appName?: string\n}\n\n// Additional navigation items can be added here and will be passed to the layout via context\n// The items will appear in the main navigation bar and use internal routing (TanStack Router)\nconst navItems: NavigationItem[] = []\n\nconst App = (props: AppProps) => {\n useEffect(() => {\n setBffEndpoint(props.bffEndpoint ?? \"/polaris-bff\")\n }, [props.bffEndpoint])\n\n const [router] = useState(() => createAuroraRouter(trpcReact, trpcClient))\n\n const [currentTheme, setCurrentTheme] = useState<\"theme-dark\" | \"theme-light\">(props.theme ?? \"theme-light\")\n\n const [queryClient] = useState(\n () =>\n new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: 60 * 1000,\n refetchOnWindowFocus: false,\n // Prepend the active projectId to every query hash so that\n // switching projects never returns cached data from a previous project.\n queryKeyHashFn: (queryKey) => {\n const match = router.state.matches.findLast((m) => \"projectId\" in (m.params ?? {}))\n const projectId = (match?.params as { projectId?: string })?.projectId ?? \"\"\n return hashKey([projectId, ...queryKey])\n },\n },\n },\n })\n )\n const [reactClient] = useState(() => trpcReactClient)\n\n const handleThemeToggle = (newTheme: string) => {\n const theme = newTheme as \"theme-dark\" | \"theme-light\"\n setCurrentTheme(theme)\n props.onThemeChange?.(theme)\n }\n\n return (\n <ErrorBoundary\n fallbackRender={({ error, resetErrorBoundary }) => {\n const { message } = error as Error\n\n return (\n <div role=\"alert\" style={{ padding: 24 }}>\n <p>\n <Trans>Something went wrong:</Trans>\n </p>\n {message && <pre style={{ color: \"red\" }}>{message}</pre>}\n <button onClick={resetErrorBoundary}>\n <Trans>Try again</Trans>\n </button>\n </div>\n )\n }}\n >\n <I18nProvider i18n={i18n}>\n <AppShellProvider shadowRoot={false} theme={currentTheme}>\n <trpcReact.Provider client={reactClient} queryClient={queryClient}>\n <QueryClientProvider client={queryClient}>\n <AuthProvider>\n <AppInner\n router={router}\n navItems={navItems}\n handleThemeToggle={handleThemeToggle}\n slots={props.slots}\n appName={props.appName}\n />\n </AuthProvider>\n </QueryClientProvider>\n </trpcReact.Provider>\n </AppShellProvider>\n </I18nProvider>\n </ErrorBoundary>\n )\n}\n\nfunction AppInner({\n router,\n navItems,\n handleThemeToggle,\n slots,\n appName,\n}: {\n router: ReturnType<typeof createAuroraRouter>\n navItems: NavigationItem[]\n handleThemeToggle: (theme: string) => void\n slots?: Slots\n appName?: string\n}) {\n const auth = useAuth()\n\n const routerContext = {\n trpcReact,\n trpcClient,\n auth,\n navItems,\n handleThemeToggle,\n slots,\n appName,\n }\n\n return <RouterProvider router={router} context={routerContext} />\n}\n\nexport default App\n","import type { FC } from \"react\"\nimport type { TrpcClient } from \"./trpcClient\"\nimport App from \"./App\"\n\n/** Context object passed to every slot component. */\nexport type SlotProps = {\n auroraContext: {\n /** tRPC client for making API calls to the Aurora BFF. */\n client: TrpcClient\n }\n}\n\n/** Named extension points where consumers can inject their own React components. */\nexport type Slots = {\n /** Replaces the default Aurora logo in the page header. Renders outside shadow DOM — inherits header styles. */\n logo?: FC<SlotProps>\n /** Rendered at the bottom of the project side navigation. Renders inside a shadow DOM. */\n sideNavBanner?: FC<SlotProps>\n /** Replaces the default page footer. Renders outside shadow DOM — inherits page styles. */\n pageFooter?: FC<SlotProps>\n}\n\n/** Props for the top-level `<AuroraApp />` component. */\nexport type AuroraAppProps = {\n /** Initial theme. Defaults to `\"theme-light\"`. */\n theme?: \"theme-dark\" | \"theme-light\"\n /** URL prefix for all tRPC routes. Must match the server's `bffEndpoint`. Defaults to `\"/polaris-bff\"`. */\n bffEndpoint?: string\n /** Called when the user toggles the theme. Use this to persist the selection. */\n onThemeChange?: (theme: \"theme-dark\" | \"theme-light\") => void\n /** Optional UI extension points. */\n slots?: Slots\n /** App name shown in the header breadcrumb and as the default logo title. Defaults to `\"Aurora\"`. */\n appName?: string\n}\n\nexport const AuroraApp: FC<AuroraAppProps> = App\n"],"mappings":"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"}
|