[Glitch] Accessibility: Add visible focus outlines to main search & composer fields

Port e68c1c824a0a6badd28d5493a08e8196e9c14f97 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
This commit is contained in:
diondiondion 2026-05-21 08:41:34 +02:00 committed by Claire
parent 96d81ca432
commit 2c1dac8084
3 changed files with 37 additions and 39 deletions

View File

@ -90,10 +90,6 @@ class ComposeForm extends ImmutablePureComponent {
autoFocus: false, autoFocus: false,
}; };
state = {
highlighted: false,
};
constructor(props) { constructor(props) {
super(props); super(props);
this.textareaRef = createRef(null); this.textareaRef = createRef(null);
@ -242,8 +238,6 @@ class ComposeForm extends ImmutablePureComponent {
Promise.resolve().then(() => { Promise.resolve().then(() => {
this.textareaRef.current.setSelectionRange(selectionStart, selectionEnd); this.textareaRef.current.setSelectionRange(selectionStart, selectionEnd);
this.textareaRef.current.focus(); this.textareaRef.current.focus();
this.setState({ highlighted: true });
this.timeout = setTimeout(() => this.setState({ highlighted: false }), 700);
}).catch(console.error); }).catch(console.error);
} else if(prevProps.isSubmitting && !this.props.isSubmitting) { } else if(prevProps.isSubmitting && !this.props.isSubmitting) {
this.textareaRef.current.focus(); this.textareaRef.current.focus();
@ -274,7 +268,6 @@ class ComposeForm extends ImmutablePureComponent {
render () { render () {
const { intl, onPaste, onDrop, autoFocus, withoutNavigation, maxChars, isSubmitting } = this.props; const { intl, onPaste, onDrop, autoFocus, withoutNavigation, maxChars, isSubmitting } = this.props;
const { highlighted } = this.state;
return ( return (
<form className='compose-form' onSubmit={this.handleSubmit}> <form className='compose-form' onSubmit={this.handleSubmit}>
@ -282,7 +275,7 @@ class ComposeForm extends ImmutablePureComponent {
{!withoutNavigation && <NavigationBar />} {!withoutNavigation && <NavigationBar />}
<Warning /> <Warning />
<div className={classNames('compose-form__highlightable', { active: highlighted })} ref={this.setRef}> <div className='compose-form__highlightable' ref={this.setRef}>
<EditIndicator /> <EditIndicator />
<div className='compose-form__dropdowns'> <div className='compose-form__dropdowns'>

View File

@ -10,7 +10,6 @@
} }
@mixin search-input { @mixin search-input {
outline: 0;
box-sizing: border-box; box-sizing: border-box;
width: 100%; width: 100%;
box-shadow: none; box-shadow: none;
@ -22,6 +21,10 @@
font-size: 17px; font-size: 17px;
line-height: normal; line-height: normal;
margin: 0; margin: 0;
outline: var(--outline-focus-default);
outline-color: transparent;
outline-offset: -1px;
transition: outline-color 0.15s ease-out;
} }
@mixin search-popout { @mixin search-popout {

View File

@ -541,13 +541,15 @@ body > [data-popper-placement] {
flex: 0 1 auto; flex: 0 1 auto;
border-radius: 4px; border-radius: 4px;
border: 1px solid var(--color-border-primary); border: 1px solid var(--color-border-primary);
transition: border-color 300ms linear;
position: relative; position: relative;
background: var(--color-bg-secondary); background: var(--color-bg-secondary);
outline: var(--outline-focus-default);
outline-color: transparent;
outline-offset: -1px;
transition: outline-color 0.15s ease-out;
&.active { &:has(textarea:focus) {
transition: none; outline-color: var(--color-border-brand);
border-color: var(--color-border-brand);
} }
} }
@ -595,8 +597,15 @@ body > [data-popper-placement] {
.autosuggest-input { .autosuggest-input {
flex: 1 1 auto; flex: 1 1 auto;
border: 1px solid var(--color-border-primary); border-block: 1px solid var(--color-border-primary);
border-width: 1px 0; padding-block: 1px;
transition: border-color 0.15s ease-out;
&:focus-within {
padding-block: 0;
border-color: var(--color-border-brand);
border-block-width: 2px;
}
} }
} }
@ -621,7 +630,7 @@ body > [data-popper-placement] {
} }
.spoiler-input__input { .spoiler-input__input {
padding: 12px 12px - 5px; padding: 11px 7px;
background: var(--color-bg-brand-softest); background: var(--color-bg-brand-softest);
color: var(--color-text-brand); color: var(--color-text-brand);
} }
@ -2806,6 +2815,7 @@ a.account__display-name {
font-size: 14px; font-size: 14px;
line-height: 20px; line-height: 20px;
font-weight: 500; font-weight: 500;
outline-offset: 0;
.display-name__account { .display-name__account {
font-size: 14px; font-size: 14px;
@ -3720,7 +3730,11 @@ a.account__display-name {
.compose-panel { .compose-panel {
width: 285px; width: 285px;
margin-top: 10px; margin-top: 8px;
// Padding prevents focus outlines from being cut off
margin-inline-start: -2px;
padding: 2px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
height: calc(100% - 10px); height: calc(100% - 10px);
@ -6071,7 +6085,7 @@ a.status-card {
display: none; display: none;
position: absolute; position: absolute;
inset-inline-start: 0; inset-inline-start: 0;
margin-top: -2px; margin-top: 1px;
width: 100%; width: 100%;
background: var(--color-bg-primary); background: var(--color-bg-primary);
border: 1px solid var(--color-border-primary); border: 1px solid var(--color-border-primary);
@ -6166,14 +6180,8 @@ a.status-card {
} }
} }
&.active { &.active .search__popout {
.search__input { display: block;
border-radius: 4px 4px 0 0;
}
.search__popout {
display: block;
}
} }
} }
@ -6185,14 +6193,8 @@ a.status-card {
padding-inline-start: 16px + 15px + 8px; padding-inline-start: 16px + 15px + 8px;
line-height: normal; line-height: normal;
&::-moz-focus-inner { &:focus {
border: 0; outline-color: var(--color-border-brand);
}
&::-moz-focus-inner,
&:focus,
&:active {
outline: 0 !important;
} }
} }
@ -9556,6 +9558,10 @@ noscript {
display: flex; display: flex;
align-items: center; align-items: center;
&:has(input:focus) {
outline-color: var(--color-border-brand);
}
input { input {
background: transparent; background: transparent;
color: inherit; color: inherit;
@ -9584,7 +9590,7 @@ noscript {
} }
.search__popout { .search__popout {
margin-top: -1px; margin-top: 1px;
padding-top: 5px; padding-top: 5px;
padding-bottom: 5px; padding-bottom: 5px;
border: 1px solid var(--color-border-primary); border: 1px solid var(--color-border-primary);
@ -9597,10 +9603,6 @@ noscript {
&.expanded .search__popout { &.expanded .search__popout {
display: block; display: block;
} }
&.expanded &__input {
border-radius: 4px 4px 0 0;
}
} }
&__choices { &__choices {