{"version":3,"file":"useFocusControl.cjs","sources":["../../../src/components/Combobox/useFocusControl.ts"],"sourcesContent":["import { createRef, useCallback, useMemo, useRef, useState } from 'react'\n\nexport function useFocusControl(selectedItemLength: number) {\n  const deletionButtonRefs = useMemo(() => {\n    const refs: Array<ReturnType<typeof createRef<HTMLButtonElement>>> = []\n\n    for (let i = 0; i < selectedItemLength; i++) {\n      refs[i] = createRef<HTMLButtonElement>()\n    }\n\n    return refs\n  }, [selectedItemLength])\n  const inputRef = useRef<HTMLInputElement>(null)\n\n  const [focusedIndex, setFocusedIndex] = useState<number | null>(null)\n\n  const focusPrevDeletionButton = useCallback(() => {\n    if (selectedItemLength === 0) {\n      return\n    }\n\n    if (focusedIndex !== null) {\n      const nextIndex = Math.max(focusedIndex - 1, 0)\n\n      deletionButtonRefs[nextIndex].current?.focus()\n      setFocusedIndex(nextIndex)\n    } else if (inputRef.current?.selectionStart === 0) {\n      const nextIndex = deletionButtonRefs.length - 1\n\n      deletionButtonRefs[nextIndex].current?.focus()\n      setFocusedIndex(nextIndex)\n    }\n  }, [deletionButtonRefs, focusedIndex, selectedItemLength])\n\n  const focusNextDeletionButton = useCallback(() => {\n    if (deletionButtonRefs.length === 0 || focusedIndex === null) {\n      return\n    }\n\n    const nextIndex = focusedIndex + 1\n\n    if (nextIndex < deletionButtonRefs.length) {\n      deletionButtonRefs[nextIndex].current?.focus()\n      setFocusedIndex(nextIndex)\n    } else {\n      setFocusedIndex(null)\n      // キー入力が input に影響しないようにフォーカスタイミングを遅らせる\n      setTimeout(() => {\n        inputRef.current?.focus()\n      })\n    }\n  }, [deletionButtonRefs, focusedIndex])\n\n  const resetDeletionButtonFocus = useCallback(() => {\n    setFocusedIndex(null)\n  }, [])\n\n  return {\n    deletionButtonRefs,\n    inputRef,\n    focusPrevDeletionButton,\n    focusNextDeletionButton,\n    resetDeletionButtonFocus,\n  }\n}\n"],"names":["useMemo","createRef","useRef","useState","useCallback"],"mappings":";;;;AAEM,SAAU,eAAe,CAAC,kBAA0B,EAAA;AACxD,IAAA,MAAM,kBAAkB,GAAGA,aAAO,CAAC,MAAK;QACtC,MAAM,IAAI,GAA2D,EAAE;AAEvE,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kBAAkB,EAAE,CAAC,EAAE,EAAE;AAC3C,YAAA,IAAI,CAAC,CAAC,CAAC,GAAGC,eAAS,EAAqB;QAC1C;AAEA,QAAA,OAAO,IAAI;AACb,IAAA,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC;AACxB,IAAA,MAAM,QAAQ,GAAGC,YAAM,CAAmB,IAAI,CAAC;IAE/C,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAGC,cAAQ,CAAgB,IAAI,CAAC;AAErE,IAAA,MAAM,uBAAuB,GAAGC,iBAAW,CAAC,MAAK;AAC/C,QAAA,IAAI,kBAAkB,KAAK,CAAC,EAAE;YAC5B;QACF;AAEA,QAAA,IAAI,YAAY,KAAK,IAAI,EAAE;AACzB,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC,CAAC;YAE/C,kBAAkB,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE;YAC9C,eAAe,CAAC,SAAS,CAAC;QAC5B;aAAO,IAAI,QAAQ,CAAC,OAAO,EAAE,cAAc,KAAK,CAAC,EAAE;AACjD,YAAA,MAAM,SAAS,GAAG,kBAAkB,CAAC,MAAM,GAAG,CAAC;YAE/C,kBAAkB,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE;YAC9C,eAAe,CAAC,SAAS,CAAC;QAC5B;IACF,CAAC,EAAE,CAAC,kBAAkB,EAAE,YAAY,EAAE,kBAAkB,CAAC,CAAC;AAE1D,IAAA,MAAM,uBAAuB,GAAGA,iBAAW,CAAC,MAAK;QAC/C,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,IAAI,YAAY,KAAK,IAAI,EAAE;YAC5D;QACF;AAEA,QAAA,MAAM,SAAS,GAAG,YAAY,GAAG,CAAC;AAElC,QAAA,IAAI,SAAS,GAAG,kBAAkB,CAAC,MAAM,EAAE;YACzC,kBAAkB,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE;YAC9C,eAAe,CAAC,SAAS,CAAC;QAC5B;aAAO;YACL,eAAe,CAAC,IAAI,CAAC;;YAErB,UAAU,CAAC,MAAK;AACd,gBAAA,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE;AAC3B,YAAA,CAAC,CAAC;QACJ;AACF,IAAA,CAAC,EAAE,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC;AAEtC,IAAA,MAAM,wBAAwB,GAAGA,iBAAW,CAAC,MAAK;QAChD,eAAe,CAAC,IAAI,CAAC;IACvB,CAAC,EAAE,EAAE,CAAC;IAEN,OAAO;QACL,kBAAkB;QAClB,QAAQ;QACR,uBAAuB;QACvB,uBAAuB;QACvB,wBAAwB;KACzB;AACH;;;;"}