diff --git a/.github/workflows/assign-issues.yml b/.github/workflows/assign-issues.yml index 8440cbad8e..d06c1f52e1 100644 --- a/.github/workflows/assign-issues.yml +++ b/.github/workflows/assign-issues.yml @@ -13,6 +13,6 @@ jobs: - name: 'Auto-assign issue' uses: pozil/auto-assign-issue@39c06395cbac76e79afc4ad4e5c5c6db6ecfdd2e # v2.2.0 with: - assignees: brandyscarney, thetaPC, joselrio, rugoncalves, BenOsodrac, JoaoFerreira-FrontEnd, OS-giulianasilva, tanner-reits + assignees: brandyscarney, thetaPC, ShaneK numOfAssignee: 1 allowSelfAssign: false diff --git a/core/package-lock.json b/core/package-lock.json index 1ef90673eb..d8e0ef6210 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -15,10 +15,10 @@ }, "devDependencies": { "@axe-core/playwright": "^4.10.0", - "@capacitor/core": "^6.0.0", - "@capacitor/haptics": "^6.0.0", - "@capacitor/keyboard": "^6.0.0", - "@capacitor/status-bar": "^6.0.0", + "@capacitor/core": "^7.0.0", + "@capacitor/haptics": "^7.0.0", + "@capacitor/keyboard": "^7.0.0", + "@capacitor/status-bar": "^7.0.0", "@clack/prompts": "^0.10.0", "@ionic/eslint-config": "^0.3.0", "@ionic/prettier-config": "^2.0.0", @@ -663,39 +663,43 @@ "dev": true }, "node_modules/@capacitor/core": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-6.2.0.tgz", - "integrity": "sha512-B9IlJtDpUqhhYb+T8+cp2Db/3RETX36STgjeU2kQZBs/SLAcFiMama227o+msRjLeo3DO+7HJjWVA1+XlyyPEg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-7.0.1.tgz", + "integrity": "sha512-1Ob9bvA/p8g8aNwK6VesxEekGXowLVf6APjkW4LRnr05H+7z/bke+Q5pn9zqh/GgTbIxAQ/rwZrAZvvxkdm1UA==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.1.0" } }, "node_modules/@capacitor/haptics": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@capacitor/haptics/-/haptics-6.0.2.tgz", - "integrity": "sha512-xcFdIH4iIIeW2+1lzmlYMVicqB9ytaiuZ9NE3a9laKFPvMGC7hdj6i6tHFezwPJ/96xkHOwXT2b0F8Mh9xtTWg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@capacitor/haptics/-/haptics-7.0.0.tgz", + "integrity": "sha512-8uI8rWyAbq8EzkjS+sHZSncyzujHzVbuLKgj8J5H0yUL6+r26F16gVA2iuQuIBvzbSMy7Y0/pUuWlwZr/H8AKg==", "dev": true, + "license": "MIT", "peerDependencies": { - "@capacitor/core": "^6.0.0" + "@capacitor/core": ">=7.0.0" } }, "node_modules/@capacitor/keyboard": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@capacitor/keyboard/-/keyboard-6.0.3.tgz", - "integrity": "sha512-V/mURxBI68HvClYjrGBlOriWkwYN7r+cWid/igJz/3scNc/V81DgQ9fpoLr4W0I5NY7YxOesjIJLuLO+LT18mQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@capacitor/keyboard/-/keyboard-7.0.0.tgz", + "integrity": "sha512-Tqwy8wG+sx4UqiFCX4Q+bFw6uKgG7BiHKAPpeefoIgoEB8H8Jf3xZNZoVPnJIMuPsCdSvuyHXZbJXH9IEEirGA==", "dev": true, + "license": "MIT", "peerDependencies": { - "@capacitor/core": "^6.0.0" + "@capacitor/core": ">=7.0.0" } }, "node_modules/@capacitor/status-bar": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@capacitor/status-bar/-/status-bar-6.0.2.tgz", - "integrity": "sha512-AmRIX6QvFemItlY7/69ARkIAqitRQqJ2qwgZmD1KqgFb78pH+XFXm1guvS/a8CuOOm/IqZ4ddDbl20yxtBqzGA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@capacitor/status-bar/-/status-bar-7.0.0.tgz", + "integrity": "sha512-wsvPkWkoSOXMIgVHu4c6P1sOuDSZ1ClUo5OpLRwj7u8DYzlV4jlmNzztQn2Lvsiqx1z4kfukSaqe40k1Lo4c9g==", "dev": true, + "license": "MIT", "peerDependencies": { - "@capacitor/core": "^6.0.0" + "@capacitor/core": ">=7.0.0" } }, "node_modules/@clack/core": { @@ -10977,32 +10981,32 @@ "dev": true }, "@capacitor/core": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-6.2.0.tgz", - "integrity": "sha512-B9IlJtDpUqhhYb+T8+cp2Db/3RETX36STgjeU2kQZBs/SLAcFiMama227o+msRjLeo3DO+7HJjWVA1+XlyyPEg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-7.0.1.tgz", + "integrity": "sha512-1Ob9bvA/p8g8aNwK6VesxEekGXowLVf6APjkW4LRnr05H+7z/bke+Q5pn9zqh/GgTbIxAQ/rwZrAZvvxkdm1UA==", "dev": true, "requires": { "tslib": "^2.1.0" } }, "@capacitor/haptics": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@capacitor/haptics/-/haptics-6.0.2.tgz", - "integrity": "sha512-xcFdIH4iIIeW2+1lzmlYMVicqB9ytaiuZ9NE3a9laKFPvMGC7hdj6i6tHFezwPJ/96xkHOwXT2b0F8Mh9xtTWg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@capacitor/haptics/-/haptics-7.0.0.tgz", + "integrity": "sha512-8uI8rWyAbq8EzkjS+sHZSncyzujHzVbuLKgj8J5H0yUL6+r26F16gVA2iuQuIBvzbSMy7Y0/pUuWlwZr/H8AKg==", "dev": true, "requires": {} }, "@capacitor/keyboard": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@capacitor/keyboard/-/keyboard-6.0.3.tgz", - "integrity": "sha512-V/mURxBI68HvClYjrGBlOriWkwYN7r+cWid/igJz/3scNc/V81DgQ9fpoLr4W0I5NY7YxOesjIJLuLO+LT18mQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@capacitor/keyboard/-/keyboard-7.0.0.tgz", + "integrity": "sha512-Tqwy8wG+sx4UqiFCX4Q+bFw6uKgG7BiHKAPpeefoIgoEB8H8Jf3xZNZoVPnJIMuPsCdSvuyHXZbJXH9IEEirGA==", "dev": true, "requires": {} }, "@capacitor/status-bar": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@capacitor/status-bar/-/status-bar-6.0.2.tgz", - "integrity": "sha512-AmRIX6QvFemItlY7/69ARkIAqitRQqJ2qwgZmD1KqgFb78pH+XFXm1guvS/a8CuOOm/IqZ4ddDbl20yxtBqzGA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@capacitor/status-bar/-/status-bar-7.0.0.tgz", + "integrity": "sha512-wsvPkWkoSOXMIgVHu4c6P1sOuDSZ1ClUo5OpLRwj7u8DYzlV4jlmNzztQn2Lvsiqx1z4kfukSaqe40k1Lo4c9g==", "dev": true, "requires": {} }, diff --git a/core/package.json b/core/package.json index 092fc9759f..80db8b924e 100644 --- a/core/package.json +++ b/core/package.json @@ -37,10 +37,10 @@ }, "devDependencies": { "@axe-core/playwright": "^4.10.0", - "@capacitor/core": "^6.0.0", - "@capacitor/haptics": "^6.0.0", - "@capacitor/keyboard": "^6.0.0", - "@capacitor/status-bar": "^6.0.0", + "@capacitor/core": "^7.0.0", + "@capacitor/haptics": "^7.0.0", + "@capacitor/keyboard": "^7.0.0", + "@capacitor/status-bar": "^7.0.0", "@clack/prompts": "^0.10.0", "@ionic/eslint-config": "^0.3.0", "@ionic/prettier-config": "^2.0.0", diff --git a/core/src/components/alert/alert.tsx b/core/src/components/alert/alert.tsx index ee2e07244c..dc598fbdf0 100644 --- a/core/src/components/alert/alert.tsx +++ b/core/src/components/alert/alert.tsx @@ -237,6 +237,18 @@ export class Alert implements ComponentInterface, OverlayInterface { return; } + /** + * Ensure when alert container is being focused, and the user presses the tab + shift keys, the focus will be set to the last alert button. + */ + if (ev.target.classList.contains('alert-wrapper')) { + if (ev.key === 'Tab' && ev.shiftKey) { + ev.preventDefault(); + const lastChildBtn = this.wrapperEl?.querySelector('.alert-button:last-child') as HTMLButtonElement; + lastChildBtn.focus(); + return; + } + } + // The only inputs we want to navigate between using arrow keys are the radios // ignore the keydown event if it is not on a radio button if ( @@ -400,7 +412,19 @@ export class Alert implements ComponentInterface, OverlayInterface { await this.delegateController.attachViewToDom(); - await present(this, 'alertEnter', iosEnterAnimation, mdEnterAnimation); + await present(this, 'alertEnter', iosEnterAnimation, mdEnterAnimation).then(() => { + /** + * Check if alert has only one button and no inputs. + * If so, then focus on the button. Otherwise, focus the alert wrapper. + * This will map to the default native alert behavior. + */ + if (this.buttons.length === 1 && this.inputs.length === 0) { + const queryBtn = this.wrapperEl?.querySelector('.alert-button') as HTMLButtonElement; + queryBtn.focus(); + } else { + this.wrapperEl?.focus(); + } + }); unlock(); } @@ -725,8 +749,8 @@ export class Alert implements ComponentInterface, OverlayInterface { const { overlayIndex, header, subHeader, message, htmlAttributes } = this; const mode = getIonMode(this); const hdrId = `alert-${overlayIndex}-hdr`; - const subHdrId = `alert-${overlayIndex}-sub-hdr`; const msgId = `alert-${overlayIndex}-msg`; + const subHdrId = `alert-${overlayIndex}-sub-hdr`; const role = this.inputs.length > 0 || this.buttons.length > 0 ? 'alertdialog' : 'alert'; /** @@ -739,12 +763,7 @@ export class Alert implements ComponentInterface, OverlayInterface { return (