diff --git a/package.json b/package.json index bd5fae9..7d8e4ec 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ }, "type": "module", "license": "MIT", - "version": "3.0.1", + "version": "3.0.2", "url": "https://darkwiiplayer.github.io/BetterSelect/", "scripts": { "definitions": "tsc src/*.js --declaration --allowJs --emitDeclarationOnly" diff --git a/src/better-select.d.ts b/src/better-select.d.ts index b996acd..a18a803 100644 --- a/src/better-select.d.ts +++ b/src/better-select.d.ts @@ -2,6 +2,7 @@ export class BetterSelect extends HTMLElement { static formAssociated: boolean; static observedAttributes: readonly string[]; static styleSheet: CSSStyleSheet; + static searchHideDisabled: boolean; /** @type {HTMLElement} */ display: HTMLElement; /** @type {HTMLElement} */ @@ -18,6 +19,7 @@ export class BetterSelect extends HTMLElement { loading: HTMLDialogElement; options: HTMLCollectionOf; keyboardSearchBuffer: string; + dispatchInputEvent(): void; /** * @param {String} key */ @@ -35,18 +37,19 @@ export class BetterSelect extends HTMLElement { * @param {string} value * @param {HTMLElement} item */ - match(value: string, item: HTMLElement): RegExpMatchArray; + match(value: string, item: HTMLElement): false | RegExpMatchArray; connectedCallback(): void; mutationCallback(): void; /** @param {HTMLElement} option */ setOption(option: HTMLElement): void; /** + * @param {number} index * @param {string} value * @param {string} state */ - setValue(value: string, state?: string): void; + setValue(index: number, value: string, state?: string): void; updateClearButton(): void; - set value(value: any); + set value(arg: any); get value(): any; get valueText(): any; setOptions(): void; @@ -61,7 +64,7 @@ export class BetterSelect extends HTMLElement { /** * @param {String} name */ - set name(name: string); + set name(arg: string); /** * @return {String} */ @@ -71,12 +74,14 @@ export class BetterSelect extends HTMLElement { /** * @param {Boolean} disabled */ - set disabled(disabled: boolean); + set disabled(arg: boolean); get disabled(): boolean; /** * @param {ValidityConstraint} _constraint */ validityMessage(_constraint: ValidityConstraint): string; + next(): void; + previous(): void; setValidity(): boolean; checkValidity(): boolean; get validity(): ValidityState; @@ -85,7 +90,7 @@ export class BetterSelect extends HTMLElement { /** * @param {Boolean} required */ - set required(required: boolean); + set required(arg: boolean); get required(): boolean; reportValidity(): boolean; requiredChanged(): void; diff --git a/src/better-select.js b/src/better-select.js index 5ee4e0e..8715fdd 100644 --- a/src/better-select.js +++ b/src/better-select.js @@ -280,7 +280,7 @@ export class BetterSelect extends HTMLElement { if (item) { if (!item.part.contains("disabled")) { this.setOption(item) - this.dispatchEvent(new InputEvent("input", {bubbles: true})) + this.dispatchInputEvent() this.close() } } else if (!this.#states.has("open")) { @@ -318,12 +318,15 @@ export class BetterSelect extends HTMLElement { event.stopPropagation() } else if (key == "Delete") { this.clear() + this.dispatchInputEvent() } else if (key == "ArrowDown") { event.preventDefault() this.next() + this.dispatchInputEvent() } else if (key == "ArrowUp") { event.preventDefault() this.previous() + this.dispatchInputEvent() } } }) @@ -340,6 +343,10 @@ export class BetterSelect extends HTMLElement { this.setValidity() } + dispatchInputEvent() { + this.dispatchEvent(new InputEvent("input", {bubbles: true})) + } + /** * @param {String} key */ @@ -402,7 +409,7 @@ export class BetterSelect extends HTMLElement { this.addEventListener("keypress", event => { if (event.key == "Enter") { this.selectDefault() - this.dispatchEvent(new InputEvent("input", {bubbles: true})) + this.dispatchInputEvent() } }, {signal}) @@ -482,7 +489,10 @@ export class BetterSelect extends HTMLElement { * @param {string} state */ setValue(index, value, state=value) { - this.#index = Number(index) + if (value) + this.#index = Number(index) + else + this.#index = undefined this.#value = {value, state} this.dispatchEvent(new Event("change", {bubbles: true})); @@ -506,6 +516,7 @@ export class BetterSelect extends HTMLElement { template.nextElementSibling.addEventListener("click", event => { event.stopPropagation() this.clear() + this.dispatchInputEvent() }) } }