{"version":3,"sources":["jsdelivr-header.js","/npm/easy-toggle-state@1.16.0/src/main/main.js"],"names":[],"mappings":"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","file":"/npm/easy-toggle-state@1.16.0/src/main/main.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.37.0.\n * Original file: /npm/easy-toggle-state@1.16.0/src/main/main.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","import {\n\tARROWS,\n\tCLASS,\n\tCLASS_TARGET,\n\tCLASS_TRIGGER,\n\tESCAPE,\n\tEVENT,\n\tGROUP,\n\tIS_ACTIVE,\n\tMODAL,\n\tOUTSIDE,\n\tOUTSIDE_EVENT,\n\tRADIO_GROUP,\n\tTARGET,\n\tTARGET_ALL,\n\tTARGET_NEXT,\n\tTARGET_PARENT,\n\tTARGET_PREVIOUS,\n\tTARGET_SELF,\n\tTARGET_STATE,\n\tTRIGGER_OFF\n} from \"../constants/constants\";\nimport { TOGGLE_AFTER, TOGGLE_BEFORE } from \"../constants/events\";\nimport $$ from \"../helpers/retrieve-query-selector-all\";\nimport dispatchHook from \"../helpers/dispatch-hook\";\nimport manageAria from \"../helpers/manage-aria\";\nimport namespacedProp from \"../helpers/retrieve-namespaced-property\";\nimport retrieveClassList from \"../helpers/retrieve-class-list\";\nimport retrieveGroupActiveElement from \"../helpers/retrieve-group-active-element\";\nimport retrieveTargets from \"../helpers/retrieve-targets\";\nimport toggleClassList from \"../helpers/toggle-class-list\";\n\n/** Need to use a map for some event handler to ensure to have the same signature */\nconst HANDLER_MAP = {};\n\n/**\n * Manage event listener on document\n * @param {element} element - The element on which test if there event type specified\n * @returns {undefined}\n */\nconst addEventListenerOnDocument = element => document.addEventListener(\n\t\telement.getAttribute(OUTSIDE_EVENT) || element.getAttribute(EVENT) || \"click\",\n\t\tdocumentEventHandler,\n\t\tfalse\n\t);\n\n/**\n * Toggle off all elements width 'data-toggle-outside' attribute\n * when reproducing specified or click event outside itself or its targets.\n * @param {event} event - Event triggered on document\n * @returns {undefined}\n */\nconst documentEventHandler = event => {\n\tconst eTarget = event.target,\n\t\teType = event.type;\n\tlet insideTarget = false;\n\n\t$$(OUTSIDE)\n\t\t.filter(element => element.getAttribute(OUTSIDE_EVENT) === eType ||\n\t\t\t\t(element.getAttribute(EVENT) === eType && !element.hasAttribute(OUTSIDE_EVENT)) ||\n\t\t\t\t(eType === \"click\" && !element.hasAttribute(EVENT) && !element.hasAttribute(OUTSIDE_EVENT)))\n\t\t.forEach(element => {\n\t\t\tconst e = eTarget.closest(`[${TARGET_STATE}=\"true\"]`);\n\t\t\tif (e && e[namespacedProp('trigger')] === element) {\n\t\t\t\tinsideTarget = true;\n\t\t\t}\n\t\t\tif (!insideTarget && element !== eTarget && !element.contains(eTarget) && element[namespacedProp('isActive')]) {\n\t\t\t\t(element.hasAttribute(GROUP) || element.hasAttribute(RADIO_GROUP) ? manageGroup : manageToggle)(element);\n\t\t\t}\n\t\t});\n\n\tif (!insideTarget) {\n\t\tdocument.removeEventListener(eType, documentEventHandler, false);\n\t}\n\n\t// eTarget may be an element inside a trigger\n\tconst newTarget = eTarget.closest(`[${CLASS}][${OUTSIDE}],[${CLASS_TRIGGER}][${OUTSIDE}],[${CLASS_TARGET}][${OUTSIDE}]`);\n\tif (newTarget && newTarget[namespacedProp('isActive')]) {\n\t\taddEventListenerOnDocument(eTarget);\n\t}\n};\n\n/**\n * Manage click on elements with 'data-trigger-off' attribute.\n * @param {event} event - Event triggered on element with 'trigger-off' attribute\n * @returns {undefined}\n */\nconst triggerOffHandler = event => manageToggle(event.currentTarget[namespacedProp('target')]);\n\n/**\n * Manage event ouside trigger or target elements.\n * @param {node} element - The element to toggle when 'click' or custom event is triggered on document\n * @returns {undefined}\n */\nconst manageTriggerOutside = element => {\n\tif (!element.hasAttribute(OUTSIDE)) {\n\t\treturn;\n\t}\n\n\tif (element.hasAttribute(RADIO_GROUP)) {\n\t\treturn console.warn(`You can't use '${OUTSIDE}' on a radio grouped trigger`);\n\t}\n\n\tif (element[namespacedProp('isActive')]) {\n\t\treturn addEventListenerOnDocument(element);\n\t}\n};\n\n/**\n * Manage elements inside a target element which have 'data-toggle-trigger-off' attribute.\n * @param {node} targetElement - An element targeted by the trigger element\n * @param {node} triggerElement - The trigger element\n * @returns {undefined}\n */\nconst manageTriggerOff = (targetElement, triggerElement) => {\n\tconst triggerOffList = $$(TRIGGER_OFF, targetElement).filter(triggerOff => !triggerOff.getAttribute(TRIGGER_OFF) || targetElement.matches(triggerOff.getAttribute(TRIGGER_OFF)));\n\n\tif (triggerOffList.length === 0) {\n\t\treturn;\n\t}\n\n\tif (triggerElement[namespacedProp('isActive')]) {\n\t\treturn triggerOffList.forEach(triggerOff => {\n\t\t\t// Do not override if another reference is already set\n\t\t\tif (!triggerOff[namespacedProp('target')]) {\n\t\t\t\ttriggerOff[namespacedProp('target')] = triggerElement;\n\t\t\t\ttriggerOff.addEventListener(\"click\", triggerOffHandler, false);\n\t\t\t}\n\t\t});\n\t}\n\n\ttriggerOffList.forEach(triggerOff => {\n\t\t// Remove reference only if it equals current trigger\n\t\tif (triggerOff[namespacedProp('target')] === triggerElement) {\n\t\t\ttriggerOff[namespacedProp('target')] = null;\n\t\t\ttriggerOff.removeEventListener(\"click\", triggerOffHandler, false);\n\t\t}\n\t});\n\treturn triggerElement.focus();\n};\n\n/**\n * Manage focus trap inside a target element:\n * When Tab key is pressed, if focus is outside of the container, give focus on first item ;\n * when Tab key is pressed, if focus is on last item, give focus on first one ;\n * when Shift + Tab keys are pressed, if focus is on first item, give focus on last one.\n * @param {node} targetElement - The focus trap container\n * @returns {undefined}\n */\nconst focusTrapHandler = targetElement => event => {\n\tconst focusablesList = [...targetElement.querySelectorAll(\"a[href], area[href], input:not([type='hidden']):not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]\")];\n\n\tif (!focusablesList.length || event.key !== \"Tab\") {\n\t\treturn;\n\t}\n\n\tconst currentItem = event.target,\n\t\tfirstItem = focusablesList[0],\n\t\tlastItem = focusablesList[focusablesList.length - 1];\n\n\t// Outside focus trap container: focus on first\n\tif (focusablesList.indexOf(currentItem) === -1) {\n\t\tevent.preventDefault();\n\t\treturn firstItem.focus();\n\t}\n\n\tif (event.shiftKey && currentItem === firstItem) {\n\t\tevent.preventDefault();\n\t\treturn lastItem.focus();\n\t}\n\n\tif (!event.shiftKey && currentItem === lastItem) {\n\t\tevent.preventDefault();\n\t\treturn firstItem.focus();\n\t}\n};\n\n/**\n * Manage attributes and events of targets elements.\n * @param {node} triggerElement - The trigger element\n * @param {array} classListForTarget - The class list to toggle\n * @param {boolean} onLoadActive - A flag for active by default\n * @returns {undefined}\n */\nconst manageTargets = (triggerElement, classListForTarget, onLoadActive) => retrieveTargets(triggerElement).forEach(targetElement => {\n\t\tdispatchHook(targetElement, TOGGLE_BEFORE);\n\n\t\ttargetElement[namespacedProp('isActive')] = !targetElement[namespacedProp('isActive')];\n\t\tmanageAria(targetElement);\n\n\t\tif (onLoadActive) {\n\t\t\ttargetElement.classList.add(...classListForTarget);\n\t\t} else {\n\t\t\ttoggleClassList(targetElement, classListForTarget);\n\t\t}\n\n\t\tif (triggerElement.hasAttribute(OUTSIDE)) {\n\t\t\ttargetElement.setAttribute(TARGET_STATE, triggerElement[namespacedProp('isActive')]);\n\t\t\ttargetElement[namespacedProp('trigger')] = triggerElement;\n\t\t}\n\n\t\tif (triggerElement.hasAttribute(MODAL)) {\n\t\t\tif (targetElement[namespacedProp('isActive')]) {\n\t\t\t\tHANDLER_MAP[targetElement] = focusTrapHandler(targetElement);\n\t\t\t\tdocument.addEventListener(\"keydown\", HANDLER_MAP[targetElement], false);\n\t\t\t} else {\n\t\t\t\tdocument.removeEventListener(\"keydown\", HANDLER_MAP[targetElement], false);\n\t\t\t\tdelete HANDLER_MAP[targetElement];\n\t\t\t}\n\t\t}\n\n\t\tdispatchHook(targetElement, TOGGLE_AFTER);\n\n\t\tmanageTriggerOff(targetElement, triggerElement);\n\t});\n\n/**\n * Toggle class and aria on trigger and target elements.\n * @param {node} element - The element to toggle state and attributes\n * @returns {undefined}\n */\nconst manageToggle = element => {\n\tdispatchHook(element, TOGGLE_BEFORE);\n\n\tconst classList = retrieveClassList(element);\n\ttoggleClassList(element, classList.trigger);\n\telement[namespacedProp('isActive')] = !element[namespacedProp('isActive')];\n\tmanageAria(element);\n\n\tdispatchHook(element, TOGGLE_AFTER);\n\n\tmanageTargets(element, classList.target, false);\n\treturn manageTriggerOutside(element);\n};\n\n/**\n * Toggle elements of a same group.\n * @param {node} element - The element to test if it's in a group\n * @returns {undefined}\n */\nconst manageGroup = element => {\n\tconst groupActiveElements = retrieveGroupActiveElement(element);\n\tif (groupActiveElements.length === 0) {\n\t\treturn manageToggle(element);\n\t}\n\n\tif (groupActiveElements.indexOf(element) === -1) {\n\t\tgroupActiveElements.forEach(manageToggle);\n\t\treturn manageToggle(element);\n\t}\n\n\tif (groupActiveElements.indexOf(element) !== -1 && !element.hasAttribute(RADIO_GROUP)) {\n\t\treturn manageToggle(element);\n\t}\n};\n\n/**\n * Check if a trigger element is active.\n * @param {node} element - A trigger element\n * @returns {boolean} - The active state of the trigger element\n */\nexport const isActive = element => !!element[namespacedProp('isActive')];\n\n/**\n * Unbind toggling management from an element list.\n * @param {node} elementList - An element, or element list, on which remove the toggling management\n * @returns {node} - Same element, or element list\n */\nexport const unbind = elementList => {\n\t(elementList[Symbol.iterator] ? [...elementList] : [elementList]).forEach(element => {\n\t\telement[namespacedProp('unbind')] && element[namespacedProp('unbind')]();\n\t});\n\treturn elementList;\n};\n\n/**\n * Unbind toggling management from all initialized elements in the page.\n * @returns {nodeList} - A list of unbinded triggers\n */\nexport const unbindAll = () => unbind($$().filter(trigger => trigger[namespacedProp('isInitialized')]));\n\n/**\n * Initialization.\n * @returns {array} - An array of initialized triggers\n */\nexport default () => {\n\n\t/**\n\t * Warn if there some CLASS_TARGET triggers with no specified target.\n\t */\n\t[...document.querySelectorAll(`[${CLASS_TARGET}]:not([${TARGET}]):not([${TARGET_ALL}]):not([${TARGET_NEXT}]):not([${TARGET_PREVIOUS}]):not([${TARGET_PARENT}]):not([${TARGET_SELF}])`)]\n\t\t.forEach(element => {\n\t\t\tconsole.warn(`This trigger has the attribute '${CLASS_TARGET}', but no specified target\\n`, element);\n\t\t});\n\n\t/**\n\t * Active by default management.\n\t */\n\t$$(IS_ACTIVE)\n\t\t.filter(trigger => !trigger[namespacedProp('isDefaultInitialized')])\n\t\t.forEach(trigger => {\n\t\t\tif ((trigger.hasAttribute(GROUP) || trigger.hasAttribute(RADIO_GROUP)) && retrieveGroupActiveElement(trigger).length > 0) {\n\t\t\t\treturn console.warn(`Toggle group '${trigger.getAttribute(GROUP) ||\n\t\t\t\t\t\ttrigger.getAttribute(RADIO_GROUP)}' must not have more than one trigger with '${IS_ACTIVE}'`);\n\t\t\t}\n\t\t\tmanageToggle(trigger);\n\t\t\ttrigger[namespacedProp('isDefaultInitialized')] = true;\n\t\t});\n\n\t/**\n\t * Set specified or click event on each trigger element.\n\t */\n\tconst triggerList = $$().filter(trigger => !trigger[namespacedProp('isInitialized')]);\n\ttriggerList.forEach(trigger => {\n\t\tconst handler = event => {\n\t\t\tevent.preventDefault();\n\t\t\t(trigger.hasAttribute(GROUP) || trigger.hasAttribute(RADIO_GROUP) ? manageGroup : manageToggle)(trigger);\n\t\t}\n\t\tconst eventName = trigger.getAttribute(EVENT) || \"click\";\n\t\ttrigger.addEventListener(eventName, handler, false);\n\t\ttrigger[namespacedProp('unbind')] = () => {\n\t\t\ttrigger.removeEventListener(eventName, handler, false);\n\t\t\ttrigger[namespacedProp('isInitialized')] = false;\n\t\t}\n\t\ttrigger[namespacedProp('isInitialized')] = true;\n\t});\n\n\t/**\n\t * Escape key management.\n\t */\n\tif ($$(ESCAPE).length > 0 && !document[namespacedProp('isEscapeKeyInitialized')]) {\n\t\tdocument.addEventListener(\n\t\t\t\"keydown\",\n\t\t\tevent => {\n\t\t\t\tif (!(event.key === \"Escape\") && !(event.key === \"Esc\")) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t$$(ESCAPE).forEach(trigger => {\n\t\t\t\t\tif (!trigger[namespacedProp('isActive')]) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (trigger.hasAttribute(RADIO_GROUP)) {\n\t\t\t\t\t\treturn console.warn(`You can't use '${ESCAPE}' on a radio grouped trigger`);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn (trigger.hasAttribute(GROUP) ? manageGroup : manageToggle)(trigger);\n\t\t\t\t});\n\t\t\t},\n\t\t\tfalse\n\t\t);\n\t\tdocument[namespacedProp('isEscapeKeyInitialized')] = true;\n\t}\n\n\t/**\n\t * Arrows key management.\n\t */\n\tif ($$(ARROWS).length > 0 && !document[namespacedProp('isArrowKeysInitialized')]) {\n\t\tdocument.addEventListener(\n\t\t\t\"keydown\",\n\t\t\tevent => {\n\t\t\t\tconst activeElement = document.activeElement;\n\t\t\t\tif (\n\t\t\t\t\t[\"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\", \"Home\", \"End\"].indexOf(event.key) === -1 ||\n\t\t\t\t\t(!activeElement.hasAttribute(CLASS) && !activeElement.hasAttribute(CLASS_TRIGGER) && !activeElement.hasAttribute(CLASS_TARGET)) ||\n\t\t\t\t\t!activeElement.hasAttribute(ARROWS)\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!activeElement.hasAttribute(GROUP) && !activeElement.hasAttribute(RADIO_GROUP)) {\n\t\t\t\t\treturn console.warn(`You can't use '${ARROWS}' on a trigger without '${GROUP}' or '${RADIO_GROUP}'`);\n\t\t\t\t}\n\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tconst groupList = activeElement.hasAttribute(GROUP)\n\t\t\t\t\t? $$(`${GROUP}='${activeElement.getAttribute(GROUP)}'`)\n\t\t\t\t\t: $$(`${RADIO_GROUP}='${activeElement.getAttribute(RADIO_GROUP)}'`);\n\n\t\t\t\tlet newElement = activeElement;\n\t\t\t\tswitch (event.key) {\n\t\t\t\t\tcase \"ArrowUp\":\n\t\t\t\t\tcase \"ArrowLeft\":\n\t\t\t\t\t\tnewElement =\n\t\t\t\t\t\t\tgroupList.indexOf(activeElement) > 0\n\t\t\t\t\t\t\t\t? groupList[groupList.indexOf(activeElement) - 1]\n\t\t\t\t\t\t\t\t: groupList[groupList.length - 1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"ArrowDown\":\n\t\t\t\t\tcase \"ArrowRight\":\n\t\t\t\t\t\tnewElement =\n\t\t\t\t\t\t\tgroupList.indexOf(activeElement) < groupList.length - 1\n\t\t\t\t\t\t\t\t? groupList[groupList.indexOf(activeElement) + 1]\n\t\t\t\t\t\t\t\t: groupList[0];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Home\":\n\t\t\t\t\t\tnewElement = groupList[0];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"End\":\n\t\t\t\t\t\tnewElement = groupList[groupList.length - 1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t}\n\n\t\t\t\tnewElement.focus();\n\t\t\t\treturn newElement.dispatchEvent(new Event(newElement.getAttribute(EVENT) || \"click\"));\n\t\t\t},\n\t\t\tfalse\n\t\t);\n\t\tdocument[namespacedProp('isArrowKeysInitialized')] = true;\n\t}\n\n\treturn triggerList;\n};\n"]}