{"version":3,"file":"isFocusable.mjs","names":["AFTER_BORDER_ID","BEFORE_BORDER_ID","focusable","has","isFocusable","node","ownerDocument","defaultView","HTMLElement","SVGElement","hasAttribute","getAttribute","tagName","params","every","param","style","getComputedStyle","display","visibility"],"sources":["../../../src/utils/focus-lock/isFocusable.ts"],"sourcesContent":["import { AFTER_BORDER_ID, BEFORE_BORDER_ID } from './focusBorders';\n\nconst focusable = [\n  ['BUTTON'],\n  ['SELECT'],\n  ['TEXTAREA'],\n  ['INPUT'],\n  ['A', { has: 'href' }],\n  ['AREA', { has: 'href' }],\n  ['SUMMARY'],\n  ['IFRAME'],\n  ['OBJECT'],\n  ['EMBED'],\n  ['AUDIO', { has: 'controls' }],\n  ['VIDEO', { has: 'controls' }],\n  [{ has: 'tabindex' }],\n  [{ has: 'contenteditable' }],\n  [{ has: 'autofocus' }],\n];\n\nexport const isFocusable = (node: Node) => {\n  if (!node) return false;\n  if (!node.ownerDocument) return false;\n  if (!node.ownerDocument.defaultView?.HTMLElement) return false;\n  if (\n    !(\n      node instanceof node.ownerDocument.defaultView.HTMLElement ||\n      node instanceof node.ownerDocument.defaultView.SVGElement\n    )\n  )\n    return false;\n  if (node.hasAttribute('disabled')) return false;\n  if (node.getAttribute('tabindex') === '-1') return false;\n  if (node.getAttribute('hidden') !== null) return false;\n  if (\n    node.getAttribute('data-id') === BEFORE_BORDER_ID ||\n    node.getAttribute('data-id') === AFTER_BORDER_ID\n  )\n    return false;\n  const tagName = node.tagName;\n  for (const params of focusable) {\n    if (\n      params.every((param) => {\n        if (typeof param === 'string' && param === tagName) return true;\n        if (typeof param === 'object' && param.has && node.hasAttribute(param.has)) return true;\n        return false;\n      })\n    ) {\n      const style = getComputedStyle(node);\n      if (style.display === 'none' || style.visibility === 'hidden') return false;\n\n      return true;\n    }\n  }\n  return false;\n};\n"],"mappings":"AAAA,SAASA,eAAe,EAAEC,gBAAgB,QAAQ,oBAAgB;AAElE,MAAMC,SAAS,GAAG,CAChB,CAAC,QAAQ,CAAC,EACV,CAAC,QAAQ,CAAC,EACV,CAAC,UAAU,CAAC,EACZ,CAAC,OAAO,CAAC,EACT,CAAC,GAAG,EAAE;EAAEC,GAAG,EAAE;AAAO,CAAC,CAAC,EACtB,CAAC,MAAM,EAAE;EAAEA,GAAG,EAAE;AAAO,CAAC,CAAC,EACzB,CAAC,SAAS,CAAC,EACX,CAAC,QAAQ,CAAC,EACV,CAAC,QAAQ,CAAC,EACV,CAAC,OAAO,CAAC,EACT,CAAC,OAAO,EAAE;EAAEA,GAAG,EAAE;AAAW,CAAC,CAAC,EAC9B,CAAC,OAAO,EAAE;EAAEA,GAAG,EAAE;AAAW,CAAC,CAAC,EAC9B,CAAC;EAAEA,GAAG,EAAE;AAAW,CAAC,CAAC,EACrB,CAAC;EAAEA,GAAG,EAAE;AAAkB,CAAC,CAAC,EAC5B,CAAC;EAAEA,GAAG,EAAE;AAAY,CAAC,CAAC,CACvB;AAED,OAAO,MAAMC,WAAW,GAAIC,IAAU,IAAK;EACzC,IAAI,CAACA,IAAI,EAAE,OAAO,KAAK;EACvB,IAAI,CAACA,IAAI,CAACC,aAAa,EAAE,OAAO,KAAK;EACrC,IAAI,CAACD,IAAI,CAACC,aAAa,CAACC,WAAW,EAAEC,WAAW,EAAE,OAAO,KAAK;EAC9D,IACE,EACEH,IAAI,YAAYA,IAAI,CAACC,aAAa,CAACC,WAAW,CAACC,WAAW,IAC1DH,IAAI,YAAYA,IAAI,CAACC,aAAa,CAACC,WAAW,CAACE,UAAU,CAC1D,EAED,OAAO,KAAK;EACd,IAAIJ,IAAI,CAACK,YAAY,CAAC,UAAU,CAAC,EAAE,OAAO,KAAK;EAC/C,IAAIL,IAAI,CAACM,YAAY,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE,OAAO,KAAK;EACxD,IAAIN,IAAI,CAACM,YAAY,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,OAAO,KAAK;EACtD,IACEN,IAAI,CAACM,YAAY,CAAC,SAAS,CAAC,KAAKV,gBAAgB,IACjDI,IAAI,CAACM,YAAY,CAAC,SAAS,CAAC,KAAKX,eAAe,EAEhD,OAAO,KAAK;EACd,MAAMY,OAAO,GAAGP,IAAI,CAACO,OAAO;EAC5B,KAAK,MAAMC,MAAM,IAAIX,SAAS,EAAE;IAC9B,IACEW,MAAM,CAACC,KAAK,CAAEC,KAAK,IAAK;MACtB,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAIA,KAAK,KAAKH,OAAO,EAAE,OAAO,IAAI;MAC/D,IAAI,OAAOG,KAAK,KAAK,QAAQ,IAAIA,KAAK,CAACZ,GAAG,IAAIE,IAAI,CAACK,YAAY,CAACK,KAAK,CAACZ,GAAG,CAAC,EAAE,OAAO,IAAI;MACvF,OAAO,KAAK;IACd,CAAC,CAAC,EACF;MACA,MAAMa,KAAK,GAAGC,gBAAgB,CAACZ,IAAI,CAAC;MACpC,IAAIW,KAAK,CAACE,OAAO,KAAK,MAAM,IAAIF,KAAK,CAACG,UAAU,KAAK,QAAQ,EAAE,OAAO,KAAK;MAE3E,OAAO,IAAI;IACb;EACF;EACA,OAAO,KAAK;AACd,CAAC","ignoreList":[]}