@cobaltcore-dev/aurora 0.23.1 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/App.d.ts +1 -1
- package/dist/client/{AuthProvider-CQ6Yppoh.mjs → AuthProvider-5TyZKZkx.mjs} +3 -3
- package/dist/client/AuthProvider-5TyZKZkx.mjs.map +1 -0
- package/dist/client/{ContentHeader-9KZdhOoA.mjs → ContentHeader-D64NtKvo.mjs} +26 -25
- package/dist/client/ContentHeader-D64NtKvo.mjs.map +1 -0
- package/dist/client/DeleteFlavorModal-C2K43ABZ.mjs +732 -0
- package/dist/client/DeleteFlavorModal-C2K43ABZ.mjs.map +1 -0
- package/dist/client/DeletePcaModal-D9v8E0Ki.mjs +92 -0
- package/dist/client/DeletePcaModal-D9v8E0Ki.mjs.map +1 -0
- package/dist/client/DetailsInfo-h7rPJ4Jf.mjs +61 -0
- package/dist/client/DetailsInfo-h7rPJ4Jf.mjs.map +1 -0
- package/dist/client/FiltersInput-Bw8TFfwb.mjs +82 -0
- package/dist/client/FiltersInput-Bw8TFfwb.mjs.map +1 -0
- package/dist/client/{FloatingIpActionModals-BcceUHcg.mjs → FloatingIpActionModals-BfEDfYg9.mjs} +66 -66
- package/dist/client/{FloatingIpActionModals-BcceUHcg.mjs.map → FloatingIpActionModals-BfEDfYg9.mjs.map} +1 -1
- package/dist/client/ImageToastNotifications-C0Tluzq-.mjs +1125 -0
- package/dist/client/ImageToastNotifications-C0Tluzq-.mjs.map +1 -0
- package/dist/client/{RouteError-Rm08PcxN.mjs → RouteError-B-NPGIv7.mjs} +2 -2
- package/dist/client/{RouteError-Rm08PcxN.mjs.map → RouteError-B-NPGIv7.mjs.map} +1 -1
- package/dist/client/Slot-CWb612-_.mjs.map +1 -1
- package/dist/client/{SortInput-D_q_jDfe.mjs → SortInput-DysAXpB3.mjs} +6 -6
- package/dist/client/{SortInput-D_q_jDfe.mjs.map → SortInput-DysAXpB3.mjs.map} +1 -1
- package/dist/client/{StatusError-2ZU1gFpu.mjs → StatusError-DX-GvLjq.mjs} +8 -8
- package/dist/client/{StatusError-2ZU1gFpu.mjs.map → StatusError-DX-GvLjq.mjs.map} +1 -1
- package/dist/client/TwoColumnDescriptionList-B3xunXmz.mjs +22 -0
- package/dist/client/TwoColumnDescriptionList-B3xunXmz.mjs.map +1 -0
- package/dist/client/{_auth-D5_QNUos.mjs → _auth-R5H2yKFf.mjs} +2 -2
- package/dist/client/_auth-R5H2yKFf.mjs.map +1 -0
- package/dist/client/_flavorId-Dit5mM8I.mjs +210 -0
- package/dist/client/_flavorId-Dit5mM8I.mjs.map +1 -0
- package/dist/client/{_flavorId-CFmkmg2Y.mjs → _flavorId-Zj7LNL-R.mjs} +4 -4
- package/dist/client/{_flavorId-CFmkmg2Y.mjs.map → _flavorId-Zj7LNL-R.mjs.map} +1 -1
- package/dist/client/_floatingIpId-B0MCoqE3.mjs +215 -0
- package/dist/client/_floatingIpId-B0MCoqE3.mjs.map +1 -0
- package/dist/client/{_floatingIpId-Dzh6_JCI.mjs → _floatingIpId-DCQQpNO-.mjs} +4 -4
- package/dist/client/{_floatingIpId-Dzh6_JCI.mjs.map → _floatingIpId-DCQQpNO-.mjs.map} +1 -1
- package/dist/client/_imageId-CZYzBAVx.mjs +558 -0
- package/dist/client/_imageId-CZYzBAVx.mjs.map +1 -0
- package/dist/client/_pcaId-CHRRsWmO.mjs +605 -0
- package/dist/client/_pcaId-CHRRsWmO.mjs.map +1 -0
- package/dist/client/{_projectId-DNZsNxJw.mjs → _projectId-B8wWSxPu.mjs} +9 -9
- package/dist/client/_projectId-B8wWSxPu.mjs.map +1 -0
- package/dist/client/{_projectId-BuBIFdgG.mjs → _projectId-C5DUYIjt.mjs} +117 -117
- package/dist/client/{_projectId-BuBIFdgG.mjs.map → _projectId-C5DUYIjt.mjs.map} +1 -1
- package/dist/client/{_projectId-CAQkJHZ4.mjs → _projectId-D2pFfYIs.mjs} +3 -3
- package/dist/client/{_projectId-CAQkJHZ4.mjs.map → _projectId-D2pFfYIs.mjs.map} +1 -1
- package/dist/client/{_projectId-D-b7paXE.mjs → _projectId-DhSWowQo.mjs} +4 -4
- package/dist/client/{_projectId-D-b7paXE.mjs.map → _projectId-DhSWowQo.mjs.map} +1 -1
- package/dist/client/{_securityGroupId-DFdNKa2l.mjs → _securityGroupId-DZ4D4WwB.mjs} +635 -617
- package/dist/client/_securityGroupId-DZ4D4WwB.mjs.map +1 -0
- package/dist/client/{_securityGroupId-DRkY3Gt6.mjs → _securityGroupId-Mj8NJT2-.mjs} +4 -4
- package/dist/client/{_securityGroupId-DRkY3Gt6.mjs.map → _securityGroupId-Mj8NJT2-.mjs.map} +1 -1
- package/dist/client/_storageType-C-9bNkmZ.mjs +2211 -0
- package/dist/client/_storageType-C-9bNkmZ.mjs.map +1 -0
- package/dist/client/_storageType-zeSZe--V.mjs.map +1 -1
- package/dist/client/{about-C8tTrQaW.mjs → about-WLyShNgE.mjs} +8 -8
- package/dist/client/about-WLyShNgE.mjs.map +1 -0
- package/dist/client/assets/objectDownload.worker-BXFQIIU_.js.map +1 -0
- package/dist/client/assets/objectDownload.worker-ECvFtmOF.js.map +1 -0
- package/dist/client/{aurora-jyvXcI4T.mjs → aurora-IMO9HhqJ.mjs} +2 -2
- package/dist/client/aurora-IMO9HhqJ.mjs.map +1 -0
- package/dist/client/{build-CRLQyqu2.mjs → build-DnD-T35u.mjs} +8180 -8212
- package/dist/client/build-DnD-T35u.mjs.map +1 -0
- package/dist/client/components/Auth/LoginForm.d.ts +1 -1
- package/dist/client/components/Auth/SessionExpirationTimer.d.ts +1 -1
- package/dist/client/components/ContentHeader/ContentHeader.d.ts +1 -1
- package/dist/client/components/Error/RouteError.d.ts +1 -1
- package/dist/client/components/Error/StatusError.d.ts +1 -1
- package/dist/client/components/JsonEditor.d.ts +1 -1
- package/dist/client/components/ListToolbar/FiltersInput.d.ts +3 -1
- package/dist/client/components/ListToolbar/SelectedFilters.d.ts +1 -1
- package/dist/client/components/ListToolbar/index.d.ts +1 -1
- package/dist/client/components/ProjectView/ProjectInfoBox.d.ts +1 -1
- package/dist/client/components/Slot.d.ts +1 -1
- package/dist/client/components/TwoColumnDescriptionList.d.ts +11 -0
- package/dist/client/components/navigation/LanguageSelect.d.ts +1 -1
- package/dist/client/components/navigation/MainNavigation.d.ts +1 -1
- package/dist/client/components/navigation/UserMenu.d.ts +1 -1
- package/dist/client/{flavors-Dy-2mRGv.mjs → flavors-Cp0LEGOH.mjs} +2 -2
- package/dist/client/{flavors-Dy-2mRGv.mjs.map → flavors-Cp0LEGOH.mjs.map} +1 -1
- package/dist/client/{flavors-BfTXqmoD.mjs → flavors-CwMbDRHm2.mjs} +203 -201
- package/dist/client/flavors-CwMbDRHm2.mjs.map +1 -0
- package/dist/client/flavors-DWMZ6TuJ.mjs.map +1 -1
- package/dist/client/floatingips-ICwo-rV_.mjs +591 -0
- package/dist/client/floatingips-ICwo-rV_.mjs.map +1 -0
- package/dist/client/formatBytes-CZv_XyCY.mjs.map +1 -1
- package/dist/client/helpers-1PpYf-fC.mjs.map +1 -1
- package/dist/client/hooks/useAvailableViewportHeight.d.ts +8 -5
- package/dist/client/hooks/useVirtualizedTableBody.d.ts +1 -3
- package/dist/client/{hooks-Bw3sHHOg.mjs → hooks-CrriowRk.mjs} +2 -2
- package/dist/client/{hooks-Bw3sHHOg.mjs.map → hooks-CrriowRk.mjs.map} +1 -1
- package/dist/client/images-DOGZmr3D.mjs +1937 -0
- package/dist/client/images-DOGZmr3D.mjs.map +1 -0
- package/dist/client/{images-DPKUXryV.mjs → images-DWiM_72I.mjs} +2 -2
- package/dist/client/{images-DPKUXryV.mjs.map → images-DWiM_72I.mjs.map} +1 -1
- package/dist/client/images-NBf2bV43.mjs.map +1 -1
- package/dist/client/index.js +601 -445
- package/dist/client/index.js.map +1 -1
- package/dist/client/{md-CyCflQee.mjs → md-DNzcRhmz.mjs} +6 -60
- package/dist/client/{md-CyCflQee.mjs.map → md-DNzcRhmz.mjs.map} +1 -1
- package/dist/client/network-DuZm76BZ.mjs.map +1 -1
- package/dist/client/objects-D2MKUCxc.mjs +56 -0
- package/dist/client/objects-D2MKUCxc.mjs.map +1 -0
- package/dist/client/objects-DI1-tnKr.mjs +56 -0
- package/dist/client/objects-DI1-tnKr.mjs.map +1 -0
- package/dist/client/objects-DeK2WD5K.mjs +10078 -0
- package/dist/client/objects-DeK2WD5K.mjs.map +1 -0
- package/dist/client/pca-BokFv4Gz.mjs +239 -0
- package/dist/client/pca-BokFv4Gz.mjs.map +1 -0
- package/dist/client/{pca-D0kKxHp4.mjs → pca-D5jHAl0b.mjs} +4 -3
- package/dist/client/{pca-D0kKxHp4.mjs.map → pca-D5jHAl0b.mjs.map} +1 -1
- package/dist/client/projects-yiK0HGSA.mjs.map +1 -1
- package/dist/client/routeInfo-CdTRlSxv.mjs.map +1 -1
- package/dist/client/{routes-CtfnI-aY.mjs → routes-B05u5bk4.mjs} +2 -2
- package/dist/client/{routes-CtfnI-aY.mjs.map → routes-B05u5bk4.mjs.map} +1 -1
- package/dist/client/{routes-BOf-GDMM.mjs → routes-DOJr5onJ.mjs} +31 -28
- package/dist/client/routes-DOJr5onJ.mjs.map +1 -0
- package/dist/client/{securitygroups-DRhFle2O.mjs → securitygroups-Be2Qgmew.mjs} +201 -195
- package/dist/client/securitygroups-Be2Qgmew.mjs.map +1 -0
- package/dist/client/{securitygroups-B8aLyFK7.mjs → securitygroups-_7SYN2jN.mjs} +2 -2
- package/dist/client/{securitygroups-B8aLyFK7.mjs.map → securitygroups-_7SYN2jN.mjs.map} +1 -1
- package/dist/client/store/AuthProvider.d.ts +1 -1
- package/dist/client/{trpcClient-Di56hpVv.mjs → trpcClient-D7gpR7YG.mjs} +2 -2
- package/dist/client/{trpcClient-Di56hpVv.mjs.map → trpcClient-D7gpR7YG.mjs.map} +1 -1
- package/dist/client/trpcClient.d.ts +125 -11
- package/dist/client/useModal-DCs1OJh7.mjs.map +1 -1
- package/dist/client/{useSecurityGroupPermissions-BPS1ibWq.mjs → useSecurityGroupPermissions-qPwm4mFt.mjs} +15 -15
- package/dist/client/{useSecurityGroupPermissions-BPS1ibWq.mjs.map → useSecurityGroupPermissions-qPwm4mFt.mjs.map} +1 -1
- package/dist/server/index.d.ts +125 -11
- package/dist/server/index.js +4142 -2845
- package/package.json +7 -7
- package/dist/client/AuthProvider-CQ6Yppoh.mjs.map +0 -1
- package/dist/client/BucketToastNotifications-Dq4dudkM.mjs +0 -665
- package/dist/client/BucketToastNotifications-Dq4dudkM.mjs.map +0 -1
- package/dist/client/ContentHeader-9KZdhOoA.mjs.map +0 -1
- package/dist/client/DeleteFlavorModal-Be2qZo4w.mjs +0 -713
- package/dist/client/DeleteFlavorModal-Be2qZo4w.mjs.map +0 -1
- package/dist/client/DeletePcaModal-CIFsGWyj.mjs +0 -80
- package/dist/client/DeletePcaModal-CIFsGWyj.mjs.map +0 -1
- package/dist/client/DetailsInfo-CHVD7d-W.mjs +0 -52
- package/dist/client/DetailsInfo-CHVD7d-W.mjs.map +0 -1
- package/dist/client/FiltersInput-DqT08Ib-.mjs +0 -81
- package/dist/client/FiltersInput-DqT08Ib-.mjs.map +0 -1
- package/dist/client/ImageToastNotifications-BGyX2J6j.mjs +0 -1219
- package/dist/client/ImageToastNotifications-BGyX2J6j.mjs.map +0 -1
- package/dist/client/_auth-D5_QNUos.mjs.map +0 -1
- package/dist/client/_flavorId-BsmqS9hP.mjs +0 -194
- package/dist/client/_flavorId-BsmqS9hP.mjs.map +0 -1
- package/dist/client/_floatingIpId-Bb9ZEJ6b.mjs +0 -228
- package/dist/client/_floatingIpId-Bb9ZEJ6b.mjs.map +0 -1
- package/dist/client/_imageId-C3As7sHE.mjs +0 -534
- package/dist/client/_imageId-C3As7sHE.mjs.map +0 -1
- package/dist/client/_pcaId-n0q0aDb6.mjs +0 -545
- package/dist/client/_pcaId-n0q0aDb6.mjs.map +0 -1
- package/dist/client/_projectId-DNZsNxJw.mjs.map +0 -1
- package/dist/client/_securityGroupId-DFdNKa2l.mjs.map +0 -1
- package/dist/client/_storageType-Cn7TSOki.mjs +0 -81
- package/dist/client/_storageType-Cn7TSOki.mjs.map +0 -1
- package/dist/client/_storageType-_8Ambhxc.mjs +0 -2859
- package/dist/client/_storageType-_8Ambhxc.mjs.map +0 -1
- package/dist/client/about-C8tTrQaW.mjs.map +0 -1
- package/dist/client/assets/objectDownload.worker-BAc5Au4B.js.map +0 -1
- package/dist/client/aurora-jyvXcI4T.mjs.map +0 -1
- package/dist/client/build-CRLQyqu2.mjs.map +0 -1
- package/dist/client/flavors-BfTXqmoD.mjs.map +0 -1
- package/dist/client/floatingips-zhNK6Xxn.mjs +0 -562
- package/dist/client/floatingips-zhNK6Xxn.mjs.map +0 -1
- package/dist/client/images-DhZnqUG_.mjs +0 -1890
- package/dist/client/images-DhZnqUG_.mjs.map +0 -1
- package/dist/client/objects-B3mbk6V0.mjs +0 -6636
- package/dist/client/objects-B3mbk6V0.mjs.map +0 -1
- package/dist/client/objects-BQ8xvSW8.mjs +0 -103
- package/dist/client/objects-BQ8xvSW8.mjs.map +0 -1
- package/dist/client/objects-o2Cj_ndZ.mjs +0 -8
- package/dist/client/objects-o2Cj_ndZ.mjs.map +0 -1
- package/dist/client/pca-B60iWWfG.mjs +0 -251
- package/dist/client/pca-B60iWWfG.mjs.map +0 -1
- package/dist/client/routes-BOf-GDMM.mjs.map +0 -1
- package/dist/client/securitygroups-DRhFle2O.mjs.map +0 -1
- package/dist/client/useListWithFiltering-aPTUNRaW.mjs +0 -32
- package/dist/client/useListWithFiltering-aPTUNRaW.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ImageToastNotifications-BGyX2J6j.mjs","names":["formatBytesDecimal","SizeDisplay","size","undefined","span","MEMBER_STATUSES","PENDING","ACCEPTED","REJECTED","ALL","IMAGE_STATUSES","QUEUED","SAVING","ACTIVE","DEACTIVATED","KILLED","DELETED","PENDING_DELETE","IMAGE_VISIBILITY","PUBLIC","PRIVATE","SHARED","COMMUNITY","DISK_FORMATS","AMI","ARI","AKI","VHD","VHDX","VMDK","RAW","QCOW2","VDI","ISO","PLOOP","CONTAINER_FORMATS","BARE","OVF","OVA","DOCKER","React","DataGridRow","DataGridCell","TextInput","ButtonRow","Button","ImageMemberFormRow","memberId","imageId","errors","isLoading","onMemberIdChange","onSave","onCancel","useLingui","className","value","onChange","e","target","placeholder","t","errortext","required","icon","onClick","variant","title","disabled","React","useState","useEffect","DataGridRow","DataGridCell","Button","Stack","Spinner","MEMBER_STATUSES","ImageMemberRow","member","isDeleting","onDelete","canDelete","useLingui","confirm","setConfirm","timer","setTimeout","clearTimeout","handleConfirmDelete","getStatusLabel","status","PENDING","t","ACCEPTED","REJECTED","getStatusVariant","deleteButton","variant","onClick","title","aria-label","data-testid","disabled","memberIdDisplay","member_id","icon","className","image_id","distribution","alignment","React","useState","DataGrid","DataGridRow","DataGridHeadCell","DataGridCell","Stack","Spinner","Button","Message","trpcReact","ImageMemberFormRow","ImageMemberRow","MembersLoadingState","colSpan","distribution","alignment","variant","ImageMembersTable","image","imageMembers","isMembersLoading","canAdd","canRemove","isAddingMember","setIsAddingMember","setMessage","projectId","useLingui","utils","useUtils","memberId","setMemberId","errors","setErrors","deletingMembers","setDeletingMembers","Set","createMemberMutation","compute","createImageMember","useMutation","onSuccess","listImageMembers","invalidate","project_id","imageId","id","deleteMemberMutation","deleteImageMember","isPublicImage","visibility","shouldShowEmptyState","length","isLoading","isPending","validateForm","trimmedMemberId","trim","newErrors","t","some","member","member_id","Object","keys","resetForm","handleAddMember","text","type","mutateAsync","error","errorMessage","message","handleRemoveMember","memberIdToRemove","prev","add","newSet","delete","handleMemberIdChange","newMemberId","undefined","columns","direction","className","label","data-testid","onClick","disabled","onMemberIdChange","onSave","onCancel","map","index","isDeleting","has","onDelete","canDelete","React","useState","Modal","Form","FormRow","FormSection","TextInput","Select","SelectOption","Checkbox","Button","Spinner","Stack","Pill","IMAGE_VISIBILITY","EditImageDetailsModal","image","isOpen","isLoading","onClose","onSave","useLingui","properties","setProperties","name","tags","visibility","PRIVATE","protected","min_disk","min_ram","tagsInput","setTagsInput","errors","setErrors","arraysEqual","a","b","length","sortedA","sort","sortedB","every","val","index","isSubmitDisabled","handleInputChange","e","value","type","checked","target","prev","newErrors","handleSelectChange","handleNumericChange","numValue","parseInt","isNaN","handleTagsInputChange","handleAddTag","trimmedTag","trim","includes","handleTagKeyPress","key","preventDefault","handleRemoveTag","tagToRemove","filter","tag","validateForm","t","Object","keys","handleSubmit","updatedProperties","handleClose","open","onCancel","size","title","onConfirm","confirmButtonLabel","cancelButtonLabel","disableConfirmButton","distribution","alignment","variant","className","id","label","onChange","required","errortext","div","gap","direction","onKeyDown","helptext","placeholder","onClick","disabled","wrap","map","closeable","pillKey","pillValue","PUBLIC","SHARED","COMMUNITY","String","React","useState","useEffect","useMemo","useProjectId","Modal","Button","Spinner","Stack","DataGrid","DataGridRow","DataGridHeadCell","DataGridCell","TextInput","trpcReact","toStrValue","value","undefined","JSON","stringify","String","buildInitialMetadata","image","excludedProperties","Object","entries","filter","key","has","toLowerCase","map","strValue","isNew","isEditing","originalKey","originalValue","EditImageMetadataModalInner","isLoading","onClose","onSave","initialMetadata","useLingui","metadata","setMetadata","errors","setErrors","isAddingNew","setIsAddingNew","newKey","setNewKey","newValue","setNewValue","confirmDeleteIndex","setConfirmDeleteIndex","timer","setTimeout","clearTimeout","isSubmitDisabled","every","entry","length","validateKey","rowIndex","normalized","trim","t","isDuplicate","some","idx","handleAddNew","keyError","handleCancelAdd","handleEdit","index","i","handleSaveEdit","e","handleCancelEdit","handleDelete","_","handleKeyChange","prev","next","handleValueChange","handleSubmit","metadataObject","removedEntries","fromEntries","item","includes","forEach","success","handleClose","open","onCancel","size","title","onConfirm","confirmButtonLabel","cancelButtonLabel","disableConfirmButton","distribution","alignment","variant","div","direction","className","label","onClick","disabled","icon","columns","minContentColumns","onChange","target","placeholder","errortext","autoFocus","gap","span","data-testid","colSpan","EditImageMetadataModal","isOpen","projectId","data","excludedPropertiesData","isLoadingExcluded","isError","isErrorExcluded","compute","getImageMetadataExcludedProperties","useQuery","project_id","enabled","Set","s","id","updated_at","React","Button","ButtonRow","DataGrid","DataGridCell","DataGridHeadCell","DataGridRow","Message","Modal","ModalFooter","Spinner","Stack","SizeDisplay","DeleteImageModal","image","isOpen","isLoading","isDisabled","onClose","onDelete","useLingui","handleDelete","e","preventDefault","onCancel","size","title","open","modalFooter","className","variant","onClick","disabled","data-testid","distribution","alignment","div","text","t","columns","name","id","status","visibility","disk_format","created_at","Date","toLocaleDateString","React","DataGrid","DataGridCell","DataGridHeadCell","DataGridRow","Modal","Spinner","Stack","SizeDisplay","ActivateImageModal","image","isOpen","isLoading","onClose","onActivate","useLingui","handleActivate","e","preventDefault","onCancel","size","title","t","open","onConfirm","confirmButtonLabel","cancelButtonLabel","disableConfirmButton","distribution","alignment","variant","div","p","className","columns","name","id","status","visibility","disk_format","dt","Date","created_at","isNaN","getTime","toLocaleDateString","React","DataGrid","DataGridCell","DataGridHeadCell","DataGridRow","Modal","Spinner","Stack","SizeDisplay","DeactivateImageModal","image","isOpen","isLoading","onClose","onDeactivate","useLingui","handleDeactivate","e","preventDefault","onCancel","size","title","t","open","onConfirm","confirmButtonLabel","cancelButtonLabel","disableConfirmButton","distribution","alignment","variant","div","p","className","columns","name","id","status","visibility","disk_format","dt","Date","created_at","isNaN","getTime","toLocaleDateString","Stack","NotificationText","title","description","direction","gap","span","className","NotificationText","getImageUpdatedToast","imageName","config","variant","children","title","description","onDismiss","getImageUpdateErrorToast","message","getImageCreatedToast","getImageCreateErrorToast","getImageFileUploadErrorToast","fileName","getImageDeletedToast","getImageDeleteErrorToast","imageId","getImageActivatedToast","getImageDeactivatedToast","getImageActivationErrorToast","getImageDeactivationErrorToast","getBulkDeleteSuccessToast","successCount","totalCount","getBulkDeleteErrorToast","failedCount","getBulkDeletePartialToast","getBulkActivateSuccessToast","getBulkActivateErrorToast","getBulkActivatePartialToast","getBulkDeactivateSuccessToast","getBulkDeactivateErrorToast","getBulkDeactivatePartialToast","getImageAccessStatusUpdatedToast","newStatus","getImageAccessStatusErrorToast","errorMessage","getImageVisibilityUpdatedToast","visibility","getImageVisibilityUpdateErrorToast"],"sources":["../../src/client/routes/_auth/projects/$projectId/compute/-components/Images/-components/SizeDisplay.tsx","../../src/client/routes/_auth/projects/$projectId/compute/-constants/filters.ts","../../src/client/routes/_auth/projects/$projectId/compute/-components/Images/-components/ImageMemberFormRow.tsx","../../src/client/routes/_auth/projects/$projectId/compute/-components/Images/-components/ImageMemberRow.tsx","../../src/client/routes/_auth/projects/$projectId/compute/-components/Images/-components/ImageMembersTable.tsx","../../src/client/routes/_auth/projects/$projectId/compute/-components/Images/-components/EditImageDetailsModal.tsx","../../src/client/routes/_auth/projects/$projectId/compute/-components/Images/-components/EditImageMetadataModal.tsx","../../src/client/routes/_auth/projects/$projectId/compute/-components/Images/-components/DeleteImageModal.tsx","../../src/client/routes/_auth/projects/$projectId/compute/-components/Images/-components/ActivateImageModal.tsx","../../src/client/routes/_auth/projects/$projectId/compute/-components/Images/-components/DeactivateImageModal.tsx","../../src/client/routes/_auth/projects/$projectId/compute/-components/Images/-components/NotificationText.tsx","../../src/client/routes/_auth/projects/$projectId/compute/-components/Images/-components/ImageToastNotifications.tsx"],"sourcesContent":["import { formatBytesDecimal } from \"@/client/utils/formatBytes\"\n\ninterface SizeDisplayProps {\n size: number | null | undefined\n}\n\nexport function SizeDisplay({ size }: SizeDisplayProps) {\n if (size === undefined) return <span>N/A</span>\n\n return <span>{formatBytesDecimal(size)}</span>\n}\n","/**\n * OpenStack Glance image member status values\n * Reference: https://docs.openstack.org/glance/latest/user/glanceapi.html#image-sharing\n */\nexport const MEMBER_STATUSES = {\n /** Initial status when image is shared; member hasn't responded */\n PENDING: \"pending\",\n /** Member has accepted the shared image; appears in their image list */\n ACCEPTED: \"accepted\",\n /** Member has explicitly rejected the shared image; won't appear in their list */\n REJECTED: \"rejected\",\n /** Special filter value: returns members in all states (pending, accepted, rejected) */\n ALL: \"all\",\n} as const\n\n/**\n * OpenStack Glance image lifecycle states\n */\nexport const IMAGE_STATUSES = {\n /** Image metadata created, awaiting upload */\n QUEUED: \"queued\",\n /** Image data is being uploaded */\n SAVING: \"saving\",\n /** Image is ready to use */\n ACTIVE: \"active\",\n /** Image exists but is disabled for use */\n DEACTIVATED: \"deactivated\",\n /** Image upload failed or was interrupted */\n KILLED: \"killed\",\n /** Image is marked for deletion */\n DELETED: \"deleted\",\n /** Image deletion is in progress */\n PENDING_DELETE: \"pending_delete\",\n} as const\n\n/**\n * Image visibility/sharing levels\n */\nexport const IMAGE_VISIBILITY = {\n /** Visible to all users in the cloud */\n PUBLIC: \"public\",\n /** Visible only to the owner */\n PRIVATE: \"private\",\n /** Explicitly shared with specific projects */\n SHARED: \"shared\",\n /** Shared with all users, no explicit members */\n COMMUNITY: \"community\",\n /** Special filter value: returns all images accessible to the user (public, private, shared, community) */\n ALL: \"all\",\n} as const\n\n/**\n * Supported virtual disk formats\n */\nexport const DISK_FORMATS = {\n /** Amazon Machine Image */\n AMI: \"ami\",\n /** Amazon Ramdisk Image */\n ARI: \"ari\",\n /** Amazon Kernel Image */\n AKI: \"aki\",\n /** Virtual Hard Disk (Hyper-V) */\n VHD: \"vhd\",\n /** Virtual Hard Disk v2 (Hyper-V) */\n VHDX: \"vhdx\",\n /** Virtual Machine Disk (VMware) */\n VMDK: \"vmdk\",\n /** Raw unformatted disk image */\n RAW: \"raw\",\n /** QEMU Copy-On-Write v2 */\n QCOW2: \"qcow2\",\n /** Virtual Disk Image (VirtualBox) */\n VDI: \"vdi\",\n /** ISO 9660 optical disc image */\n ISO: \"iso\",\n /** Parallels Loopback Disk */\n PLOOP: \"ploop\",\n} as const\n\n/**\n * Supported container/packaging formats\n */\nexport const CONTAINER_FORMATS = {\n /** Amazon Machine Image */\n AMI: \"ami\",\n /** Amazon Ramdisk Image */\n ARI: \"ari\",\n /** Amazon Kernel Image */\n AKI: \"aki\",\n /** No container, just disk image */\n BARE: \"bare\",\n /** Open Virtualization Format */\n OVF: \"ovf\",\n /** Open Virtualization Archive (tar of OVF) */\n OVA: \"ova\",\n /** Docker container image */\n DOCKER: \"docker\",\n} as const\n\n/** Valid image member status values */\nexport type MemberStatus = (typeof MEMBER_STATUSES)[keyof typeof MEMBER_STATUSES]\n\n/** Valid image lifecycle status values */\nexport type ImageStatus = (typeof IMAGE_STATUSES)[keyof typeof IMAGE_STATUSES]\n\n/** Valid image visibility/sharing levels */\nexport type ImageVisibility = (typeof IMAGE_VISIBILITY)[keyof typeof IMAGE_VISIBILITY]\n\n/** Valid virtual disk format types */\nexport type DiskFormat = (typeof DISK_FORMATS)[keyof typeof DISK_FORMATS]\n\n/** Valid container/packaging format types */\nexport type ContainerFormat = (typeof CONTAINER_FORMATS)[keyof typeof CONTAINER_FORMATS]\n","import React from \"react\"\nimport { useLingui } from \"@lingui/react/macro\"\nimport { DataGridRow, DataGridCell, TextInput, ButtonRow, Button } from \"@cloudoperators/juno-ui-components\"\n\ninterface ImageMemberFormRowProps {\n memberId: string\n imageId: string\n errors: { memberId?: string }\n isLoading: boolean\n onMemberIdChange: (memberId: string) => void\n onSave: () => void\n onCancel: () => void\n}\n\nexport const ImageMemberFormRow: React.FC<ImageMemberFormRowProps> = ({\n memberId,\n imageId,\n errors,\n isLoading,\n onMemberIdChange,\n onSave,\n onCancel,\n}) => {\n const { t } = useLingui()\n\n return (\n <DataGridRow>\n <DataGridCell className=\"break-all\">{imageId}</DataGridCell>\n <DataGridCell className=\"pl-0\">\n <TextInput\n value={memberId}\n onChange={(e) => onMemberIdChange(e.target.value)}\n placeholder={t`Enter member ID`}\n errortext={errors.memberId}\n required\n />\n </DataGridCell>\n <DataGridCell></DataGridCell>\n <DataGridCell>\n <ButtonRow>\n <Button icon=\"check\" onClick={onSave} variant=\"primary\" title={t`Add Member`} disabled={isLoading} />\n <Button icon=\"cancel\" onClick={onCancel} title={t`Cancel`} disabled={isLoading} />\n </ButtonRow>\n </DataGridCell>\n </DataGridRow>\n )\n}\n","import React, { useState, useEffect } from \"react\"\nimport { useLingui } from \"@lingui/react/macro\"\nimport { DataGridRow, DataGridCell, Button, Stack, Spinner } from \"@cloudoperators/juno-ui-components\"\nimport { MEMBER_STATUSES } from \"../../../-constants/filters\"\n\ninterface ImageMember {\n image_id: string\n member_id: string\n status: string\n created_at: string\n updated_at: string\n}\n\ninterface ImageMemberRowProps {\n member: ImageMember\n isDeleting: boolean\n onDelete: () => void\n canDelete: boolean\n}\n\nexport const ImageMemberRow: React.FC<ImageMemberRowProps> = ({ member, isDeleting, onDelete, canDelete }) => {\n const { t } = useLingui()\n const [confirm, setConfirm] = useState(false)\n\n useEffect(() => {\n if (confirm) {\n const timer = setTimeout(() => {\n setConfirm(false)\n }, 3000)\n\n return () => clearTimeout(timer)\n }\n }, [confirm])\n\n const handleConfirmDelete = () => {\n setConfirm(false)\n onDelete()\n }\n\n const getStatusLabel = (status: string): string => {\n switch (status) {\n case MEMBER_STATUSES.PENDING:\n return t`Pending`\n case MEMBER_STATUSES.ACCEPTED:\n return t`Accepted`\n case MEMBER_STATUSES.REJECTED:\n return t`Rejected`\n default:\n return status\n }\n }\n\n const getStatusVariant = (status: string): string => {\n switch (status) {\n case MEMBER_STATUSES.PENDING:\n return \"warning\"\n case MEMBER_STATUSES.ACCEPTED:\n return \"success\"\n case MEMBER_STATUSES.REJECTED:\n return \"danger\"\n default:\n return \"default\"\n }\n }\n\n const deleteButton = () => {\n if (!canDelete) {\n return <></>\n }\n\n if (confirm) {\n return (\n <Button\n variant=\"primary-danger\"\n onClick={handleConfirmDelete}\n title={t`Remove member access`}\n aria-label={t`Remove member access`}\n data-testid=\"confirm-removal\"\n disabled={isDeleting}\n >\n {t`Remove`}\n </Button>\n )\n } else {\n const memberIdDisplay = member.member_id\n\n return (\n <Button\n icon=\"deleteForever\"\n onClick={() => setConfirm(true)}\n title={t`Remove access for ${memberIdDisplay}`}\n aria-label={t`Remove access for ${memberIdDisplay}`}\n data-testid={`remove-${memberIdDisplay}`}\n disabled={isDeleting}\n />\n )\n }\n }\n\n return (\n <DataGridRow>\n <DataGridCell className=\"break-all\">{member.image_id}</DataGridCell>\n <DataGridCell className=\"break-all\">{member.member_id}</DataGridCell>\n <DataGridCell className={`break-all text-theme-${getStatusVariant(member.status)}`}>\n {getStatusLabel(member.status)}\n </DataGridCell>\n <DataGridCell>\n {isDeleting ? (\n <Stack distribution=\"center\" alignment=\"center\">\n <Spinner variant=\"primary\" />\n </Stack>\n ) : (\n <Stack distribution=\"end\" alignment=\"end\">\n {deleteButton()}\n </Stack>\n )}\n </DataGridCell>\n </DataGridRow>\n )\n}\n","import React, { useState } from \"react\"\nimport { useLingui } from \"@lingui/react/macro\"\nimport {\n DataGrid,\n DataGridRow,\n DataGridHeadCell,\n DataGridCell,\n Stack,\n Spinner,\n Button,\n Message,\n} from \"@cloudoperators/juno-ui-components\"\nimport { GlanceImage, ImageMember } from \"@/server/Compute/types/image\"\nimport { trpcReact } from \"@/client/trpcClient\"\nimport { TRPCClientError } from \"@trpc/client\"\nimport { InferrableClientTypes } from \"@trpc/server/unstable-core-do-not-import\"\nimport { ImageMemberFormRow } from \"./ImageMemberFormRow\"\nimport { ImageMemberRow } from \"./ImageMemberRow\"\n\ninterface ImageMembersTableProps {\n image: GlanceImage\n imageMembers: ImageMember[] | undefined\n isMembersLoading: boolean\n canAdd: boolean\n canRemove: boolean\n isAddingMember: boolean\n setIsAddingMember: (adding: boolean) => void\n setMessage: (msg: { text: string; type: \"error\" | \"info\" } | null) => void\n projectId: string\n}\n\nfunction MembersLoadingState() {\n return (\n <DataGridRow>\n <DataGridCell colSpan={4}>\n <Stack distribution=\"center\" alignment=\"center\">\n <Spinner variant=\"primary\" />\n </Stack>\n </DataGridCell>\n </DataGridRow>\n )\n}\n\nexport const ImageMembersTable: React.FC<ImageMembersTableProps> = ({\n image,\n imageMembers,\n isMembersLoading,\n canAdd,\n canRemove,\n isAddingMember,\n setIsAddingMember,\n setMessage,\n projectId,\n}) => {\n const { t } = useLingui()\n const utils = trpcReact.useUtils()\n\n const [memberId, setMemberId] = useState(\"\")\n const [errors, setErrors] = useState<{ memberId?: string }>({})\n const [deletingMembers, setDeletingMembers] = useState<Set<string>>(new Set())\n\n const createMemberMutation = trpcReact.compute.createImageMember.useMutation({\n onSuccess: () => {\n utils.compute.listImageMembers.invalidate({ project_id: projectId, imageId: image.id })\n },\n })\n\n const deleteMemberMutation = trpcReact.compute.deleteImageMember.useMutation({\n onSuccess: () => {\n utils.compute.listImageMembers.invalidate({ project_id: projectId, imageId: image.id })\n },\n })\n\n const isPublicImage = image.visibility === \"public\"\n const shouldShowEmptyState = !imageMembers || imageMembers.length === 0\n const isLoading = createMemberMutation.isPending || deleteMemberMutation.isPending\n\n const validateForm = (): boolean => {\n const trimmedMemberId = memberId.trim()\n const newErrors: { memberId?: string } = {}\n\n if (!trimmedMemberId) {\n newErrors.memberId = t`Member ID (project UUID) is required.`\n } else if (imageMembers?.some((member) => member.member_id === trimmedMemberId)) {\n newErrors.memberId = t`This member already has access to this image.`\n }\n\n setErrors(newErrors)\n return Object.keys(newErrors).length === 0\n }\n\n const resetForm = () => {\n setMemberId(\"\")\n setErrors({})\n }\n\n const handleAddMember = async () => {\n if (!validateForm()) {\n setMessage({ text: t`Please fix the validation errors below.`, type: \"error\" })\n return\n }\n\n const trimmedMemberId = memberId.trim()\n\n try {\n await createMemberMutation.mutateAsync({\n project_id: projectId,\n imageId: image.id,\n member: trimmedMemberId,\n })\n\n setMessage({\n text: t`Member \"${trimmedMemberId}\" has been added successfully.`,\n type: \"info\",\n })\n resetForm()\n setIsAddingMember(false)\n } catch (error) {\n const errorMessage = (error as TRPCClientError<InferrableClientTypes>)?.message || t`Failed to add member`\n setMessage({\n text: errorMessage,\n type: \"error\",\n })\n }\n }\n\n const handleRemoveMember = async (memberIdToRemove: string) => {\n setDeletingMembers((prev) => new Set(prev).add(memberIdToRemove))\n\n try {\n await deleteMemberMutation.mutateAsync({\n project_id: projectId,\n imageId: image.id,\n memberId: memberIdToRemove,\n })\n\n setMessage({\n text: t`Member \"${memberIdToRemove}\" has been removed successfully.`,\n type: \"info\",\n })\n } catch (error) {\n const errorMessage = (error as TRPCClientError<InferrableClientTypes>)?.message || t`Failed to remove member`\n setMessage({\n text: errorMessage || t`Failed to remove member \"${memberIdToRemove}\"`,\n type: \"error\",\n })\n } finally {\n setDeletingMembers((prev) => {\n const newSet = new Set(prev)\n newSet.delete(memberIdToRemove)\n return newSet\n })\n }\n }\n\n const handleMemberIdChange = (newMemberId: string) => {\n setMemberId(newMemberId)\n if (errors.memberId) setErrors((prev) => ({ ...prev, memberId: undefined }))\n }\n\n if (isMembersLoading) {\n return (\n <DataGrid columns={4}>\n <DataGridRow>\n <DataGridHeadCell>{t`Image ID`}</DataGridHeadCell>\n <DataGridHeadCell>{t`Project ID`}</DataGridHeadCell>\n <DataGridHeadCell>{t`Status`}</DataGridHeadCell>\n <DataGridHeadCell></DataGridHeadCell>\n </DataGridRow>\n <MembersLoadingState />\n </DataGrid>\n )\n }\n\n if (isPublicImage) {\n return (\n <Message\n text={t`This is a public image. All users have access to it. Explicit sharing is not needed.`}\n variant=\"info\"\n />\n )\n }\n\n return (\n <>\n {canAdd && (\n <Stack direction=\"horizontal\" className=\"bg-theme-background-lvl-1 justify-end p-2\">\n <Button\n label={t`Add Project Access`}\n data-testid=\"addMemberButton\"\n onClick={() => setIsAddingMember(true)}\n variant=\"primary\"\n disabled={isAddingMember}\n />\n </Stack>\n )}\n\n <DataGrid columns={4}>\n <DataGridRow>\n <DataGridHeadCell>{t`Image ID`}</DataGridHeadCell>\n <DataGridHeadCell>{t`Member ID`}</DataGridHeadCell>\n <DataGridHeadCell>{t`Status`}</DataGridHeadCell>\n <DataGridHeadCell></DataGridHeadCell>\n </DataGridRow>\n\n {isAddingMember && (\n <ImageMemberFormRow\n memberId={memberId}\n imageId={image.id}\n errors={errors}\n isLoading={isLoading}\n onMemberIdChange={handleMemberIdChange}\n onSave={handleAddMember}\n onCancel={() => {\n resetForm()\n setIsAddingMember(false)\n setMessage(null)\n }}\n />\n )}\n\n {imageMembers?.map((member, index) => (\n <ImageMemberRow\n key={`${member.member_id}-${index}`}\n member={member}\n isDeleting={deletingMembers.has(member.member_id)}\n onDelete={() => handleRemoveMember(member.member_id)}\n canDelete={canRemove}\n />\n ))}\n\n {shouldShowEmptyState && !isAddingMember && (\n <DataGridRow>\n <DataGridCell colSpan={4} className=\"text-theme-default py-4 text-center\">\n {t`No projects have access to this image yet. Click \"Add Project Access\" to grant access.`}\n </DataGridCell>\n </DataGridRow>\n )}\n </DataGrid>\n </>\n )\n}\n","import React, { useState } from \"react\"\nimport { Trans, useLingui } from \"@lingui/react/macro\"\nimport {\n Modal,\n Form,\n FormRow,\n FormSection,\n TextInput,\n Select,\n SelectOption,\n Checkbox,\n Button,\n Spinner,\n Stack,\n Pill,\n} from \"@cloudoperators/juno-ui-components\"\nimport { GlanceImage } from \"@/server/Compute/types/image\"\nimport { IMAGE_VISIBILITY } from \"../../../-constants/filters\"\n\ninterface EditImageDetailsModalProps {\n image: GlanceImage\n isOpen: boolean\n isLoading?: boolean\n onClose: () => void\n onSave: (updatedProperties: Partial<GlanceImage>) => void\n}\n\ninterface ImageProperties {\n name: string\n tags: string[]\n visibility: string\n protected: boolean\n min_disk: number\n min_ram: number\n}\n\nexport const EditImageDetailsModal: React.FC<EditImageDetailsModalProps> = ({\n image,\n isOpen,\n isLoading = false,\n onClose,\n onSave,\n}) => {\n const { t } = useLingui()\n\n // Initialize local state from image prop\n const [properties, setProperties] = useState<ImageProperties>({\n name: image.name || \"\",\n tags: image.tags || [],\n visibility: image.visibility || IMAGE_VISIBILITY.PRIVATE,\n protected: image.protected || false,\n min_disk: image.min_disk || 0,\n min_ram: image.min_ram || 0,\n })\n\n const [tagsInput, setTagsInput] = useState<string>(\"\")\n const [errors, setErrors] = useState<{ [key: string]: string }>({})\n\n // Helper function to compare arrays\n const arraysEqual = (a: string[], b: string[]) => {\n if (a.length !== b.length) return false\n const sortedA = [...a].sort()\n const sortedB = [...b].sort()\n return sortedA.every((val, index) => val === sortedB[index])\n }\n\n const isSubmitDisabled =\n image.name === properties.name &&\n arraysEqual(image.tags || [], properties.tags) &&\n image.visibility === properties.visibility &&\n image.protected === properties.protected &&\n image.min_disk === properties.min_disk &&\n image.min_ram === properties.min_ram\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const { name, value, type, checked } = e.target\n\n setProperties((prev) => ({\n ...prev,\n [name]: type === \"checkbox\" ? checked : value,\n }))\n\n // Clear error for this field\n if (errors[name]) {\n setErrors((prev) => {\n const newErrors = { ...prev }\n delete newErrors[name]\n return newErrors\n })\n }\n }\n\n const handleSelectChange = (name: string, value: string | number | string[] | undefined) => {\n setProperties((prev) => ({\n ...prev,\n [name]: value,\n }))\n\n // Clear error for this field\n if (errors[name]) {\n setErrors((prev) => {\n const newErrors = { ...prev }\n delete newErrors[name]\n return newErrors\n })\n }\n }\n\n const handleNumericChange = (name: string, value: string) => {\n const numValue = value === \"\" ? 0 : parseInt(value, 10)\n\n if (!isNaN(numValue)) {\n setProperties((prev) => ({\n ...prev,\n [name]: numValue,\n }))\n\n // Clear error for this field\n if (errors[name]) {\n setErrors((prev) => {\n const newErrors = { ...prev }\n delete newErrors[name]\n return newErrors\n })\n }\n }\n }\n\n const handleTagsInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setTagsInput(e.target.value)\n }\n\n const handleAddTag = () => {\n const trimmedTag = tagsInput.trim()\n\n if (trimmedTag === \"\") return\n\n // Check if tag already exists\n if (properties.tags.includes(trimmedTag)) {\n setTagsInput(\"\")\n return\n }\n\n // Add tag to properties\n setProperties((prev) => ({\n ...prev,\n tags: [...prev.tags, trimmedTag],\n }))\n\n // Clear input\n setTagsInput(\"\")\n }\n\n const handleTagKeyPress = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n e.preventDefault()\n handleAddTag()\n }\n }\n\n const handleRemoveTag = (tagToRemove: string) => {\n setProperties((prev) => ({\n ...prev,\n tags: prev.tags.filter((tag) => tag !== tagToRemove),\n }))\n }\n\n const validateForm = (): boolean => {\n const newErrors: { [key: string]: string } = {}\n\n if (!properties.name || properties.name.trim() === \"\") {\n newErrors.name = t`Image name is required`\n }\n\n if (properties.min_disk < 0) {\n newErrors.min_disk = t`Minimum disk must be 0 or greater`\n }\n\n if (properties.min_ram < 0) {\n newErrors.min_ram = t`Minimum RAM must be 0 or greater`\n }\n\n setErrors(newErrors)\n return Object.keys(newErrors).length === 0\n }\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault()\n\n if (!validateForm()) {\n return\n }\n\n // Prepare updated properties\n const updatedProperties: Partial<GlanceImage> = {\n // Exclude entries without updates\n ...(image.name !== properties.name.trim() ? { name: properties.name.trim() } : {}),\n ...(!arraysEqual(image.tags || [], properties.tags) ? { tags: properties.tags } : {}),\n ...(image.visibility !== properties.visibility ? { visibility: properties.visibility } : {}),\n ...(image.protected !== properties.protected ? { protected: properties.protected } : {}),\n ...(image.min_disk !== properties.min_disk ? { min_disk: properties.min_disk } : {}),\n ...(image.min_ram !== properties.min_ram ? { min_ram: properties.min_ram } : {}),\n }\n\n onSave(updatedProperties)\n }\n\n const handleClose = () => {\n setErrors({})\n onClose()\n }\n\n return (\n <Modal\n open={isOpen}\n onCancel={handleClose}\n size=\"large\"\n title={t`Edit Image Details`}\n onConfirm={handleSubmit}\n confirmButtonLabel={t`Save Changes`}\n cancelButtonLabel={t`Cancel`}\n disableConfirmButton={isLoading || isSubmitDisabled}\n >\n {isLoading && (\n <Stack distribution=\"center\" alignment=\"center\">\n <Spinner variant=\"primary\" />\n </Stack>\n )}\n\n {!isLoading && (\n <Form>\n {/* Basic Metadata Section */}\n <FormSection className=\"mb-6\">\n <FormRow className=\"mb-4\">\n <TextInput\n id=\"name\"\n name=\"name\"\n label={t`Image Name`}\n value={properties.name}\n onChange={handleInputChange}\n required\n errortext={errors.name}\n />\n </FormRow>\n\n <FormRow className=\"my-6\">\n <div className=\"w-full\">\n <Stack gap=\"2\" direction=\"horizontal\" alignment=\"start\">\n <div className=\"flex-1\">\n <TextInput\n id=\"tags\"\n name=\"tags\"\n label={t`Tags`}\n value={tagsInput}\n onChange={handleTagsInputChange}\n onKeyDown={handleTagKeyPress}\n helptext={t`Enter a tag and press Enter or click Add`}\n placeholder={t`e.g., production, linux, ubuntu`}\n />\n </div>\n <Button variant=\"primary\" onClick={handleAddTag} disabled={isLoading || tagsInput.trim() === \"\"}>\n <Trans>Add</Trans>\n </Button>\n </Stack>\n\n {/* Display added tags as pills */}\n {properties.tags.length > 0 && (\n <Stack gap=\"2\" wrap={true} alignment=\"center\" className=\"mt-3\">\n {properties.tags.map((tag) => (\n <Pill key={tag} closeable pillKey=\"\" pillValue={tag} onClose={() => handleRemoveTag(tag)} />\n ))}\n </Stack>\n )}\n </div>\n </FormRow>\n\n <FormRow className=\"mb-4\">\n <Select\n id=\"visibility\"\n name=\"visibility\"\n label={t`Visibility`}\n value={properties.visibility}\n onChange={(value) => handleSelectChange(\"visibility\", value)}\n >\n <SelectOption value={IMAGE_VISIBILITY.PUBLIC} label={t`Public`} />\n <SelectOption value={IMAGE_VISIBILITY.PRIVATE} label={t`Private`} />\n <SelectOption value={IMAGE_VISIBILITY.SHARED} label={t`Shared`} />\n <SelectOption value={IMAGE_VISIBILITY.COMMUNITY} label={t`Community`} />\n </Select>\n </FormRow>\n\n <FormRow>\n <Checkbox\n id=\"protected\"\n name=\"protected\"\n label={t`Protected`}\n checked={properties.protected}\n onChange={handleInputChange}\n helptext={t`Protect this image from being deleted`}\n />\n </FormRow>\n </FormSection>\n\n {/* Resource Requirements Section */}\n <FormSection className=\"mb-6\">\n <FormRow className=\"mb-4\">\n <TextInput\n id=\"min_disk\"\n name=\"min_disk\"\n label={t`Minimum Disk (GB)`}\n type=\"number\"\n value={String(properties.min_disk)}\n onChange={(e) => handleNumericChange(\"min_disk\", e.target.value)}\n helptext={t`Minimum disk size required to boot this image`}\n errortext={errors.min_disk}\n // min={0}\n />\n </FormRow>\n\n <FormRow>\n <TextInput\n id=\"min_ram\"\n name=\"min_ram\"\n label={t`Minimum RAM (MB)`}\n type=\"number\"\n value={String(properties.min_ram)}\n onChange={(e) => handleNumericChange(\"min_ram\", e.target.value)}\n helptext={t`Minimum RAM required to boot this image`}\n errortext={errors.min_ram}\n // min={0}\n />\n </FormRow>\n </FormSection>\n </Form>\n )}\n </Modal>\n )\n}\n","import React, { useState, useEffect, useMemo } from \"react\"\nimport { useLingui } from \"@lingui/react/macro\"\nimport { useProjectId } from \"@/client/hooks\"\nimport {\n Modal,\n Button,\n Spinner,\n Stack,\n DataGrid,\n DataGridRow,\n DataGridHeadCell,\n DataGridCell,\n TextInput,\n} from \"@cloudoperators/juno-ui-components\"\nimport { GlanceImage } from \"@/server/Compute/types/image\"\nimport { trpcReact } from \"@/client/trpcClient\"\n\ninterface EditImageMetadataModalProps {\n image: GlanceImage\n isOpen: boolean\n isLoading?: boolean\n onClose: () => void\n onSave: (metadata: Record<string, string | null>) => Promise<boolean> | boolean\n}\n\ninterface MetadataEntry {\n key: string\n value: string\n isNew?: boolean\n isEditing?: boolean\n originalKey?: string\n originalValue?: string\n}\n\nfunction toStrValue(value: unknown): string {\n if (value === null || value === undefined) return \"\"\n if (typeof value === \"object\") return JSON.stringify(value)\n return String(value)\n}\n\nfunction buildInitialMetadata(image: GlanceImage, excludedProperties: Set<string>): MetadataEntry[] {\n return Object.entries(image)\n .filter(([key]) => !excludedProperties.has(key.toLowerCase()))\n .map(([key, value]) => {\n const strValue = toStrValue(value)\n return { key, value: strValue, isNew: false, isEditing: false, originalKey: key, originalValue: strValue }\n })\n}\n\n// Inner component receives already-computed initialMetadata so useState is seeded correctly\nfunction EditImageMetadataModalInner({\n isLoading,\n onClose,\n onSave,\n initialMetadata,\n excludedProperties,\n}: {\n isLoading: boolean\n onClose: () => void\n onSave: (metadata: Record<string, string | null>) => Promise<boolean> | boolean\n initialMetadata: MetadataEntry[]\n excludedProperties: Set<string>\n}) {\n const { t } = useLingui()\n\n const [metadata, setMetadata] = useState<MetadataEntry[]>(initialMetadata)\n const [errors, setErrors] = useState<{ [key: string]: string }>({})\n const [isAddingNew, setIsAddingNew] = useState(false)\n const [newKey, setNewKey] = useState(\"\")\n const [newValue, setNewValue] = useState(\"\")\n const [confirmDeleteIndex, setConfirmDeleteIndex] = useState<number | null>(null)\n\n useEffect(() => {\n if (confirmDeleteIndex !== null) {\n const timer = setTimeout(() => setConfirmDeleteIndex(null), 3000)\n return () => clearTimeout(timer)\n }\n }, [confirmDeleteIndex])\n\n const isSubmitDisabled =\n metadata.every((entry) => !entry.isNew && entry.key === entry.originalKey && entry.value === entry.originalValue) &&\n initialMetadata.length === metadata.length\n\n const validateKey = (key: string, originalKey?: string, rowIndex?: number): string | null => {\n const normalized = key?.trim().toLowerCase()\n if (!normalized) {\n return t`Key is required`\n }\n if (excludedProperties.has(normalized)) {\n return t`This property is reserved and cannot be modified`\n }\n const isDuplicate = metadata.some(\n (entry, idx) =>\n entry.key.trim().toLowerCase() === normalized && idx !== rowIndex && entry.originalKey !== originalKey\n )\n if (isDuplicate) {\n return t`A property with this key already exists`\n }\n return null\n }\n\n const handleAddNew = () => {\n const keyError = validateKey(newKey, undefined, metadata.length)\n if (keyError) {\n setErrors({ newKey: keyError })\n return\n }\n if (!newValue.trim()) {\n setErrors({ newValue: t`Value is required` })\n return\n }\n setMetadata([...metadata, { key: newKey.trim(), value: newValue.trim(), isNew: true, isEditing: false }])\n setNewKey(\"\")\n setNewValue(\"\")\n setIsAddingNew(false)\n setErrors({})\n }\n\n const handleCancelAdd = () => {\n setNewKey(\"\")\n setNewValue(\"\")\n setIsAddingNew(false)\n setErrors({})\n }\n\n const handleEdit = (index: number) => {\n setConfirmDeleteIndex(null)\n setMetadata(\n metadata.map((entry, i) => (i === index ? { ...entry, isEditing: true } : { ...entry, isEditing: false }))\n )\n setIsAddingNew(false)\n }\n\n const handleSaveEdit = (index: number) => {\n const entry = metadata[index]\n const keyError = validateKey(entry.key, entry.originalKey, index)\n if (keyError) {\n setErrors({ [`edit-${index}`]: keyError })\n return\n }\n if (!entry.value.trim()) {\n setErrors({ [`edit-${index}`]: t`Value is required` })\n return\n }\n setMetadata(\n metadata.map((e, i) => (i === index ? { ...e, isEditing: false, key: e.key.trim(), value: e.value.trim() } : e))\n )\n setErrors({})\n }\n\n const handleCancelEdit = (index: number) => {\n setMetadata(\n metadata.map((e, i) =>\n i === index ? { ...e, isEditing: false, key: e.originalKey ?? e.key, value: e.originalValue ?? e.value } : e\n )\n )\n setErrors({})\n }\n\n const handleDelete = (index: number) => {\n setMetadata(metadata.filter((_, i) => i !== index))\n setConfirmDeleteIndex(null)\n setErrors({})\n }\n\n const handleKeyChange = (index: number, value: string) => {\n setMetadata(metadata.map((entry, i) => (i === index ? { ...entry, key: value } : entry)))\n if (errors[`edit-${index}`]) {\n setErrors((prev) => {\n const next = { ...prev }\n delete next[`edit-${index}`]\n return next\n })\n }\n }\n\n const handleValueChange = (index: number, value: string) => {\n setMetadata(metadata.map((entry, i) => (i === index ? { ...entry, value } : entry)))\n if (errors[`edit-${index}`]) {\n setErrors((prev) => {\n const next = { ...prev }\n delete next[`edit-${index}`]\n return next\n })\n }\n }\n\n const handleSubmit = async () => {\n const metadataObject: Record<string, string> = {}\n const removedEntries = Object.fromEntries(\n initialMetadata\n .filter(\n (entry) =>\n !metadata.map((item) => item.originalKey).includes(entry.originalKey) ||\n !metadata.map((item) => item.key).includes(entry.key)\n )\n .map((entry) => [entry.key, null])\n )\n metadata\n .filter((entry) => entry.isNew || entry.value !== entry.originalValue || entry.key !== entry.originalKey)\n .forEach((entry) => {\n metadataObject[entry.key] = entry.value\n })\n const success = await onSave({ ...metadataObject, ...removedEntries })\n if (success) onClose()\n }\n\n const handleClose = () => {\n setMetadata(initialMetadata)\n setIsAddingNew(false)\n setNewKey(\"\")\n setNewValue(\"\")\n setErrors({})\n onClose()\n }\n\n return (\n <Modal\n open\n onCancel={handleClose}\n size=\"large\"\n title={t`Edit Image Metadata`}\n onConfirm={handleSubmit}\n confirmButtonLabel={t`Save Changes`}\n cancelButtonLabel={t`Cancel`}\n disableConfirmButton={isLoading || isAddingNew || metadata.some((e) => e.isEditing) || isSubmitDisabled}\n >\n {isLoading && (\n <Stack distribution=\"center\" alignment=\"center\">\n <Spinner variant=\"primary\" />\n </Stack>\n )}\n\n {!isLoading && (\n <div>\n <Stack direction=\"horizontal\" className=\"jn:bg-theme-background-lvl-1 mb-4 justify-end p-2\">\n <Button\n label={t`Add Property`}\n onClick={() => setIsAddingNew(true)}\n variant=\"primary\"\n disabled={isAddingNew || metadata.some((e) => e.isEditing)}\n icon=\"addCircle\"\n />\n </Stack>\n\n <DataGrid columns={3} minContentColumns={[2]} className=\"mb-6\">\n <DataGridRow>\n <DataGridHeadCell>{t`Property Key`}</DataGridHeadCell>\n <DataGridHeadCell>{t`Value`}</DataGridHeadCell>\n <DataGridHeadCell></DataGridHeadCell>\n </DataGridRow>\n\n {isAddingNew && (\n <DataGridRow>\n <DataGridCell>\n <TextInput\n value={newKey}\n onChange={(e) => {\n setNewKey(e.target.value)\n if (errors.newKey) {\n setErrors((prev) => {\n const next = { ...prev }\n delete next.newKey\n return next\n })\n }\n }}\n placeholder={t`property_key`}\n errortext={errors.newKey}\n autoFocus\n />\n </DataGridCell>\n <DataGridCell>\n <TextInput\n value={newValue}\n onChange={(e) => {\n setNewValue(e.target.value)\n if (errors.newValue) {\n setErrors((prev) => {\n const next = { ...prev }\n delete next.newValue\n return next\n })\n }\n }}\n placeholder={t`Value`}\n errortext={errors.newValue}\n />\n </DataGridCell>\n <DataGridCell>\n <Stack direction=\"horizontal\" gap=\"2\">\n <Button size=\"small\" variant=\"primary\" onClick={handleAddNew} icon=\"check\" title={t`Save`} />\n <Button size=\"small\" variant=\"subdued\" onClick={handleCancelAdd} icon=\"close\" title={t`Discard`} />\n </Stack>\n </DataGridCell>\n </DataGridRow>\n )}\n\n {metadata.map((entry, index) => (\n <DataGridRow key={`${entry.originalKey}-${index}`}>\n <DataGridCell>\n {entry.isEditing ? (\n <TextInput\n value={entry.key}\n onChange={(e) => handleKeyChange(index, e.target.value)}\n errortext={errors[`edit-${index}`]}\n />\n ) : (\n <span className=\"jn:text-theme-high block max-w-xs truncate\" title={entry.key}>\n {entry.key}\n </span>\n )}\n </DataGridCell>\n <DataGridCell>\n {entry.isEditing ? (\n <TextInput value={entry.value} onChange={(e) => handleValueChange(index, e.target.value)} />\n ) : (\n <span className=\"jn:text-theme-default block max-w-md truncate\" title={entry.value}>\n {entry.value}\n </span>\n )}\n </DataGridCell>\n <DataGridCell>\n {entry.isEditing ? (\n <Stack direction=\"horizontal\" gap=\"2\">\n <Button\n size=\"small\"\n variant=\"primary\"\n onClick={() => handleSaveEdit(index)}\n icon=\"check\"\n title={t`Save`}\n />\n <Button\n size=\"small\"\n variant=\"subdued\"\n onClick={() => handleCancelEdit(index)}\n icon=\"close\"\n title={t`Discard`}\n />\n </Stack>\n ) : (\n <Stack direction=\"horizontal\" gap=\"2\">\n {confirmDeleteIndex !== index && (\n <Button\n size=\"small\"\n variant=\"subdued\"\n onClick={() => handleEdit(index)}\n icon=\"edit\"\n data-testid={`edit-${entry.key}`}\n title={t`Edit`}\n disabled={isAddingNew || metadata.some((e) => e.isEditing)}\n />\n )}\n {confirmDeleteIndex === index ? (\n <Button\n size=\"small\"\n variant=\"primary-danger\"\n onClick={() => handleDelete(index)}\n data-testid={`confirm-delete-${entry.key}`}\n title={t`Delete`}\n disabled={isAddingNew || metadata.some((e) => e.isEditing)}\n >\n {t`Delete`}\n </Button>\n ) : (\n <Button\n size=\"small\"\n onClick={() => setConfirmDeleteIndex(index)}\n icon=\"deleteForever\"\n data-testid={`delete-${entry.key}`}\n title={t`Delete`}\n disabled={isAddingNew || metadata.some((e) => e.isEditing)}\n />\n )}\n </Stack>\n )}\n </DataGridCell>\n </DataGridRow>\n ))}\n\n {metadata.length === 0 && !isAddingNew && (\n <DataGridRow>\n <DataGridCell colSpan={3} className=\"jn:text-theme-light py-8 text-center\">\n <Stack alignment=\"center\">\n <span>{t`No custom metadata properties found. Click \"Add Property\" to create one.`}</span>\n </Stack>\n </DataGridCell>\n </DataGridRow>\n )}\n </DataGrid>\n </div>\n )}\n </Modal>\n )\n}\n\nexport const EditImageMetadataModal: React.FC<EditImageMetadataModalProps> = ({\n image,\n isOpen,\n isLoading = false,\n onClose,\n onSave,\n}) => {\n const { t } = useLingui()\n const projectId = useProjectId()\n const {\n data: excludedPropertiesData,\n isLoading: isLoadingExcluded,\n isError: isErrorExcluded,\n } = trpcReact.compute.getImageMetadataExcludedProperties.useQuery(\n { project_id: projectId },\n {\n enabled: isOpen,\n }\n )\n const excludedProperties = useMemo(\n () => new Set((excludedPropertiesData ?? []).map((s) => s.toLowerCase())),\n [excludedPropertiesData]\n )\n const initialMetadata = useMemo(\n () => buildInitialMetadata(image, excludedProperties),\n [image.id, image.updated_at, excludedProperties]\n )\n\n if (!isOpen) return null\n\n if (isLoadingExcluded) {\n return (\n <Modal open onCancel={onClose} size=\"large\" title={t`Edit Image Metadata`}>\n <Stack distribution=\"center\" alignment=\"center\">\n <Spinner variant=\"primary\" />\n </Stack>\n </Modal>\n )\n }\n\n if (isErrorExcluded) {\n return (\n <Modal open onCancel={onClose} size=\"large\" title={t`Edit Image Metadata`}>\n <Stack distribution=\"center\" alignment=\"center\">\n <span>{t`Failed to load metadata configuration.`}</span>\n </Stack>\n </Modal>\n )\n }\n\n return (\n <EditImageMetadataModalInner\n key={`${image.id}-${image.updated_at}-${excludedProperties.size}`}\n isLoading={isLoading}\n onClose={onClose}\n onSave={onSave}\n initialMetadata={initialMetadata}\n excludedProperties={excludedProperties}\n />\n )\n}\n","import React from \"react\"\nimport { Trans, useLingui } from \"@lingui/react/macro\"\nimport { GlanceImage } from \"@/server/Compute/types/image\"\nimport {\n Button,\n ButtonRow,\n DataGrid,\n DataGridCell,\n DataGridHeadCell,\n DataGridRow,\n Message,\n Modal,\n ModalFooter,\n Spinner,\n Stack,\n} from \"@cloudoperators/juno-ui-components\"\nimport { SizeDisplay } from \"./SizeDisplay\"\ninterface DeleteImageModalProps {\n image: GlanceImage\n isOpen: boolean\n isLoading: boolean\n isDisabled: boolean\n onClose: () => void\n onDelete: (updatedImage: GlanceImage) => void\n}\n\nexport const DeleteImageModal: React.FC<DeleteImageModalProps> = ({\n image,\n isOpen,\n isLoading,\n isDisabled,\n onClose,\n onDelete,\n}) => {\n if (!image) return null\n\n const { t } = useLingui()\n\n const handleDelete = (e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault()\n onDelete(image)\n }\n\n return (\n <Modal\n onCancel={onClose}\n size=\"small\"\n title=\"Delete Image\"\n open={isOpen}\n modalFooter={\n <ModalFooter className=\"flex justify-end\">\n <ButtonRow>\n <Button variant=\"default\" onClick={onClose}>\n <Trans>Cancel</Trans>\n </Button>\n <Button\n variant=\"primary-danger\"\n onClick={(e) => {\n handleDelete(e)\n onClose()\n }}\n disabled={isLoading || isDisabled}\n data-testid={`delete-image-button`}\n >\n {isLoading ? <Spinner size=\"small\" /> : <Trans>Delete</Trans>}\n </Button>\n </ButtonRow>\n </ModalFooter>\n }\n >\n {isLoading && (\n <Stack distribution=\"center\" alignment=\"center\">\n <Spinner variant=\"primary\" />\n </Stack>\n )}\n {!isLoading && (\n <div>\n <Message\n text={t`This action cannot be undone. The image will be permanently deleted.`}\n variant=\"danger\"\n className=\"mb-4\"\n />\n\n {image && (\n <DataGrid columns={2}>\n <DataGridRow>\n <DataGridHeadCell>{t`Name`}</DataGridHeadCell>\n <DataGridCell>{image.name || t`Unnamed`}</DataGridCell>\n </DataGridRow>\n <DataGridRow>\n <DataGridHeadCell>{t`Id`}</DataGridHeadCell>\n <DataGridCell>{image.id}</DataGridCell>\n </DataGridRow>\n <DataGridRow>\n <DataGridHeadCell>{t`Status`}</DataGridHeadCell>\n <DataGridCell>{image.status}</DataGridCell>\n </DataGridRow>\n <DataGridRow>\n <DataGridHeadCell>{t`Visibility`}</DataGridHeadCell>\n <DataGridCell>{image.visibility}</DataGridCell>\n </DataGridRow>\n <DataGridRow>\n <DataGridHeadCell>{t`Size`}</DataGridHeadCell>\n <DataGridCell>\n <SizeDisplay size={image.size} />\n </DataGridCell>\n </DataGridRow>\n <DataGridRow>\n <DataGridHeadCell>{t`Disk Format`}</DataGridHeadCell>\n <DataGridCell>{image.disk_format || t`N/A`}</DataGridCell>\n </DataGridRow>\n <DataGridRow>\n <DataGridHeadCell>{t`Created`}</DataGridHeadCell>\n <DataGridCell>\n {image.created_at ? new Date(image.created_at).toLocaleDateString() : t`N/A`}\n </DataGridCell>\n </DataGridRow>\n </DataGrid>\n )}\n </div>\n )}\n </Modal>\n )\n}\n","import React from \"react\"\nimport { Trans, useLingui } from \"@lingui/react/macro\"\nimport { GlanceImage } from \"@/server/Compute/types/image\"\nimport {\n DataGrid,\n DataGridCell,\n DataGridHeadCell,\n DataGridRow,\n Modal,\n Spinner,\n Stack,\n} from \"@cloudoperators/juno-ui-components\"\nimport { SizeDisplay } from \"./SizeDisplay\"\n\ninterface ActivateImageModalProps {\n image: GlanceImage\n isOpen: boolean\n isLoading: boolean\n onClose: () => void\n onActivate: (image: GlanceImage) => void\n}\n\nexport const ActivateImageModal: React.FC<ActivateImageModalProps> = ({\n image,\n isOpen,\n isLoading,\n onClose,\n onActivate,\n}) => {\n if (!image) return null\n\n const { t } = useLingui()\n\n const handleActivate = (e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault()\n onActivate(image)\n }\n\n return (\n <Modal\n onCancel={onClose}\n size=\"small\"\n title={t`Activate Image`}\n open={isOpen}\n onConfirm={handleActivate}\n confirmButtonLabel={t`Activate`}\n cancelButtonLabel={t`Cancel`}\n disableConfirmButton={isLoading}\n >\n {isLoading && (\n <Stack distribution=\"center\" alignment=\"center\">\n <Spinner variant=\"primary\" />\n </Stack>\n )}\n {!isLoading && (\n <div>\n <p className=\"mb-6\">\n <Trans>Activating this image will allow it to be used to launch new instances again.</Trans>\n </p>\n\n <DataGrid columns={2}>\n <DataGridRow>\n <DataGridHeadCell>{t`Name`}</DataGridHeadCell>\n <DataGridCell>{image.name || t`Unnamed`}</DataGridCell>\n </DataGridRow>\n <DataGridRow>\n <DataGridHeadCell>{t`Id`}</DataGridHeadCell>\n <DataGridCell>{image.id}</DataGridCell>\n </DataGridRow>\n <DataGridRow>\n <DataGridHeadCell>{t`Status`}</DataGridHeadCell>\n <DataGridCell>{image.status}</DataGridCell>\n </DataGridRow>\n <DataGridRow>\n <DataGridHeadCell>{t`Visibility`}</DataGridHeadCell>\n <DataGridCell>{image.visibility}</DataGridCell>\n </DataGridRow>\n <DataGridRow>\n <DataGridHeadCell>{t`Size`}</DataGridHeadCell>\n <DataGridCell>\n <SizeDisplay size={image.size} />\n </DataGridCell>\n </DataGridRow>\n <DataGridRow>\n <DataGridHeadCell>{t`Disk Format`}</DataGridHeadCell>\n <DataGridCell>{image.disk_format || t`N/A`}</DataGridCell>\n </DataGridRow>\n <DataGridRow>\n <DataGridHeadCell>{t`Created`}</DataGridHeadCell>\n <DataGridCell>\n {(() => {\n const dt = new Date(image.created_at ?? \"\")\n return !isNaN(dt.getTime()) ? dt.toLocaleDateString() : t`N/A`\n })()}\n </DataGridCell>\n </DataGridRow>\n </DataGrid>\n </div>\n )}\n </Modal>\n )\n}\n","import React from \"react\"\nimport { Trans, useLingui } from \"@lingui/react/macro\"\nimport { GlanceImage } from \"@/server/Compute/types/image\"\nimport {\n DataGrid,\n DataGridCell,\n DataGridHeadCell,\n DataGridRow,\n Modal,\n Spinner,\n Stack,\n} from \"@cloudoperators/juno-ui-components\"\nimport { SizeDisplay } from \"./SizeDisplay\"\n\ninterface DeactivateImageModalProps {\n image: GlanceImage\n isOpen: boolean\n isLoading: boolean\n onClose: () => void\n onDeactivate: (image: GlanceImage) => void\n}\n\nexport const DeactivateImageModal: React.FC<DeactivateImageModalProps> = ({\n image,\n isOpen,\n isLoading,\n onClose,\n onDeactivate,\n}) => {\n if (!image) return null\n\n const { t } = useLingui()\n\n const handleDeactivate = (e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault()\n onDeactivate(image)\n }\n\n return (\n <Modal\n onCancel={onClose}\n size=\"small\"\n title={t`Deactivate Image`}\n open={isOpen}\n onConfirm={handleDeactivate}\n confirmButtonLabel={t`Deactivate`}\n cancelButtonLabel={t`Cancel`}\n disableConfirmButton={isLoading}\n >\n {isLoading && (\n <Stack distribution=\"center\" alignment=\"center\">\n <Spinner variant=\"primary\" />\n </Stack>\n )}\n {!isLoading && (\n <div>\n <p className=\"mb-6\">\n <Trans>\n Deactivating this image will prevent it from being used to launch new instances. Existing instances will\n not be affected.\n </Trans>\n </p>\n\n <DataGrid columns={2}>\n <DataGridRow>\n <DataGridHeadCell>{t`Name`}</DataGridHeadCell>\n <DataGridCell>{image.name || t`Unnamed`}</DataGridCell>\n </DataGridRow>\n <DataGridRow>\n <DataGridHeadCell>{t`Id`}</DataGridHeadCell>\n <DataGridCell>{image.id}</DataGridCell>\n </DataGridRow>\n <DataGridRow>\n <DataGridHeadCell>{t`Status`}</DataGridHeadCell>\n <DataGridCell>{image.status}</DataGridCell>\n </DataGridRow>\n <DataGridRow>\n <DataGridHeadCell>{t`Visibility`}</DataGridHeadCell>\n <DataGridCell>{image.visibility}</DataGridCell>\n </DataGridRow>\n <DataGridRow>\n <DataGridHeadCell>{t`Size`}</DataGridHeadCell>\n <DataGridCell>\n <SizeDisplay size={image.size} />\n </DataGridCell>\n </DataGridRow>\n <DataGridRow>\n <DataGridHeadCell>{t`Disk Format`}</DataGridHeadCell>\n <DataGridCell>{image.disk_format || t`N/A`}</DataGridCell>\n </DataGridRow>\n <DataGridRow>\n <DataGridHeadCell>{t`Created`}</DataGridHeadCell>\n <DataGridCell>\n {(() => {\n const dt = new Date(image.created_at ?? \"\")\n return !isNaN(dt.getTime()) ? dt.toLocaleDateString() : t`N/A`\n })()}\n </DataGridCell>\n </DataGridRow>\n </DataGrid>\n </div>\n )}\n </Modal>\n )\n}\n","import { ReactNode } from \"react\"\nimport { Stack } from \"@cloudoperators/juno-ui-components/index\"\n\ninterface NotificationTextProps {\n title: ReactNode\n description: ReactNode\n}\n\nexport function NotificationText({ title, description }: NotificationTextProps) {\n return (\n <Stack direction=\"vertical\" gap=\"1.5\">\n <span>{title}</span>\n <span className=\"text-theme-light\">{description}</span>\n </Stack>\n )\n}\n","import { ToastProps } from \"@cloudoperators/juno-ui-components\"\nimport { Trans } from \"@lingui/react/macro\"\nimport { NotificationText } from \"./NotificationText\"\n\ninterface ToastConfig {\n onDismiss: () => void\n}\n\nexport const getImageUpdatedToast = (imageName: string, config: ToastConfig): ToastProps => ({\n variant: \"success\",\n children: (\n <NotificationText\n title={<Trans>Image Instance</Trans>}\n description={<Trans>Image instance \"{imageName}\" has been updated</Trans>}\n />\n ),\n onDismiss: config.onDismiss,\n})\n\nexport const getImageUpdateErrorToast = (imageName: string, message: string, config: ToastConfig): ToastProps => ({\n variant: \"error\",\n children: (\n <NotificationText\n title={<Trans>Unable to Update Image</Trans>}\n description={\n <>\n <Trans>The image \"{imageName}\" could not be updated: </Trans>\n {message}\n </>\n }\n />\n ),\n onDismiss: config.onDismiss,\n})\n\nexport const getImageCreatedToast = (imageName: string, config: ToastConfig): ToastProps => ({\n variant: \"success\",\n children: (\n <NotificationText\n title={<Trans>Image Instance</Trans>}\n description={<Trans>Image instance \"{imageName}\" has been created</Trans>}\n />\n ),\n onDismiss: config.onDismiss,\n})\n\nexport const getImageCreateErrorToast = (imageName: string, message: string, config: ToastConfig): ToastProps => ({\n variant: \"error\",\n children: (\n <NotificationText\n title={<Trans>Unable to Create Image</Trans>}\n description={\n <>\n <Trans>The image \"{imageName}\" could not be created: </Trans>\n {message}\n </>\n }\n />\n ),\n onDismiss: config.onDismiss,\n})\n\nexport const getImageFileUploadErrorToast = (fileName: string, message: string, config: ToastConfig): ToastProps => ({\n variant: \"error\",\n children: (\n <NotificationText\n title={<Trans>Unable to Upload Image File</Trans>}\n description={\n <>\n <Trans>Failed to upload file \"{fileName}\": </Trans>\n {message}\n </>\n }\n />\n ),\n onDismiss: config.onDismiss,\n})\n\nexport const getImageDeletedToast = (imageName: string, config: ToastConfig): ToastProps => ({\n variant: \"success\",\n children: (\n <NotificationText\n title={<Trans>Image Instance</Trans>}\n description={<Trans>Image instance \"{imageName}\" has been deleted</Trans>}\n />\n ),\n onDismiss: config.onDismiss,\n})\n\nexport const getImageDeleteErrorToast = (imageId: string, message: string, config: ToastConfig): ToastProps => ({\n variant: \"error\",\n children: (\n <NotificationText\n title={<Trans>Unable to Delete Image</Trans>}\n description={\n <Trans>\n The image \"{imageId}\" could not be deleted: {message}\n </Trans>\n }\n />\n ),\n onDismiss: config.onDismiss,\n})\n\nexport const getImageActivatedToast = (imageName: string, config: ToastConfig): ToastProps => ({\n variant: \"success\",\n children: (\n <NotificationText\n title={<Trans>Image Instance</Trans>}\n description={<Trans>Image instance \"{imageName}\" has been activated</Trans>}\n />\n ),\n onDismiss: config.onDismiss,\n})\n\nexport const getImageDeactivatedToast = (imageName: string, config: ToastConfig): ToastProps => ({\n variant: \"success\",\n children: (\n <NotificationText\n title={<Trans>Image Instance</Trans>}\n description={<Trans>Image instance \"{imageName}\" has been deactivated</Trans>}\n />\n ),\n onDismiss: config.onDismiss,\n})\n\nexport const getImageActivationErrorToast = (imageId: string, message: string, config: ToastConfig): ToastProps => ({\n variant: \"error\",\n children: (\n <NotificationText\n title={<Trans>Unable to Re-activate Image</Trans>}\n description={\n <Trans>\n The image \"{imageId}\" could not be re-activated: {message}\n </Trans>\n }\n />\n ),\n onDismiss: config.onDismiss,\n})\n\nexport const getImageDeactivationErrorToast = (imageId: string, message: string, config: ToastConfig): ToastProps => ({\n variant: \"error\",\n children: (\n <NotificationText\n title={<Trans>Unable to Deactivate Image</Trans>}\n description={\n <Trans>\n The image \"{imageId}\" could not be deactivated: {message}\n </Trans>\n }\n />\n ),\n onDismiss: config.onDismiss,\n})\n\n// Bulk operation toasts\nexport const getBulkDeleteSuccessToast = (\n successCount: number,\n totalCount: number,\n config: ToastConfig\n): ToastProps => ({\n variant: \"success\",\n children: (\n <NotificationText\n title={<Trans>Images Deleted</Trans>}\n description={\n <Trans>\n Successfully deleted {successCount} of {totalCount} image(s)\n </Trans>\n }\n />\n ),\n onDismiss: config.onDismiss,\n})\n\nexport const getBulkDeleteErrorToast = (failedCount: number, totalCount: number, config: ToastConfig): ToastProps => ({\n variant: \"error\",\n children: (\n <NotificationText\n title={<Trans>Failed to Delete Images</Trans>}\n description={\n <Trans>\n Failed to delete {failedCount} of {totalCount} image(s). Some images may be protected or in use.\n </Trans>\n }\n />\n ),\n onDismiss: config.onDismiss,\n})\n\nexport const getBulkDeletePartialToast = (\n successCount: number,\n failedCount: number,\n config: ToastConfig\n): ToastProps => ({\n variant: \"warning\",\n children: (\n <NotificationText\n title={<Trans>Partial Delete Success</Trans>}\n description={\n <Trans>\n Deleted {successCount} image(s), but {failedCount} image(s) could not be deleted.\n </Trans>\n }\n />\n ),\n onDismiss: config.onDismiss,\n})\n\nexport const getBulkActivateSuccessToast = (\n successCount: number,\n totalCount: number,\n config: ToastConfig\n): ToastProps => ({\n variant: \"success\",\n children: (\n <NotificationText\n title={<Trans>Images Activated</Trans>}\n description={\n <Trans>\n Successfully activated {successCount} of {totalCount} image(s)\n </Trans>\n }\n />\n ),\n onDismiss: config.onDismiss,\n})\n\nexport const getBulkActivateErrorToast = (\n failedCount: number,\n totalCount: number,\n config: ToastConfig\n): ToastProps => ({\n variant: \"error\",\n children: (\n <NotificationText\n title={<Trans>Failed to Activate Images</Trans>}\n description={\n <Trans>\n Failed to activate {failedCount} of {totalCount} image(s). Some images may already be active or in an invalid\n state.\n </Trans>\n }\n />\n ),\n onDismiss: config.onDismiss,\n})\n\nexport const getBulkActivatePartialToast = (\n successCount: number,\n failedCount: number,\n config: ToastConfig\n): ToastProps => ({\n variant: \"warning\",\n children: (\n <NotificationText\n title={<Trans>Partial Activation Success</Trans>}\n description={\n <Trans>\n Activated {successCount} image(s), but {failedCount} image(s) could not be activated.\n </Trans>\n }\n />\n ),\n onDismiss: config.onDismiss,\n})\n\nexport const getBulkDeactivateSuccessToast = (\n successCount: number,\n totalCount: number,\n config: ToastConfig\n): ToastProps => ({\n variant: \"success\",\n children: (\n <NotificationText\n title={<Trans>Images Deactivated</Trans>}\n description={\n <Trans>\n Successfully deactivated {successCount} of {totalCount} image(s)\n </Trans>\n }\n />\n ),\n onDismiss: config.onDismiss,\n})\n\nexport const getBulkDeactivateErrorToast = (\n failedCount: number,\n totalCount: number,\n config: ToastConfig\n): ToastProps => ({\n variant: \"error\",\n children: (\n <NotificationText\n title={<Trans>Failed to Deactivate Images</Trans>}\n description={\n <Trans>\n Failed to deactivate {failedCount} of {totalCount} image(s). Some images may already be deactivated or in an\n invalid state.\n </Trans>\n }\n />\n ),\n onDismiss: config.onDismiss,\n})\n\nexport const getBulkDeactivatePartialToast = (\n successCount: number,\n failedCount: number,\n config: ToastConfig\n): ToastProps => ({\n variant: \"warning\",\n children: (\n <NotificationText\n title={<Trans>Partial Deactivation Success</Trans>}\n description={\n <Trans>\n Deactivated {successCount} image(s), but {failedCount} image(s) could not be deactivated.\n </Trans>\n }\n />\n ),\n onDismiss: config.onDismiss,\n})\n\n// Image access toasts\nexport const getImageAccessStatusUpdatedToast = (newStatus: string, config: ToastConfig): ToastProps => ({\n variant: \"info\",\n children: (\n <NotificationText\n title={<Trans>Access Status</Trans>}\n description={<Trans>Access status updated to \"{newStatus}\".</Trans>}\n />\n ),\n onDismiss: config.onDismiss,\n})\n\nexport const getImageAccessStatusErrorToast = (errorMessage: string, config: ToastConfig): ToastProps => ({\n variant: \"error\",\n children: (\n <NotificationText\n title={<Trans>Access Status</Trans>}\n description={errorMessage || <Trans>Failed to update access status</Trans>}\n />\n ),\n onDismiss: config.onDismiss,\n})\n\n// Image visibility toasts\nexport const getImageVisibilityUpdatedToast = (\n imageName: string,\n visibility: string,\n config: ToastConfig\n): ToastProps => ({\n variant: \"success\",\n children: (\n <NotificationText\n title={<Trans>Image Visibility</Trans>}\n description={\n <Trans>\n Image \"{imageName}\" visibility updated to {visibility}\n </Trans>\n }\n />\n ),\n onDismiss: config.onDismiss,\n})\n\nexport const getImageVisibilityUpdateErrorToast = (\n imageName: string,\n message: string,\n config: ToastConfig\n): ToastProps => ({\n variant: \"error\",\n children: (\n <NotificationText\n title={<Trans>Unable to Update Image Visibility</Trans>}\n description={\n <>\n <Trans>Failed to update visibility for \"{imageName}\": </Trans>\n {message}\n </>\n }\n />\n ),\n onDismiss: config.onDismiss,\n})\n"],"mappings":";;;;;;;;;AAMA,SAAgBC,EAAY,EAAEC,WAAwB;CAGpD,OAFIA,MAASC,KAAAA,IAAkB,gBAACC,QAAAA,EAAAA,UAAK,MAAA,CAAA,IAE9B,gBAACA,QAAAA,EAAAA,UAAMJ,EAAmBE,CAAAA,EAAAA,CAAAA;AACnC;;;ACNA,IAAaG,IAAkB;CAE7BC,SAAS;CAETC,UAAU;CAEVC,UAAU;CAEVC,KAAK;AACP,GAKaC,IAAiB;CAE5BC,QAAQ;CAERC,QAAQ;CAERC,QAAQ;CAERC,aAAa;CAEbC,QAAQ;CAERC,SAAS;CAETC,gBAAgB;AAClB,GAKaC,IAAmB;CAE9BC,QAAQ;CAERC,SAAS;CAETC,QAAQ;CAERC,WAAW;CAEXb,KAAK;AACP,GAKac,IAAe;CAE1BC,KAAK;CAELC,KAAK;CAELC,KAAK;CAELC,KAAK;CAELC,MAAM;CAENC,MAAM;CAENC,KAAK;CAELC,OAAO;CAEPC,KAAK;CAELC,KAAK;CAELC,OAAO;AACT,GAKaC,IAAoB;CAE/BX,KAAK;CAELC,KAAK;CAELC,KAAK;CAELU,MAAM;CAENC,KAAK;CAELC,KAAK;CAELC,QAAQ;AACV,GCnFaO,KAAyD,EACpEC,aACAC,YACAC,WACAC,cACAC,qBACAC,WACAC,kBACD;CACC,IAAM,EAAA,MAAA,GAAA,GAAA,MAAQC,EAAAA;CAEd,OACE,gBAACb,GAAAA,EAAAA,UAAAA;EACC,gBAACC,GAAAA;GAAaa,WAAU;aAAaP;;EACrC,gBAACN,GAAAA;GAAaa,WAAU;aACtB,gBAACZ,GAAAA;IACCa,OAAOT;IACPU,WAAWC,MAAMP,EAAiBO,EAAEC,OAAOH,KAAK;IAChDI,aAAaC,EAAAA,EAAC,EAAA,IAAA,SAAgB,CAAA;IAC9BC,WAAWb,EAAOF;IAClBgB,UAAQ;;;EAGZ,gBAACrB,GAAAA,CAAAA,CAAAA;EACD,gBAACA,GAAAA,EAAAA,UACC,gBAACE,GAAAA,EAAAA,UAAAA,CACC,gBAACC,GAAAA;GAAOmB,MAAK;GAAQC,SAASb;GAAQc,SAAQ;GAAUC,OAAON,EAAAA,EAAC,EAAA,IAAA,SAAW,CAAA;GAAGO,UAAUlB;MACxF,gBAACL,GAAAA;GAAOmB,MAAK;GAASC,SAASZ;GAAUc,OAAON,EAAAA,EAAC,EAAA,IAAA,SAAO,CAAA;GAAGO,UAAUlB;;;AAK/E,GC1Ba4B,KAAiD,EAAEC,WAAQC,eAAYC,aAAUC,mBAAW;CACvG,IAAM,EAAA,MAAA,GAAA,GAAA,MAAQC,EAAAA,GACR,CAACC,GAASC,KAAcf,EAAS,EAAA;CAEvCC,QAAU;EACR,IAAIa,GAAS;GACX,IAAME,IAAQC,iBAAW;IACvBF,EAAW,EAAA;GACb,GAAG,GAAA;GAEH,aAAaG,aAAaF,CAAAA;EAC5B;CACF,GAAG,CAACF,CAAAA,CAAQ;CAEZ,IAAMK,UAAsB;EAE1BR,AADAI,EAAW,EAAA,GACXJ,EAAAA;CACF;CA8DA,OACE,gBAACT,GAAAA,EAAAA,UAAAA;EACC,gBAACC,GAAAA;GAAakC,WAAU;aAAa5B,EAAO6B;;EAC5C,gBAACnC,GAAAA;GAAakC,WAAU;aAAa5B,EAAO0B;;EAC5C,gBAAChC,GAAAA;GAAakC,WAAW,0BAnDHhB,MAAAA;IACxB,QAAQA,GAAR;KACE,KAAKd,EAAgBe,SACnB,OAAO;KACT,KAAKf,EAAgBiB,UACnB,OAAO;KACT,KAAKjB,EAAgBkB,UACnB,OAAO;KACT,SACE,OAAO;IACX;GACF,GAwCsEhB,EAAOY,MAAM;eAhE3DA,MAAAA;IACtB,QAAQA,GAAR;KACE,KAAKd,EAAgBe,SACnB,OAAOC,EAAAA,EAAC,EAAA,IAAA,SAAQ,CAAA;KAClB,KAAKhB,EAAgBiB,UACnB,OAAOD,EAAAA,EAAC,EAAA,IAAA,SAAS,CAAA;KACnB,KAAKhB,EAAgBkB,UACnB,OAAOF,EAAAA,EAAC,EAAA,IAAA,SAAS,CAAA;KACnB,SACE,OAAOF;IACX;GACF,GAsDsBZ,EAAOY,MAAM;;EAE/B,gBAAClB,GAAAA,EAAAA,UACEO,IACC,gBAACL,GAAAA;GAAMkC,cAAa;GAASC,WAAU;aACrC,gBAAClC,GAAAA,EAAQsB,SAAQ,UAAA,CAAA;OAGnB,gBAACvB,GAAAA;GAAMkC,cAAa;GAAMC,WAAU;oBA/CvB;IACnB,IAAI,CAAC5B,GACH,OAAO,gBAAA,GAAA,CAAA,CAAA;IAGT,IAAIE,GACF,OACE,gBAACV,GAAAA;KACCwB,SAAQ;KACRC,SAASV;KACTW,OAAOP,EAAAA,EAAC,EAAA,IAAA,SAAqB,CAAA;KAC7BQ,cAAYR,EAAAA,EAAC,EAAA,IAAA,SAAqB,CAAA;KAClCS,eAAY;KACZC,UAAUvB;eAETa,EAAAA,EAAC,EAAA,IAAA,SAAO,CAAA;;IAGR;KACL,IAAMW,IAAkBzB,EAAO0B;KAE/B,OACE,gBAAC/B,GAAAA;MACCgC,MAAK;MACLP,eAAed,EAAW,EAAA;MAC1Be,OAAOP,EAAAA,EAAC;;iBAAqBW,mBAAAA;MAAgB,CAAA;MAC7CH,cAAYR,EAAAA,EAAC;;iBAAqBW,mBAAAA;MAAgB,CAAA;MAClDF,eAAa,UAAUE;MACvBD,UAAUvB;;IAGhB;GACF,GAgBWiB;;;AAMb;;;ACxFA,SAAS2B,IAAAA;CACP,OACE,gBAACV,GAAAA,EAAAA,UACC,gBAACE,GAAAA;EAAaS,SAAS;YACrB,gBAACR,GAAAA;GAAMS,cAAa;GAASC,WAAU;aACrC,gBAACT,GAAAA,EAAQU,SAAQ,UAAA,CAAA;;;AAK3B;AAEA,IAAaC,KAAuD,EAClEC,UACAC,iBACAC,qBACAC,WACAC,cACAC,mBACAC,sBACAC,eACAC,mBACD;CACC,IAAM,EAAA,MAAA,GAAA,GAAA,MAAQC,EAAAA,GACRC,IAAQnB,EAAUoB,SAAQ,GAE1B,CAACC,GAAUC,KAAe/B,EAAS,EAAA,GACnC,CAACgC,GAAQC,KAAajC,EAAgC,CAAC,CAAA,GACvD,CAACkC,GAAiBC,KAAsBnC,kBAAsB,IAAIoC,IAAAA,CAAAA,GAElEC,IAAuB5B,EAAU6B,QAAQC,kBAAkBC,YAAY,EAC3EC,iBAAW;EACTb,EAAMU,QAAQI,iBAAiBC,WAAW;GAAEC,YAAYlB;GAAWmB,SAAS3B,EAAM4B;EAAG,CAAA;CACvF,EACF,CAAA,GAEMC,IAAuBtC,EAAU6B,QAAQU,kBAAkBR,YAAY,EAC3EC,iBAAW;EACTb,EAAMU,QAAQI,iBAAiBC,WAAW;GAAEC,YAAYlB;GAAWmB,SAAS3B,EAAM4B;EAAG,CAAA;CACvF,EACF,CAAA,GAEMG,IAAgB/B,EAAMgC,eAAe,UACrCC,IAAuB,CAAChC,KAAgBA,EAAaiC,WAAW,GAChEC,IAAYhB,EAAqBiB,aAAaP,EAAqBO,WAEnEC,UAAe;EACnB,IAAMC,IAAkB1B,EAAS2B,KAAI,GAC/BC,IAAmC,CAAC;EAS1C,OAPKF,IAEMrC,GAAcyC,MAAMC,MAAWA,EAAOC,cAAcN,CAAAA,MAC7DE,EAAU5B,WAAW6B,EAAAA,EAAC,EAAA,IAAA,SAA8C,CAAA,KAFpED,EAAU5B,WAAW6B,EAAAA,EAAC,EAAA,IAAA,SAAsC,CAAA,GAK9D1B,EAAUyB,CAAAA,GACHK,OAAOC,KAAKN,CAAAA,EAAWN,WAAW;CAC3C,GAEMa,UAAY;EAEhBhC,AADAF,EAAY,EAAA,GACZE,EAAU,CAAC,CAAA;CACb,GAEMiC,IAAkB,YAAA;EACtB,IAAI,CAACX,EAAAA,GAAgB;GACnB9B,EAAW;IAAE0C,MAAMR,EAAAA,EAAC,EAAA,IAAA,SAAwC,CAAA;IAAGS,MAAM;GAAQ,CAAA;GAC7E;EACF;EAEA,IAAMZ,IAAkB1B,EAAS2B,KAAI;EAErC,IAAI;GAYFjC,AAXA,MAAMa,EAAqBgC,YAAY;IACrCzB,YAAYlB;IACZmB,SAAS3B,EAAM4B;IACfe,QAAQL;GACV,CAAA,GAEA/B,EAAW;IACT0C,MAAMR,EAAAA,EAAC;;eAAWH,mBAAAA;IAA8C,CAAA;IAChEY,MAAM;GACR,CAAA,GACAH,EAAAA,GACAzC,EAAkB,EAAA;EACpB,SAAS8C,GAAO;GAEd7C,EAAW;IACT0C,MAFmB,GAAmDK,WAAWb,EAAAA,EAAC,EAAA,IAAA,SAAqB,CAAA;IAGvGS,MAAM;GACR,CAAA;EACF;CACF,GAEMK,IAAqB,OAAOC,MAAAA;EAChCvC,GAAoBwC,MAAS,IAAIvC,IAAIuC,CAAAA,EAAMC,IAAIF,CAAAA,CAAAA;EAE/C,IAAI;GAOFjD,AANA,MAAMsB,EAAqBsB,YAAY;IACrCzB,YAAYlB;IACZmB,SAAS3B,EAAM4B;IACfhB,UAAU4C;GACZ,CAAA,GAEAjD,EAAW;IACT0C,MAAMR,EAAAA,EAAC;;eAAWe,oBAAAA;IAAiD,CAAA;IACnEN,MAAM;GACR,CAAA;EACF,SAASE,GAAO;GAEd7C,EAAW;IACT0C,MAFmB,GAAmDK,WAAWb,EAAAA,EAAC,EAAA,IAAA,SAAwB,CAAA,KAEpFA,EAAAA,EAAC;;eAA4Be,oBAAAA;IAAkB,CAAA;IACrEN,MAAM;GACR,CAAA;EACF,UAAU;GACRjC,GAAoBwC,MAAAA;IAClB,IAAME,IAAS,IAAIzC,IAAIuC,CAAAA;IAEvB,OADAE,EAAOC,OAAOJ,CAAAA,GACPG;GACT,CAAA;EACF;CACF;CA8BA,OAvBIzD,IAEA,gBAACnB,GAAAA;EAASiF,SAAS;aACjB,gBAAChF,GAAAA,EAAAA,UAAAA;GACC,gBAACC,GAAAA,EAAAA,UAAkBwD,EAAAA,EAAC,EAAA,IAAA,SAAS,CAAA,EAAA,CAAA;GAC7B,gBAACxD,GAAAA,EAAAA,UAAkBwD,EAAAA,EAAC,EAAA,IAAA,SAAW,CAAA,EAAA,CAAA;GAC/B,gBAACxD,GAAAA,EAAAA,UAAkBwD,EAAAA,EAAC,EAAA,IAAA,SAAO,CAAA,EAAA,CAAA;GAC3B,gBAACxD,GAAAA,CAAAA,CAAAA;QAEH,gBAACS,GAAAA,CAAAA,CAAAA,CAAAA;MAKHqC,IAEA,gBAACzC,GAAAA;EACC2D,MAAMR,EAAAA,EAAC,EAAA,IAAA,SAAqF,CAAA;EAC5F3C,SAAQ;MAMZ,gBAAA,GAAA,EAAA,UAAA,CACGK,KACC,gBAAChB,GAAAA;EAAM8E,WAAU;EAAaC,WAAU;YACtC,gBAAC7E,GAAAA;GACC8E,OAAO1B,EAAAA,EAAC,EAAA,IAAA,SAAmB,CAAA;GAC3B2B,eAAY;GACZC,eAAe/D,EAAkB,EAAA;GACjCR,SAAQ;GACRwE,UAAUjE;;KAKhB,gBAACtB,GAAAA;EAASiF,SAAS;;GACjB,gBAAChF,GAAAA,EAAAA,UAAAA;IACC,gBAACC,GAAAA,EAAAA,UAAkBwD,EAAAA,EAAC,EAAA,IAAA,SAAS,CAAA,EAAA,CAAA;IAC7B,gBAACxD,GAAAA,EAAAA,UAAkBwD,EAAAA,EAAC,EAAA,IAAA,SAAU,CAAA,EAAA,CAAA;IAC9B,gBAACxD,GAAAA,EAAAA,UAAkBwD,EAAAA,EAAC,EAAA,IAAA,SAAO,CAAA,EAAA,CAAA;IAC3B,gBAACxD,GAAAA,CAAAA,CAAAA;;GAGFoB,KACC,gBAACb,GAAAA;IACWoB;IACVe,SAAS3B,EAAM4B;IACPd;IACGqB;IACXoC,mBAxDoBT,MAAAA;KAE5B,AADAjD,EAAYiD,CAAAA,GACRhD,EAAOF,YAAUG,GAAW0C,OAAU;MAAE,GAAGA;MAAM7C,UAAUmD,KAAAA;KAAU,EAAA;IAC3E;IAsDUS,QAAQxB;IACRyB,gBAAU;KAGRlE,AAFAwC,EAAAA,GACAzC,EAAkB,EAAA,GAClBC,EAAW,IAAA;IACb;;GAIHN,GAAcyE,KAAK/B,GAAQgC,MAC1B,gBAAClF,GAAAA;IAESkD;IACRiC,YAAY5D,EAAgB6D,IAAIlC,EAAOC,SAAS;IAChDkC,gBAAgBvB,EAAmBZ,EAAOC,SAAS;IACnDmC,WAAW3E;MAJN,GAAGuC,EAAOC,UAAU,GAAG+B,GAAO,CAAA;GAQtC1C,KAAwB,CAAC5B,KACxB,gBAACrB,GAAAA,EAAAA,UACC,gBAACE,GAAAA;IAAaS,SAAS;IAAGuE,WAAU;cACjCzB,EAAAA,EAAC,EAAA,IAAA,SAAuF,CAAA;;;;AAOvG,GC7MasD,KAA+D,EAC1EC,UACAC,WACAC,eAAY,IACZC,YACAC,gBACD;CACC,IAAM,EAAA,MAAA,GAAA,MAAQC,EAAAA,GAGR,CAACC,GAAYC,KAAiBtB,EAA0B;EAC5DuB,MAAMR,EAAMQ,QAAQ;EACpBC,MAAMT,EAAMS,QAAQ,CAAA;EACpBC,YAAYV,EAAMU,cAAcZ,EAAiBa;EACjDC,WAAWZ,EAAMY,aAAa;EAC9BC,UAAUb,EAAMa,YAAY;EAC5BC,SAASd,EAAMc,WAAW;CAC5B,CAAA,GAEM,CAACC,GAAWC,KAAgB/B,EAAiB,EAAA,GAC7C,CAACgC,GAAQC,KAAajC,EAAoC,CAAC,CAAA,GAG3DkC,KAAeC,GAAaC,MAAAA;EAChC,IAAID,EAAEE,WAAWD,EAAEC,QAAQ,OAAO;EAClC,IAAMC,IAAU,CAAA,GAAIH,CAAAA,EAAGI,KAAI,GACrBC,IAAU,CAAA,GAAIJ,CAAAA,EAAGG,KAAI;EAC3B,OAAOD,EAAQG,OAAOC,GAAKC,MAAUD,MAAQF,EAAQG,EAAM;CAC7D,GAEMC,IACJ7B,EAAMQ,SAASF,EAAWE,QAC1BW,EAAYnB,EAAMS,QAAQ,CAAA,GAAIH,EAAWG,IAAI,KAC7CT,EAAMU,eAAeJ,EAAWI,cAChCV,EAAMY,cAAcN,EAAWM,aAC/BZ,EAAMa,aAAaP,EAAWO,YAC9Bb,EAAMc,YAAYR,EAAWQ,SAEzBgB,KAAqBC,MAAAA;EACzB,IAAM,EAAEvB,SAAMwB,UAAOC,SAAMC,eAAYH,EAAEI;EAQzC,AANA5B,GAAe6B,OAAU;GACvB,GAAGA;IACF5B,IAAOyB,MAAS,aAAaC,IAAUF;EAC1C,EAAA,GAGIf,EAAOT,MACTU,GAAWkB,MAAAA;GACT,IAAMC,IAAY,EAAE,GAAGD,EAAK;GAE5B,OADA,OAAOC,EAAU7B,IACV6B;EACT,CAAA;CAEJ,GAEMC,KAAsB9B,GAAcwB,MAAAA;EAOxC,AANAzB,GAAe6B,OAAU;GACvB,GAAGA;IACF5B,IAAOwB;EACV,EAAA,GAGIf,EAAOT,MACTU,GAAWkB,MAAAA;GACT,IAAMC,IAAY,EAAE,GAAGD,EAAK;GAE5B,OADA,OAAOC,EAAU7B,IACV6B;EACT,CAAA;CAEJ,GAEME,KAAuB/B,GAAcwB,MAAAA;EACzC,IAAMQ,IAAWR,MAAU,KAAK,IAAIS,SAAST,GAAO,EAAA;EAEpD,AAAKU,MAAMF,CAAAA,MACTjC,GAAe6B,OAAU;GACvB,GAAGA;IACF5B,IAAOgC;EACV,EAAA,GAGIvB,EAAOT,MACTU,GAAWkB,MAAAA;GACT,IAAMC,IAAY,EAAE,GAAGD,EAAK;GAE5B,OADA,OAAOC,EAAU7B,IACV6B;EACT,CAAA;CAGN,GAEMM,KAAyBZ,MAAAA;EAC7Bf,EAAae,EAAEI,OAAOH,KAAK;CAC7B,GAEMY,UAAe;EACnB,IAAMC,IAAa9B,EAAU+B,KAAI;EAE7BD,UAAe,IAGnB;OAAIvC,EAAWG,KAAKsC,SAASF,CAAAA,GAAa;IACxC7B,EAAa,EAAA;IACb;GACF;GASAA,AANAT,GAAe6B,OAAU;IACvB,GAAGA;IACH3B,MAAM,CAAA,GAAI2B,EAAK3B,MAAMoC,CAAAA;GACvB,EAAA,GAGA7B,EAAa,EAAA;EATb;CAUF,GAEMgC,KAAqBjB,MAAAA;EACzB,AAAIA,EAAEkB,QAAQ,YACZlB,EAAEmB,eAAc,GAChBN,EAAAA;CAEJ,GAEMO,KAAmBC,MAAAA;EACvB7C,GAAe6B,OAAU;GACvB,GAAGA;GACH3B,MAAM2B,EAAK3B,KAAK4C,QAAQC,MAAQA,MAAQF,CAAAA;EAC1C,EAAA;CACF,GAEMG,UAAe;EACnB,IAAMlB,IAAuC,CAAC;EAe9C,QAbI,CAAC/B,EAAWE,QAAQF,EAAWE,KAAKsC,KAAI,MAAO,QACjDT,EAAU7B,OAAOgD,EAAAA,EAAC,EAAA,IAAA,SAAuB,CAAA,IAGvClD,EAAWO,WAAW,MACxBwB,EAAUxB,WAAW2C,EAAAA,EAAC,EAAA,IAAA,SAAkC,CAAA,IAGtDlD,EAAWQ,UAAU,MACvBuB,EAAUvB,UAAU0C,EAAAA,EAAC,EAAA,IAAA,SAAiC,CAAA,IAGxDtC,EAAUmB,CAAAA,GACHoB,OAAOC,KAAKrB,CAAAA,EAAWf,WAAW;CAC3C;CA4BA,OACE,gBAACpC,GAAAA;EACC4E,MAAM7D;EACN8D,gBARgB;GAElB5D,AADAe,EAAU,CAAC,CAAA,GACXf,EAAAA;EACF;EAMI6D,MAAK;EACLC,OAAOT,EAAAA,EAAC,EAAA,IAAA,SAAmB,CAAA;EAC3BU,YAhCkBnC,MAAAA;GACpBA,EAAEmB,eAAc,GAEXK,EAAAA,KAeLnD,EAAOwD;IARL,GAAI5D,EAAMQ,SAASF,EAAWE,KAAKsC,KAAI,IAAwC,CAAC,IAApC,EAAEtC,MAAMF,EAAWE,KAAKsC,KAAI,EAAG;IAC3E,GAAK3B,EAAYnB,EAAMS,QAAQ,CAAA,GAAIH,EAAWG,IAAI,IAAgC,CAAC,IAA7B,EAAEA,MAAMH,EAAWG,KAAK;IAC9E,GAAIT,EAAMU,eAAeJ,EAAWI,aAAqD,CAAC,IAAzC,EAAEA,YAAYJ,EAAWI,WAAW;IACrF,GAAIV,EAAMY,cAAcN,EAAWM,YAAkD,CAAC,IAAvC,EAAEA,WAAWN,EAAWM,UAAU;IACjF,GAAIZ,EAAMa,aAAaP,EAAWO,WAA+C,CAAC,IAArC,EAAEA,UAAUP,EAAWO,SAAS;IAC7E,GAAIb,EAAMc,YAAYR,EAAWQ,UAA4C,CAAC,IAAnC,EAAEA,SAASR,EAAWQ,QAAQ;GAGpE8C,CAAAA;EACT;EAcIO,oBAAoBX,EAAAA,EAAC,EAAA,IAAA,SAAa,CAAA;EAClCY,mBAAmBZ,EAAAA,EAAC,EAAA,IAAA,SAAO,CAAA;EAC3Ba,sBAAsBnE,KAAa2B;aAElC3B,KACC,gBAACN,GAAAA;GAAM0E,cAAa;GAASC,WAAU;aACrC,gBAAC5E,GAAAA,EAAQ6E,SAAQ,UAAA,CAAA;MAIpB,CAACtE,KACA,gBAACf,GAAAA,EAAAA,UAAAA,CAEC,gBAACE,GAAAA;GAAYoF,WAAU;;IACrB,gBAACrF,GAAAA;KAAQqF,WAAU;eACjB,gBAACnF,GAAAA;MACCoF,IAAG;MACHlE,MAAK;MACLmE,OAAOnB,EAAAA,EAAC,EAAA,IAAA,SAAW,CAAA;MACnBxB,OAAO1B,EAAWE;MAClBoE,UAAU9C;MACV+C,UAAQ;MACRC,WAAW7D,EAAOT;;;IAItB,gBAACpB,GAAAA;KAAQqF,WAAU;eACjB,gBAACM,OAAAA;MAAIN,WAAU;iBACb,gBAAC7E,GAAAA;OAAMoF,KAAI;OAAIC,WAAU;OAAaV,WAAU;kBAC9C,gBAACQ,OAAAA;QAAIN,WAAU;kBACb,gBAACnF,GAAAA;SACCoF,IAAG;SACHlE,MAAK;SACLmE,OAAOnB,EAAAA,EAAC,EAAA,IAAA,SAAK,CAAA;SACbxB,OAAOjB;SACP6D,UAAUjC;SACVuC,WAAWlC;SACXmC,UAAU3B,EAAAA,EAAC,EAAA,IAAA,SAAyC,CAAA;SACpD4B,aAAa5B,EAAAA,EAAC,EAAA,IAAA,SAAgC,CAAA;;WAGlD,gBAAC9D,GAAAA;QAAO8E,SAAQ;QAAUa,SAASzC;QAAc0C,UAAUpF,KAAaa,EAAU+B,KAAI,MAAO;kBAC3F,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;;UAKHxC,EAAWG,KAAKa,SAAS,KACxB,gBAAC1B,GAAAA;OAAMoF,KAAI;OAAIO,MAAM;OAAMhB,WAAU;OAASE,WAAU;iBACrDnE,EAAWG,KAAK+E,KAAKlC,MACpB,gBAACzD,GAAAA;QAAe4F,WAAS;QAACC,SAAQ;QAAGC,WAAWrC;QAAKnD,eAAegD,EAAgBG,CAAAA;UAAzEA,CAAAA,CAAAA;;;;IAOrB,gBAAClE,GAAAA;KAAQqF,WAAU;eACjB,gBAAClF,GAAAA;MACCmF,IAAG;MACHlE,MAAK;MACLmE,OAAOnB,EAAAA,EAAC,EAAA,IAAA,SAAW,CAAA;MACnBxB,OAAO1B,EAAWI;MAClBkE,WAAW5C,MAAUM,EAAmB,cAAcN,CAAAA;;OAEtD,gBAACxC,GAAAA;QAAawC,OAAOlC,EAAiB8F;QAAQjB,OAAOnB,EAAAA,EAAC,EAAA,IAAA,SAAO,CAAA;;OAC7D,gBAAChE,GAAAA;QAAawC,OAAOlC,EAAiBa;QAASgE,OAAOnB,EAAAA,EAAC,EAAA,IAAA,SAAQ,CAAA;;OAC/D,gBAAChE,GAAAA;QAAawC,OAAOlC,EAAiB+F;QAAQlB,OAAOnB,EAAAA,EAAC,EAAA,IAAA,SAAO,CAAA;;OAC7D,gBAAChE,GAAAA;QAAawC,OAAOlC,EAAiBgG;QAAWnB,OAAOnB,EAAAA,EAAC,EAAA,IAAA,SAAU,CAAA;;;;;IAIvE,gBAACpE,GAAAA,EAAAA,UACC,gBAACK,GAAAA;KACCiF,IAAG;KACHlE,MAAK;KACLmE,OAAOnB,EAAAA,EAAC,EAAA,IAAA,SAAU,CAAA;KAClBtB,SAAS5B,EAAWM;KACpBgE,UAAU9C;KACVqD,UAAU3B,EAAAA,EAAC,EAAA,IAAA,SAAsC,CAAA;;;MAMvD,gBAACnE,GAAAA;GAAYoF,WAAU;cACrB,gBAACrF,GAAAA;IAAQqF,WAAU;cACjB,gBAACnF,GAAAA;KACCoF,IAAG;KACHlE,MAAK;KACLmE,OAAOnB,EAAAA,EAAC,EAAA,IAAA,SAAkB,CAAA;KAC1BvB,MAAK;KACLD,OAAO+D,OAAOzF,EAAWO,QAAQ;KACjC+D,WAAW7C,MAAMQ,EAAoB,YAAYR,EAAEI,OAAOH,KAAK;KAC/DmD,UAAU3B,EAAAA,EAAC,EAAA,IAAA,SAA8C,CAAA;KACzDsB,WAAW7D,EAAOJ;;OAKtB,gBAACzB,GAAAA,EAAAA,UACC,gBAACE,GAAAA;IACCoF,IAAG;IACHlE,MAAK;IACLmE,OAAOnB,EAAAA,EAAC,EAAA,IAAA,SAAiB,CAAA;IACzBvB,MAAK;IACLD,OAAO+D,OAAOzF,EAAWQ,OAAO;IAChC8D,WAAW7C,MAAMQ,EAAoB,WAAWR,EAAEI,OAAOH,KAAK;IAC9DmD,UAAU3B,EAAAA,EAAC,EAAA,IAAA,SAAwC,CAAA;IACnDsB,WAAW7D,EAAOH;;;;AASlC;;;AC/SA,SAASiG,EAAWC,GAAc;CAGhC,OAFIA,KAAU,OAAoC,KAC9C,OAAOA,KAAU,WAAiBE,KAAKC,UAAUH,CAAAA,IAC9CI,OAAOJ,CAAAA;AAChB;AAEA,SAASK,EAAqBC,GAAoBC,GAA+B;CAC/E,OAAOC,OAAOC,QAAQH,CAAAA,EACnBI,QAAQ,CAACC,OAAS,CAACJ,EAAmBK,IAAID,EAAIE,YAAW,CAAA,CAAA,EACzDC,KAAK,CAACH,GAAKX,OAAM;EAChB,IAAMe,IAAWhB,EAAWC,CAAAA;EAC5B,OAAO;GAAEW;GAAKX,OAAOe;GAAUC,OAAO;GAAOC,WAAW;GAAOC,aAAaP;GAAKQ,eAAeJ;EAAS;CAC3G,CAAA;AACJ;AAGA,SAASK,EAA4B,EACnCC,cACAC,YACAC,WACAC,oBACAjB,yBAOD;CACC,IAAM,EAAA,MAAA,GAAA,GAAA,MAAQkB,EAAAA,GAER,CAACC,GAAUC,KAAe1C,EAA0BuC,CAAAA,GACpD,CAACI,GAAQC,KAAa5C,EAAoC,CAAC,CAAA,GAC3D,CAAC6C,GAAaC,KAAkB9C,EAAS,EAAA,GACzC,CAAC+C,GAAQC,KAAahD,EAAS,EAAA,GAC/B,CAACiD,GAAUC,KAAelD,EAAS,EAAA,GACnC,CAACmD,GAAoBC,KAAyBpD,EAAwB,IAAA;CAE5EC,QAAU;EACR,IAAIkD,MAAuB,MAAM;GAC/B,IAAME,IAAQC,iBAAiBF,EAAsB,IAAA,GAAO,GAAA;GAC5D,aAAaG,aAAaF,CAAAA;EAC5B;CACF,GAAG,CAACF,CAAAA,CAAmB;CAEvB,IAAMK,IACJf,EAASgB,OAAOC,MAAU,CAACA,EAAM3B,SAAS2B,EAAMhC,QAAQgC,EAAMzB,eAAeyB,EAAM3C,UAAU2C,EAAMxB,aAAa,KAChHK,EAAgBoB,WAAWlB,EAASkB,QAEhCC,KAAelC,GAAaO,GAAsB4B,MAAAA;EACtD,IAAMC,IAAapC,GAAKqC,KAAAA,EAAOnC,YAAAA;EAc/B,OAbKkC,IAGDxC,EAAmBK,IAAImC,CAAAA,IAClBE,EAAAA,EAAC,EAAA,IAAA,SAAiD,CAAA,IAEvCvB,EAASyB,MAC1BR,GAAOS,MACNT,EAAMhC,IAAIqC,KAAI,EAAGnC,YAAW,MAAOkC,KAAcK,MAAQN,KAAYH,EAAMzB,gBAAgBA,CAE3FgC,IACKD,EAAAA,EAAC,EAAA,IAAA,SAAwC,CAAA,IAE3C,OAZEA,EAAAA,EAAC,EAAA,IAAA,SAAgB,CAAA;CAa5B,GAEMI,UAAe;EACnB,IAAMC,IAAWT,EAAYb,GAAQ/B,KAAAA,GAAWyB,EAASkB,MAAM;EAC/D,IAAIU,GAAU;GACZzB,EAAU,EAAEG,QAAQsB,EAAS,CAAA;GAC7B;EACF;EACA,IAAI,CAACpB,EAASc,KAAI,GAAI;GACpBnB,EAAU,EAAEK,UAAUe,EAAAA,EAAC,EAAA,IAAA,SAAkB,CAAA,EAAE,CAAA;GAC3C;EACF;EAKApB,AAJAF,EAAY,CAAA,GAAID,GAAU;GAAEf,KAAKqB,EAAOgB,KAAI;GAAIhD,OAAOkC,EAASc,KAAI;GAAIhC,OAAO;GAAMC,WAAW;EAAM,CAAA,CAAE,GACxGgB,EAAU,EAAA,GACVE,EAAY,EAAA,GACZJ,EAAe,EAAA,GACfF,EAAU,CAAC,CAAA;CACb,GAEM0B,UAAkB;EAItB1B,AAHAI,EAAU,EAAA,GACVE,EAAY,EAAA,GACZJ,EAAe,EAAA,GACfF,EAAU,CAAC,CAAA;CACb,GAEM2B,KAAcC,MAAAA;EAKlB1B,AAJAM,EAAsB,IAAA,GACtBV,EACED,EAASZ,KAAK6B,GAAOe,MAAOA,MAAMD,IAAQ;GAAE,GAAGd;GAAO1B,WAAW;EAAK,IAAI;GAAE,GAAG0B;GAAO1B,WAAW;EAAM,CAAA,CAAA,GAEzGc,EAAe,EAAA;CACjB,GAEM4B,KAAkBF,MAAAA;EACtB,IAAMd,IAAQjB,EAAS+B,IACjBH,IAAWT,EAAYF,EAAMhC,KAAKgC,EAAMzB,aAAauC,CAAAA;EAC3D,IAAIH,GAAU;GACZzB,EAAU,GAAG,QAAQ4B,MAAUH,EAAS,CAAA;GACxC;EACF;EACA,IAAI,CAACX,EAAM3C,MAAMgD,KAAI,GAAI;GACvBnB,EAAU,GAAG,QAAQ4B,MAAUR,EAAAA,EAAC,EAAA,IAAA,SAAkB,CAAA,EAAE,CAAA;GACpD;EACF;EAIApB,AAHAF,EACED,EAASZ,KAAK8C,GAAGF,MAAOA,MAAMD,IAAQ;GAAE,GAAGG;GAAG3C,WAAW;GAAON,KAAKiD,EAAEjD,IAAIqC,KAAI;GAAIhD,OAAO4D,EAAE5D,MAAMgD,KAAI;EAAG,IAAIY,CAAAA,CAAAA,GAE/G/B,EAAU,CAAC,CAAA;CACb,GAEMgC,KAAoBJ,MAAAA;EAMxB5B,AALAF,EACED,EAASZ,KAAK8C,GAAGF,MACfA,MAAMD,IAAQ;GAAE,GAAGG;GAAG3C,WAAW;GAAON,KAAKiD,EAAE1C,eAAe0C,EAAEjD;GAAKX,OAAO4D,EAAEzC,iBAAiByC,EAAE5D;EAAM,IAAI4D,CAAAA,CAAAA,GAG/G/B,EAAU,CAAC,CAAA;CACb,GAEMiC,KAAgBL,MAAAA;EAGpB5B,AAFAF,EAAYD,EAAShB,QAAQqD,GAAGL,MAAMA,MAAMD,CAAAA,CAAAA,GAC5CpB,EAAsB,IAAA,GACtBR,EAAU,CAAC,CAAA;CACb,GAEMmC,KAAmBP,GAAezD,MAAAA;EAEtC,AADA2B,EAAYD,EAASZ,KAAK6B,GAAOe,MAAOA,MAAMD,IAAQ;GAAE,GAAGd;GAAOhC,KAAKX;EAAM,IAAI2C,CAAAA,CAAAA,GAC7Ef,EAAO,QAAQ6B,QACjB5B,GAAWoC,MAAAA;GACT,IAAMC,IAAO,EAAE,GAAGD,EAAK;GAEvB,OADA,OAAOC,EAAK,QAAQT,MACbS;EACT,CAAA;CAEJ,GAEMC,KAAqBV,GAAezD,MAAAA;EAExC,AADA2B,EAAYD,EAASZ,KAAK6B,GAAOe,MAAOA,MAAMD,IAAQ;GAAE,GAAGd;GAAO3C;EAAM,IAAI2C,CAAAA,CAAAA,GACxEf,EAAO,QAAQ6B,QACjB5B,GAAWoC,MAAAA;GACT,IAAMC,IAAO,EAAE,GAAGD,EAAK;GAEvB,OADA,OAAOC,EAAK,QAAQT,MACbS;EACT,CAAA;CAEJ;CA+BA,OACE,gBAAC7E,GAAAA;EACCwF,MAAI;EACJC,gBAZgB;GAMlBxD,AALAK,EAAYH,CAAAA,GACZO,EAAe,EAAA,GACfE,EAAU,EAAA,GACVE,EAAY,EAAA,GACZN,EAAU,CAAC,CAAA,GACXP,EAAAA;EACF;EAMIyD,MAAK;EACLC,OAAO/B,EAAAA,EAAC,EAAA,IAAA,SAAoB,CAAA;EAC5BgC,WAAWb,YAnCM;GACnB,IAAMC,IAAyC,CAAC,GAC1CC,IAAiB9D,OAAO+D,YAC5B/C,EACGd,QACEiC,MACC,CAACjB,EAASZ,KAAK0D,MAASA,EAAKtD,WAAW,EAAEuD,SAAS9B,EAAMzB,WAAW,KACpE,CAACQ,EAASZ,KAAK0D,MAASA,EAAK7D,GAAG,EAAE8D,SAAS9B,EAAMhC,GAAG,CAAA,EAEvDG,KAAK6B,MAAU,CAACA,EAAMhC,KAAK,IAAA,CAAK,CAAA;GAQrC,AANAe,EACGhB,QAAQiC,MAAUA,EAAM3B,SAAS2B,EAAM3C,UAAU2C,EAAMxB,iBAAiBwB,EAAMhC,QAAQgC,EAAMzB,WAAW,EACvGwD,SAAS/B,MAAAA;IACR0B,EAAe1B,EAAMhC,OAAOgC,EAAM3C;GACpC,CAAA,GAEE2E,MADkBpD,EAAO;IAAE,GAAG8C;IAAgB,GAAGC;GAAe,CAAA,KACvDhD,EAAAA;EACf;EAkBI4D,oBAAoBjC,EAAAA,EAAC,EAAA,IAAA,SAAa,CAAA;EAClCkC,mBAAmBlC,EAAAA,EAAC,EAAA,IAAA,SAAO,CAAA;EAC3BmC,sBAAsB/D,KAAaS,KAAeJ,EAASyB,MAAMS,MAAMA,EAAE3C,SAAS,KAAKwB;aAEtFpB,KACC,gBAAC7B,GAAAA;GAAM6F,cAAa;GAASC,WAAU;aACrC,gBAAC/F,GAAAA,EAAQgG,SAAQ,UAAA,CAAA;MAIpB,CAAClE,KACA,gBAACmE,OAAAA,EAAAA,UAAAA,CACC,gBAAChG,GAAAA;GAAMiG,WAAU;GAAaC,WAAU;aACtC,gBAACpG,GAAAA;IACCqG,OAAO1C,EAAAA,EAAC,EAAA,IAAA,SAAa,CAAA;IACrB2C,eAAe7D,EAAe,EAAA;IAC9BwD,SAAQ;IACRM,UAAU/D,KAAeJ,EAASyB,MAAMS,MAAMA,EAAE3C,SAAS;IACzD6E,MAAK;;MAIT,gBAACrG,GAAAA;GAASsG,SAAS;GAAGC,mBAAmB,CAAC,CAAA;GAAIN,WAAU;;IACtD,gBAAChG,GAAAA,EAAAA,UAAAA;KACC,gBAACC,GAAAA,EAAAA,UAAkBsD,EAAAA,EAAC,EAAA,IAAA,SAAa,CAAA,EAAA,CAAA;KACjC,gBAACtD,GAAAA,EAAAA,UAAkBsD,EAAAA,EAAC,EAAA,IAAA,SAAM,CAAA,EAAA,CAAA;KAC1B,gBAACtD,GAAAA,CAAAA,CAAAA;;IAGFmC,KACC,gBAACpC,GAAAA,EAAAA,UAAAA;KACC,gBAACE,GAAAA,EAAAA,UACC,gBAACC,GAAAA;MACCG,OAAOgC;MACPiE,WAAWrC,MAAAA;OAET,AADA3B,EAAU2B,EAAEsC,OAAOlG,KAAK,GACpB4B,EAAOI,UACTH,GAAWoC,MAAAA;QACT,IAAMC,IAAO,EAAE,GAAGD,EAAK;QAEvB,OADA,OAAOC,EAAKlC,QACLkC;OACT,CAAA;MAEJ;MACAiC,aAAalD,EAAAA,EAAC,EAAA,IAAA,SAAa,CAAA;MAC3BmD,WAAWxE,EAAOI;MAClBqE,WAAS;;KAGb,gBAACzG,GAAAA,EAAAA,UACC,gBAACC,GAAAA;MACCG,OAAOkC;MACP+D,WAAWrC,MAAAA;OAET,AADAzB,EAAYyB,EAAEsC,OAAOlG,KAAK,GACtB4B,EAAOM,YACTL,GAAWoC,MAAAA;QACT,IAAMC,IAAO,EAAE,GAAGD,EAAK;QAEvB,OADA,OAAOC,EAAKhC,UACLgC;OACT,CAAA;MAEJ;MACAiC,aAAalD,EAAAA,EAAC,EAAA,IAAA,SAAM,CAAA;MACpBmD,WAAWxE,EAAOM;;KAGtB,gBAACtC,GAAAA,EAAAA,UACC,gBAACJ,GAAAA;MAAMiG,WAAU;MAAaa,KAAI;iBAChC,gBAAChH,GAAAA;OAAOyF,MAAK;OAAQQ,SAAQ;OAAUK,SAASvC;OAAcyC,MAAK;OAAQd,OAAO/B,EAAAA,EAAC,EAAA,IAAA,SAAK,CAAA;UACxF,gBAAC3D,GAAAA;OAAOyF,MAAK;OAAQQ,SAAQ;OAAUK,SAASrC;OAAiBuC,MAAK;OAAQd,OAAO/B,EAAAA,EAAC,EAAA,IAAA,SAAQ,CAAA;;;;IAMrGvB,EAASZ,KAAK6B,GAAOc,MACpB,gBAAC/D,GAAAA,EAAAA,UAAAA;KACC,gBAACE,GAAAA,EAAAA,UACE+C,EAAM1B,YACL,gBAACpB,GAAAA;MACCG,OAAO2C,EAAMhC;MACbsF,WAAWrC,MAAMI,EAAgBP,GAAOG,EAAEsC,OAAOlG,KAAK;MACtDoG,WAAWxE,EAAO,QAAQ6B;UAG5B,gBAAC8C,QAAAA;MAAKb,WAAU;MAA6CV,OAAOrC,EAAMhC;gBACvEgC,EAAMhC;;KAIb,gBAACf,GAAAA,EAAAA,UACE+C,EAAM1B,YACL,gBAACpB,GAAAA;MAAUG,OAAO2C,EAAM3C;MAAOiG,WAAWrC,MAAMO,EAAkBV,GAAOG,EAAEsC,OAAOlG,KAAK;UAEvF,gBAACuG,QAAAA;MAAKb,WAAU;MAAgDV,OAAOrC,EAAM3C;gBAC1E2C,EAAM3C;;KAIb,gBAACJ,GAAAA,EAAAA,UACE+C,EAAM1B,YACL,gBAACzB,GAAAA;MAAMiG,WAAU;MAAaa,KAAI;iBAChC,gBAAChH,GAAAA;OACCyF,MAAK;OACLQ,SAAQ;OACRK,eAAejC,EAAeF,CAAAA;OAC9BqC,MAAK;OACLd,OAAO/B,EAAAA,EAAC,EAAA,IAAA,SAAK,CAAA;UAEf,gBAAC3D,GAAAA;OACCyF,MAAK;OACLQ,SAAQ;OACRK,eAAe/B,EAAiBJ,CAAAA;OAChCqC,MAAK;OACLd,OAAO/B,EAAAA,EAAC,EAAA,IAAA,SAAQ,CAAA;;UAIpB,gBAACzD,GAAAA;MAAMiG,WAAU;MAAaa,KAAI;iBAC/BlE,MAAuBqB,KACtB,gBAACnE,GAAAA;OACCyF,MAAK;OACLQ,SAAQ;OACRK,eAAepC,EAAWC,CAAAA;OAC1BqC,MAAK;OACLU,eAAa,QAAQ7D,EAAMhC;OAC3BqE,OAAO/B,EAAAA,EAAC,EAAA,IAAA,SAAK,CAAA;OACb4C,UAAU/D,KAAeJ,EAASyB,MAAMS,MAAMA,EAAE3C,SAAS;UAG5DmB,MAAuBqB,IACtB,gBAACnE,GAAAA;OACCyF,MAAK;OACLQ,SAAQ;OACRK,eAAe9B,EAAaL,CAAAA;OAC5B+C,eAAa,kBAAkB7D,EAAMhC;OACrCqE,OAAO/B,EAAAA,EAAC,EAAA,IAAA,SAAO,CAAA;OACf4C,UAAU/D,KAAeJ,EAASyB,MAAMS,MAAMA,EAAE3C,SAAS;iBAExDgC,EAAAA,EAAC,EAAA,IAAA,SAAO,CAAA;WAGX,gBAAC3D,GAAAA;OACCyF,MAAK;OACLa,eAAevD,EAAsBoB,CAAAA;OACrCqC,MAAK;OACLU,eAAa,UAAU7D,EAAMhC;OAC7BqE,OAAO/B,EAAAA,EAAC,EAAA,IAAA,SAAO,CAAA;OACf4C,UAAU/D,KAAeJ,EAASyB,MAAMS,MAAMA,EAAE3C,SAAS;;;SAxEnD,GAAG0B,EAAMzB,YAAY,GAAGuC,GAAO,CAAA;IAiFlD/B,EAASkB,WAAW,KAAK,CAACd,KACzB,gBAACpC,GAAAA,EAAAA,UACC,gBAACE,GAAAA;KAAa6G,SAAS;KAAGf,WAAU;eAClC,gBAAClG,GAAAA;MAAM8F,WAAU;gBACf,gBAACiB,QAAAA,EAAAA,UAAMtD,EAAAA,EAAC,EAAA,IAAA,SAAyE,CAAA,EAAA,CAAA;;;;;;AAUrG;AAEA,IAAayD,KAAiE,EAC5EpG,UACAqG,WACAtF,eAAY,IACZC,YACAC,gBACD;CACC,IAAM,EAAA,MAAA,GAAA,GAAA,MAAQE,EAAAA,GACRmF,IAAYxH,EAAAA,GACZ,EACJyH,MAAMC,GACNzF,WAAW0F,GACXC,SAASC,MACPnH,EAAUoH,QAAQC,mCAAmCC,SACvD,EAAEC,YAAYT,EAAU,GACxB,EACEU,SAASX,EACX,CAAA,GAEIpG,IAAqBpB,QACnB,IAAIoI,KAAKT,KAA0B,CAAA,GAAIhG,KAAK0G,MAAMA,EAAE3G,YAAW,CAAA,CAAA,GACrE,CAACiG,CAAAA,CAAuB,GAEpBtF,IAAkBrC,QAChBkB,EAAqBC,GAAOC,CAAAA,GAClC;EAACD,EAAMmH;EAAInH,EAAMoH;EAAYnH;EAAmB;CAyBlD,OAtBKoG,IAEDI,IAEA,gBAAC1H,GAAAA;EAAMwF,MAAI;EAACC,UAAUxD;EAASyD,MAAK;EAAQC,OAAO/B,EAAAA,EAAC,EAAA,IAAA,SAAoB,CAAA;YACtE,gBAACzD,GAAAA;GAAM6F,cAAa;GAASC,WAAU;aACrC,gBAAC/F,GAAAA,EAAQgG,SAAQ,UAAA,CAAA;;MAMrB0B,IAEA,gBAAC5H,GAAAA;EAAMwF,MAAI;EAACC,UAAUxD;EAASyD,MAAK;EAAQC,OAAO/B,EAAAA,EAAC,EAAA,IAAA,SAAoB,CAAA;YACtE,gBAACzD,GAAAA;GAAM6F,cAAa;GAASC,WAAU;aACrC,gBAACiB,QAAAA,EAAAA,UAAMtD,EAAAA,EAAC,EAAA,IAAA,SAAuC,CAAA,EAAA,CAAA;;MAOrD,gBAAC7B,GAAAA;EAEYC;EACFC;EACDC;EACSC;EACGjB;IALf,GAAGD,EAAMmH,GAAG,GAAGnH,EAAMoH,WAAW,GAAGnH,EAAmBwE,MAAM,IAxBjD;AAgCtB,GC9aayD,KAAqD,EAChEC,UACAC,WACAC,cACAC,eACAC,YACAC,kBACD;CACC,IAAI,CAACL,GAAO,OAAO;CAEnB,IAAM,EAAA,MAAA,GAAA,GAAA,MAAQM,EAAAA,GAERC,KAAgBC,MAAAA;EAEpBH,AADAG,EAAEC,eAAc,GAChBJ,EAASL,CAAAA;CACX;CAEA,OACE,gBAACN,GAAAA;EACCgB,UAAUN;EACVO,MAAK;EACLC,OAAM;EACNC,MAAMZ;EACNa,aACE,gBAACnB,GAAAA;GAAYoB,WAAU;aACrB,gBAAC3B,GAAAA,EAAAA,UAAAA,CACC,gBAACD,GAAAA;IAAO6B,SAAQ;IAAUC,SAASb;cACjC,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;OAEF,gBAACjB,GAAAA;IACC6B,SAAQ;IACRC,UAAUT,MAAAA;KAERJ,AADAG,EAAaC,CAAAA,GACbJ,EAAAA;IACF;IACAc,UAAUhB,KAAaC;IACvBgB,eAAa;cAEZjB,IAAY,gBAACN,GAAAA,EAAQe,MAAK,QAAA,CAAA,IAAa,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;;;aAM/CT,KACC,gBAACL,GAAAA;GAAMuB,cAAa;GAASC,WAAU;aACrC,gBAACzB,GAAAA,EAAQoB,SAAQ,UAAA,CAAA;MAGpB,CAACd,KACA,gBAACoB,OAAAA,EAAAA,UAAAA,CACC,gBAAC7B,GAAAA;GACC8B,MAAMC,EAAAA,EAAC,EAAA,IAAA,SAAqE,CAAA;GAC5ER,SAAQ;GACRD,WAAU;MAGXf,KACC,gBAACX,GAAAA;GAASoC,SAAS;;IACjB,gBAACjC,GAAAA,EAAAA,UAAAA,CACC,gBAACD,GAAAA,EAAAA,UAAkBiC,EAAAA,EAAC,EAAA,IAAA,SAAK,CAAA,EAAA,CAAA,GACzB,gBAAClC,GAAAA,EAAAA,UAAcU,EAAM0B,QAAQF,EAAAA,EAAC,EAAA,IAAA,SAAQ,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA;IAExC,gBAAChC,GAAAA,EAAAA,UAAAA,CACC,gBAACD,GAAAA,EAAAA,UAAkBiC,EAAAA,EAAC,EAAA,IAAA,SAAG,CAAA,EAAA,CAAA,GACvB,gBAAClC,GAAAA,EAAAA,UAAcU,EAAM2B,GAAAA,CAAAA,CAAAA,EAAAA,CAAAA;IAEvB,gBAACnC,GAAAA,EAAAA,UAAAA,CACC,gBAACD,GAAAA,EAAAA,UAAkBiC,EAAAA,EAAC,EAAA,IAAA,SAAO,CAAA,EAAA,CAAA,GAC3B,gBAAClC,GAAAA,EAAAA,UAAcU,EAAM4B,OAAAA,CAAAA,CAAAA,EAAAA,CAAAA;IAEvB,gBAACpC,GAAAA,EAAAA,UAAAA,CACC,gBAACD,GAAAA,EAAAA,UAAkBiC,EAAAA,EAAC,EAAA,IAAA,SAAW,CAAA,EAAA,CAAA,GAC/B,gBAAClC,GAAAA,EAAAA,UAAcU,EAAM6B,WAAAA,CAAAA,CAAAA,EAAAA,CAAAA;IAEvB,gBAACrC,GAAAA,EAAAA,UAAAA,CACC,gBAACD,GAAAA,EAAAA,UAAkBiC,EAAAA,EAAC,EAAA,IAAA,SAAK,CAAA,EAAA,CAAA,GACzB,gBAAClC,GAAAA,EAAAA,UACC,gBAACQ,GAAAA,EAAYa,MAAMX,EAAMW,KAAAA,CAAAA,EAAAA,CAAAA,CAAAA,EAAAA,CAAAA;IAG7B,gBAACnB,GAAAA,EAAAA,UAAAA,CACC,gBAACD,GAAAA,EAAAA,UAAkBiC,EAAAA,EAAC,EAAA,IAAA,SAAY,CAAA,EAAA,CAAA,GAChC,gBAAClC,GAAAA,EAAAA,UAAcU,EAAM8B,eAAeN,EAAAA,EAAC,EAAA,IAAA,SAAI,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA;IAE3C,gBAAChC,GAAAA,EAAAA,UAAAA,CACC,gBAACD,GAAAA,EAAAA,UAAkBiC,EAAAA,EAAC,EAAA,IAAA,SAAQ,CAAA,EAAA,CAAA,GAC5B,gBAAClC,GAAAA,EAAAA,UACEU,EAAM+B,aAAa,IAAIC,KAAKhC,EAAM+B,UAAU,EAAEE,mBAAkB,IAAKT,EAAAA,EAAC,EAAA,IAAA,SAAI,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA;;;;AAS7F,GCrGamB,KAAyD,EACpEC,UACAC,WACAC,cACAC,YACAC,oBACD;CACC,IAAI,CAACJ,GAAO,OAAO;CAEnB,IAAM,EAAA,MAAA,GAAA,GAAA,MAAQK,EAAAA;CAOd,OACE,gBAACV,GAAAA;EACCc,UAAUN;EACVO,MAAK;EACLC,OAAOC,EAAAA,EAAC,EAAA,IAAA,SAAe,CAAA;EACvBC,MAAMZ;EACNa,YAXoBP,MAAAA;GAEtBH,AADAG,EAAEC,eAAc,GAChBJ,EAAWJ,CAAAA;EACb;EASIe,oBAAoBH,EAAAA,EAAC,EAAA,IAAA,SAAS,CAAA;EAC9BI,mBAAmBJ,EAAAA,EAAC,EAAA,IAAA,SAAO,CAAA;EAC3BK,sBAAsBf;aAErBA,KACC,gBAACL,GAAAA;GAAMqB,cAAa;GAASC,WAAU;aACrC,gBAACvB,GAAAA,EAAQwB,SAAQ,UAAA,CAAA;MAGpB,CAAClB,KACA,gBAACmB,OAAAA,EAAAA,UAAAA,CACC,gBAACC,KAAAA;GAAEC,WAAU;aACX,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;MAGF,gBAAChC,GAAAA;GAASiC,SAAS;;IACjB,gBAAC9B,GAAAA,EAAAA,UAAAA,CACC,gBAACD,GAAAA,EAAAA,UAAkBmB,EAAAA,EAAC,EAAA,IAAA,SAAK,CAAA,EAAA,CAAA,GACzB,gBAACpB,GAAAA,EAAAA,UAAcQ,EAAMyB,QAAQb,EAAAA,EAAC,EAAA,IAAA,SAAQ,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA;IAExC,gBAAClB,GAAAA,EAAAA,UAAAA,CACC,gBAACD,GAAAA,EAAAA,UAAkBmB,EAAAA,EAAC,EAAA,IAAA,SAAG,CAAA,EAAA,CAAA,GACvB,gBAACpB,GAAAA,EAAAA,UAAcQ,EAAM0B,GAAAA,CAAAA,CAAAA,EAAAA,CAAAA;IAEvB,gBAAChC,GAAAA,EAAAA,UAAAA,CACC,gBAACD,GAAAA,EAAAA,UAAkBmB,EAAAA,EAAC,EAAA,IAAA,SAAO,CAAA,EAAA,CAAA,GAC3B,gBAACpB,GAAAA,EAAAA,UAAcQ,EAAM2B,OAAAA,CAAAA,CAAAA,EAAAA,CAAAA;IAEvB,gBAACjC,GAAAA,EAAAA,UAAAA,CACC,gBAACD,GAAAA,EAAAA,UAAkBmB,EAAAA,EAAC,EAAA,IAAA,SAAW,CAAA,EAAA,CAAA,GAC/B,gBAACpB,GAAAA,EAAAA,UAAcQ,EAAM4B,WAAAA,CAAAA,CAAAA,EAAAA,CAAAA;IAEvB,gBAAClC,GAAAA,EAAAA,UAAAA,CACC,gBAACD,GAAAA,EAAAA,UAAkBmB,EAAAA,EAAC,EAAA,IAAA,SAAK,CAAA,EAAA,CAAA,GACzB,gBAACpB,GAAAA,EAAAA,UACC,gBAACM,GAAAA,EAAYY,MAAMV,EAAMU,KAAAA,CAAAA,EAAAA,CAAAA,CAAAA,EAAAA,CAAAA;IAG7B,gBAAChB,GAAAA,EAAAA,UAAAA,CACC,gBAACD,GAAAA,EAAAA,UAAkBmB,EAAAA,EAAC,EAAA,IAAA,SAAY,CAAA,EAAA,CAAA,GAChC,gBAACpB,GAAAA,EAAAA,UAAcQ,EAAM6B,eAAejB,EAAAA,EAAC,EAAA,IAAA,SAAI,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA;IAE3C,gBAAClB,GAAAA,EAAAA,UAAAA,CACC,gBAACD,GAAAA,EAAAA,UAAkBmB,EAAAA,EAAC,EAAA,IAAA,SAAQ,CAAA,EAAA,CAAA,GAC5B,gBAACpB,GAAAA,EAAAA,iBACG;KACA,IAAMsC,IAAK,IAAIC,KAAK/B,EAAMgC,cAAc,EAAA;KACxC,OAAQC,MAAMH,EAAGI,QAAO,CAAA,IAAgCtB,EAAAA,EAAC,EAAA,IAAA,SAAI,CAAA,IAA/BkB,EAAGK,mBAAkB;IACrD,GAAA,EAAA,CAAA,CAAA,EAAA,CAAA;;;;AAQhB,GC/EaU,KAA6D,EACxEC,UACAC,WACAC,cACAC,YACAC,sBACD;CACC,IAAI,CAACJ,GAAO,OAAO;CAEnB,IAAM,EAAA,MAAA,GAAA,GAAA,MAAQK,EAAAA;CAOd,OACE,gBAACV,GAAAA;EACCc,UAAUN;EACVO,MAAK;EACLC,OAAOC,EAAAA,EAAC,EAAA,IAAA,SAAiB,CAAA;EACzBC,MAAMZ;EACNa,YAXsBP,MAAAA;GAExBH,AADAG,EAAEC,eAAc,GAChBJ,EAAaJ,CAAAA;EACf;EASIe,oBAAoBH,EAAAA,EAAC,EAAA,IAAA,SAAW,CAAA;EAChCI,mBAAmBJ,EAAAA,EAAC,EAAA,IAAA,SAAO,CAAA;EAC3BK,sBAAsBf;aAErBA,KACC,gBAACL,GAAAA;GAAMqB,cAAa;GAASC,WAAU;aACrC,gBAACvB,GAAAA,EAAQwB,SAAQ,UAAA,CAAA;MAGpB,CAAClB,KACA,gBAACmB,OAAAA,EAAAA,UAAAA,CACC,gBAACC,KAAAA;GAAEC,WAAU;aACX,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;MAMF,gBAAChC,GAAAA;GAASiC,SAAS;;IACjB,gBAAC9B,GAAAA,EAAAA,UAAAA,CACC,gBAACD,GAAAA,EAAAA,UAAkBmB,EAAAA,EAAC,EAAA,IAAA,SAAK,CAAA,EAAA,CAAA,GACzB,gBAACpB,GAAAA,EAAAA,UAAcQ,EAAMyB,QAAQb,EAAAA,EAAC,EAAA,IAAA,SAAQ,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA;IAExC,gBAAClB,GAAAA,EAAAA,UAAAA,CACC,gBAACD,GAAAA,EAAAA,UAAkBmB,EAAAA,EAAC,EAAA,IAAA,SAAG,CAAA,EAAA,CAAA,GACvB,gBAACpB,GAAAA,EAAAA,UAAcQ,EAAM0B,GAAAA,CAAAA,CAAAA,EAAAA,CAAAA;IAEvB,gBAAChC,GAAAA,EAAAA,UAAAA,CACC,gBAACD,GAAAA,EAAAA,UAAkBmB,EAAAA,EAAC,EAAA,IAAA,SAAO,CAAA,EAAA,CAAA,GAC3B,gBAACpB,GAAAA,EAAAA,UAAcQ,EAAM2B,OAAAA,CAAAA,CAAAA,EAAAA,CAAAA;IAEvB,gBAACjC,GAAAA,EAAAA,UAAAA,CACC,gBAACD,GAAAA,EAAAA,UAAkBmB,EAAAA,EAAC,EAAA,IAAA,SAAW,CAAA,EAAA,CAAA,GAC/B,gBAACpB,GAAAA,EAAAA,UAAcQ,EAAM4B,WAAAA,CAAAA,CAAAA,EAAAA,CAAAA;IAEvB,gBAAClC,GAAAA,EAAAA,UAAAA,CACC,gBAACD,GAAAA,EAAAA,UAAkBmB,EAAAA,EAAC,EAAA,IAAA,SAAK,CAAA,EAAA,CAAA,GACzB,gBAACpB,GAAAA,EAAAA,UACC,gBAACM,GAAAA,EAAYY,MAAMV,EAAMU,KAAAA,CAAAA,EAAAA,CAAAA,CAAAA,EAAAA,CAAAA;IAG7B,gBAAChB,GAAAA,EAAAA,UAAAA,CACC,gBAACD,GAAAA,EAAAA,UAAkBmB,EAAAA,EAAC,EAAA,IAAA,SAAY,CAAA,EAAA,CAAA,GAChC,gBAACpB,GAAAA,EAAAA,UAAcQ,EAAM6B,eAAejB,EAAAA,EAAC,EAAA,IAAA,SAAI,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA;IAE3C,gBAAClB,GAAAA,EAAAA,UAAAA,CACC,gBAACD,GAAAA,EAAAA,UAAkBmB,EAAAA,EAAC,EAAA,IAAA,SAAQ,CAAA,EAAA,CAAA,GAC5B,gBAACpB,GAAAA,EAAAA,iBACG;KACA,IAAMsC,IAAK,IAAIC,KAAK/B,EAAMgC,cAAc,EAAA;KACxC,OAAQC,MAAMH,EAAGI,QAAO,CAAA,IAAgCtB,EAAAA,EAAC,EAAA,IAAA,SAAI,CAAA,IAA/BkB,EAAGK,mBAAkB;IACrD,GAAA,EAAA,CAAA,CAAA,EAAA,CAAA;;;;AAQhB;;;AChGA,SAAgBE,EAAiB,EAAEC,UAAOC,kBAAoC;CAC5E,OACE,gBAACH,GAAAA;EAAMI,WAAU;EAAWC,KAAI;aAC9B,gBAACC,QAAAA,EAAAA,UAAMJ,EAAAA,CAAAA,GACP,gBAACI,QAAAA;GAAKC,WAAU;aAAoBJ;;;AAG1C;;;ACPA,IAAaM,KAAwBC,GAAmBC,OAAqC;CAC3FC,SAAS;CACTC,UACE,gBAACL,GAAAA;EACCM,OAAO,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;EACPC,aAAa,gBAAA,GAAA;;aAAwBL,aAAAA;;;CAGzCM,WAAWL,EAAOK;AACpB,IAEaC,KAA4BP,GAAmBQ,GAAiBP,OAAqC;CAChHC,SAAS;CACTC,UACE,gBAACL,GAAAA;EACCM,OAAO,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;EACPC,aACE,gBAAA,GAAA,EAAA,UAAA,CACE,gBAAA,GAAA;;aAAmBL,aAAAA;MAClBQ,CAAAA,EAAAA,CAAAA;;CAKTF,WAAWL,EAAOK;AACpB,IAEaG,KAAwBT,GAAmBC,OAAqC;CAC3FC,SAAS;CACTC,UACE,gBAACL,GAAAA;EACCM,OAAO,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;EACPC,aAAa,gBAAA,GAAA;;aAAwBL,aAAAA;;;CAGzCM,WAAWL,EAAOK;AACpB,IAEaI,KAA4BV,GAAmBQ,GAAiBP,OAAqC;CAChHC,SAAS;CACTC,UACE,gBAACL,GAAAA;EACCM,OAAO,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;EACPC,aACE,gBAAA,GAAA,EAAA,UAAA,CACE,gBAAA,GAAA;;aAAmBL,aAAAA;MAClBQ,CAAAA,EAAAA,CAAAA;;CAKTF,WAAWL,EAAOK;AACpB,IAEaK,KAAgCC,GAAkBJ,GAAiBP,OAAqC;CACnHC,SAAS;CACTC,UACE,gBAACL,GAAAA;EACCM,OAAO,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;EACPC,aACE,gBAAA,GAAA,EAAA,UAAA,CACE,gBAAA,GAAA;;aAA+BO,YAAAA;MAC9BJ,CAAAA,EAAAA,CAAAA;;CAKTF,WAAWL,EAAOK;AACpB,IAEaO,MAAwBb,GAAmBC,OAAqC;CAC3FC,SAAS;CACTC,UACE,gBAACL,GAAAA;EACCM,OAAO,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;EACPC,aAAa,gBAAA,GAAA;;aAAwBL,aAAAA;;;CAGzCM,WAAWL,EAAOK;AACpB,IAEaQ,MAA4BC,GAAiBP,GAAiBP,OAAqC;CAC9GC,SAAS;CACTC,UACE,gBAACL,GAAAA;EACCM,OAAO,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;EACPC,aACE,gBAAA,GAAA;;;IACcU;IAAiCP;;;;CAKrDF,WAAWL,EAAOK;AACpB,IAEaU,MAA0BhB,GAAmBC,OAAqC;CAC7FC,SAAS;CACTC,UACE,gBAACL,GAAAA;EACCM,OAAO,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;EACPC,aAAa,gBAAA,GAAA;;aAAwBL,aAAAA;;;CAGzCM,WAAWL,EAAOK;AACpB,IAEaW,MAA4BjB,GAAmBC,OAAqC;CAC/FC,SAAS;CACTC,UACE,gBAACL,GAAAA;EACCM,OAAO,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;EACPC,aAAa,gBAAA,GAAA;;aAAwBL,aAAAA;;;CAGzCM,WAAWL,EAAOK;AACpB,IAEaY,MAAgCH,GAAiBP,GAAiBP,OAAqC;CAClHC,SAAS;CACTC,UACE,gBAACL,GAAAA;EACCM,OAAO,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;EACPC,aACE,gBAAA,GAAA;;;IACcU;IAAsCP;;;;CAK1DF,WAAWL,EAAOK;AACpB,IAEaa,MAAkCJ,GAAiBP,GAAiBP,OAAqC;CACpHC,SAAS;CACTC,UACE,gBAACL,GAAAA;EACCM,OAAO,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;EACPC,aACE,gBAAA,GAAA;;;IACcU;IAAqCP;;;;CAKzDF,WAAWL,EAAOK;AACpB,IAGac,MACXC,GACAC,GACArB,OACgB;CAChBC,SAAS;CACTC,UACE,gBAACL,GAAAA;EACCM,OAAO,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;EACPC,aACE,gBAAA,GAAA;;;IACwBgB;IAAkBC;;;;CAKhDhB,WAAWL,EAAOK;AACpB,IAEaiB,MAA2BC,GAAqBF,GAAoBrB,OAAqC;CACpHC,SAAS;CACTC,UACE,gBAACL,GAAAA;EACCM,OAAO,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;EACPC,aACE,gBAAA,GAAA;;;IACoBmB;IAAiBF;;;;CAK3ChB,WAAWL,EAAOK;AACpB,IAEamB,MACXJ,GACAG,GACAvB,OACgB;CAChBC,SAAS;CACTC,UACE,gBAACL,GAAAA;EACCM,OAAO,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;EACPC,aACE,gBAAA,GAAA;;;IACWgB;IAA6BG;;;;CAK9ClB,WAAWL,EAAOK;AACpB,IAEaoB,MACXL,GACAC,GACArB,OACgB;CAChBC,SAAS;CACTC,UACE,gBAACL,GAAAA;EACCM,OAAO,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;EACPC,aACE,gBAAA,GAAA;;;IAC0BgB;IAAkBC;;;;CAKlDhB,WAAWL,EAAOK;AACpB,IAEaqB,MACXH,GACAF,GACArB,OACgB;CAChBC,SAAS;CACTC,UACE,gBAACL,GAAAA;EACCM,OAAO,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;EACPC,aACE,gBAAA,GAAA;;;IACsBmB;IAAiBF;;;;CAM7ChB,WAAWL,EAAOK;AACpB,IAEasB,MACXP,GACAG,GACAvB,OACgB;CAChBC,SAAS;CACTC,UACE,gBAACL,GAAAA;EACCM,OAAO,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;EACPC,aACE,gBAAA,GAAA;;;IACagB;IAA6BG;;;;CAKhDlB,WAAWL,EAAOK;AACpB,IAEauB,MACXR,GACAC,GACArB,OACgB;CAChBC,SAAS;CACTC,UACE,gBAACL,GAAAA;EACCM,OAAO,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;EACPC,aACE,gBAAA,GAAA;;;IAC4BgB;IAAkBC;;;;CAKpDhB,WAAWL,EAAOK;AACpB,IAEawB,MACXN,GACAF,GACArB,OACgB;CAChBC,SAAS;CACTC,UACE,gBAACL,GAAAA;EACCM,OAAO,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;EACPC,aACE,gBAAA,GAAA;;;IACwBmB;IAAiBF;;;;CAM/ChB,WAAWL,EAAOK;AACpB,IAEayB,MACXV,GACAG,GACAvB,OACgB;CAChBC,SAAS;CACTC,UACE,gBAACL,GAAAA;EACCM,OAAO,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;EACPC,aACE,gBAAA,GAAA;;;IACegB;IAA6BG;;;;CAKlDlB,WAAWL,EAAOK;AACpB,IAGa0B,MAAoCC,GAAmBhC,OAAqC;CACvGC,SAAS;CACTC,UACE,gBAACL,GAAAA;EACCM,OAAO,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;EACPC,aAAa,gBAAA,GAAA;;aAAkC4B,aAAAA;;;CAGnD3B,WAAWL,EAAOK;AACpB,IAEa4B,MAAkCC,GAAsBlC,OAAqC;CACxGC,SAAS;CACTC,UACE,gBAACL,GAAAA;EACCM,OAAO,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;EACPC,aAAa8B,KAAgB,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;;CAGjC7B,WAAWL,EAAOK;AACpB,IAGa8B,MACXpC,GACAqC,GACApC,OACgB;CAChBC,SAAS;CACTC,UACE,gBAACL,GAAAA;EACCM,OAAO,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;EACPC,aACE,gBAAA,GAAA;;;IACUL;IAAmCqC;;;;CAKnD/B,WAAWL,EAAOK;AACpB,IAEagC,MACXtC,GACAQ,GACAP,OACgB;CAChBC,SAAS;CACTC,UACE,gBAACL,GAAAA;EACCM,OAAO,gBAAA,GAAA,EAAA,IAAA,SAAA,CAAA;EACPC,aACE,gBAAA,GAAA,EAAA,UAAA,CACE,gBAAA,GAAA;;aAAyCL,aAAAA;MACxCQ,CAAAA,EAAAA,CAAAA;;CAKTF,WAAWL,EAAOK;AACpB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_auth-D5_QNUos.mjs","names":["Outlet","useAuth","Route","RouteComponent","component"],"sources":["../../src/client/routes/_auth.tsx?tsr-split=component"],"sourcesContent":["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 redirectPath = `${location.pathname}${location.searchStr || \"\"}${location.hash || \"\"}`\n\n throw redirect({\n to: \"/\",\n search: { redirect: redirectPath },\n })\n }\n },\n})\n\nfunction RouteComponent() {\n useAuth()\n\n return <Outlet />\n}\n"],"mappings":";;;;AAiBA,SAASG,IAAAA;CAGP,OAFAF,EAAAA,GAEO,gBAAC,GAAA,CAAA,CAAA;AACV"}
|
|
@@ -1,194 +0,0 @@
|
|
|
1
|
-
import { A as e, D as t, F as n, K as r, Y as i, at as a, q as o, rt as s, st as c, tt as l, ut as u, y as d } from "./build-CRLQyqu2.mjs";
|
|
2
|
-
import { a as f } from "./trpcClient-Di56hpVv.mjs";
|
|
3
|
-
import { t as p } from "./StatusError-2ZU1gFpu.mjs";
|
|
4
|
-
import { t as m } from "./_flavorId-CFmkmg2Y.mjs";
|
|
5
|
-
import { n as h, t as g } from "./ContentHeader-9KZdhOoA.mjs";
|
|
6
|
-
import { i as _, n as v, r as y, t as b } from "./DeleteFlavorModal-Be2qZo4w.mjs";
|
|
7
|
-
import { t as x } from "./useModal-DCs1OJh7.mjs";
|
|
8
|
-
import { Fragment as S, jsx as C, jsxs as w } from "react/jsx-runtime";
|
|
9
|
-
import T from "react";
|
|
10
|
-
import { useNavigate as E, useParams as D } from "@tanstack/react-router";
|
|
11
|
-
import { Trans as O, useLingui as k } from "@lingui/react";
|
|
12
|
-
//#region src/client/routes/_auth/projects/$projectId/compute/flavors/-components/FlavorDetailsView.tsx
|
|
13
|
-
function A({ flavor: e }) {
|
|
14
|
-
let r = (e, t = "MB") => e === 0 ? `0 ${t}` : `${e} ${t}`;
|
|
15
|
-
return /*#__PURE__*/ w(l, {
|
|
16
|
-
direction: "vertical",
|
|
17
|
-
gap: "6",
|
|
18
|
-
className: "mt-6",
|
|
19
|
-
children: [
|
|
20
|
-
/*#__PURE__*/ w(l, {
|
|
21
|
-
direction: "vertical",
|
|
22
|
-
gap: "2",
|
|
23
|
-
children: [/*#__PURE__*/ C(i, { children: /*#__PURE__*/ C(O, { id: "jIPNJG" }) }), /*#__PURE__*/ w(n, {
|
|
24
|
-
alignTerms: "right",
|
|
25
|
-
children: [
|
|
26
|
-
/*#__PURE__*/ C(o, { children: /*#__PURE__*/ C(O, { id: "S0kLOH" }) }),
|
|
27
|
-
/*#__PURE__*/ C(t, { children: /*#__PURE__*/ C(h, { text: e.id }) }),
|
|
28
|
-
/*#__PURE__*/ C(o, { children: /*#__PURE__*/ C(O, { id: "6YtxFj" }) }),
|
|
29
|
-
/*#__PURE__*/ C(t, { children: e.name }),
|
|
30
|
-
/*#__PURE__*/ C(o, { children: /*#__PURE__*/ C(O, { id: "Nu4oKW" }) }),
|
|
31
|
-
/*#__PURE__*/ C(t, { children: e?.description }),
|
|
32
|
-
/*#__PURE__*/ C(o, { children: /*#__PURE__*/ C(O, { id: "7d1a0d" }) }),
|
|
33
|
-
/*#__PURE__*/ C(t, { children: e["os-flavor-access:is_public"] ? /*#__PURE__*/ C(O, { id: "l75CjT" }) : /*#__PURE__*/ C(O, { id: "1UzENP" }) }),
|
|
34
|
-
/*#__PURE__*/ C(o, { children: /*#__PURE__*/ C(O, { id: "E/QGRL" }) }),
|
|
35
|
-
/*#__PURE__*/ C(t, { children: e["OS-FLV-DISABLED:disabled"] ? /*#__PURE__*/ C(O, { id: "l75CjT" }) : /*#__PURE__*/ C(O, { id: "1UzENP" }) })
|
|
36
|
-
]
|
|
37
|
-
})]
|
|
38
|
-
}),
|
|
39
|
-
/*#__PURE__*/ w(l, {
|
|
40
|
-
direction: "vertical",
|
|
41
|
-
gap: "2",
|
|
42
|
-
children: [/*#__PURE__*/ C(i, { children: /*#__PURE__*/ C(O, { id: "qQ1QBh" }) }), /*#__PURE__*/ w(n, {
|
|
43
|
-
alignTerms: "right",
|
|
44
|
-
children: [
|
|
45
|
-
/*#__PURE__*/ C(o, { children: /*#__PURE__*/ C(O, { id: "MZGbkp" }) }),
|
|
46
|
-
/*#__PURE__*/ C(t, { children: e.vcpus }),
|
|
47
|
-
/*#__PURE__*/ C(o, { children: /*#__PURE__*/ C(O, { id: "RGhYAo" }) }),
|
|
48
|
-
/*#__PURE__*/ C(t, { children: r(e.ram, "MiB") }),
|
|
49
|
-
/*#__PURE__*/ C(o, { children: /*#__PURE__*/ C(O, { id: "sPFHpI" }) }),
|
|
50
|
-
/*#__PURE__*/ C(t, { children: r(e.disk, "GiB") }),
|
|
51
|
-
/*#__PURE__*/ C(o, { children: /*#__PURE__*/ C(O, { id: "r9Aac8" }) }),
|
|
52
|
-
/*#__PURE__*/ C(t, { children: r(e["OS-FLV-EXT-DATA:ephemeral"] || 0, "GiB") }),
|
|
53
|
-
/*#__PURE__*/ C(o, { children: /*#__PURE__*/ C(O, { id: "vH2C/2" }) }),
|
|
54
|
-
/*#__PURE__*/ C(t, { children: e.swap === 0 || e.swap === "" ? /*#__PURE__*/ C(O, { id: "EdQY6l" }) : r(Number(e.swap), "MiB") }),
|
|
55
|
-
/*#__PURE__*/ C(o, { children: /*#__PURE__*/ C(O, { id: "u5HztT" }) }),
|
|
56
|
-
/*#__PURE__*/ C(t, { children: e.rxtx_factor })
|
|
57
|
-
]
|
|
58
|
-
})]
|
|
59
|
-
}),
|
|
60
|
-
e.extra_specs && Object.keys(e.extra_specs).length > 0 && /*#__PURE__*/ w(l, {
|
|
61
|
-
direction: "vertical",
|
|
62
|
-
gap: "2",
|
|
63
|
-
children: [/*#__PURE__*/ C(i, { children: /*#__PURE__*/ C(O, { id: "DKkOPx" }) }), /*#__PURE__*/ C(n, {
|
|
64
|
-
alignTerms: "right",
|
|
65
|
-
children: Object.entries(e.extra_specs).map(([e, n]) => /*#__PURE__*/ w(T.Fragment, { children: [/*#__PURE__*/ C(o, { children: e }), /*#__PURE__*/ C(t, { children: n })] }, e))
|
|
66
|
-
})]
|
|
67
|
-
})
|
|
68
|
-
]
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
//#endregion
|
|
72
|
-
//#region src/client/routes/_auth/projects/$projectId/compute/flavors/$flavorId.tsx?tsr-split=component
|
|
73
|
-
function j() {
|
|
74
|
-
let { projectId: t, flavorId: n } = D({ from: "/_auth/projects/$projectId/compute/flavors/$flavorId" }), { trpcClient: i } = m.useRouteContext(), o = E(), { i18n: h, _: T } = k(), { translateError: j, isRetryableError: M } = _(), { data: N, status: P, error: F, refetch: I } = f.compute.getFlavorById.useQuery({
|
|
75
|
-
project_id: t,
|
|
76
|
-
flavorId: n
|
|
77
|
-
}), { data: L } = f.compute.canUser.useQuery({
|
|
78
|
-
project_id: t,
|
|
79
|
-
permission: [
|
|
80
|
-
"flavors:delete",
|
|
81
|
-
"flavors:list_projects",
|
|
82
|
-
"flavor_specs:create",
|
|
83
|
-
"flavor_specs:delete",
|
|
84
|
-
"flavor_specs:list"
|
|
85
|
-
]
|
|
86
|
-
}), R = L?.[0] ?? !1, z = L?.[1] ?? !1, B = (L?.[2] ?? !1) || (L?.[3] ?? !1), V = L?.[4] ?? !1, [H, U] = x(), [W, G] = x(), [K, q] = x(), J = () => {
|
|
87
|
-
o({
|
|
88
|
-
to: "/projects/$projectId/compute/flavors",
|
|
89
|
-
params: { projectId: t }
|
|
90
|
-
});
|
|
91
|
-
}, Y = () => {
|
|
92
|
-
o({
|
|
93
|
-
to: "/projects/$projectId",
|
|
94
|
-
params: { projectId: t }
|
|
95
|
-
});
|
|
96
|
-
}, X = () => {
|
|
97
|
-
I();
|
|
98
|
-
};
|
|
99
|
-
if (P === "pending") return /*#__PURE__*/ w(l, {
|
|
100
|
-
className: "fixed inset-0",
|
|
101
|
-
distribution: "center",
|
|
102
|
-
alignment: "center",
|
|
103
|
-
direction: "vertical",
|
|
104
|
-
children: [/*#__PURE__*/ C(r, {
|
|
105
|
-
variant: "primary",
|
|
106
|
-
size: "large",
|
|
107
|
-
className: "mb-2"
|
|
108
|
-
}), /*#__PURE__*/ C(O, { id: "YNgcgc" })]
|
|
109
|
-
});
|
|
110
|
-
if (P === "error") {
|
|
111
|
-
let e = F?.message || "UNKNOWN_ERROR", t = j(e), n = M(e);
|
|
112
|
-
return /*#__PURE__*/ C(p, {
|
|
113
|
-
message: t,
|
|
114
|
-
statusCode: ((e) => {
|
|
115
|
-
if (e.includes("UNAUTHORIZED")) return 401;
|
|
116
|
-
if (e.includes("FORBIDDEN")) return 403;
|
|
117
|
-
if (e.includes("NOT_FOUND")) return 404;
|
|
118
|
-
if (e.includes("SERVER_ERROR")) return 500;
|
|
119
|
-
})(e),
|
|
120
|
-
title: h._({ id: "FjONW3" }),
|
|
121
|
-
onBackClick: J,
|
|
122
|
-
onHomeClick: Y,
|
|
123
|
-
reset: n ? X : void 0
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
if (!N) return /*#__PURE__*/ C(p, {
|
|
127
|
-
message: h._({ id: "y0u86k" }),
|
|
128
|
-
statusCode: 404,
|
|
129
|
-
title: h._({ id: "bpme7e" }),
|
|
130
|
-
onBackClick: J,
|
|
131
|
-
onHomeClick: Y
|
|
132
|
-
});
|
|
133
|
-
let Z = N["os-flavor-access:is_public"] !== !1, Q = z || R || B || V ? /*#__PURE__*/ C(u, { children: /*#__PURE__*/ w(s, { children: [/*#__PURE__*/ C(c, {
|
|
134
|
-
as: "div",
|
|
135
|
-
children: /*#__PURE__*/ C(d, {
|
|
136
|
-
icon: "moreVert",
|
|
137
|
-
children: /*#__PURE__*/ C(O, { id: "PgNNGl" })
|
|
138
|
-
})
|
|
139
|
-
}), /*#__PURE__*/ w(e, { children: [
|
|
140
|
-
(B || V) && /*#__PURE__*/ C(a, {
|
|
141
|
-
label: B ? h._({ id: "SIfYq6" }) : h._({ id: "6GBt0m" }),
|
|
142
|
-
onClick: U
|
|
143
|
-
}),
|
|
144
|
-
z && /*#__PURE__*/ C(a, {
|
|
145
|
-
label: h._({ id: "cWbW6w" }),
|
|
146
|
-
onClick: G,
|
|
147
|
-
disabled: Z
|
|
148
|
-
}),
|
|
149
|
-
R && /*#__PURE__*/ C(a, {
|
|
150
|
-
label: h._({ id: "JT3I1g" }),
|
|
151
|
-
onClick: q
|
|
152
|
-
})
|
|
153
|
-
] })] }) }) : void 0;
|
|
154
|
-
return /*#__PURE__*/ w(S, { children: [
|
|
155
|
-
/*#__PURE__*/ C(g, {
|
|
156
|
-
title: N.name,
|
|
157
|
-
projectId: t,
|
|
158
|
-
actions: Q
|
|
159
|
-
}),
|
|
160
|
-
/*#__PURE__*/ C(l, {
|
|
161
|
-
direction: "vertical",
|
|
162
|
-
children: /*#__PURE__*/ C(A, { flavor: N })
|
|
163
|
-
}),
|
|
164
|
-
i && /*#__PURE__*/ w(S, { children: [
|
|
165
|
-
H && /*#__PURE__*/ C(y, {
|
|
166
|
-
client: i,
|
|
167
|
-
isOpen: H,
|
|
168
|
-
onClose: U,
|
|
169
|
-
project: t,
|
|
170
|
-
flavor: N,
|
|
171
|
-
canEdit: B
|
|
172
|
-
}),
|
|
173
|
-
W && /*#__PURE__*/ C(v, {
|
|
174
|
-
client: i,
|
|
175
|
-
isOpen: W,
|
|
176
|
-
onClose: G,
|
|
177
|
-
project: t,
|
|
178
|
-
flavor: N
|
|
179
|
-
}),
|
|
180
|
-
K && /*#__PURE__*/ C(b, {
|
|
181
|
-
client: i,
|
|
182
|
-
isOpen: K,
|
|
183
|
-
onClose: q,
|
|
184
|
-
project: t,
|
|
185
|
-
flavor: N,
|
|
186
|
-
onSuccess: J
|
|
187
|
-
})
|
|
188
|
-
] })
|
|
189
|
-
] });
|
|
190
|
-
}
|
|
191
|
-
//#endregion
|
|
192
|
-
export { j as component };
|
|
193
|
-
|
|
194
|
-
//# sourceMappingURL=_flavorId-BsmqS9hP.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_flavorId-BsmqS9hP.mjs","names":["React","Stack","DescriptionList","DescriptionTerm","DescriptionDefinition","ContentHeading","ClipboardText","FlavorDetailsView","flavor","formatBytes","bytes","unit","direction","gap","className","alignTerms","text","id","name","description","vcpus","ram","disk","swap","Number","rxtx_factor","extra_specs","Object","keys","length","entries","map","key","value","Fragment","Button","ButtonRow","Stack","Spinner","PopupMenu","PopupMenuToggle","PopupMenuOptions","PopupMenuItem","useNavigate","useParams","Trans","useLingui","trpcReact","FlavorDetailsView","StatusError","useErrorTranslation","EditSpecModal","ManageAccessModal","DeleteFlavorModal","useModal","ContentHeader","Route","RouteComponent","projectId","flavorId","from","trpcClient","useRouteContext","navigate","t","translateError","isRetryableError","data","flavor","status","error","refetch","compute","getFlavorById","useQuery","project_id","permissionsData","canUser","permission","canDeleteFlavor","canManageAccess","canManageSpecs","canListSpecs","specModalOpen","toggleSpecModal","accessModalOpen","toggleAccessModal","deleteModalOpen","toggleDeleteModal","handleBack","to","params","handleHome","handleRetry","errorCode","message","translatedError","canRetry","getStatusCode","code","includes","undefined","isPublicFlavor","hasMoreActions","headerActions","name","component"],"sources":["../../src/client/routes/_auth/projects/$projectId/compute/flavors/-components/FlavorDetailsView.tsx","../../src/client/routes/_auth/projects/$projectId/compute/flavors/$flavorId.tsx?tsr-split=component"],"sourcesContent":["import React from \"react\"\nimport {\n Stack,\n DescriptionList,\n DescriptionTerm,\n DescriptionDefinition,\n ContentHeading,\n} from \"@cloudoperators/juno-ui-components/index\"\nimport { Trans } from \"@lingui/react/macro\"\nimport type { Flavor } from \"@/server/Compute/types/flavor\"\nimport ClipboardText from \"@/client/components/ClipboardText\"\n\ninterface FlavorDetailsViewProps {\n flavor: Flavor\n}\n\nexport function FlavorDetailsView({ flavor }: FlavorDetailsViewProps) {\n const formatBytes = (bytes: number, unit: string = \"MB\") => {\n if (bytes === 0) return `0 ${unit}`\n return `${bytes} ${unit}`\n }\n\n return (\n <Stack direction=\"vertical\" gap=\"6\" className=\"mt-6\">\n <Stack direction=\"vertical\" gap=\"2\">\n <ContentHeading>\n <Trans>Basic Information</Trans>\n </ContentHeading>\n <DescriptionList alignTerms=\"right\">\n <DescriptionTerm>\n <Trans>ID</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>\n <ClipboardText text={flavor.id} />\n </DescriptionDefinition>\n\n <DescriptionTerm>\n <Trans>Name</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>{flavor.name}</DescriptionDefinition>\n\n <DescriptionTerm>\n <Trans>Description</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>{flavor?.description}</DescriptionDefinition>\n\n <DescriptionTerm>\n <Trans>Public</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>\n {flavor[\"os-flavor-access:is_public\"] ? <Trans>Yes</Trans> : <Trans>No</Trans>}\n </DescriptionDefinition>\n\n <DescriptionTerm>\n <Trans>Disabled</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>\n {flavor[\"OS-FLV-DISABLED:disabled\"] ? <Trans>Yes</Trans> : <Trans>No</Trans>}\n </DescriptionDefinition>\n </DescriptionList>\n </Stack>\n\n <Stack direction=\"vertical\" gap=\"2\">\n <ContentHeading>\n <Trans>Hardware Specifications</Trans>\n </ContentHeading>\n <DescriptionList alignTerms=\"right\">\n <DescriptionTerm>\n <Trans>VCPUs</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>{flavor.vcpus}</DescriptionDefinition>\n\n <DescriptionTerm>\n <Trans>RAM</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>{formatBytes(flavor.ram, \"MiB\")}</DescriptionDefinition>\n\n <DescriptionTerm>\n <Trans>Disk</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>{formatBytes(flavor.disk, \"GiB\")}</DescriptionDefinition>\n\n <DescriptionTerm>\n <Trans>Ephemeral Disk</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>{formatBytes(flavor[\"OS-FLV-EXT-DATA:ephemeral\"] || 0, \"GiB\")}</DescriptionDefinition>\n\n <DescriptionTerm>\n <Trans>Swap</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>\n {flavor.swap === 0 || flavor.swap === \"\" ? <Trans>None</Trans> : formatBytes(Number(flavor.swap), \"MiB\")}\n </DescriptionDefinition>\n\n <DescriptionTerm>\n <Trans>RX/TX Factor</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>{flavor.rxtx_factor}</DescriptionDefinition>\n </DescriptionList>\n </Stack>\n\n {flavor.extra_specs && Object.keys(flavor.extra_specs).length > 0 && (\n <Stack direction=\"vertical\" gap=\"2\">\n <ContentHeading>\n <Trans>Extra Specs</Trans>\n </ContentHeading>\n <DescriptionList alignTerms=\"right\">\n {Object.entries(flavor.extra_specs).map(([key, value]) => (\n <React.Fragment key={key}>\n <DescriptionTerm>{key}</DescriptionTerm>\n <DescriptionDefinition>{value}</DescriptionDefinition>\n </React.Fragment>\n ))}\n </DescriptionList>\n </Stack>\n )}\n </Stack>\n )\n}\n","import {\n Button,\n ButtonRow,\n Stack,\n Spinner,\n PopupMenu,\n PopupMenuToggle,\n PopupMenuOptions,\n PopupMenuItem,\n} from \"@cloudoperators/juno-ui-components/index\"\nimport { createFileRoute, redirect, useNavigate, useParams } from \"@tanstack/react-router\"\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 { FlavorDetailsView } from \"./-components/FlavorDetailsView\"\nimport { StatusError } from \"@/client/components/Error/StatusError\"\nimport { useErrorTranslation } from \"@/client/utils/useErrorTranslation\"\nimport { EditSpecModal } from \"../-components/Flavors/-components/EditSpecModal\"\nimport { ManageAccessModal } from \"../-components/Flavors/-components/ManageAccessModal\"\nimport { DeleteFlavorModal } from \"../-components/Flavors/-components/DeleteFlavorModal\"\nimport { useModal } from \"@/client/utils/useModal\"\nimport { ContentHeader } from \"@/client/components/ContentHeader/ContentHeader\"\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/compute/flavors/$flavorId\")({\n staticData: {\n section: \"compute\",\n service: \"flavors\",\n analytics: {\n name: \"compute.flavors.detail\",\n },\n isDetail: true,\n sectionCrumb: { labelKey: \"Compute\" },\n crumb: { labelKey: \"Flavors\", to: \"/projects/$projectId/compute/flavors\" },\n } satisfies RouteInfo,\n loader: async ({ context, params }) => {\n const flavor = await context.trpcClient?.compute.getFlavorById.query({\n project_id: params.projectId,\n flavorId: params.flavorId,\n })\n return { flavorName: flavor?.name ?? null }\n },\n head: ({ loaderData }) => ({\n meta: [{ title: loaderData?.flavorName ?? \"Flavor 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 if (!serviceIndex[\"flavor\"] && !serviceIndex[\"compute\"]) {\n throw redirect({\n to: \"/projects/$projectId\",\n params: { projectId },\n })\n }\n },\n})\n\nfunction RouteComponent() {\n const { projectId, flavorId } = useParams({\n from: \"/_auth/projects/$projectId/compute/flavors/$flavorId\",\n })\n const { trpcClient } = Route.useRouteContext()\n const navigate = useNavigate()\n const { t } = useLingui()\n const { translateError, isRetryableError } = useErrorTranslation()\n\n const {\n data: flavor,\n status,\n error,\n refetch,\n } = trpcReact.compute.getFlavorById.useQuery({\n project_id: projectId,\n flavorId,\n })\n\n const { data: permissionsData } = trpcReact.compute.canUser.useQuery({\n project_id: projectId,\n permission: [\n \"flavors:delete\",\n \"flavors:list_projects\",\n \"flavor_specs:create\",\n \"flavor_specs:delete\",\n \"flavor_specs:list\",\n ],\n })\n\n const canDeleteFlavor = permissionsData?.[0] ?? false\n const canManageAccess = permissionsData?.[1] ?? false\n const canManageSpecs = (permissionsData?.[2] ?? false) || (permissionsData?.[3] ?? false)\n const canListSpecs = permissionsData?.[4] ?? false\n\n const [specModalOpen, toggleSpecModal] = useModal()\n const [accessModalOpen, toggleAccessModal] = useModal()\n const [deleteModalOpen, toggleDeleteModal] = useModal()\n\n const handleBack = () => {\n navigate({\n to: \"/projects/$projectId/compute/flavors\",\n params: { projectId },\n })\n }\n\n const handleHome = () => {\n navigate({\n to: \"/projects/$projectId\",\n params: { projectId },\n })\n }\n\n const handleRetry = () => {\n refetch()\n }\n\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 Flavor Details...</Trans>\n </Stack>\n )\n }\n\n if (status === \"error\") {\n const errorCode = error?.message || \"UNKNOWN_ERROR\"\n const translatedError = translateError(errorCode)\n const canRetry = isRetryableError(errorCode)\n\n const getStatusCode = (code: string): number | undefined => {\n if (code.includes(\"UNAUTHORIZED\")) return 401\n if (code.includes(\"FORBIDDEN\")) return 403\n if (code.includes(\"NOT_FOUND\")) return 404\n if (code.includes(\"SERVER_ERROR\")) return 500\n return undefined\n }\n\n return (\n <StatusError\n message={translatedError}\n statusCode={getStatusCode(errorCode)}\n title={t`Error Loading Flavor`}\n onBackClick={handleBack}\n onHomeClick={handleHome}\n reset={canRetry ? handleRetry : undefined}\n />\n )\n }\n\n if (!flavor) {\n return (\n <StatusError\n message={t`The requested flavor could not be found. It may have been deleted or you may not have access to it.`}\n statusCode={404}\n title={t`Flavor Not Found`}\n onBackClick={handleBack}\n onHomeClick={handleHome}\n />\n )\n }\n\n const isPublicFlavor = flavor[\"os-flavor-access:is_public\"] !== false\n const hasMoreActions = canManageAccess || canDeleteFlavor || canManageSpecs || canListSpecs\n\n const headerActions = hasMoreActions ? (\n <ButtonRow>\n <PopupMenu>\n <PopupMenuToggle as=\"div\">\n <Button icon=\"moreVert\">\n <Trans>More Actions</Trans>\n </Button>\n </PopupMenuToggle>\n <PopupMenuOptions>\n {(canManageSpecs || canListSpecs) && (\n <PopupMenuItem label={canManageSpecs ? t`Edit Metadata` : t`Metadata`} onClick={toggleSpecModal} />\n )}\n {canManageAccess && (\n <PopupMenuItem label={t`Manage Access`} onClick={toggleAccessModal} disabled={isPublicFlavor} />\n )}\n {canDeleteFlavor && <PopupMenuItem label={t`Delete Flavor`} onClick={toggleDeleteModal} />}\n </PopupMenuOptions>\n </PopupMenu>\n </ButtonRow>\n ) : undefined\n\n return (\n <>\n <ContentHeader title={flavor.name} projectId={projectId} actions={headerActions} />\n <Stack direction=\"vertical\">\n <FlavorDetailsView flavor={flavor} />\n </Stack>\n\n {trpcClient && (\n <>\n {specModalOpen && (\n <EditSpecModal\n client={trpcClient}\n isOpen={specModalOpen}\n onClose={toggleSpecModal}\n project={projectId}\n flavor={flavor}\n canEdit={canManageSpecs}\n />\n )}\n\n {accessModalOpen && (\n <ManageAccessModal\n client={trpcClient}\n isOpen={accessModalOpen}\n onClose={toggleAccessModal}\n project={projectId}\n flavor={flavor}\n />\n )}\n\n {deleteModalOpen && (\n <DeleteFlavorModal\n client={trpcClient}\n isOpen={deleteModalOpen}\n onClose={toggleDeleteModal}\n project={projectId}\n flavor={flavor}\n onSuccess={handleBack}\n />\n )}\n </>\n )}\n </>\n )\n}\n"],"mappings":"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"}
|