feat(core): support for simultaneous pseudo states (#10656)

This commit is contained in:
Dimitris-Rafail Katsampas
2025-01-13 05:18:08 +02:00
committed by GitHub
parent a883a79e3b
commit f970455007
16 changed files with 210 additions and 103 deletions

View File

@ -6,6 +6,19 @@ import { booleanConverter } from '../core/view-base';
import { Style } from '../styling/style';
import { Color } from '../../color';
import { CoreTypes } from '../../core-types';
import { EventData } from '../../data/observable';
function focusChangeHandler(args: EventData): void {
const view = args.object as EditableTextBase;
if (args.eventName === 'focus') {
view._addVisualState('focus');
view._removeVisualState('blur');
} else {
view._addVisualState('blur');
view._removeVisualState('focus');
}
}
export abstract class EditableTextBase extends TextBase implements EditableTextBaseDefinition {
public static blurEvent = 'blur';
@ -28,15 +41,12 @@ export abstract class EditableTextBase extends TextBase implements EditableTextB
public abstract setSelection(start: number, stop?: number);
placeholderColor: Color;
private _focusHandler = () => this._goToVisualState('focus');
private _blurHandler = () => this._goToVisualState('blur');
@PseudoClassHandler('focus', 'blur')
_updateTextBaseFocusStateHandler(subscribe) {
const method = subscribe ? 'on' : 'off';
this[method]('focus', this._focusHandler);
this[method]('blur', this._blurHandler);
this[method]('focus', focusChangeHandler);
this[method]('blur', focusChangeHandler);
}
}