{"version":3,"file":"helpers.bundle.mjs","sources":["../../src/moj/helpers.mjs"],"sourcesContent":["/**\n * @param {Element} $element - Element to remove attribute value from\n * @param {string} attr - Attribute name\n * @param {string} value - Attribute value\n */\nexport function removeAttributeValue($element, attr, value) {\n  let re, m\n  if ($element.getAttribute(attr)) {\n    if ($element.getAttribute(attr) === value) {\n      $element.removeAttribute(attr)\n    } else {\n      re = new RegExp(`(^|\\\\s)${value}(\\\\s|$)`)\n      m = $element.getAttribute(attr).match(re)\n      if (m && m.length === 3) {\n        $element.setAttribute(\n          attr,\n          $element.getAttribute(attr).replace(re, m[1] && m[2] ? ' ' : '')\n        )\n      }\n    }\n  }\n}\n\n/**\n * @param {Element} $element - Element to add attribute value to\n * @param {string} attr - Attribute name\n * @param {string} value - Attribute value\n */\nexport function addAttributeValue($element, attr, value) {\n  let re\n  if (!$element.getAttribute(attr)) {\n    $element.setAttribute(attr, value)\n  } else {\n    re = new RegExp(`(^|\\\\s)${value}(\\\\s|$)`)\n    if (!re.test($element.getAttribute(attr))) {\n      $element.setAttribute(attr, `${$element.getAttribute(attr)} ${value}`)\n    }\n  }\n}\n\n/**\n * Find an elements next sibling\n *\n * Utility function to find an elements next sibling matching the provided\n * selector.\n *\n * @param {Element | null} $element - Element to find siblings for\n * @param {string} [selector] - selector for required sibling\n */\nexport function getNextSibling($element, selector) {\n  if (!$element || !($element instanceof HTMLElement)) {\n    return\n  }\n\n  // Get the next sibling element\n  let $sibling = $element.nextElementSibling\n\n  // If there's no selector, return the first sibling\n  if (!selector) return $sibling\n\n  // If the sibling matches our selector, use it\n  // If not, jump to the next sibling and continue the loop\n  while ($sibling) {\n    if ($sibling.matches(selector)) return $sibling\n    $sibling = $sibling.nextElementSibling\n  }\n}\n\n/**\n * Find an elements preceding sibling\n *\n * Utility function to find an elements previous sibling matching the provided\n * selector.\n *\n * @param {Element | null} $element - Element to find siblings for\n * @param {string} [selector] - selector for required sibling\n */\nexport function getPreviousSibling($element, selector) {\n  if (!$element || !($element instanceof HTMLElement)) {\n    return\n  }\n\n  // Get the previous sibling element\n  let $sibling = $element.previousElementSibling\n\n  // If there's no selector, return the first sibling\n  if (!selector) return $sibling\n\n  // If the sibling matches our selector, use it\n  // If not, jump to the next sibling and continue the loop\n  while ($sibling) {\n    if ($sibling.matches(selector)) return $sibling\n    $sibling = $sibling.previousElementSibling\n  }\n}\n\n/**\n * @param {Element | null} $element\n * @param {string} [selector]\n */\nexport function findNearestMatchingElement($element, selector) {\n  // If no element or selector is provided, return\n  if (!$element || !($element instanceof HTMLElement) || !selector) {\n    return\n  }\n\n  // Start with the current element\n  let $currentElement = $element\n\n  while ($currentElement) {\n    // First check the current element\n    if ($currentElement.matches(selector)) {\n      return $currentElement\n    }\n\n    // Check all previous siblings\n    let $sibling = $currentElement.previousElementSibling\n    while ($sibling) {\n      // Check if the sibling itself is a heading\n      if ($sibling.matches(selector)) {\n        return $sibling\n      }\n      $sibling = $sibling.previousElementSibling\n    }\n\n    // If no match found in siblings, move up to parent\n    $currentElement = $currentElement.parentElement\n  }\n}\n"],"names":["removeAttributeValue","$element","attr","value","re","m","getAttribute","removeAttribute","RegExp","match","length","setAttribute","replace","addAttributeValue","test","getNextSibling","selector","HTMLElement","$sibling","nextElementSibling","matches","getPreviousSibling","previousElementSibling","findNearestMatchingElement","$currentElement","parentElement"],"mappings":"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"}