{"version":3,"file":"useActiveOption.cjs","sources":["../../../src/components/Combobox/useActiveOption.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react'\n\nimport type { ComboboxOption } from './types'\n\nexport function useActiveOption<T>({ options }: { options: Array<ComboboxOption<T>> }) {\n  const [activeOption, setActiveOption] = useState<ComboboxOption<T> | null>(null)\n\n  useEffect(() => {\n    // props の変更によって activeOption の状態が変わりうるので、実態を反映する\n    setActiveOption((current) => {\n      if (current === null) {\n        return null\n      }\n\n      return options.find((option) => current.id === option.id) ?? null\n    })\n  }, [options])\n\n  const moveActiveOptionIndex = useCallback(\n    (currentActive: ComboboxOption<T> | null, delta: -1 | 1) => {\n      if (options.every((option) => option.item.disabled)) {\n        return\n      }\n\n      const currentActiveIndex =\n        currentActive === null ? -1 : options.findIndex((option) => option.id === currentActive.id)\n      let nextIndex = 0\n\n      if (currentActiveIndex !== -1) {\n        nextIndex = (currentActiveIndex + delta + options.length) % options.length\n      } else if (delta !== 1) {\n        nextIndex = options.length - 1\n      }\n\n      const nextActive = options[nextIndex]\n\n      if (nextActive) {\n        if (nextActive.item.disabled) {\n          // skip disabled item\n          moveActiveOptionIndex(nextActive, delta)\n        } else {\n          setActiveOption(nextActive)\n        }\n      }\n    },\n    [options],\n  )\n\n  return {\n    activeOption,\n    setActiveOption,\n    moveActiveOptionIndex,\n  }\n}\n"],"names":["useState","useEffect","useCallback"],"mappings":";;;;AAIM,SAAU,eAAe,CAAI,EAAE,OAAO,EAAyC,EAAA;IACnF,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAGA,cAAQ,CAA2B,IAAI,CAAC;IAEhFC,eAAS,CAAC,MAAK;;AAEb,QAAA,eAAe,CAAC,CAAC,OAAO,KAAI;AAC1B,YAAA,IAAI,OAAO,KAAK,IAAI,EAAE;AACpB,gBAAA,OAAO,IAAI;YACb;AAEA,YAAA,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI;AACnE,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IAEb,MAAM,qBAAqB,GAAGC,iBAAW,CACvC,CAAC,aAAuC,EAAE,KAAa,KAAI;AACzD,QAAA,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;YACnD;QACF;AAEA,QAAA,MAAM,kBAAkB,GACtB,aAAa,KAAK,IAAI,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,KAAK,aAAa,CAAC,EAAE,CAAC;QAC7F,IAAI,SAAS,GAAG,CAAC;AAEjB,QAAA,IAAI,kBAAkB,KAAK,EAAE,EAAE;AAC7B,YAAA,SAAS,GAAG,CAAC,kBAAkB,GAAG,KAAK,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM;QAC5E;AAAO,aAAA,IAAI,KAAK,KAAK,CAAC,EAAE;AACtB,YAAA,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC;QAChC;AAEA,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;QAErC,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE;;AAE5B,gBAAA,qBAAqB,CAAC,UAAU,EAAE,KAAK,CAAC;YAC1C;iBAAO;gBACL,eAAe,CAAC,UAAU,CAAC;YAC7B;QACF;AACF,IAAA,CAAC,EACD,CAAC,OAAO,CAAC,CACV;IAED,OAAO;QACL,YAAY;QACZ,eAAe;QACf,qBAAqB;KACtB;AACH;;;;"}