{"version":3,"file":"hooks.mjs","sources":["../../../../../src/components/DateTimePickers/TimeRangePicker/hooks.ts"],"sourcesContent":["import { RefObject, useEffect, useState } from 'react';\n\nimport { TimeOption } from '@grafana/data';\n\nconst modulo = (a: number, n: number) => ((a % n) + n) % n;\nconst CAUGHT_KEYS = ['ArrowUp', 'ArrowDown', 'Home', 'End', 'Enter', 'Tab'];\n\n/** @internal */\nexport interface UseListFocusProps {\n  localRef: RefObject<HTMLUListElement>;\n  options: TimeOption[];\n}\n\n/** @internal */\nexport type UseListFocusReturn = [(event: React.KeyboardEvent) => void];\n\n/** @internal */\nexport const useListFocus = ({ localRef, options }: UseListFocusProps): UseListFocusReturn => {\n  const [focusedItem, setFocusedItem] = useState(0);\n\n  useEffect(() => {\n    const items = localRef.current?.querySelectorAll<HTMLInputElement>('[data-role=\"item\"]') || [];\n    const checkedIndex = Array.from(items).findIndex((item) => item.checked);\n    const newFocusedIndex = checkedIndex >= 0 ? checkedIndex : 0;\n    items.forEach((item, i) => {\n      item.tabIndex = i === newFocusedIndex ? 0 : -1;\n    });\n    // Reset focused item when options have changed\n    setFocusedItem(newFocusedIndex);\n  }, [localRef, options]);\n\n  const handleKeys = (event: React.KeyboardEvent) => {\n    const items = localRef?.current?.querySelectorAll<HTMLInputElement>('[data-role=\"item\"]');\n    const itemsCount = items?.length ?? 0;\n\n    if (CAUGHT_KEYS.indexOf(event.key) > -1) {\n      event.preventDefault();\n      if (event.key !== 'Tab') {\n        event.stopPropagation();\n      }\n    }\n\n    let newFocusedIndex = null;\n\n    switch (event.key) {\n      case 'ArrowUp':\n        newFocusedIndex = modulo(focusedItem - 1, itemsCount);\n        break;\n      case 'ArrowDown':\n        newFocusedIndex = modulo(focusedItem + 1, itemsCount);\n        break;\n      case 'Home':\n        newFocusedIndex = 0;\n        break;\n      case 'End':\n        newFocusedIndex = itemsCount - 1;\n        break;\n      case 'Enter':\n        items?.[focusedItem]?.click();\n        break;\n      default:\n        break;\n    }\n\n    if (newFocusedIndex !== null) {\n      setFocusedItem(newFocusedIndex);\n      items?.[newFocusedIndex]?.focus();\n      items?.forEach((item, i) => {\n        item.tabIndex = i === newFocusedIndex ? 0 : -1;\n      });\n    }\n  };\n\n  return [handleKeys];\n};\n"],"names":[],"mappings":"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"}