forked from mirror/ObjToSchematic
Added number input component
This commit is contained in:
parent
fb49b45523
commit
f2579a9732
86
src/ui/components/number_input.ts
Normal file
86
src/ui/components/number_input.ts
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
import { UIUtil } from '../../util/ui_util';
|
||||||
|
import { ConfigComponent } from './config';
|
||||||
|
|
||||||
|
export class NumberComponent extends ConfigComponent<number, HTMLInputElement> {
|
||||||
|
private _min: number;
|
||||||
|
private _max: number;
|
||||||
|
private _step: number;
|
||||||
|
private _hovering: boolean;
|
||||||
|
|
||||||
|
public constructor() {
|
||||||
|
super(Math.floor(Math.random() * Number.MAX_SAFE_INTEGER));
|
||||||
|
this._min = 0;
|
||||||
|
this._max = 1;
|
||||||
|
this._step = 0.1;
|
||||||
|
this._hovering = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the minimum value the input can be set to.
|
||||||
|
*/
|
||||||
|
public setMin(min: number) {
|
||||||
|
this._min = min;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the maximum value the input can be set to.
|
||||||
|
*/
|
||||||
|
public setMax(max: number) {
|
||||||
|
this._max = max;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the number of steps to display the value to.
|
||||||
|
*/
|
||||||
|
public setStep(step: number) {
|
||||||
|
this._step = step;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override registerEvents() {
|
||||||
|
this._getElement().addEventListener('change', () => {
|
||||||
|
this._setValue(parseInt(this._getElement().value));
|
||||||
|
});
|
||||||
|
|
||||||
|
this._getElement().addEventListener('mouseenter', () => {
|
||||||
|
this._setHovered(true);
|
||||||
|
this._updateStyles();
|
||||||
|
});
|
||||||
|
|
||||||
|
this._getElement().addEventListener('mouseleave', () => {
|
||||||
|
this._setHovered(false);
|
||||||
|
this._updateStyles();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public override _generateInnerHTML() {
|
||||||
|
return `
|
||||||
|
<input class="struct-prop" type="number" style="width: 100%; text-align: start;" step="${this._step}" id="${this._getId()}" min="${this._min}" max="${this._max}" value="${this.getValue()}"></input>
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override _onEnabledChanged() {
|
||||||
|
super._onEnabledChanged();
|
||||||
|
|
||||||
|
const element = this._getElement();
|
||||||
|
element.disabled = !this.enabled;
|
||||||
|
|
||||||
|
this._updateStyles();
|
||||||
|
}
|
||||||
|
|
||||||
|
private _onTypedValue() {
|
||||||
|
}
|
||||||
|
|
||||||
|
protected _onValueChanged(): void {
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override _updateStyles(): void {
|
||||||
|
UIUtil.updateStyles(UIUtil.getElementById(this._getId()), {
|
||||||
|
isActive: false,
|
||||||
|
isEnabled: this.enabled,
|
||||||
|
isHovered: this.hovered,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user