@cobaltcore-dev/aurora 0.2.2 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/dist/client/AuroraApp.d.ts +10 -0
  2. package/dist/client/{ContentHeader-DtBiIwRY.mjs → ContentHeader-B_PWrxbw.mjs} +17 -17
  3. package/dist/client/{ContentHeader-DtBiIwRY.mjs.map → ContentHeader-B_PWrxbw.mjs.map} +1 -1
  4. package/dist/client/{DeleteFlavorModal-rmuYIafD.mjs → DeleteFlavorModal-BkPrQKyE.mjs} +146 -146
  5. package/dist/client/{DeleteFlavorModal-rmuYIafD.mjs.map → DeleteFlavorModal-BkPrQKyE.mjs.map} +1 -1
  6. package/dist/client/{EditSecurityGroupModal-B7Sz9puM.mjs → EditSecurityGroupModal-ad4uzlt0.mjs} +14 -14
  7. package/dist/client/{EditSecurityGroupModal-B7Sz9puM.mjs.map → EditSecurityGroupModal-ad4uzlt0.mjs.map} +1 -1
  8. package/dist/client/{FloatingIpActionModals-CfRJiZqD.mjs → FloatingIpActionModals-lKMwLuL8.mjs} +51 -51
  9. package/dist/client/{FloatingIpActionModals-CfRJiZqD.mjs.map → FloatingIpActionModals-lKMwLuL8.mjs.map} +1 -1
  10. package/dist/client/{ImageToastNotifications-Cw30RXsw.mjs → ImageToastNotifications--U13YiQ_.mjs} +328 -328
  11. package/dist/client/{ImageToastNotifications-Cw30RXsw.mjs.map → ImageToastNotifications--U13YiQ_.mjs.map} +1 -1
  12. package/dist/client/{ListToolbar-DuazvsAu.mjs → ListToolbar-C5lzTrit.mjs} +56 -56
  13. package/dist/client/{ListToolbar-DuazvsAu.mjs.map → ListToolbar-C5lzTrit.mjs.map} +1 -1
  14. package/dist/client/{RouteError-Cyto623-.mjs → RouteError-iP1Vd6bY.mjs} +2 -2
  15. package/dist/client/{RouteError-Cyto623-.mjs.map → RouteError-iP1Vd6bY.mjs.map} +1 -1
  16. package/dist/client/{_flavorId-B-1fYadl.mjs → _flavorId-BaNXUJhA.mjs} +49 -49
  17. package/dist/client/_flavorId-BaNXUJhA.mjs.map +1 -0
  18. package/dist/client/{_flavorId-BYfIHIV_.mjs → _flavorId-CnO76tuy.mjs} +10 -10
  19. package/dist/client/_flavorId-CnO76tuy.mjs.map +1 -0
  20. package/dist/client/{_floatingIpId-IrnN-ozB.mjs → _floatingIpId-C8G20nNt.mjs} +2 -2
  21. package/dist/client/{_floatingIpId-IrnN-ozB.mjs.map → _floatingIpId-C8G20nNt.mjs.map} +1 -1
  22. package/dist/client/{_floatingIpId-FQ5P2qMV.mjs → _floatingIpId-DdKnjdIV.mjs} +36 -36
  23. package/dist/client/{_floatingIpId-FQ5P2qMV.mjs.map → _floatingIpId-DdKnjdIV.mjs.map} +1 -1
  24. package/dist/client/{_imageId-Tx_9bqEc.mjs → _imageId-DdSbxFqG.mjs} +135 -135
  25. package/dist/client/_imageId-DdSbxFqG.mjs.map +1 -0
  26. package/dist/client/{_pcaId-CFuKY82d.mjs → _pcaId-DFkYJEb5.mjs} +136 -136
  27. package/dist/client/{_pcaId-CFuKY82d.mjs.map → _pcaId-DFkYJEb5.mjs.map} +1 -1
  28. package/dist/client/{_pcaId-Bck7S7gJ.mjs → _pcaId-DX_S-3hE.mjs} +2 -2
  29. package/dist/client/{_pcaId-Bck7S7gJ.mjs.map → _pcaId-DX_S-3hE.mjs.map} +1 -1
  30. package/dist/client/{_projectId-PSpuCKO7.mjs → _projectId-DYrcZ3E3.mjs} +9 -9
  31. package/dist/client/{_projectId-PSpuCKO7.mjs.map → _projectId-DYrcZ3E3.mjs.map} +1 -1
  32. package/dist/client/{_projectId-B1VjDd0Z.mjs → _projectId-Dha4XqX4.mjs} +3 -3
  33. package/dist/client/{_projectId-B1VjDd0Z.mjs.map → _projectId-Dha4XqX4.mjs.map} +1 -1
  34. package/dist/client/_projectId-DsSVV2EA.mjs +316 -0
  35. package/dist/client/_projectId-DsSVV2EA.mjs.map +1 -0
  36. package/dist/client/{_projectId-Pxp-RXK4.mjs → _projectId-KH5si25Q.mjs} +2 -2
  37. package/dist/client/{_projectId-Pxp-RXK4.mjs.map → _projectId-KH5si25Q.mjs.map} +1 -1
  38. package/dist/client/{_securityGroupId-VV2lUcGQ.mjs → _securityGroupId-DgaSqYex.mjs} +2 -2
  39. package/dist/client/{_securityGroupId-VV2lUcGQ.mjs.map → _securityGroupId-DgaSqYex.mjs.map} +1 -1
  40. package/dist/client/{_securityGroupId-Dqi6ddw4.mjs → _securityGroupId-O7FXfx0M.mjs} +306 -306
  41. package/dist/client/{_securityGroupId-Dqi6ddw4.mjs.map → _securityGroupId-O7FXfx0M.mjs.map} +1 -1
  42. package/dist/client/{about-B2AzqxFI.mjs → about-DN8n8sN8.mjs} +8 -8
  43. package/dist/client/{about-B2AzqxFI.mjs.map → about-DN8n8sN8.mjs.map} +1 -1
  44. package/dist/client/{build-Cf7iWbpH.mjs → build-CZRvXrAL.mjs} +1047 -1042
  45. package/dist/client/{build-Cf7iWbpH.mjs.map → build-CZRvXrAL.mjs.map} +1 -1
  46. package/dist/client/{constants-CCgR6fKI.mjs → constants-akdIBeTX.mjs} +6 -6
  47. package/dist/client/{constants-CCgR6fKI.mjs.map → constants-akdIBeTX.mjs.map} +1 -1
  48. package/dist/client/{containers-BWERuY0O.mjs → containers-BE2QiLBs.mjs} +748 -748
  49. package/dist/client/{containers-BWERuY0O.mjs.map → containers-BE2QiLBs.mjs.map} +1 -1
  50. package/dist/client/containers-Cs5vOeR2.mjs.map +1 -1
  51. package/dist/client/{containers-DovytjVP.mjs → containers-DmwhE9Uz.mjs} +6 -6
  52. package/dist/client/containers-DmwhE9Uz.mjs.map +1 -0
  53. package/dist/client/flavors-BXPYAFyQ.mjs.map +1 -1
  54. package/dist/client/{flavors-CUiALHcB.mjs → flavors-CY7A6--v.mjs} +2 -2
  55. package/dist/client/{flavors-CUiALHcB.mjs.map → flavors-CY7A6--v.mjs.map} +1 -1
  56. package/dist/client/{flavors-Bovz-I2U.mjs → flavors-pEcGkCut.mjs} +150 -150
  57. package/dist/client/{flavors-Bovz-I2U.mjs.map → flavors-pEcGkCut.mjs.map} +1 -1
  58. package/dist/client/{floatingips-BrjDiY2t.mjs → floatingips-BtL4d4m-.mjs} +118 -118
  59. package/dist/client/{floatingips-BrjDiY2t.mjs.map → floatingips-BtL4d4m-.mjs.map} +1 -1
  60. package/dist/client/{images-DaaCUXMI.mjs → images-C19gCFSy.mjs} +389 -389
  61. package/dist/client/{images-DaaCUXMI.mjs.map → images-C19gCFSy.mjs.map} +1 -1
  62. package/dist/client/images-DM9I8G0p.mjs.map +1 -1
  63. package/dist/client/{images-BZP3pBqj.mjs → images-I9gQfRa7.mjs} +2 -2
  64. package/dist/client/{images-BZP3pBqj.mjs.map → images-I9gQfRa7.mjs.map} +1 -1
  65. package/dist/client/index.d.ts +2 -1
  66. package/dist/client/index.js +416 -418
  67. package/dist/client/index.js.map +1 -1
  68. package/dist/client/objects-B4yrYf_a.mjs.map +1 -1
  69. package/dist/client/{objects-D4zBka5e.mjs → objects-BrYe_RaJ.mjs} +6 -6
  70. package/dist/client/objects-BrYe_RaJ.mjs.map +1 -0
  71. package/dist/client/{objects-Cw4Vu01M.mjs → objects-DOYFFn3Y.mjs} +1013 -1013
  72. package/dist/client/{objects-Cw4Vu01M.mjs.map → objects-DOYFFn3Y.mjs.map} +1 -1
  73. package/dist/client/{overview-2J54-loz.mjs → overview-BjRSFSBh.mjs} +2 -2
  74. package/dist/client/{overview-2J54-loz.mjs.map → overview-BjRSFSBh.mjs.map} +1 -1
  75. package/dist/client/{overview-BnmukbFh.mjs → overview-C4gjtc2q.mjs} +7 -7
  76. package/dist/client/{overview-BnmukbFh.mjs.map → overview-C4gjtc2q.mjs.map} +1 -1
  77. package/dist/client/{overview-D0AAvsmL.mjs → overview-CmQkJ4Hh.mjs} +2 -2
  78. package/dist/client/{overview-D0AAvsmL.mjs.map → overview-CmQkJ4Hh.mjs.map} +1 -1
  79. package/dist/client/{overview-BtIXpYBo.mjs → overview-DTLIAKkJ.mjs} +2 -2
  80. package/dist/client/{overview-BtIXpYBo.mjs.map → overview-DTLIAKkJ.mjs.map} +1 -1
  81. package/dist/client/{pca-V2aaOxZA.mjs → pca-CYFJxSZ2.mjs} +70 -70
  82. package/dist/client/{pca-V2aaOxZA.mjs.map → pca-CYFJxSZ2.mjs.map} +1 -1
  83. package/dist/client/{pca-BqZycwCu.mjs → pca-DzixU9Dl.mjs} +2 -2
  84. package/dist/client/{pca-BqZycwCu.mjs.map → pca-DzixU9Dl.mjs.map} +1 -1
  85. package/dist/client/projects-BsN4bvU2.mjs.map +1 -1
  86. package/dist/client/{projects-0feOw_b6.mjs → projects-BtyjXGq2.mjs} +2 -2
  87. package/dist/client/projects-BtyjXGq2.mjs.map +1 -0
  88. package/dist/client/projects-D3hOC1cy.mjs +95 -0
  89. package/dist/client/projects-D3hOC1cy.mjs.map +1 -0
  90. package/dist/client/{projects-jyIHL6DE.mjs → projects-DwVawmll.mjs} +2 -2
  91. package/dist/client/projects-DwVawmll.mjs.map +1 -0
  92. package/dist/client/{securitygroups-B4MkSBtI.mjs → securitygroups-DMCIDHQS.mjs} +114 -114
  93. package/dist/client/{securitygroups-B4MkSBtI.mjs.map → securitygroups-DMCIDHQS.mjs.map} +1 -1
  94. package/package.json +3 -3
  95. package/dist/client/_flavorId-B-1fYadl.mjs.map +0 -1
  96. package/dist/client/_flavorId-BYfIHIV_.mjs.map +0 -1
  97. package/dist/client/_imageId-Tx_9bqEc.mjs.map +0 -1
  98. package/dist/client/_projectId-Bs4W9hos.mjs +0 -283
  99. package/dist/client/_projectId-Bs4W9hos.mjs.map +0 -1
  100. package/dist/client/containers-DovytjVP.mjs.map +0 -1
  101. package/dist/client/objects-D4zBka5e.mjs.map +0 -1
  102. package/dist/client/projects-0feOw_b6.mjs.map +0 -1
  103. package/dist/client/projects-C1IYOvFQ.mjs +0 -144
  104. package/dist/client/projects-C1IYOvFQ.mjs.map +0 -1
  105. package/dist/client/projects-jyIHL6DE.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ImageToastNotifications-Cw30RXsw.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","autoDismiss","autoDismissTimeout","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 font-mono\" 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 autoDismissTimeout?: number\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 3000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 5000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 3000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 5000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 5000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 3000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 3000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 3000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 3000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 3000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 3000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 3000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 5000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 5000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 3000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 5000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 5000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 3000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 5000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 5000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 5000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 5000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 3000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 5000,\n onDismiss: config.onDismiss,\n})\n"],"mappings":"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"}
1
+ {"version":3,"file":"ImageToastNotifications--U13YiQ_.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","autoDismiss","autoDismissTimeout","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 font-mono\" 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 autoDismissTimeout?: number\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 3000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 5000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 3000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 5000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 5000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 3000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 3000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 3000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 3000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 3000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 3000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 3000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 5000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 5000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 3000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 5000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 5000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 3000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 5000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 5000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 5000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 5000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 3000,\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 autoDismiss: true,\n autoDismissTimeout: config.autoDismissTimeout ?? 5000,\n onDismiss: config.onDismiss,\n})\n"],"mappings":"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"}