{"version":3,"names":["isElement","isHTMLElement","activeElement","contains","getTarget","isTestEnv","FOCUSABLE_ATTRIBUTE","TYPEABLE_SELECTOR","isTargetInsideEnabledTrigger","target","triggerElements","targetElement","hasElement","hasAttribute","trigger","entries","isEventTargetWithin","event","node","composedPath","includes","eventAgain","isRootElement","element","matches","isTypeableElement","isInteractiveElement","closest","isTypeableCombobox","getAttribute","matchesFocusVisible","_e","getFloatingFocusElement","floatingElement","querySelector"],"sources":["element.ts"],"sourcesContent":["import { isElement, isHTMLElement } from \"@floating-ui/utils/dom\";\nimport { activeElement } from \"../../dom/active-element\";\nimport { contains } from \"../../dom/contains\";\nimport { getTarget } from \"../../dom/get-target\";\nimport { isTestEnv } from \"../detect-browser\";\nimport type { PopupTriggerMap } from \"../popup-trigger-map\";\nimport { FOCUSABLE_ATTRIBUTE, TYPEABLE_SELECTOR } from \"./constants\";\n\nexport { activeElement, contains, getTarget };\n\nexport function isTargetInsideEnabledTrigger(\n\ttarget: EventTarget | null,\n\ttriggerElements: PopupTriggerMap,\n): boolean {\n\tif (!isElement(target)) {\n\t\treturn false;\n\t}\n\n\tconst targetElement = target as Element;\n\n\tif (triggerElements.hasElement(targetElement)) {\n\t\treturn !targetElement.hasAttribute(\"data-trigger-disabled\");\n\t}\n\n\tfor (const [, trigger] of triggerElements.entries()) {\n\t\tif (contains(trigger, targetElement)) {\n\t\t\treturn !trigger.hasAttribute(\"data-trigger-disabled\");\n\t\t}\n\t}\n\n\treturn false;\n}\n\nexport function isEventTargetWithin(\n\tevent: Event,\n\tnode: Node | null | undefined,\n): boolean {\n\tif (node == null) {\n\t\treturn false;\n\t}\n\tif (\"composedPath\" in event) {\n\t\treturn event.composedPath().includes(node);\n\t}\n\t// TS narrows `event` to `never` because it assumes every browser has\n\t// `composedPath`, but shadow-DOM-less environments don't.\n\tconst eventAgain = event as Event;\n\treturn eventAgain.target != null && node.contains(eventAgain.target as Node);\n}\n\nexport function isRootElement(element: Element): boolean {\n\treturn element.matches(\"html,body\");\n}\n\nexport function isTypeableElement(element: unknown): boolean {\n\treturn isHTMLElement(element) && element.matches(TYPEABLE_SELECTOR);\n}\n\nexport function isInteractiveElement(element: Element | null): boolean {\n\treturn (\n\t\telement?.closest(\n\t\t\t`button,a[href],[role=\"button\"],select,[tabindex]:not([tabindex=\"-1\"]),${TYPEABLE_SELECTOR}`,\n\t\t) != null\n\t);\n}\n\nexport function isTypeableCombobox(element: Element | null): boolean {\n\tif (!element) {\n\t\treturn false;\n\t}\n\treturn (\n\t\telement.getAttribute(\"role\") === \"combobox\" && isTypeableElement(element)\n\t);\n}\n\n/**\n * `:focus-visible` is unreliable in happy-dom / jsdom (the test DOMs don't\n * distinguish keyboard vs mouse focus), so we short-circuit to `true` there.\n * Matches the React source's `isJSDOM` gate but broadened to cover happy-dom\n * too — see `detect-browser.ts`.\n */\nexport function matchesFocusVisible(element: Element | null): boolean {\n\tif (!element || isTestEnv) {\n\t\treturn true;\n\t}\n\ttry {\n\t\treturn element.matches(\":focus-visible\");\n\t} catch (_e) {\n\t\treturn true;\n\t}\n}\n\nexport function getFloatingFocusElement(\n\tfloatingElement: HTMLElement | null | undefined,\n): HTMLElement | null {\n\tif (!floatingElement) {\n\t\treturn null;\n\t}\n\t// Try to find the element that has `{...getFloatingProps()}` spread on\n\t// it. This indicates the floating element is acting as a positioning\n\t// wrapper, so focus should be managed on the inner child with the event\n\t// handlers and aria props.\n\treturn floatingElement.hasAttribute(FOCUSABLE_ATTRIBUTE)\n\t\t? floatingElement\n\t\t: floatingElement.querySelector(`[${FOCUSABLE_ATTRIBUTE}]`) ||\n\t\t\t\tfloatingElement;\n}\n"],"mappings":"AAAA,SAASA,SAAS,EAAEC,aAAa,QAAQ,wBAAwB;AACjE,SAASC,aAAa,QAAQ,0BAA0B;AACxD,SAASC,QAAQ,QAAQ,oBAAoB;AAC7C,SAASC,SAAS,QAAQ,sBAAsB;AAChD,SAASC,SAAS,QAAQ,mBAAmB;AAE7C,SAASC,mBAAmB,EAAEC,iBAAiB,QAAQ,aAAa;AAEpE,SAASL,aAAa,EAAEC,QAAQ,EAAEC,SAAS;AAE3C,OAAO,SAASI,4BAA4BA,CAC3CC,MAA0B,EAC1BC,eAAgC,EACtB;EACV,IAAI,CAACV,SAAS,CAACS,MAAM,CAAC,EAAE;IACvB,OAAO,KAAK;EACb;EAEA,MAAME,aAAa,GAAGF,MAAiB;EAEvC,IAAIC,eAAe,CAACE,UAAU,CAACD,aAAa,CAAC,EAAE;IAC9C,OAAO,CAACA,aAAa,CAACE,YAAY,CAAC,uBAAuB,CAAC;EAC5D;EAEA,KAAK,MAAM,GAAGC,OAAO,CAAC,IAAIJ,eAAe,CAACK,OAAO,CAAC,CAAC,EAAE;IACpD,IAAIZ,QAAQ,CAACW,OAAO,EAAEH,aAAa,CAAC,EAAE;MACrC,OAAO,CAACG,OAAO,CAACD,YAAY,CAAC,uBAAuB,CAAC;IACtD;EACD;EAEA,OAAO,KAAK;AACb;AAEA,OAAO,SAASG,mBAAmBA,CAClCC,KAAY,EACZC,IAA6B,EACnB;EACV,IAAIA,IAAI,IAAI,IAAI,EAAE;IACjB,OAAO,KAAK;EACb;EACA,IAAI,cAAc,IAAID,KAAK,EAAE;IAC5B,OAAOA,KAAK,CAACE,YAAY,CAAC,CAAC,CAACC,QAAQ,CAACF,IAAI,CAAC;EAC3C;EACA;EACA;EACA,MAAMG,UAAU,GAAGJ,KAAc;EACjC,OAAOI,UAAU,CAACZ,MAAM,IAAI,IAAI,IAAIS,IAAI,CAACf,QAAQ,CAACkB,UAAU,CAACZ,MAAc,CAAC;AAC7E;AAEA,OAAO,SAASa,aAAaA,CAACC,OAAgB,EAAW;EACxD,OAAOA,OAAO,CAACC,OAAO,CAAC,WAAW,CAAC;AACpC;AAEA,OAAO,SAASC,iBAAiBA,CAACF,OAAgB,EAAW;EAC5D,OAAOtB,aAAa,CAACsB,OAAO,CAAC,IAAIA,OAAO,CAACC,OAAO,CAACjB,iBAAiB,CAAC;AACpE;AAEA,OAAO,SAASmB,oBAAoBA,CAACH,OAAuB,EAAW;EACtE,OACCA,OAAO,EAAEI,OAAO,CACf,yEAAyEpB,iBAAiB,EAC3F,CAAC,IAAI,IAAI;AAEX;AAEA,OAAO,SAASqB,kBAAkBA,CAACL,OAAuB,EAAW;EACpE,IAAI,CAACA,OAAO,EAAE;IACb,OAAO,KAAK;EACb;EACA,OACCA,OAAO,CAACM,YAAY,CAAC,MAAM,CAAC,KAAK,UAAU,IAAIJ,iBAAiB,CAACF,OAAO,CAAC;AAE3E;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASO,mBAAmBA,CAACP,OAAuB,EAAW;EACrE,IAAI,CAACA,OAAO,IAAIlB,SAAS,EAAE;IAC1B,OAAO,IAAI;EACZ;EACA,IAAI;IACH,OAAOkB,OAAO,CAACC,OAAO,CAAC,gBAAgB,CAAC;EACzC,CAAC,CAAC,OAAOO,EAAE,EAAE;IACZ,OAAO,IAAI;EACZ;AACD;AAEA,OAAO,SAASC,uBAAuBA,CACtCC,eAA+C,EAC1B;EACrB,IAAI,CAACA,eAAe,EAAE;IACrB,OAAO,IAAI;EACZ;EACA;EACA;EACA;EACA;EACA,OAAOA,eAAe,CAACpB,YAAY,CAACP,mBAAmB,CAAC,GACrD2B,eAAe,GACfA,eAAe,CAACC,aAAa,CAAC,IAAI5B,mBAAmB,GAAG,CAAC,IACzD2B,eAAe;AACnB","ignoreList":[]}