{"version":3,"file":"focustrap-qsrwiup8.js","sources":["../../../app/frontend/entrypoints/marketing/bootstrap/mdb-prefix/util/focustrap.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler';\nimport SelectorEngine from '../dom/selector-engine';\nimport { typeCheckConfig } from './index';\n\nconst Default = {\n trapElement: null, // The element to trap focus inside of\n autofocus: true,\n};\n\nconst DefaultType = {\n trapElement: 'element',\n autofocus: 'boolean',\n};\n\nconst NAME = 'focustrap';\nconst DATA_KEY = 'bs.focustrap';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY}`;\n\nconst TAB_KEY = 'Tab';\nconst TAB_NAV_FORWARD = 'forward';\nconst TAB_NAV_BACKWARD = 'backward';\n\nclass FocusTrap {\n constructor(config) {\n this._config = this._getConfig(config);\n this._isActive = false;\n this._lastTabNavDirection = null;\n }\n\n activate() {\n const { trapElement, autofocus } = this._config;\n\n if (this._isActive) {\n return;\n }\n\n if (autofocus) {\n trapElement.focus();\n }\n\n EventHandler.off(document, EVENT_KEY); // guard against infinite focus loop\n EventHandler.on(document, EVENT_FOCUSIN, (event) => this._handleFocusin(event));\n EventHandler.on(document, EVENT_KEYDOWN_TAB, (event) => this._handleKeydown(event));\n\n this._isActive = true;\n }\n\n deactivate() {\n if (!this._isActive) {\n return;\n }\n\n this._isActive = false;\n EventHandler.off(document, EVENT_KEY);\n }\n\n // Private\n\n _handleFocusin(event) {\n const { target } = event;\n const { trapElement } = this._config;\n\n if (target === document || target === trapElement || trapElement.contains(target)) {\n return;\n }\n\n const elements = SelectorEngine.focusableChildren(trapElement);\n\n if (elements.length === 0) {\n trapElement.focus();\n } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n elements[elements.length - 1].focus();\n } else {\n elements[0].focus();\n }\n }\n\n _handleKeydown(event) {\n if (event.key !== TAB_KEY) {\n return;\n }\n\n this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;\n }\n\n _getConfig(config) {\n config = {\n ...Default,\n ...(typeof config === 'object' ? config : {}),\n };\n typeCheckConfig(NAME, config, DefaultType);\n return config;\n }\n}\n\nexport default FocusTrap;\n"],"names":["Default","DefaultType","NAME","DATA_KEY","EVENT_KEY","EVENT_FOCUSIN","EVENT_KEYDOWN_TAB","TAB_KEY","TAB_NAV_FORWARD","TAB_NAV_BACKWARD","FocusTrap","config","trapElement","autofocus","EventHandler","event","target","elements","SelectorEngine","typeCheckConfig"],"mappings":"0IAWA,MAAMA,EAAU,CACd,YAAa,KACb,UAAW,EACb,EAEMC,EAAc,CAClB,YAAa,UACb,UAAW,SACb,EAEMC,EAAO,YACPC,EAAW,eACXC,EAAY,IAAID,CAAQ,GACxBE,EAAgB,UAAUD,CAAS,GACnCE,EAAoB,cAAcF,CAAS,GAE3CG,EAAU,MACVC,EAAkB,UAClBC,EAAmB,WAEzB,MAAMC,CAAU,CACd,YAAYC,EAAQ,CAClB,KAAK,QAAU,KAAK,WAAWA,CAAM,EACrC,KAAK,UAAY,GACjB,KAAK,qBAAuB,IAC7B,CAED,UAAW,CACT,KAAM,CAAE,YAAAC,EAAa,UAAAC,GAAc,KAAK,QAEpC,KAAK,YAILA,GACFD,EAAY,MAAK,EAGnBE,EAAa,IAAI,SAAUV,CAAS,EACpCU,EAAa,GAAG,SAAUT,EAAgBU,GAAU,KAAK,eAAeA,CAAK,CAAC,EAC9ED,EAAa,GAAG,SAAUR,EAAoBS,GAAU,KAAK,eAAeA,CAAK,CAAC,EAElF,KAAK,UAAY,GAClB,CAED,YAAa,CACN,KAAK,YAIV,KAAK,UAAY,GACjBD,EAAa,IAAI,SAAUV,CAAS,EACrC,CAID,eAAeW,EAAO,CACpB,KAAM,CAAE,OAAAC,CAAQ,EAAGD,EACb,CAAE,YAAAH,CAAW,EAAK,KAAK,QAE7B,GAAII,IAAW,UAAYA,IAAWJ,GAAeA,EAAY,SAASI,CAAM,EAC9E,OAGF,MAAMC,EAAWC,EAAe,kBAAkBN,CAAW,EAEzDK,EAAS,SAAW,EACtBL,EAAY,MAAK,EACR,KAAK,uBAAyBH,EACvCQ,EAASA,EAAS,OAAS,CAAC,EAAE,MAAK,EAEnCA,EAAS,CAAC,EAAE,OAEf,CAED,eAAeF,EAAO,CAChBA,EAAM,MAAQR,IAIlB,KAAK,qBAAuBQ,EAAM,SAAWN,EAAmBD,EACjE,CAED,WAAWG,EAAQ,CACjB,OAAAA,EAAS,CACP,GAAGX,EACH,GAAI,OAAOW,GAAW,SAAWA,EAAS,CAAE,CAClD,EACIQ,EAAgBjB,EAAMS,EAAQV,CAAW,EAClCU,CACR,CACH"}