/** * @typedef Listener * @type {Object} * @property {Node} element * @property {string} eventName * @property {function} listener */ /** * @function EventListener * @param {unknown[]} args - аргументы функции */ /** * @typedef Events * @type {Object} */ /** * Класс для создания компонентов приложения. Необходим для нследования. * @class */ class Component { /** * @private * * @type {Listener[]} */ _listeners; /** * События компонента * @private * * @type {Events} */ _events; /** * Корневой элемент компонента * @public * * @type {Node} - корневой элемент компонента */ mainNode; /** * @param {string} mainNodeSelector - селектор, с помощью которого извлекается шаблон компонента * @param {Node} parentNode - родительский Node, в который следует положить созданный элемент * @constructor */ constructor (mainNodeSelector, parentNode) { /** * @type {DocumentFragment} */ const content = document.querySelector(mainNodeSelector).content; if (content.children.length > 1) { const message = '