Skip to content

Commit c66ddd5

Browse files
authored
feat(ui5-avatar): update focus handling (#8420)
* feat(ui5-avatar): update focus handling Adjusted ui5-avatar focus display rules. On desktop, focus outline is always visible. For mobile, focus outline only appears with an external keyboard, it remains hidden for touch focus.
1 parent ae5afe7 commit c66ddd5

File tree

12 files changed

+19
-25
lines changed

12 files changed

+19
-25
lines changed

packages/main/src/Avatar.hbs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
data-sap-focus-ref
55
@keyup={{_onkeyup}}
66
@keydown={{_onkeydown}}
7-
@focusout={{_onfocusout}}
8-
@focusin={{_onfocusin}}
97
@click={{_onclick}}
108
role="{{_role}}"
119
aria-haspopup="{{_ariaHasPopup}}"
@@ -22,7 +20,7 @@
2220
{{#if initials}}
2321
<span class="ui5-avatar-initials ui5-avatar-initials-hidden">{{validInitials}}</span>
2422
<ui5-icon
25-
class="ui5-avatar-icon ui5-avatar-icon-fallback ui5-avatar-fallback-icon-hidden"
23+
class="ui5-avatar-icon ui5-avatar-icon-fallback ui5-avatar-fallback-icon-hidden"
2624
name="{{fallbackIcon}}"
2725
></ui5-icon>
2826
{{/if}}

packages/main/src/Avatar.ts

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import ResizeHandler from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.j
1111
import type { ResizeObserverCallback } from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
1212
import { renderFinished } from "@ui5/webcomponents-base/dist/Render.js";
1313
import { isEnter, isSpace } from "@ui5/webcomponents-base/dist/Keys.js";
14+
import { isDesktop } from "@ui5/webcomponents-base/dist/Device.js";
1415
import type { IAvatarGroupItem } from "./AvatarGroup.js";
1516
// Template
1617
import AvatarTemplate from "./generated/templates/AvatarTemplate.lit.js";
@@ -91,13 +92,6 @@ class Avatar extends UI5Element implements ITabbable, IAvatarGroupItem {
9192
@property({ type: Boolean })
9293
interactive!: boolean;
9394

94-
/**
95-
* Indicates if the elements is on focus
96-
* @private
97-
*/
98-
@property({ type: Boolean })
99-
focused!: boolean;
100-
10195
/**
10296
* Indicates if the elements is pressed
10397
* @private
@@ -341,6 +335,10 @@ class Avatar extends UI5Element implements ITabbable, IAvatarGroupItem {
341335
}
342336

343337
onEnterDOM() {
338+
if (isDesktop()) {
339+
this.setAttribute("desktop", "");
340+
}
341+
344342
this.initialsContainer && ResizeHandler.register(this.initialsContainer,
345343
this._handleResizeBound);
346344
}
@@ -409,16 +407,6 @@ class Avatar extends UI5Element implements ITabbable, IAvatarGroupItem {
409407
this.pressed = !this.pressed;
410408
}
411409

412-
_onfocusout() {
413-
this.focused = false;
414-
}
415-
416-
_onfocusin() {
417-
if (this._interactive) {
418-
this.focused = true;
419-
}
420-
}
421-
422410
_getAriaHasPopup() {
423411
if (!this._interactive || this.ariaHaspopup === "") {
424412
return;

packages/main/src/themes/Avatar.css

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@
3030
box-shadow: var(--ui5-avatar-hover-box-shadow-offset);
3131
}
3232

33-
:host(:is([interactive][focused]):not([hidden]):not([pressed])) {
33+
:host(:is([interactive][desktop]):not([hidden])) .ui5-avatar-root:focus-within,
34+
:host(:is([interactive]):not([hidden])) .ui5-avatar-root:focus-visible {
3435
outline: var(--_ui5_avatar_outline);
3536
outline-offset: var(--_ui5_avatar_focus_offset);
3637
}
@@ -55,6 +56,7 @@
5556
outline: none;
5657
height: 100%;
5758
width: 100%;
59+
border-radius: inherit;
5860
}
5961

6062
/* Sizes */

packages/main/src/themes/base/Avatar-parameters.css

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@
4141
--ui5-avatar-placeholder-border-color: var(--sapField_BorderColor);
4242

4343
--_ui5_avatar_outline: var(--sapContent_FocusWidth) var(--sapContent_FocusStyle) var(--sapContent_FocusColor);
44-
--_ui5_avatar_focus_offset: 1px;
45-
--_ui5_avatar_focus_width: 1px;
44+
--_ui5_avatar_focus_offset: 0.0625rem;
45+
--_ui5_avatar_focus_width: 0.0625rem;
4646
--_ui5_avatar_focus_color: var(--sapContent_FocusColor);
4747

4848
--_ui5_avatar_fontsize_XS: 0.75rem;

packages/main/src/themes/sap_belize_hcb/Avatar-parameters.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,5 @@
1616
--ui5-avatar-accent10: #000;
1717
--ui5-avatar-placeholder: #000;
1818
--_ui5_avatar_outline: 0.125rem dotted var(--sapContent_FocusColor);
19+
--_ui5_avatar_focus_offset: 0.125rem;
1920
}

packages/main/src/themes/sap_belize_hcw/Avatar-parameters.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,5 @@
1616
--ui5-avatar-accent10: #fff;
1717
--ui5-avatar-placeholder: #fff;
1818
--_ui5_avatar_outline: 0.125rem dotted var(--sapContent_FocusColor);
19+
--_ui5_avatar_focus_offset: 0.125rem;
1920
}

packages/main/src/themes/sap_fiori_3_hcb/Avatar-parameters.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
--ui5-avatar-accent10: var(--sapBackgroundColor);
1717
--ui5-avatar-placeholder: var(--sapBackgroundColor);
1818
--_ui5_avatar_outline: 0.125rem dotted var(--sapContent_FocusColor);
19+
--_ui5_avatar_focus_offset: 0.125rem;
1920

2021
--_ui5_avatar_fontsize_XS: 1rem;
2122
--_ui5_avatar_fontsize_S: 1.125rem;

packages/main/src/themes/sap_fiori_3_hcw/Avatar-parameters.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
--ui5-avatar-accent10: var(--sapBackgroundColor);
1717
--ui5-avatar-placeholder: var(--sapBackgroundColor);
1818
--_ui5_avatar_outline: 0.125rem dotted var(--sapContent_FocusColor);
19+
--_ui5_avatar_focus_offset: 0.125rem;
1920

2021
--_ui5_avatar_fontsize_XS: 1rem;
2122
--_ui5_avatar_fontsize_S: 1.125rem;

packages/main/src/themes/sap_horizon/Avatar-parameters.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
@import "../base/Avatar-parameters.css";
22

33
:root {
4-
--_ui5_avatar_focus_offset: 0.125rem;
4+
--_ui5_avatar_focus_offset: 0.1875rem;
55
--ui5-avatar-initials-border: 0.0625rem solid var(--sapAvatar_1_BorderColor);
66
--ui5-avatar-border-radius: var(--sapElement_BorderCornerRadius);
77
--_ui5_avatar_fontsize_XS: 1rem;

packages/main/src/themes/sap_horizon_dark/Avatar-parameters.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
@import "../base/Avatar-parameters.css";
22

33
:root {
4-
--_ui5_avatar_focus_offset: 0.125rem;
4+
--_ui5_avatar_focus_offset: 0.1875rem;
55
--ui5-avatar-initials-border: 0.0625rem solid var(--sapAvatar_1_BorderColor);
66
--ui5-avatar-border-radius: var(--sapElement_BorderCornerRadius);
77
--_ui5_avatar_fontsize_XS: 1rem;

packages/main/src/themes/sap_horizon_hcb/Avatar-parameters.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
@import "../base/Avatar-parameters.css";
22

33
:root {
4+
--_ui5_avatar_focus_offset: 0.125rem;
45
--ui5-avatar-hover-box-shadow-offset: 0px;
56
--ui5-avatar-initials-border: 0.0625rem solid var(--sapAvatar_1_BorderColor);
67
--ui5-avatar-border-radius: var(--sapElement_BorderCornerRadius);

packages/main/src/themes/sap_horizon_hcw/Avatar-parameters.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
@import "../base/Avatar-parameters.css";
22

33
:root {
4+
--_ui5_avatar_focus_offset: 0.125rem;
45
--ui5-avatar-hover-box-shadow-offset: 0px;
56
--ui5-avatar-initials-border: 0.0625rem solid var(--sapAvatar_1_BorderColor);
67
--ui5-avatar-border-radius: var(--sapElement_BorderCornerRadius);

0 commit comments

Comments
 (0)