{"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","concat","getNeighbor","neighbor","disabled","handleKeyDown","event","parent","currentTarget","selectedElement","target","_ref","_ref2","_slicedToArray","childAttrName","childAttrValue","getAttribute","Array","from","querySelectorAll","key","preventDefault","_objectSpread","onKeyDown"],"sources":["../../src/enhances/a11yEnhance.tsx"],"sourcesContent":["import { callAllEventHandlers } from '../assignProps';\nimport React from 'react';\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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"}