{"version":3,"file":"equal-heights.cjs","sources":["../src/equal-heights.js"],"sourcesContent":["import { mergeObjects, noop, isString, isArray, isEmpty, isElement, getElementOffset, getWindowScroll, debounce, getScrollLimit } from '@morev/utils';\n\nconst DEFAULTS = {\n\tbyRows: true,\n\tisEnabled: () => true,\n\tisDisabled: () => false,\n\tresizeObserver: true,\n\tmutationObserver: true,\n\tparent: typeof document === 'undefined' ? {} : document.body,\n};\n\nclass EqualHeights {\n\t/**\n\t * Working options.\n\t *\n\t * @protected\n\t */\n\t_options = {};\n\n\t/**\n\t * The stack of elements and options being processed.\n\t *\n\t * @protected\n\t */\n\t_stack = [];\n\n\t/**\n\t * ResizeObserver storage.\n\t *\n\t * @protected\n\t */\n\t_resizeObserver;\n\n\t/**\n\t * MutationObserver storage.\n\t *\n\t * @protected\n\t */\n\t_mutationObserver;\n\n\t/**\n\t * Initializes the class instance.\n\t *\n\t * @param   {object}        [options]                    Custom options, extends the defaults.\n\t * @param   {boolean}       [options.byRows]             Whether only the elements in the same row should have equal height, instead of all the elements in stack.\n\t * @param   {Function}      [options.isEnabled]          A function to test whether the elements should have the equal height. Accepts the `window` object as the argument.\n\t *                                                       Returns a value that coerces to `true` to set equal height, or to `false` otherwise.\n\t * @param   {Function}      [options.isDisabled]         A function to test whether the elements should not have the equal height. Accepts the `window` object as the argument.\n\t *                                                       Returns a value that coerces to `true` to unset equal height, or to `false` otherwise.\n\t * @param   {boolean}       [options.resizeObserver]     Whether to observe resizing of the elements using the `ResizeObserver`.\n\t * @param   {boolean}       [options.mutationObserver]   Whether to observe adding/removing of the elements using the `MutationObserver`.\n\t * @param   {HTMLElement}   [options.parent]             Common parent element of a given elements.\n\t */\n\tconstructor(options = {}) {\n\t\tif (typeof document === 'undefined') return;\n\t\tthis._options = mergeObjects(DEFAULTS, options);\n\n\t\tthis._initObservers();\n\t\tthis._attachEvents();\n\t}\n\n\t/**\n\t * Retrieves the array of elements by a given selector using a given common parent element.\n\t *\n\t * @param     {string}                  selector   The elements selector.\n\t * @param     {HTMLElement|undefined}   [parent]   Common parent element.\n\t *\n\t * @returns   {HTMLElement[]}                      The array of element descendants of a given parent that match a given selector.\n\t *\n\t * @protected\n\t */\n\t_getElements(selector, parent) {\n\t\tconst actualParent = (parent || this._options.parent);\n\t\treturn selector === '> *'\n\t\t\t? [...actualParent.children]\n\t\t\t: [...actualParent.querySelectorAll(selector)];\n\t}\n\n\t/**\n\t * Retrieves all the registered elements.\n\t *\n\t * @returns   {HTMLElement[]}   The array of registered elements.\n\t *\n\t * @protected\n\t */\n\t_getAllElements() {\n\t\treturn this._stack.reduce((acc, { selector, options }) => [\n\t\t\t...acc,\n\t\t\t...this._getElements(selector, options.parent),\n\t\t], []);\n\t}\n\n\t/**\n\t * Retrieves the groups of elements for which there should be set an equal height.\n\t *\n\t * @returns   {HTMLElement[][]}   The array of arrays of elements being processed.\n\t *\n\t * @protected\n\t */\n\t_getMatchElements() {\n\t\tthis._getAllElements().forEach((el) => {\n\t\t\tel.style.setProperty('height', '50px');\n\t\t});\n\n\t\tconst matchElements = this._stack.map(({ selector, options }) => {\n\t\t\tconst { isEnabled, isDisabled } = options;\n\t\t\tconst { byRows, parent } = options;\n\n\t\t\tif (!isEnabled(window) || isDisabled(window)) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\treturn Object.values(this._getElements(selector, parent).reduce((acc, el) => {\n\t\t\t\tconst offset = byRows ? Math.round(getElementOffset(el, 'y')) : -1;\n\n\t\t\t\tacc[offset] ||= [];\n\t\t\t\tacc[offset].push(el);\n\n\t\t\t\treturn acc;\n\t\t\t}, {}));\n\t\t});\n\n\t\tthis._resetElements();\n\n\t\treturn matchElements.flat();\n\t}\n\n\t/**\n\t * Registers a group(s) of elements and its options.\n\t *\n\t * @param     {string|string[]|object|object[]}   input   The input settings: elements selector, an array of elements selectors,\n\t *                                                        an object structured of {selector: string, options?: object}, or an array of such objects.\n\t *\n\t * @returns   {void}\n\t *\n\t * @protected\n\t */\n\t_registerElements(input) {\n\t\t/* eslint-disable padded-blocks */\n\t\tif (isString(input)) {\n\t\t\tconst selector = input;\n\t\t\tconst options = this._options;\n\n\t\t\tthis._stack.push({ selector, options });\n\t\t\tthis._initElements(this._getElements(selector, options.parent), options.resizeObserver);\n\t\t} else if (isArray(input) && !input.some((val) => !isString(val))) {\n\t\t\tconst selectors = input;\n\t\t\tconst options = this._options;\n\n\t\t\tselectors.forEach((selector) => {\n\t\t\t\tthis._stack.push({ selector, options });\n\t\t\t\tthis._initElements(this._getElements(selector, options.parent), options.resizeObserver);\n\t\t\t});\n\t\t} else {\n\t\t\t[input].flat().forEach((group) => {\n\t\t\t\tconst { selector, options: customOptions = {} } = group;\n\t\t\t\tconst options = mergeObjects(this._options, customOptions);\n\n\t\t\t\tthis._stack.push({ selector, options });\n\t\t\t\tthis._initElements(this._getElements(selector, options.parent), options.resizeObserver);\n\t\t\t});\n\t\t}\n\t\t/* eslint-enable padded-blocks */\n\t}\n\n\t/**\n\t * Initializes newly registered elements.\n\t *\n\t * @param     {HTMLElement[]|NodeList|HTMLCollection}   elements    The elements being initialized.\n\t * @param     {boolean}                                 [observe]   Whether to observe the elements resizing using the `ResizeObserver`.\n\t *\n\t * @returns   {void}\n\t *\n\t * @protected\n\t */\n\t_initElements(elements, observe = false) {\n\t\telements.forEach((el) => {\n\t\t\tconst height = el.style.getPropertyValue('height');\n\t\t\tconst minHeight = el.style.getPropertyValue('min-height');\n\n\t\t\tif (!!height) el.dataset.ehHeight = height;\n\t\t\tif (!!minHeight) el.dataset.ehMinHeight = minHeight;\n\n\t\t\tif (observe) this._resizeObserver.observe(el);\n\t\t});\n\t}\n\n\t/**\n\t * Restores the initial state of all the registered elements.\n\t *\n\t * @returns   {void}\n\t *\n\t * @protected\n\t */\n\t_resetElements() {\n\t\tthis._getAllElements().forEach((el) => {\n\t\t\tel.style.removeProperty('min-height');\n\t\t\tel.style.removeProperty('height');\n\n\t\t\tif ('ehHeight' in el.dataset) el.style.setProperty('height', el.dataset.ehHeight);\n\t\t\tif ('ehMinHeight' in el.dataset) el.style.setProperty('min-height', el.dataset.ehMinHeight);\n\t\t});\n\t}\n\n\t/**\n\t * Sets the equal height for the necessary elements.\n\t *\n\t * @returns   {void}\n\t *\n\t * @protected\n\t */\n\t_setupElements() {\n\t\tconst { x: scrollX, y: scrollY } = getWindowScroll('both');\n\t\tthis._resetElements();\n\n\t\tthis._getMatchElements().forEach((elements) => {\n\t\t\tconst maxHeight = elements.reduce((acc, el) => (\n\t\t\t\tMath.max(acc, el.offsetHeight)\n\t\t\t), 0);\n\t\t\telements.forEach((el) => {\n\t\t\t\tel.style.setProperty('min-height', `${maxHeight}px`);\n\t\t\t});\n\t\t});\n\n\t\twindow.scrollTo({\n\t\t\tleft: Math.min(scrollX, getScrollLimit('x')),\n\t\t\ttop: Math.min(scrollY, getScrollLimit('y')),\n\t\t\tbehavior: 'auto',\n\t\t});\n\t}\n\n\t/**\n\t * Initializes events listeners.\n\t *\n\t * @returns   {void}\n\t *\n\t * @protected\n\t */\n\t_attachEvents() {\n\t\twindow.addEventListener('load', () => this.update());\n\t\twindow.addEventListener('orientationchange', () => this.update());\n\t\twindow.addEventListener('resize', debounce(() => this.update()));\n\t}\n\n\t/**\n\t * Initializes observers.\n\t *\n\t * @returns   {void}\n\t *\n\t * @protected\n\t */\n\t_initObservers() {\n\t\tthis._resizeObserver = 'ResizeObserver' in window\n\t\t\t? new ResizeObserver(debounce(() => this.update(), 60))\n\t\t\t: { observe: noop, unobserve: noop, disconnect: noop };\n\n\t\tthis._mutationObserver = 'MutationObserver' in window\n\t\t\t? new MutationObserver((mutations) => {\n\t\t\t\tconst queries = Object.entries(this._stack.reduce((acc, { selector, options }) => {\n\t\t\t\t\tif (options.mutationObserver) {\n\t\t\t\t\t\tacc[selector] ||= [];\n\t\t\t\t\t\tacc[selector].push(options.parent);\n\t\t\t\t\t}\n\t\t\t\t\treturn acc;\n\t\t\t\t}, {}));\n\n\t\t\t\tif (isEmpty(queries)) return;\n\n\t\t\t\tconst checkNode = (node) => (\n\t\t\t\t\tisElement(node) && queries.some(([selector, parents]) => (\n\t\t\t\t\t\t(selector === '> *' || node.matches(selector) || node.querySelector(selector)) && parents.some((parent) => (\n\t\t\t\t\t\t\tparent === this._options.parent || parent.contains(node)\n\t\t\t\t\t\t))\n\t\t\t\t\t))\n\t\t\t\t);\n\n\t\t\t\tconst needUpdate = [...mutations].some((mutation) => (\n\t\t\t\t\t[...mutation.addedNodes].some((node) => checkNode(node))\n\t\t\t\t\t|| [...mutation.removedNodes].some((node) => checkNode(node))\n\t\t\t\t));\n\n\t\t\t\t// Watch newly added nodes with ResizeObserver if needed\n\t\t\t\t// It seems there is no need to unobserve removed items, but issue still not clarified\n\t\t\t\t// @see https://github.com/w3c/csswg-drafts/issues/5155\n\t\t\t\t// TODO: [2025-05-11] Marked for now as potential problem, keep tracking real stats\n\t\t\t\tif (needUpdate && this._options.resizeObserver) {\n\t\t\t\t\tconst joinedSelectors = queries.map(([selector]) => selector).join(',');\n\t\t\t\t\tconst addedNodes = [...mutations].reduce((acc, mutation) => {\n\t\t\t\t\t\tconst validNodes = [...mutation.addedNodes].filter(node => checkNode(node));\n\t\t\t\t\t\tif (!validNodes.length) return acc;\n\n\t\t\t\t\t\tconst neededNodes = validNodes.reduce((innerAcc, node) => {\n\t\t\t\t\t\t\t// Added element matches itself\n\t\t\t\t\t\t\tif (node.matches(joinedSelectors)) innerAcc.push(node);\n\t\t\t\t\t\t\t// At least one of inner elements matches because node already marked as valid\n\t\t\t\t\t\t\tacc.push(...node.querySelectorAll(joinedSelectors));\n\t\t\t\t\t\t\treturn innerAcc;\n\t\t\t\t\t\t}, []);\n\n\t\t\t\t\t\tacc.push(...neededNodes);\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t}, []);\n\n\t\t\t\t\taddedNodes.length && this._initElements(addedNodes, true);\n\t\t\t\t}\n\n\t\t\t\tneedUpdate && this.update();\n\t\t\t})\n\t\t\t: { observe: noop, disconnect: noop };\n\n\t\tthis._mutationObserver.observe(document.body, {\n\t\t\tchildList: true,\n\t\t\tsubtree: true,\n\t\t});\n\t}\n\n\t/**\n\t * Updates the registered elements state.\n\t *\n\t * @returns   {EqualHeights}\n\t */\n\tupdate() {\n\t\tthis._setupElements();\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds a new group(s) of elements and (optionally) its specific options.\n\t *\n\t * @param     {string|string[]|object|object[]}   input            The input settings: elements selector, an array of elements selectors,\n\t *                                                                 an object structured of {selector: string, options?: object}, or an array of such objects.\n\t * @param     {boolean}                           [shouldUpdate]   Whether update the height of elements after adding automatically.\n\t *\n\t * @returns   {EqualHeights}\n\t */\n\tadd(input, shouldUpdate = true) {\n\t\tthis._registerElements(input);\n\t\tshouldUpdate && this.update();\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Removes the elements from the stack.\n\t *\n\t * @param     {string}                  selector   Selector of the elements being de-registered.\n\t * @param     {HTMLElement|undefined}   [parent]   Common parent element.\n\t *\n\t * @returns   {EqualHeights}\n\t */\n\tremove(selector, parent) {\n\t\tthis._resetElements();\n\t\tthis._stack = this._stack.filter(({ selector: _selector, options }) => {\n\t\t\tif (_selector === selector && options.parent === (parent || this._options.parent)) {\n\t\t\t\tif (options.resizeObserver) {\n\t\t\t\t\tthis._getElements(_selector, options.parent).forEach((el) => {\n\t\t\t\t\t\tthis._resizeObserver.unobserve(el);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t});\n\n\t\tthis.update();\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Restores the initial state of all the registered elements and removes it from the stack.\n\t *\n\t * @returns   {EqualHeights}\n\t */\n\treset() {\n\t\tthis._resetElements();\n\n\t\tthis._stack = [];\n\t\tthis._resizeObserver.disconnect();\n\n\t\treturn this;\n\t}\n}\n\nexport { EqualHeights };\n"],"names":["mergeObjects","getElementOffset","isString","isArray","getWindowScroll","getScrollLimit","debounce","noop","isEmpty","isElement"],"mappings":"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"}