{"version":3,"file":"keyboardFocusEnhance.mjs","names":["React","assignProps","useFocusSource","enforcedKeyboardFocusEnhanceContext","createContext","keyboardFocusEnhance","makeFocusable","arguments","length","undefined","props","_props$tabIndex","autoFocus","disabled","loading","tabIndex","_React$useState","useState","_React$useState2","_slicedToArray","keyboardFocused","setKeyboardFocused","focusSourceRef","ref","useRef","handleFocus","useCallback","event","isTrusted","current","handlerBlur","useEffect","timer","setTimeout","_ref$current","focus","clearTimeout","enforcedKeyboardFocus","useContext","onFocus","onBlur"],"sources":["../../src/enhances/keyboardFocusEnhance.tsx"],"sourcesContent":["import React from 'react';\nimport assignProps from '../assignProps';\nimport { UnknownProperties } from '../core';\nimport { useFocusSource } from './focusSourceEnhance';\nexport { useFocusSource };\n\n/** @deprecated */\nexport interface IKeyboardFocusProps extends KeyboardFocusProps, UnknownProperties {}\nexport type KeyboardFocusProps = {\n  /* Property responsible for displaying \"keyboard\" focus */\n  keyboardFocused?: boolean;\n  /**\n   * Makes component to catch browser focus on component mount\n   * @default false\n   */\n  autoFocus?: boolean;\n};\n\nexport const enforcedKeyboardFocusEnhanceContext = React.createContext(false);\n\nexport type KeyboardFocusEnhanceHook = (props: {\n  tabIndex?: number;\n  disabled?: boolean;\n  loading?: boolean;\n  autoFocus?: boolean;\n}) => {\n  tabIndex: number;\n  keyboardFocused: boolean;\n  onFocus: (e: React.FocusEvent) => void;\n  onBlur: () => void;\n};\n\nconst keyboardFocusEnhance = (makeFocusable = true): KeyboardFocusEnhanceHook => {\n  return (props) => {\n    const { autoFocus } = props;\n    const disabled = props.disabled || props.loading;\n    const tabIndex = props.tabIndex ?? (makeFocusable ? 0 : undefined);\n    const [keyboardFocused, setKeyboardFocused] = React.useState(false);\n    const focusSourceRef = useFocusSource();\n    const ref = React.useRef<HTMLElement>(null);\n\n    const handleFocus = React.useCallback((event: React.FocusEvent) => {\n      if (event.isTrusted === true) {\n        if (focusSourceRef.current !== 'keyboard') return;\n      }\n      setKeyboardFocused(true);\n    }, []);\n    const handlerBlur = React.useCallback(() => setKeyboardFocused(false), []);\n    React.useEffect(() => {\n      if (typeof autoFocus !== 'number' && !autoFocus) return;\n      const timer = setTimeout(() => {\n        ref.current?.focus();\n        setKeyboardFocused(true);\n      }, 0);\n      return () => {\n        clearTimeout(timer);\n      };\n    }, [autoFocus]);\n    React.useEffect(() => {\n      if (disabled) {\n        setKeyboardFocused(false);\n      }\n    }, [disabled]);\n\n    const enforcedKeyboardFocus = React.useContext(enforcedKeyboardFocusEnhanceContext);\n\n    return assignProps(props, {\n      tabIndex: disabled ? -1 : tabIndex,\n      keyboardFocused: (keyboardFocused || enforcedKeyboardFocus) && !disabled,\n      onFocus: handleFocus,\n      onBlur: handlerBlur,\n      ref,\n    });\n  };\n};\n\nexport default keyboardFocusEnhance;\n"],"mappings":";AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,WAAW,MAAM,oBAAgB;AAExC,SAASC,cAAc,QAAQ,0BAAsB;AACrD,SAASA,cAAc;;AAEvB;;AAYA,OAAO,IAAMC,mCAAmC,gBAAGH,KAAK,CAACI,aAAa,CAAC,KAAK,CAAC;AAc7E,IAAMC,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAAA,EAAuD;EAAA,IAAnDC,aAAa,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,IAAI;EAChD,OAAO,UAACG,KAAK,EAAK;IAAA,IAAAC,eAAA;IAChB,IAAQC,SAAS,GAAKF,KAAK,CAAnBE,SAAS;IACjB,IAAMC,QAAQ,GAAGH,KAAK,CAACG,QAAQ,IAAIH,KAAK,CAACI,OAAO;IAChD,IAAMC,QAAQ,IAAAJ,eAAA,GAAGD,KAAK,CAACK,QAAQ,cAAAJ,eAAA,cAAAA,eAAA,GAAKL,aAAa,GAAG,CAAC,GAAGG,SAAU;IAClE,IAAAO,eAAA,GAA8ChB,KAAK,CAACiB,QAAQ,CAAC,KAAK,CAAC;MAAAC,gBAAA,GAAAC,cAAA,CAAAH,eAAA;MAA5DI,eAAe,GAAAF,gBAAA;MAAEG,kBAAkB,GAAAH,gBAAA;IAC1C,IAAMI,cAAc,GAAGpB,cAAc,EAAE;IACvC,IAAMqB,GAAG,GAAGvB,KAAK,CAACwB,MAAM,CAAc,IAAI,CAAC;IAE3C,IAAMC,WAAW,GAAGzB,KAAK,CAAC0B,WAAW,CAAC,UAACC,KAAuB,EAAK;MACjE,IAAIA,KAAK,CAACC,SAAS,KAAK,IAAI,EAAE;QAC5B,IAAIN,cAAc,CAACO,OAAO,KAAK,UAAU,EAAE;MAC7C;MACAR,kBAAkB,CAAC,IAAI,CAAC;IAC1B,CAAC,EAAE,EAAE,CAAC;IACN,IAAMS,WAAW,GAAG9B,KAAK,CAAC0B,WAAW,CAAC;MAAA,OAAML,kBAAkB,CAAC,KAAK,CAAC;IAAA,GAAE,EAAE,CAAC;IAC1ErB,KAAK,CAAC+B,SAAS,CAAC,YAAM;MACpB,IAAI,OAAOnB,SAAS,KAAK,QAAQ,IAAI,CAACA,SAAS,EAAE;MACjD,IAAMoB,KAAK,GAAGC,UAAU,CAAC,YAAM;QAAA,IAAAC,YAAA;QAC7B,CAAAA,YAAA,GAAAX,GAAG,CAACM,OAAO,cAAAK,YAAA,uBAAXA,YAAA,CAAaC,KAAK,EAAE;QACpBd,kBAAkB,CAAC,IAAI,CAAC;MAC1B,CAAC,EAAE,CAAC,CAAC;MACL,OAAO,YAAM;QACXe,YAAY,CAACJ,KAAK,CAAC;MACrB,CAAC;IACH,CAAC,EAAE,CAACpB,SAAS,CAAC,CAAC;IACfZ,KAAK,CAAC+B,SAAS,CAAC,YAAM;MACpB,IAAIlB,QAAQ,EAAE;QACZQ,kBAAkB,CAAC,KAAK,CAAC;MAC3B;IACF,CAAC,EAAE,CAACR,QAAQ,CAAC,CAAC;IAEd,IAAMwB,qBAAqB,GAAGrC,KAAK,CAACsC,UAAU,CAACnC,mCAAmC,CAAC;IAEnF,OAAOF,WAAW,CAACS,KAAK,EAAE;MACxBK,QAAQ,EAAEF,QAAQ,GAAG,CAAC,CAAC,GAAGE,QAAQ;MAClCK,eAAe,EAAE,CAACA,eAAe,IAAIiB,qBAAqB,KAAK,CAACxB,QAAQ;MACxE0B,OAAO,EAAEd,WAAW;MACpBe,MAAM,EAAEV,WAAW;MACnBP,GAAG,EAAHA;IACF,CAAC,CAAC;EACJ,CAAC;AACH,CAAC;AAED,eAAelB,oBAAoB"}