@exadel/esl
Version:
Exadel Smart Library (ESL) is the lightweight custom elements library that provide a set of super-flexible components
69 lines (68 loc) • 3.72 kB
TypeScript
import { ESLMixinRegistry } from './esl-mixin-registry';
import type { ESLEventListener, ESLListenerCriteria, ESLListenerDescriptor, ESLListenerHandler } from '../../esl-utils/dom/events';
import type { ESLBaseComponent } from '../../esl-utils/abstract/component';
import type { ESLDomElementRelated } from '../../esl-utils/abstract/dom-target';
/**
* Base class for mixin elements.
* Mixin elements attaches to the DOM element via attribute.
* Allows multiple mixin elements per one DOM element
*/
export declare class ESLMixinElement implements ESLBaseComponent, ESLDomElementRelated {
readonly $host: HTMLElement;
/** Root attribute to identify mixin targets. Should contain dash in the name. */
static is: string;
/** Additional observed attributes */
static observedAttributes: string[];
/** Event to indicate component significant state change that may affect other components state */
REFRESH_EVENT: string;
constructor($host: HTMLElement);
/** Callback of mixin instance initialization */
protected connectedCallback(): void;
/** Callback to execute on mixin instance destroy */
protected disconnectedCallback(): void;
/**
* Callback to handle changing of additional attributes.
* Happens when attribute accessed for writing independently of the actual value change
*/
protected attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
/** Subscribes (or resubscribes) all known descriptors that matches criteria */
$$on(criteria: ESLListenerCriteria): ESLEventListener[];
/** Subscribes `handler` method marked with `@listen` decorator */
$$on(handler: ESLListenerHandler): ESLEventListener[];
/** Subscribes `handler` function by the passed DOM event descriptor {@link ESLListenerDescriptor} or event name */
$$on<EType extends keyof ESLListenerEventMap>(event: EType | ESLListenerDescriptor<EType>, handler: ESLListenerHandler<ESLListenerEventMap[EType]>): ESLEventListener[];
/** Unsubscribes event listener */
$$off(...condition: ESLListenerCriteria[]): ESLEventListener[];
/**
* Gets or sets CSS classes for the `$host`
* @param cls - CSS classes query {@link CSSClassUtils}
* @param value - boolean to set CSS class(es) state or undefined to skip mutation
* @returns current classes state or passed state
*/
$$cls(cls: string, value?: boolean): boolean;
/**
* Gets or sets attribute for the `$host`.
* If the `value` param is undefined then skips mutation.
* @param name - attribute name
* @param value - string attribute value, boolean attribute state or `null` to delete attribute
* @returns current attribute value or previous value for mutation
*/
$$attr(name: string, value?: null | boolean | string): string | null;
/**
* Dispatches component custom event on the `$host`.
* Uses 'esl:' prefix for event name, overridable to customize event namespaces.
* @param eventName - event name
* @param eventInit - custom event init. See {@link CustomEventInit}
*/
$$fire(eventName: string, eventInit?: CustomEventInit): boolean;
/** Register current mixin definition */
static register(): void;
static readonly get: typeof ESLMixinRegistry.get;
static readonly getAll: typeof ESLMixinRegistry.getAll;
}
export type ESLMixinElementInternal = ESLMixinElement & {
connectedCallback(): void;
disconnectedCallback(): void;
attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
};
export type ESLMixinElementConstructable = typeof ESLMixinElement & (new ($root: HTMLElement) => ESLMixinElement);