diff --git a/js/apps/admin-ui/cypress/e2e/realm_settings_tabs_test.spec.ts b/js/apps/admin-ui/cypress/e2e/realm_settings_tabs_test.spec.ts index ad29f83135..0b67bc38d9 100644 --- a/js/apps/admin-ui/cypress/e2e/realm_settings_tabs_test.spec.ts +++ b/js/apps/admin-ui/cypress/e2e/realm_settings_tabs_test.spec.ts @@ -243,12 +243,15 @@ describe("Realm settings tabs tests", () => { addBundle(); - cy.findByTestId("editUserLabelBtn-0").click(); - cy.findByTestId("editUserLabelCancelBtn-0").click(); + cy.findByTestId("editTranslationBtn-0").click(); + cy.findByTestId("editTranslationCancelBtn-0").click(); - cy.findByTestId("editUserLabelBtn-0").click(); - cy.findByTestId("editUserLabelInput-0").click().clear().type("def"); - cy.findByTestId("editUserLabelAcceptBtn-0").click(); + cy.findByTestId("editTranslationBtn-0").click(); + cy.findByTestId("editTranslationValueInput-0") + .click() + .clear() + .type("def"); + cy.findByTestId("editTranslationAcceptBtn-0").click(); cy.findByTestId("editable-rows-table") .contains("td", "def") diff --git a/js/apps/admin-ui/maven-resources/theme/keycloak.v2/admin/messages/messages_en.properties b/js/apps/admin-ui/maven-resources/theme/keycloak.v2/admin/messages/messages_en.properties index 860ebf6c43..767af37aff 100644 --- a/js/apps/admin-ui/maven-resources/theme/keycloak.v2/admin/messages/messages_en.properties +++ b/js/apps/admin-ui/maven-resources/theme/keycloak.v2/admin/messages/messages_en.properties @@ -2998,4 +2998,47 @@ itemDeleteError=Could not delete item: {{error}} noItems=There are no items noItemsInstructions=You haven't created any items in this realm. Create a item to get started. itemSaveError=Error could not save item\! {{error}} -itemSaveSuccessful=Sucessful saved \ No newline at end of file +itemSaveSuccessful=Sucessful saved +realmSelector=Realm selector +editTranslationValue=Edit translation value +selectAccessTokenSignatureAlgorithm=Select access token signature algorithm +selectIdTokenSignatureAlgorithm=Select Id token signature algorithm +selectIdTokenEncryptionKeyManagementAlgorithm=Select Id token encryption key management algorithm +selectIdTokenEncryptionContentEncryptionAlgorithm=Select Id token encryption content encryption algorithm +selectUserInfoSignedResponseAlgorithm=Select user info signed response algorithm +selectUserInfoResponseEncryptionKeyManagementAlgorithm=Select user info response encryption key management algorithm +selectUserInfoResponseEncryptionContentEncryptionAlgorithm=Select user info response encryption content encryption algorithm +selectRequestObjectSignatureAlgorithm=Select request object signature algorithm +selectRequestObjectEncryption=Select request object encryption +selectRequestObjectEncoding=Select request object encoding +selectRequestObjectRequired=Select request object required +selectAuthorizationSignedResponseAlgorithm=Select authorization signed response algorithm +selectAuthorizationEncryptedResponseAlg=Select authorization encrypted response alg +selectAuthorizationEncryptedResponseEnc=Select authorization encrypted response enc +generatedCodeTextArea=Generated code textarea +selectAuthScopes=Select authorization scopes +selectResource= Select resource +selectClients=Select clients +selectLoginTheme=Select login theme +selectAccountTheme=Select account theme +selectAdminTheme=Select admin theme +selectEmailTheme=Select email theme +selectFilterType=Select filter type +selectUnmanagedAttributePolicy=Select unmanaged attribute policy +selectEventsListeners=Select events listeners +selectCachePolicy=Select cache policy +selectEvictionDay=Select eviction day +selectEvictionHour=Select eviction hour +selectEvictionMinute=Select eviction minute +selectEditMode=Select edit mode +emptySelection=Empty selection +readOnlySelection=Read only selection +writtableSelection=Writable selection +unsyncedSelection=Unsynced selection +selectMapperType=Select mapper type +editBtn=Edit button +acceptBtn=Accept editing button +cancelBtn=Cancel editing button +chooseBindingType=Choose binding type +selectFlowType=Select flow type +selectClientAssertionSigningAlg=Select client assertion signing algorithm \ No newline at end of file diff --git a/js/apps/admin-ui/src/authentication/BindFlowDialog.tsx b/js/apps/admin-ui/src/authentication/BindFlowDialog.tsx index ae21c037c7..6c73718ba8 100644 --- a/js/apps/admin-ui/src/authentication/BindFlowDialog.tsx +++ b/js/apps/admin-ui/src/authentication/BindFlowDialog.tsx @@ -84,6 +84,7 @@ export const BindFlowDialog = ({ flowAlias, onClose }: BindFlowDialogProps) => { controller={{ defaultValue: flowKeys[0] }} variant={SelectVariant.single} menuAppendTo="parent" + aria-label={t("chooseBindingType")} /> diff --git a/js/apps/admin-ui/src/authentication/form/CreateFlow.tsx b/js/apps/admin-ui/src/authentication/form/CreateFlow.tsx index 866c6fdb88..798d142ca1 100644 --- a/js/apps/admin-ui/src/authentication/form/CreateFlow.tsx +++ b/js/apps/admin-ui/src/authentication/form/CreateFlow.tsx @@ -68,6 +68,7 @@ export default function CreateFlow() { name="providerId" label={t("flowType")} labelIcon={t("topLevelFlowTypeHelp")} + aria-label={t("selectFlowType")} controller={{ defaultValue: "" }} options={TYPES.map((type) => ({ key: type, diff --git a/js/apps/admin-ui/src/clients/advanced/FineGrainOpenIdConnect.tsx b/js/apps/admin-ui/src/clients/advanced/FineGrainOpenIdConnect.tsx index 61a57bfdac..2db8e154e8 100644 --- a/js/apps/admin-ui/src/clients/advanced/FineGrainOpenIdConnect.tsx +++ b/js/apps/admin-ui/src/clients/advanced/FineGrainOpenIdConnect.tsx @@ -187,6 +187,7 @@ export const FineGrainOpenIdConnect = ({ setAccessTokenOpen(false); }} selections={field.value} + aria-label={t("selectAccessTokenSignatureAlgorithm")} > {keyOptions} @@ -220,6 +221,7 @@ export const FineGrainOpenIdConnect = ({ setIdTokenOpen(false); }} selections={field.value} + aria-label={t("selectIdTokenSignatureAlgorithm")} > {keyOptions} @@ -253,6 +255,7 @@ export const FineGrainOpenIdConnect = ({ setIdTokenKeyManagementOpen(false); }} selections={field.value} + aria-label={t("selectIdTokenEncryptionKeyManagementAlgorithm")} > {cekManagementOptions} @@ -286,6 +289,9 @@ export const FineGrainOpenIdConnect = ({ setIdTokenContentOpen(false); }} selections={field.value} + aria-label={t( + "selectIdTokenEncryptionContentEncryptionAlgorithm", + )} > {contentOptions} @@ -319,6 +325,7 @@ export const FineGrainOpenIdConnect = ({ setUserInfoSignedResponseOpen(false); }} selections={field.value} + aria-label={t("selectUserInfoSignedResponseAlgorithm")} > {signatureOptions} @@ -352,6 +359,9 @@ export const FineGrainOpenIdConnect = ({ setUserInfoResponseEncryptionKeyManagementOpen(false); }} selections={field.value} + aria-label={t( + "selectUserInfoResponseEncryptionKeyManagementAlgorithm", + )} > {cekManagementOptions} @@ -387,6 +397,9 @@ export const FineGrainOpenIdConnect = ({ setUserInfoResponseEncryptionContentEncryptionOpen(false); }} selections={field.value} + aria-label={t( + "selectUserInfoResponseEncryptionContentEncryptionAlgorithm", + )} > {contentOptions} @@ -420,6 +433,7 @@ export const FineGrainOpenIdConnect = ({ setRequestObjectSignatureOpen(false); }} selections={field.value} + aria-label={t("selectRequestObjectSignatureAlgorithm")} > {requestObjectOptions} @@ -453,6 +467,7 @@ export const FineGrainOpenIdConnect = ({ setRequestObjectEncryptionOpen(false); }} selections={field.value} + aria-label={t("selectRequestObjectEncryption")} > {requestObjectEncryptionOptions} @@ -486,6 +501,7 @@ export const FineGrainOpenIdConnect = ({ setRequestObjectEncodingOpen(false); }} selections={field.value} + aria-label={t("selectRequestObjectEncoding")} > {requestObjectEncodingOptions} @@ -519,6 +535,7 @@ export const FineGrainOpenIdConnect = ({ setRequestObjectRequiredOpen(false); }} selections={field.value} + aria-label={t("selectRequestObjectRequired")} > {requestObjectRequiredOptions} @@ -569,6 +586,7 @@ export const FineGrainOpenIdConnect = ({ setAuthorizationSignedOpen(false); }} selections={field.value} + aria-label={t("selectAuthorizationSignedResponseAlg")} > {authorizationSignedResponseOptions} @@ -602,6 +620,7 @@ export const FineGrainOpenIdConnect = ({ setAuthorizationEncryptedOpen(false); }} selections={field.value} + aria-label={t("selectAuthorizationEncryptedResponseAlg")} > {cekManagementOptions} @@ -635,6 +654,7 @@ export const FineGrainOpenIdConnect = ({ setAuthorizationEncryptedResponseOpen(false); }} selections={field.value} + aria-label={t("selectAuthorizationEncryptedResponseEnc")} > {contentOptions} diff --git a/js/apps/admin-ui/src/clients/authorization/AuthorizationEvaluate.tsx b/js/apps/admin-ui/src/clients/authorization/AuthorizationEvaluate.tsx index 4c9a0f4751..244f470de0 100644 --- a/js/apps/admin-ui/src/clients/authorization/AuthorizationEvaluate.tsx +++ b/js/apps/admin-ui/src/clients/authorization/AuthorizationEvaluate.tsx @@ -381,8 +381,9 @@ const AuthorizationEvaluateContent = ({ client }: Props) => { }} selections={field.value} variant={SelectVariant.typeaheadMulti} - typeAheadAriaLabel={t("authScopes")} + typeAheadAriaLabel={t("selectAuthScopes")} isOpen={scopesDropdownOpen} + aria-label={t("selectAuthScopes")} > {scopes.map((scope) => ( diff --git a/js/apps/admin-ui/src/clients/authorization/ResourcesPolicySelect.tsx b/js/apps/admin-ui/src/clients/authorization/ResourcesPolicySelect.tsx index f3fcaf496b..0c262e6810 100644 --- a/js/apps/admin-ui/src/clients/authorization/ResourcesPolicySelect.tsx +++ b/js/apps/admin-ui/src/clients/authorization/ResourcesPolicySelect.tsx @@ -261,7 +261,7 @@ export const ResourcesPolicySelect = ({ setSearch(""); }} isOpen={open} - aria-labelledby={t(name)} + aria-label={t(name)} isDisabled={!!preSelected} validated={errors[name] ? "error" : "default"} typeAheadAriaLabel={t(name)} diff --git a/js/apps/admin-ui/src/clients/authorization/policy/Client.tsx b/js/apps/admin-ui/src/clients/authorization/policy/Client.tsx index d3cbfeb661..71b8c47117 100644 --- a/js/apps/admin-ui/src/clients/authorization/policy/Client.tsx +++ b/js/apps/admin-ui/src/clients/authorization/policy/Client.tsx @@ -88,6 +88,7 @@ export const Client = () => { onToggle={(open) => setOpen(open)} isOpen={open} selections={field.value} + aria-label={t("selectClients")} onFilter={(_, value) => { setSearch(value); return convert(clients); diff --git a/js/apps/admin-ui/src/identity-providers/add/OIDCAuthentication.tsx b/js/apps/admin-ui/src/identity-providers/add/OIDCAuthentication.tsx index b129f90053..43365c0b3c 100644 --- a/js/apps/admin-ui/src/identity-providers/add/OIDCAuthentication.tsx +++ b/js/apps/admin-ui/src/identity-providers/add/OIDCAuthentication.tsx @@ -107,6 +107,7 @@ export const OIDCAuthentication = ({ create = true }: { create?: boolean }) => { }} selections={field.value || t("algorithmNotSpecified")} variant={SelectVariant.single} + aria-label={t("selectClientAssertionSigningAlg")} isOpen={openClientAuthSigAlg} > {[ diff --git a/js/apps/admin-ui/src/realm-settings/EmailTab.tsx b/js/apps/admin-ui/src/realm-settings/EmailTab.tsx index d39555db2e..7e2cc01893 100644 --- a/js/apps/admin-ui/src/realm-settings/EmailTab.tsx +++ b/js/apps/admin-ui/src/realm-settings/EmailTab.tsx @@ -321,6 +321,7 @@ export const RealmSettingsEmailTab = ({ {currentUser.email ? ( {unmanagedAttributePolicies.map((policy) => ( diff --git a/js/apps/admin-ui/src/realm-settings/PartialExport.tsx b/js/apps/admin-ui/src/realm-settings/PartialExport.tsx index 931725ef32..baa98b7e3a 100644 --- a/js/apps/admin-ui/src/realm-settings/PartialExport.tsx +++ b/js/apps/admin-ui/src/realm-settings/PartialExport.tsx @@ -135,6 +135,7 @@ export const PartialExportDialog = ({ diff --git a/js/apps/admin-ui/src/realm-settings/PartialImport.tsx b/js/apps/admin-ui/src/realm-settings/PartialImport.tsx index d5eb8f407b..6e329dcf91 100644 --- a/js/apps/admin-ui/src/realm-settings/PartialImport.tsx +++ b/js/apps/admin-ui/src/realm-settings/PartialImport.tsx @@ -338,6 +338,8 @@ export const PartialImportDialog = (props: PartialImportProps) => { )} /> diff --git a/js/apps/admin-ui/src/user-federation/ldap/mappers/LdapMapperDetails.tsx b/js/apps/admin-ui/src/user-federation/ldap/mappers/LdapMapperDetails.tsx index ff9ff330a1..ebfc472f99 100644 --- a/js/apps/admin-ui/src/user-federation/ldap/mappers/LdapMapperDetails.tsx +++ b/js/apps/admin-ui/src/user-federation/ldap/mappers/LdapMapperDetails.tsx @@ -307,6 +307,7 @@ export default function LdapMapperDetails() { }} selections={field.value} variant={SelectVariant.typeahead} + aria-label={t("selectMapperType")} > {components.map((c) => ( diff --git a/js/apps/admin-ui/src/user-federation/shared/SettingsCache.tsx b/js/apps/admin-ui/src/user-federation/shared/SettingsCache.tsx index 0a656396c6..0be0638cd5 100644 --- a/js/apps/admin-ui/src/user-federation/shared/SettingsCache.tsx +++ b/js/apps/admin-ui/src/user-federation/shared/SettingsCache.tsx @@ -102,6 +102,7 @@ const CacheFields = ({ form }: { form: UseFormReturn }) => { selections={field.value} variant={SelectVariant.single} data-testid="kerberos-cache-policy" + aria-label={t("selectCachePolicy")} > @@ -141,6 +142,7 @@ const CacheFields = ({ form }: { form: UseFormReturn }) => { }} selections={field.value} variant={SelectVariant.single} + aria-label={t("selectEvictionDay")} > {t("Sunday")} @@ -197,6 +199,7 @@ const CacheFields = ({ form }: { form: UseFormReturn }) => { }} selections={field.value} variant={SelectVariant.single} + aria-label={t("selectEvictionHour")} > {hourOptions} @@ -229,6 +232,7 @@ const CacheFields = ({ form }: { form: UseFormReturn }) => { }} selections={field.value} variant={SelectVariant.single} + aria-label={t("selectEvictionMinute")} > {minuteOptions} diff --git a/js/apps/admin-ui/src/user/user-credentials/InlineLabelEdit.tsx b/js/apps/admin-ui/src/user/user-credentials/InlineLabelEdit.tsx index 02d89715be..894e1d3dce 100644 --- a/js/apps/admin-ui/src/user/user-credentials/InlineLabelEdit.tsx +++ b/js/apps/admin-ui/src/user/user-credentials/InlineLabelEdit.tsx @@ -68,6 +68,7 @@ export const InlineLabelEdit = ({ data-testid="editUserLabelAcceptBtn" variant="link" className="kc-editUserLabelAcceptBtn" + aria-label={t("acceptBtn")} type="submit" icon={} /> @@ -75,6 +76,7 @@ export const InlineLabelEdit = ({ data-testid="editUserLabelCancelBtn" variant="link" className="kc-editUserLabel-cancelBtn" + aria-label={t("cancelBtn")} onClick={toggle} icon={} />