{"version":3,"names":["getNodeName","isHTMLElement","isShadowRoot","ownerDocument","isElementVisible","activeElement","contains","CANDIDATE_SELECTOR","getParentElement","element","assignedSlot","parentElement","rootNode","getRootNode","host","getDetailsSummary","details","child","Array","from","children","isWithinOpenDetailsSummary","summary","isFocusableCandidate","nodeName","matches","type","isFocusableElement","isConnected","current","isSlot","hasAttribute","open","getTabIndex","tabIndex","isContentEditable","getNamedRadioInput","input","name","isTabbableRadio","candidates","checkedRadio","find","candidate","radio","form","checked","getComposedChildren","container","assignedElements","flatten","length","shadowRoot","appendCandidates","list","forEach","push","appendMatchingElements","selector","isTabbable","focusable","filter","tabbable","getTabbableIn","dir","len","undefined","active","index","indexOf","nextIndex","getNextTabbable","referenceElement","body","getPreviousTabbable","getTabbableNearElement","elementCount","getTabbableAfterElement","getTabbableBeforeElement","isOutsideEvent","event","containerElement","currentTarget","relatedTarget","disableFocusInside","tabbableElements","dataset","tabindex","getAttribute","setAttribute","enableFocusInside","elements","removeAttribute"],"sources":["tabbable.ts"],"sourcesContent":["import {\n\tgetNodeName,\n\tisHTMLElement,\n\tisShadowRoot,\n} from \"@floating-ui/utils/dom\";\n\nimport { ownerDocument } from \"../../dom/owner-document\";\nimport { isElementVisible } from \"./composite\";\nimport { activeElement, contains } from \"./element\";\n\n/**\n * Tabbable / focusable detection. Ported 1:1 from the React source.\n *\n * The `isOutsideEvent` signature loses `React.FocusEvent` — Solid's\n * handlers see the native `FocusEvent` directly, so callers pass that\n * through as-is.\n */\n\nexport type FocusableElement = HTMLElement | SVGElement;\n\nconst CANDIDATE_SELECTOR =\n\t'a[href],button,input,select,textarea,summary,details,iframe,object,embed,[tabindex],[contenteditable]:not([contenteditable=\"false\"]),audio[controls],video[controls]';\n\nfunction getParentElement(element: Element): Element | null {\n\tconst assignedSlot = (\n\t\telement as Element & {\n\t\t\tassignedSlot?: HTMLSlotElement | null | undefined;\n\t\t}\n\t).assignedSlot;\n\tif (assignedSlot) {\n\t\treturn assignedSlot;\n\t}\n\n\tif (element.parentElement) {\n\t\treturn element.parentElement;\n\t}\n\n\tconst rootNode = element.getRootNode();\n\treturn isShadowRoot(rootNode) ? rootNode.host : null;\n}\n\nfunction getDetailsSummary(details: Element): Element | null {\n\tfor (const child of Array.from(details.children)) {\n\t\tif (getNodeName(child) === \"summary\") {\n\t\t\treturn child;\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction isWithinOpenDetailsSummary(\n\telement: Element,\n\tdetails: Element,\n): boolean {\n\tconst summary = getDetailsSummary(details);\n\treturn !!summary && (element === summary || contains(summary, element));\n}\n\nfunction isFocusableCandidate(\n\telement: Element | null,\n): element is FocusableElement {\n\tconst nodeName = element ? getNodeName(element) : \"\";\n\n\t// Type predicates narrow by explicit `!= null`; optional-chain collapse\n\t// would erase that narrowing.\n\treturn (\n\t\t// biome-ignore lint/complexity/useOptionalChain: needed for type-predicate narrowing.\n\t\telement != null &&\n\t\telement.matches(CANDIDATE_SELECTOR) &&\n\t\t(nodeName !== \"summary\" ||\n\t\t\t(element.parentElement != null &&\n\t\t\t\tgetNodeName(element.parentElement) === \"details\" &&\n\t\t\t\tgetDetailsSummary(element.parentElement) === element)) &&\n\t\t(nodeName !== \"details\" || getDetailsSummary(element) == null) &&\n\t\t(nodeName !== \"input\" || (element as HTMLInputElement).type !== \"hidden\")\n\t);\n}\n\nfunction isFocusableElement(\n\telement: Element | null,\n): element is FocusableElement {\n\tif (\n\t\t!isFocusableCandidate(element) ||\n\t\t!element.isConnected ||\n\t\telement.matches(\":disabled\")\n\t) {\n\t\treturn false;\n\t}\n\n\tfor (\n\t\tlet current: Element | null = element;\n\t\tcurrent;\n\t\tcurrent = getParentElement(current)\n\t) {\n\t\tconst isSlot = getNodeName(current) === \"slot\";\n\n\t\tif (current.hasAttribute(\"inert\")) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (\n\t\t\t(current !== element &&\n\t\t\t\tgetNodeName(current) === \"details\" &&\n\t\t\t\t!(current as HTMLDetailsElement).open &&\n\t\t\t\t!isWithinOpenDetailsSummary(element, current)) ||\n\t\t\tcurrent.hasAttribute(\"hidden\") ||\n\t\t\t(!isSlot && !isElementVisible(current))\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nfunction getTabIndex(element: FocusableElement): number {\n\tconst tabIndex = element.tabIndex;\n\tif (tabIndex < 0) {\n\t\tconst nodeName = getNodeName(element);\n\t\tif (\n\t\t\tnodeName === \"details\" ||\n\t\t\tnodeName === \"audio\" ||\n\t\t\tnodeName === \"video\" ||\n\t\t\t(isHTMLElement(element) && element.isContentEditable)\n\t\t) {\n\t\t\treturn 0;\n\t\t}\n\t}\n\treturn tabIndex;\n}\n\nfunction getNamedRadioInput(\n\telement: FocusableElement,\n): HTMLInputElement | null {\n\tif (getNodeName(element) !== \"input\") {\n\t\treturn null;\n\t}\n\tconst input = element as HTMLInputElement;\n\treturn input.type === \"radio\" && input.name !== \"\" ? input : null;\n}\n\nfunction isTabbableRadio(\n\telement: FocusableElement,\n\tcandidates: FocusableElement[],\n): boolean {\n\tconst input = getNamedRadioInput(element);\n\tif (!input) {\n\t\treturn true;\n\t}\n\n\tconst checkedRadio = candidates.find((candidate) => {\n\t\tconst radio = getNamedRadioInput(candidate);\n\t\treturn (\n\t\t\tradio?.name === input.name && radio.form === input.form && radio.checked\n\t\t);\n\t});\n\n\tif (checkedRadio) {\n\t\treturn checkedRadio === input;\n\t}\n\n\treturn (\n\t\tcandidates.find((candidate) => {\n\t\t\tconst radio = getNamedRadioInput(candidate);\n\t\t\treturn radio?.name === input.name && radio.form === input.form;\n\t\t}) === input\n\t);\n}\n\nfunction getComposedChildren(container: ParentNode): Element[] {\n\tif (isHTMLElement(container) && getNodeName(container) === \"slot\") {\n\t\tconst assignedElements = (container as HTMLSlotElement).assignedElements({\n\t\t\tflatten: true,\n\t\t});\n\t\tif (assignedElements.length > 0) {\n\t\t\treturn assignedElements;\n\t\t}\n\t}\n\n\tif (isHTMLElement(container) && container.shadowRoot) {\n\t\treturn Array.from(container.shadowRoot.children);\n\t}\n\n\treturn Array.from(container.children);\n}\n\nfunction appendCandidates(container: ParentNode, list: FocusableElement[]) {\n\tgetComposedChildren(container).forEach((child) => {\n\t\tif (isFocusableCandidate(child)) {\n\t\t\tlist.push(child);\n\t\t}\n\t\tappendCandidates(child, list);\n\t});\n}\n\nfunction appendMatchingElements(\n\tcontainer: ParentNode,\n\tselector: string,\n\tlist: HTMLElement[],\n) {\n\tgetComposedChildren(container).forEach((child) => {\n\t\tif (isHTMLElement(child) && child.matches(selector)) {\n\t\t\tlist.push(child);\n\t\t}\n\t\tappendMatchingElements(child, selector, list);\n\t});\n}\n\nexport function isTabbable(element: Element | null): boolean {\n\treturn isFocusableElement(element) && getTabIndex(element) >= 0;\n}\n\nexport function focusable(container: Element): FocusableElement[] {\n\tconst candidates: FocusableElement[] = [];\n\tappendCandidates(container, candidates);\n\treturn candidates.filter(isFocusableElement);\n}\n\nexport function tabbable(container: Element): FocusableElement[] {\n\tconst candidates = focusable(container);\n\treturn candidates.filter(\n\t\t(element) =>\n\t\t\tgetTabIndex(element) >= 0 && isTabbableRadio(element, candidates),\n\t);\n}\n\nfunction getTabbableIn(\n\tcontainer: HTMLElement,\n\tdir: 1 | -1,\n): FocusableElement | undefined {\n\tconst list = tabbable(container);\n\tconst len = list.length;\n\tif (len === 0) {\n\t\treturn undefined;\n\t}\n\n\tconst active = activeElement(ownerDocument(container)) as FocusableElement;\n\tconst index = list.indexOf(active);\n\tconst nextIndex = index === -1 ? (dir === 1 ? 0 : len - 1) : index + dir;\n\n\treturn list[nextIndex];\n}\n\nexport function getNextTabbable(\n\treferenceElement: Element | null,\n): FocusableElement | null {\n\treturn (\n\t\tgetTabbableIn(ownerDocument(referenceElement).body, 1) ||\n\t\t(referenceElement as FocusableElement)\n\t);\n}\n\nexport function getPreviousTabbable(\n\treferenceElement: Element | null,\n): FocusableElement | null {\n\treturn (\n\t\tgetTabbableIn(ownerDocument(referenceElement).body, -1) ||\n\t\t(referenceElement as FocusableElement)\n\t);\n}\n\nfunction getTabbableNearElement(\n\treferenceElement: Element | null,\n\tdir: 1 | -1,\n): FocusableElement | null {\n\tif (!referenceElement) {\n\t\treturn null;\n\t}\n\tconst list = tabbable(ownerDocument(referenceElement).body);\n\tconst elementCount = list.length;\n\tif (elementCount === 0) {\n\t\treturn null;\n\t}\n\tconst index = list.indexOf(referenceElement as FocusableElement);\n\tif (index === -1) {\n\t\treturn null;\n\t}\n\tconst nextIndex = (index + dir + elementCount) % elementCount;\n\treturn list[nextIndex] ?? null;\n}\n\nexport function getTabbableAfterElement(\n\treferenceElement: Element | null,\n): FocusableElement | null {\n\treturn getTabbableNearElement(referenceElement, 1);\n}\n\nexport function getTabbableBeforeElement(\n\treferenceElement: Element | null,\n): FocusableElement | null {\n\treturn getTabbableNearElement(referenceElement, -1);\n}\n\nexport function isOutsideEvent(\n\tevent: FocusEvent,\n\tcontainer?: Element,\n): boolean {\n\tconst containerElement = (container || event.currentTarget) as Element;\n\tconst relatedTarget = event.relatedTarget as HTMLElement | null;\n\treturn !relatedTarget || !contains(containerElement, relatedTarget);\n}\n\nexport function disableFocusInside(container: HTMLElement): void {\n\tconst tabbableElements = tabbable(container);\n\ttabbableElements.forEach((element) => {\n\t\telement.dataset.tabindex = element.getAttribute(\"tabindex\") || \"\";\n\t\telement.setAttribute(\"tabindex\", \"-1\");\n\t});\n}\n\nexport function enableFocusInside(container: HTMLElement): void {\n\tconst elements: HTMLElement[] = [];\n\tappendMatchingElements(container, \"[data-tabindex]\", elements);\n\telements.forEach((element) => {\n\t\tconst tabindex = element.dataset.tabindex;\n\t\tdelete element.dataset.tabindex;\n\t\tif (tabindex) {\n\t\t\telement.setAttribute(\"tabindex\", tabindex);\n\t\t} else {\n\t\t\telement.removeAttribute(\"tabindex\");\n\t\t}\n\t});\n}\n"],"mappings":"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","ignoreList":[]}