{"version":3,"sources":["webpack:///./cartridges/app_designholding/cartridge/client/default/js/components/toggle/toggle.js","webpack:///./cartridges/app_designholding/cartridge/client/default/js/components/toggle/index.js"],"names":["TOGGLE_ACTIVE_CLASS","BUTTON_LABEL_CLASS","BUTTON_ICON_CLASS","HIDDEN_CLASS","DATA_ATTRIBUTE_DEFAULT_ACTIVE","MINUS_ICON","Toggle","constructor","element","controls","getAttribute","id","links","getToggleLinks","activeClass","dataset","toggleActiveClass","linksActiveClass","_isActive","classList","contains","ignoreInteractiveElements","checkLines","label","querySelector","activeLabel","toggleActiveLabel","inActiveLabel","innerHTML","noToggleIcon","notoggleicon","icon","activeIcon","inActiveIcon","interactiveElements","getInteractiveElements","hideCta","setAttribute","add","bindEvents","setDefaultState","isActive","boolean","elementsToToggle","itemsBelowToggle","forEach","parentHeight","clientHeight","parentOffsetTop","offsetTop","interactiveChildren","querySelectorAll","hiddenElements","filter","childElement","push","setTabIndex","elements","value","tabIndex","link","scrollHeight","addEventListener","event","toggleState","togglePreventDefault","preventDefault","Events","$on","checkTabIndex","toggleLive","toggleActiveClassNames","setAccesibilityState","triggerExternalEvents","$trigger","toggleDefaultActive","toggleToggleElementActiveState","toggleLinksClassNames","toggleLabels","toggleIcons","toggle","toggleAction","toString","hasAttribute","newState","data","ariaControls","LINKS_SELECTOR","split","map","join","document"],"mappings":"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","file":"js/Toggle.js","sourcesContent":["import Events from '@utilities/events';\n\nconst TOGGLE_ACTIVE_CLASS = 'toggle--is-active';\nconst BUTTON_LABEL_CLASS = 'button__label';\nconst BUTTON_ICON_CLASS = 'button__icon';\nconst HIDDEN_CLASS = 'u-hidden';\nconst DATA_ATTRIBUTE_DEFAULT_ACTIVE = 'data-toggle-default-active';\n\nconst MINUS_ICON =\n '';\n\nclass Toggle {\n constructor(element) {\n this.element = element;\n this.controls = element.getAttribute('aria-controls');\n this.id = element.id || this.controls;\n this.links = this.getToggleLinks();\n this.activeClass = element.dataset.toggleActiveClass || TOGGLE_ACTIVE_CLASS;\n this.linksActiveClass = element.dataset.linksActiveClass || this.activeClass;\n this._isActive = this.element.classList.contains(this.activeClass);\n this.ignoreInteractiveElements = this.element.dataset.ignoreInteractiveElements || false;\n this.checkLines = element.dataset.checkLines || false;\n\n // Label\n this.label = element.querySelector(`.${BUTTON_LABEL_CLASS}`) || false;\n this.activeLabel = element.dataset.toggleActiveLabel || false;\n this.inActiveLabel = this.label?.innerHTML;\n\n // Icon\n this.noToggleIcon = element.dataset.notoggleicon;\n this.icon = element.querySelector(`.${BUTTON_ICON_CLASS}`) || false;\n this.activeIcon = MINUS_ICON;\n this.inActiveIcon = this.icon?.innerHTML;\n\n if (!this.ignoreInteractiveElements) {\n this.interactiveElements = Toggle.getInteractiveElements(this.links);\n }\n\n if (!element.dataset.checkLines && this.hideCta()) {\n this.element.setAttribute(DATA_ATTRIBUTE_DEFAULT_ACTIVE, true);\n this.element.classList.add(HIDDEN_CLASS);\n }\n\n this.bindEvents();\n this.setDefaultState();\n }\n\n get isActive() {\n return this._isActive;\n }\n\n set isActive(boolean) {\n this._isActive = boolean;\n }\n\n /**\n * Find all interactive children in a toggleable element that are hidden when toggled\n * @param elementsToToggle, array with all elements controlled by the toggle\n */\n static getInteractiveElements(elementsToToggle) {\n const itemsBelowToggle = [];\n\n elementsToToggle.forEach((element) => {\n const parentHeight = element.clientHeight;\n const parentOffsetTop = element.offsetTop; // In case parent isn't relatively positioned\n const interactiveChildren = element.querySelectorAll(\n 'a, area, input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, video',\n );\n\n const hiddenElements = [...interactiveChildren].filter(\n (childElement) => childElement.offsetTop - parentOffsetTop >= parentHeight,\n );\n\n itemsBelowToggle.push(...hiddenElements);\n });\n\n return itemsBelowToggle;\n }\n\n /**\n * Set tab index for DOM elements\n * @param elements, elements to set index on\n * @param value, value to be set\n */\n static setTabIndex(elements, value) {\n elements.forEach((element) => {\n element.tabIndex = value\n });\n }\n\n /**\n * Hide cta if text is not overflowing and functionality is not triggered\n * For elements outside visibility, the check should be done with events when it becomes visible\n */\n hideCta() {\n let hideCta = false;\n this.links.forEach((link) => {\n if (link.scrollHeight && link.scrollHeight === link.clientHeight) hideCta = true;\n });\n return hideCta;\n }\n\n /**\n * Bind all events\n */\n bindEvents() {\n this.element.addEventListener('click', (event) => {\n this.toggleState();\n\n if (this.element.dataset.togglePreventDefault) {\n event.preventDefault();\n }\n });\n\n Events.$on(`toggle[${this.id}]::reload`, () => {\n this.element.classList[this.hideCta() ? 'add' : 'remove'](HIDDEN_CLASS);\n });\n\n Events.$on(`toggle[${this.id}]::toggle`, (event) => {\n this.toggleState();\n event.preventDefault();\n });\n\n Events.$on(`toggle[${this.id}]::close`, (event) => {\n if (this.isActive) {\n this.toggleState();\n event.preventDefault();\n }\n });\n\n Events.$on(`toggle[${this.id}]::check-lines`, () => {\n // Reset to collapsed state\n if (this.isActive) {\n this.toggleState();\n }\n\n // Then check again\n this.element.classList[this.hideCta() ? 'add' : 'remove'](HIDDEN_CLASS);\n });\n\n Events.$on(`toggle::check-tabindex`, () => this.checkTabIndex());\n }\n\n /**\n * Toggles the entire UI state of the toggle component\n */\n toggleState() {\n if (this.element.dataset.toggleLive === 'true') {\n this.links = this.getToggleLinks();\n }\n\n this.toggleActiveClassNames();\n this.setAccesibilityState();\n this.triggerExternalEvents();\n\n if (!this.ignoreInteractiveElements) {\n Events.$trigger('toggle::check-tabindex');\n }\n }\n\n /**\n * Sets default ARIA, tabIndex and classname roles based on config\n */\n setDefaultState() {\n if (this.element.dataset.toggleDefaultActive === 'true') {\n this.toggleState();\n }\n\n this.setAccesibilityState()\n if (!this.ignoreInteractiveElements) {\n Events.$trigger('toggle::check-tabindex');\n }\n }\n\n /**\n * Toggles all element class names\n */\n toggleActiveClassNames() {\n this.toggleToggleElementActiveState();\n this.toggleLinksClassNames();\n this.toggleLabels();\n this.toggleIcons();\n }\n\n /**\n * Toggles the active classname of the toggle component and toggles aria attribute\n */\n toggleToggleElementActiveState() {\n this.element.classList.toggle(this.activeClass);\n this.isActive = this.element.classList.contains(this.activeClass);\n }\n\n /**\n * Toggles the labels of the toggle button\n */\n toggleLabels() {\n if (!this.activeLabel || !this.label) return;\n this.label.innerHTML = this.isActive ? this.activeLabel : this.inActiveLabel;\n }\n\n /**\n * Toggles the icons of the toggle button\n */\n toggleIcons() {\n if (this.noToggleIcon || !this.activeIcon || !this.icon) return;\n\n this.icon.innerHTML = this.isActive ? this.activeIcon : this.inActiveIcon;\n }\n\n /**\n * Toggles the active classname of the toggle components links\n */\n toggleLinksClassNames() {\n const toggleAction = this.isActive ? 'add' : 'remove';\n this.links.forEach((link) => link.classList[toggleAction](this.linksActiveClass));\n }\n\n /**\n * Toggles the ARIA attributes\n */\n setAccesibilityState() {\n this.element.setAttribute('aria-expanded', this.isActive.toString());\n /** REMOVED aria-hidden due to ACCESSIBILITY ERRORS \n * DATA ATTRIBUTE 'data-do-not-aria-hidden\" added only to B&B mobile navigation\n * element is already hidden by css\n */\n if(!this.element.hasAttribute('data-do-not-aria-hidden')) {\n this.links.forEach(link => {\n link.setAttribute('aria-hidden', (!this.isActive).toString())\n });\n }\n }\n\n /**\n * Triggers external events based on new state\n */\n triggerExternalEvents() {\n const newState = this.isActive ? 'opened' : 'closed';\n Events.$trigger(`toggle[${this.id}]::${newState}`);\n Events.$trigger(`toggle[${this.id}]::toggled`, {\n data: this.isActive,\n });\n }\n\n /**\n * Get all the external link elements from the toggle component\n */\n getToggleLinks() {\n const ariaControls = this.controls;\n if (!ariaControls) return [];\n\n const LINKS_SELECTOR = ariaControls\n .split(/[ ,]+/)\n .map((id) => `#${id}`)\n .join(', ');\n \n return [...document.querySelectorAll(LINKS_SELECTOR)];\n }\n\n /**\n * Set initial tab index\n */\n checkTabIndex() {\n Toggle.setTabIndex(this.interactiveElements, this._isActive ? 0 : -1);\n }\n}\n\nexport default Toggle;\n","/**\n * @shelf-version: 1.0.0\n */\n\nimport Toggle from './toggle'\n\nexport default Toggle\n"],"sourceRoot":""}