{"version":3,"file":"scope-tab.mjs","names":[],"sources":["../../src/use-focus-trap/scope-tab.ts"],"sourcesContent":["import { findTabbableDescendants } from './tabbable';\n\nexport function scopeTab(node: HTMLElement, event: KeyboardEvent) {\n  const tabbable = findTabbableDescendants(node);\n  if (!tabbable.length) {\n    event.preventDefault();\n    return;\n  }\n  const finalTabbable = tabbable[event.shiftKey ? 0 : tabbable.length - 1];\n  const root = node.getRootNode() as unknown as DocumentOrShadowRoot;\n  let leavingFinalTabbable = finalTabbable === root.activeElement || node === root.activeElement;\n\n  const activeElement = root.activeElement as Element;\n  const activeElementIsRadio =\n    activeElement.tagName === 'INPUT' && activeElement.getAttribute('type') === 'radio';\n  if (activeElementIsRadio) {\n    const activeRadioGroup = tabbable.filter(\n      (element) =>\n        element.getAttribute('type') === 'radio' &&\n        element.getAttribute('name') === activeElement.getAttribute('name')\n    );\n    leavingFinalTabbable = activeRadioGroup.includes(finalTabbable);\n  }\n\n  if (!leavingFinalTabbable) {\n    return;\n  }\n\n  event.preventDefault();\n\n  const target = tabbable[event.shiftKey ? tabbable.length - 1 : 0];\n\n  if (target) {\n    target.focus();\n  }\n}\n"],"mappings":";;;AAEA,SAAgB,SAAS,MAAmB,OAAsB;CAChE,MAAM,WAAW,wBAAwB,KAAK;AAC9C,KAAI,CAAC,SAAS,QAAQ;AACpB,QAAM,gBAAgB;AACtB;;CAEF,MAAM,gBAAgB,SAAS,MAAM,WAAW,IAAI,SAAS,SAAS;CACtE,MAAM,OAAO,KAAK,aAAa;CAC/B,IAAI,uBAAuB,kBAAkB,KAAK,iBAAiB,SAAS,KAAK;CAEjF,MAAM,gBAAgB,KAAK;AAG3B,KADE,cAAc,YAAY,WAAW,cAAc,aAAa,OAAO,KAAK,QAO5E,wBALyB,SAAS,QAC/B,YACC,QAAQ,aAAa,OAAO,KAAK,WACjC,QAAQ,aAAa,OAAO,KAAK,cAAc,aAAa,OAAO,CACtE,CACuC,SAAS,cAAc;AAGjE,KAAI,CAAC,qBACH;AAGF,OAAM,gBAAgB;CAEtB,MAAM,SAAS,SAAS,MAAM,WAAW,SAAS,SAAS,IAAI;AAE/D,KAAI,OACF,QAAO,OAAO"}