/** * Базовый контракт экземпляра элемента коллекции. */ export interface ICollectionItem { instance: TCollectionElement; } /** * DOM-элемент, учитываемый в коллекции плагинов. * Добавляет к узлу пропс `isInCollection` */ export type TCollectionElement = Element & { isInCollection?: boolean; }; /** * Базовый тип параметров конструктора элемента коллекции. */ export type TCollectionItemDefaultCfg = Record; /** * Тип конструктора плагина, совместимого с `Collection`. * @template T Тип экземпляра элемента коллекции. */ export type TCollectionPluginCtor = new (el: TCollectionElement, params?: TCollectionItemDefaultCfg) => T; /** * Factory. Хранилище для экземпляров вызовов других плагинов, а также набор классов, доступных для наследования и служащих для ускорения проектирования простых пользовательских плагинов. * @module Collection * @param selector{String} селектор для идентификации класса * @param plugin{Function} плагин, добавляемый в коллекцию * @param isAutoInit{Boolean=} автоматический вызов методов `init` и `bindEvents` (подходит для большинства обычных коллекций) * @example * import { Collection } from "@delement/ui/plugins" * * class MyPlugin { * * constructor(el) { * this.instance = el; * } * * } * * export default class CollectionMyPlugin extends Collection { * * static selector = "[data-js-MyPlugin]"; * * constructor() { * super(CollectionMyPlugin.selector, MyPlugin) * } * * beforeAddCallback() { * // код выполнится, когда элемент добавится в коллекцию * } * * } */ declare class Collection { #private; collectionObserverSelector: string; collectionObserverClass: TCollectionPluginCtor | null; /** * События * @type {{mount: string, unmount: string}} */ static bubbles: { mount: string; unmount: string; }; constructor(selector: string, plugin: TCollectionPluginCtor, isAutoInit?: boolean); /** * Инициализирует коллекцию, добавляя все элементы по селектору в указанном контексте * @param context{Document|HTMLElement=} контекст для поиска элементов, по умолчанию document */ init(context?: Document | HTMLElement): void; /** * Подписывается на обновления страницы для автоматического вызова init (по умолчанию через Dispatcher) */ bindEvents(): void; /** * Получает актуальный массив экземпляров коллекции * @template T - тип элементов коллекции * @returns {T[]} массив экземпляров */ get collection(): T[]; /** * Ищет элемент внутри коллекции по DOM-элементу путём сверки поля instance * @param el{Element} DOM-элемент для поиска * @returns {T|null} найденный экземпляр или null */ getByDOMElement(el: Element): T | null; /** * Ищет элемент внутри коллекции по индексу * @param index{Number=} индекс элемента, по умолчанию 0 * @returns {T|null} найденный экземпляр или null */ getByIndex(index?: number): T; /** * Callback, вызываемый перед удалением элемента из коллекции * @param el{Element} удаляемый из коллекции элемент * @param instance{T} экземпляр вызова класса */ beforeRemoveCallback(el: TCollectionElement, instance: T): void; /** * Callback, вызываемый после удаления элемента из коллекции * @param el{Element} удалённый из коллекции элемент * @param instance{T} экземпляр вызова класса */ afterRemoveCallback(el: TCollectionElement, instance: T): void; /** * Callback, вызываемый перед добавлением элемента в коллекцию * @param el{Element} добавляемый в коллекцию элемент * @param instance{T} экземпляр вызова класса */ beforeAddCallback(el: TCollectionElement, instance: T): void; /** * Callback, вызываемый после добавления элемента в коллекцию * @param el{Element} добавленный в коллекцию элемент * @param instance{T} экземпляр вызова класса */ afterAddCallback(el: TCollectionElement, instance: T): void; /** * Удаляет элемент из коллекции по экземпляру класса * @param collectionClass{T} экземпляр класса для удаления */ removeFromCollection(collectionClass: T): void; /** * Устанавливает маркер состояния DOM-элемента (инициализирован или удалён из коллекции) * @param el{Element} DOM-элемент * @param isInCollection{Boolean=} маркер состояния (true = в коллекции) */ setElementState(el: TCollectionElement, isInCollection?: boolean): void; /** * Проверяет валидность элемента перед добавлением в коллекцию. * Полезно, если необходимо исключить вызов класса для определенных элементов. * @returns {Boolean} */ isValid(el: TCollectionElement): boolean; /** * Добавляет элемент или экземпляр класса в коллекцию * @template T * @returns {T|null} возвращает экземпляр класса или null, если элемент уже в коллекции */ addToCollection(item: TCollectionElement | T, params?: Record): T | null; } export { Collection, };