Skip to content

Commit f72df1b

Browse files
committed
fix(aria/spinbutton): address review feedback
- Remove unnecessary setDefaultState effect and related code - Clarify setDefaultState JSDoc is intentionally empty - Use native ARIA binding syntax in increment and input - Update API golden
1 parent 35866e8 commit f72df1b

File tree

5 files changed

+18
-35
lines changed

5 files changed

+18
-35
lines changed

goldens/aria/spinbutton/index.api.md

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ export class SpinButton {
2020
readonly inputId: _angular_core.InputSignal<string>;
2121
readonly max: _angular_core.InputSignal<number | undefined>;
2222
readonly min: _angular_core.InputSignal<number | undefined>;
23-
_onFocus(): void;
2423
readonly pageStep: _angular_core.InputSignal<number | undefined>;
2524
readonly _pattern: SpinButtonPattern;
2625
readonly readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
@@ -36,8 +35,8 @@ export class SpinButton {
3635

3736
// @public
3837
export class SpinButtonDecrement {
39-
readonly _isDisabled: _angular_core.Signal<boolean>;
40-
_onClick(): void;
38+
protected readonly _isDisabled: _angular_core.Signal<boolean>;
39+
protected _onClick(): void;
4140
readonly spinButton: SpinButton;
4241
// (undocumented)
4342
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SpinButtonDecrement, "[ngSpinButtonDecrement]", ["ngSpinButtonDecrement"], {}, {}, never, never, true, never>;
@@ -47,8 +46,8 @@ export class SpinButtonDecrement {
4746

4847
// @public
4948
export class SpinButtonIncrement {
50-
readonly _isDisabled: _angular_core.Signal<boolean>;
51-
_onClick(): void;
49+
protected readonly _isDisabled: _angular_core.Signal<boolean>;
50+
protected _onClick(): void;
5251
readonly spinButton: SpinButton;
5352
// (undocumented)
5453
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SpinButtonIncrement, "[ngSpinButtonIncrement]", ["ngSpinButtonIncrement"], {}, {}, never, never, true, never>;

src/aria/private/spinbutton/spinbutton.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ export class SpinButtonPattern {
106106
return [];
107107
}
108108

109-
/** Sets the spinbutton to its default initial state. */
109+
/** Noop. Spinbuttons don't manage items requiring default state initialization. */
110110
setDefaultState(): void {}
111111

112112
/** Handles keydown events for the spinbutton. */

src/aria/spinbutton/spinbutton-increment.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ import {SPINBUTTON} from './spinbutton-tokens';
2626
selector: '[ngSpinButtonIncrement]',
2727
exportAs: 'ngSpinButtonIncrement',
2828
host: {
29-
'[attr.aria-controls]': 'spinButton.inputId()',
30-
'[attr.aria-disabled]': '_isDisabled() || null',
29+
'[aria-controls]': 'spinButton.inputId()',
30+
'[aria-disabled]': '_isDisabled() || null',
3131
'[attr.tabindex]': '-1',
3232
'(click)': '_onClick()',
3333
},

src/aria/spinbutton/spinbutton-input.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,14 @@ import {SPINBUTTON, SPINBUTTON_INPUT} from './spinbutton-tokens';
2929
'role': 'spinbutton',
3030
'[attr.id]': 'spinButton.inputId()',
3131
'[tabindex]': 'spinButton._pattern.tabIndex()',
32-
'[attr.aria-valuenow]': 'spinButton._pattern.ariaValueNow()',
33-
'[attr.aria-valuemin]': 'spinButton.min()',
34-
'[attr.aria-valuemax]': 'spinButton.max()',
35-
'[attr.aria-valuetext]': 'spinButton.valueText() || null',
36-
'[attr.aria-disabled]': 'spinButton.disabled() || null',
37-
'[attr.aria-readonly]': 'spinButton.readonly() || null',
38-
'[attr.aria-invalid]': 'spinButton._pattern.invalid() || null',
32+
'[aria-valuenow]': 'spinButton._pattern.ariaValueNow()',
33+
'[aria-valuemin]': 'spinButton.min()',
34+
'[aria-valuemax]': 'spinButton.max()',
35+
'[aria-valuetext]': 'spinButton.valueText() || null',
36+
'[aria-disabled]': 'spinButton.disabled() || null',
37+
'[aria-readonly]': 'spinButton.readonly() || null',
38+
'[aria-invalid]': 'spinButton._pattern.invalid() || null',
3939
'(keydown)': '_onKeydown($event)',
40-
'(focusin)': 'spinButton._onFocus()',
4140
'(input)': '_onInput($event)',
4241
'(change)': '_onChange($event)',
4342
'[attr.autocomplete]': '_isNativeInput ? "off" : null',

src/aria/spinbutton/spinbutton.ts

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import {
1616
inject,
1717
input,
1818
model,
19-
signal,
2019
} from '@angular/core';
2120
import {_IdGenerator} from '@angular/cdk/a11y';
2221
import {SpinButtonPattern} from '../private';
@@ -85,9 +84,6 @@ export class SpinButton {
8584
/** Signal for the input element reference. */
8685
private readonly _inputElement = computed(() => this._inputChild()?.element);
8786

88-
/** Whether the spinbutton has received focus yet. */
89-
private _hasFocused = signal(false);
90-
9187
/** The UI pattern instance for this spinbutton. */
9288
readonly _pattern: SpinButtonPattern = new SpinButtonPattern({
9389
id: this.inputId,
@@ -104,25 +100,14 @@ export class SpinButton {
104100
});
105101

106102
constructor() {
107-
if (typeof ngDevMode === 'undefined' || ngDevMode) {
108-
afterRenderEffect(() => {
103+
if (typeof ngDevMode === 'undefined' || ngDevMode) {
104+
afterRenderEffect(() => {
109105
const violations = this._pattern.validate();
110106
for (const violation of violations) {
111107
console.error(violation);
112108
}
113-
});
114-
}
115-
116-
afterRenderEffect(() => {
117-
if (!this._hasFocused()) {
118-
this._pattern.setDefaultState();
119-
}
120-
});
121-
}
122-
123-
/** Called when the input receives focus. */
124-
_onFocus(): void {
125-
this._hasFocused.set(true);
109+
});
110+
}
126111
}
127112

128113
/** Increments the value by the step amount. */

0 commit comments

Comments
 (0)