{"version":3,"file":"a11yEnhance.mjs","names":["callAllEventHandlers","defaultOnNeighborChange","neighborElement","focus","defaultFindNeighbor","listSelectors","element","direction","elementSibling","includes","indexElement","findIndex","node","lengthList","length","lastIndex","indexNext","a11yEnhance","options","findNeighbor","onNeighborChange","childSelector","props","getNeighbor","neighbor","disabled","handleKeyDown","event","parent","currentTarget","selectedElement","target","childAttrName","childAttrValue","getAttribute","Array","from","querySelectorAll","key","preventDefault","onKeyDown"],"sources":["../../../src/utils/enhances/a11yEnhance.tsx"],"sourcesContent":["import type React from 'react';\n\nimport { callAllEventHandlers } from '../assignProps';\n\ntype OnNeighborChange<P> = (neighborElement: HTMLElement, props: P) => void;\ntype FindNeighbor = (\n  listSelectors: HTMLElement[],\n  element: HTMLElement,\n  direction: string,\n) => HTMLElement | undefined;\ntype ChildSelector<P> = [string, string] | ((props: P) => [string, string]);\n\ntype A11yEnhanceOptions<P = any> = {\n  findNeighbor?: FindNeighbor;\n  onNeighborChange?: OnNeighborChange<P>;\n  childSelector: ChildSelector<P>;\n};\n\nconst defaultOnNeighborChange: OnNeighborChange<any> = (neighborElement) => {\n  neighborElement?.focus();\n};\n\nconst defaultFindNeighbor: FindNeighbor = (listSelectors, element, direction) => {\n  const elementSibling = ['right', 'top'].includes(direction) ? 1 : -1;\n  const indexElement = listSelectors.findIndex((node) => node === element);\n  const lengthList = listSelectors.length;\n\n  const lastIndex = lengthList - 1;\n  let indexNext = indexElement + elementSibling;\n  if (indexNext < 0) indexNext = lastIndex;\n  if (indexNext > lastIndex) indexNext = 0;\n  return listSelectors[indexNext];\n};\n\nconst a11yEnhance = (options: A11yEnhanceOptions) => {\n  const findNeighbor = options.findNeighbor || defaultFindNeighbor;\n  const onNeighborChange = options.onNeighborChange || defaultOnNeighborChange;\n  const { childSelector } = options;\n\n  return (props: any) => {\n    if (!childSelector)\n      throw `parameter childSelector not passed in options for a11yEnhance for ${props['data-ui-name']}`;\n    const getNeighbor = (\n      listSelectors: any,\n      element: HTMLElement,\n      direction: string,\n    ): HTMLElement => {\n      const neighbor = findNeighbor(listSelectors, element, direction);\n      if (!neighbor) return element;\n      if ('disabled' in neighbor && neighbor.disabled)\n        return getNeighbor(listSelectors, neighbor, direction);\n      return neighbor;\n    };\n\n    const handleKeyDown = (event: React.KeyboardEvent<HTMLElement>) => {\n      const parent = event.currentTarget;\n      const selectedElement = event.target as HTMLElement;\n      const [childAttrName, childAttrValue] =\n        typeof childSelector === 'function' ? childSelector(props) : childSelector;\n      if (!selectedElement.getAttribute(childAttrName)) return;\n\n      const listSelectors = Array.from(\n        parent.querySelectorAll(`[${childAttrName}=\"${childAttrValue}\"]`),\n      );\n      if (!listSelectors.length)\n        throw `no children found querySelectorAll([${childAttrName}=\"${childAttrValue}\"] a11yEnhance for ${props['data-ui-name']}`;\n\n      switch (event.key) {\n        case 'ArrowLeft':\n          onNeighborChange(getNeighbor(listSelectors, selectedElement, 'left'), props);\n          event.preventDefault();\n          break;\n        case 'ArrowTop':\n          onNeighborChange(getNeighbor(listSelectors, selectedElement, 'top'), props);\n          event.preventDefault();\n          break;\n        case 'ArrowRight':\n          onNeighborChange(getNeighbor(listSelectors, selectedElement, 'right'), props);\n          event.preventDefault();\n          break;\n        case 'ArrowBottom':\n          onNeighborChange(getNeighbor(listSelectors, selectedElement, 'bottom'), props);\n          event.preventDefault();\n          break;\n      }\n    };\n\n    return {\n      ...props,\n      onKeyDown: callAllEventHandlers(props.onKeyDown, handleKeyDown),\n    };\n  };\n};\n\nexport default a11yEnhance;\n"],"mappings":"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","ignoreList":[]}