{"version":3,"sources":["baseComponent.ts","atoms/textField/index.ts","atoms/textArea/index.ts","atoms/checkbox/index.ts","atoms/box/index.ts","atoms/notification/index.ts","atoms/progressIndicator/index.ts","atoms/valueModificator/index.ts","atoms/slider/index.ts","atoms/tabNavigation/index.ts","molecules/dialog/index.ts","molecules/popover/constants.ts","molecules/popover/index.ts","molecules/lightbox/index.ts","molecules/sideNavigation/index.ts","molecules/formField/index.ts","atoms/pageIndicator/functions/updateIndicatorState.ts","atoms/pageIndicator/functions/createPaginationArray.ts","atoms/pageIndicator/functions/updatePagination.ts","atoms/pageIndicator/index.ts","organisms/contextMenu/index.ts","organisms/header/index.ts","viewports.ts","organisms/minimalHeader/index.ts","index.ts"],"names":[],"mappings":"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","file":"frontend-kit.js","sourceRoot":"..\\src\\frontend-kit","sourcesContent":["import ElementWithComponent from './ElementWithComponent';\r\n\r\ninterface ConstructorWithEvents extends Function {\r\n events?: string[];\r\n}\r\n\r\n/**\r\n * function to check if the requested event can be bound to the component\r\n */\r\nconst throwIfEventUnknown = (\r\n constructorFunction: ConstructorWithEvents,\r\n eventName: string,\r\n): void => {\r\n if (!constructorFunction.events.includes(eventName)) {\r\n throw new Error(\r\n `Unknown event ${eventName} in component ${constructorFunction.name}.`,\r\n );\r\n }\r\n};\r\n\r\n/**\r\n * @name base-component\r\n * @author Experience One AG\r\n * @copyright Robert Bosch GmbH\r\n * @description\r\n * this base class is the foundation for all vanilla.js component implementations\r\n * it provides the basic functions we need in each component\r\n * 1. an event-registry\r\n * 2. addEventListener Method\r\n * 3. removeEventListener Method\r\n * 4. check if the event is available for the component\r\n * 5. trigger for the given events\r\n */\r\nexport default class BaseComponent {\r\n protected container: HTMLElement;\r\n protected alreadyInitialized = false;\r\n\r\n constructor(container: HTMLElement) {\r\n /**\r\n * store the HTML element\r\n */\r\n this.container = container;\r\n\r\n const constructorFunction = this.constructor as ConstructorWithEvents;\r\n\r\n /**\r\n * set all registry entries to empty arrays so we don't have to do that later\r\n */\r\n if (constructorFunction.events) {\r\n constructorFunction.events.forEach((eventName) => {\r\n this.eventRegistry[eventName] = [];\r\n });\r\n }\r\n\r\n if ((container as ElementWithComponent).component) {\r\n this.alreadyInitialized = true;\r\n return;\r\n }\r\n\r\n /**\r\n * set the component property to return this instance\r\n * can be used to use the API from outside of this codebase\r\n */\r\n Object.defineProperty(container, 'component', {\r\n get: () => this,\r\n });\r\n }\r\n\r\n /**\r\n * a registry for custom events and their callbacks\r\n */\r\n protected eventRegistry: {\r\n [eventName: string]: Function[];\r\n } = {};\r\n\r\n /**\r\n * adds a callback for the given event\r\n * @return a unsubscribe function to remove the listener\r\n */\r\n public addEventListener = (\r\n eventName: string,\r\n callback: Function,\r\n ): Function => {\r\n throwIfEventUnknown(this.constructor as ConstructorWithEvents, eventName);\r\n const callbackIndex = this.eventRegistry[eventName].push(callback) - 1;\r\n\r\n return (): void => {\r\n this.eventRegistry[eventName][callbackIndex] = null;\r\n };\r\n };\r\n\r\n /**\r\n * removes all instances of a listener by reference\r\n * can be used if the unsubscribe cannot be kept when using addEventListener\r\n */\r\n public removeEventListener = (\r\n eventName: string,\r\n callbackReference: Function,\r\n ): void => {\r\n throwIfEventUnknown(this.constructor as ConstructorWithEvents, eventName);\r\n\r\n this.eventRegistry[eventName] = this.eventRegistry[\r\n eventName\r\n ].map((callback) => (callback === callbackReference ? null : callback));\r\n };\r\n\r\n /**\r\n * triggers a given event with the parameters given, if any\r\n */\r\n protected triggerEvent = (\r\n eventName: string,\r\n // unfortunately, we cannot TS-specify the types and amount of parameters passed here :/\r\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\r\n ...params: any[]\r\n ): void => {\r\n (this.eventRegistry[eventName] || []).forEach((callback) => {\r\n if (typeof callback === 'function') {\r\n callback(...params);\r\n }\r\n });\r\n };\r\n}\r\n","import BaseComponent from '../../baseComponent';\r\n\r\nconst TOGGLE_ICON = '.a-text-field__icon-password';\r\nconst PASSWORD_VISIBLE_CLASS = '-password-visible';\r\nconst PASSWORD_INVISIBLE_ICON = 'ui-ic-watch-on';\r\nconst PASSWORD_VISIBLE_ICON = 'ui-ic-watch-off';\r\n\r\nexport default class TextField extends BaseComponent {\r\n protected static events = ['onClick'];\r\n\r\n private toggleIcon: HTMLElement;\r\n\r\n private input: HTMLElement;\r\n\r\n constructor(container: HTMLElement) {\r\n super(container);\r\n\r\n /**\r\n * Define DOM Elements and Variables\r\n */\r\n this.toggleIcon = container.querySelector(TOGGLE_ICON);\r\n this.input = container.querySelector('input');\r\n\r\n // register change event for the select\r\n if (this.toggleIcon instanceof HTMLElement) {\r\n this.toggleIcon.addEventListener('click', () => {\r\n const { input } = this;\r\n const icon = this.toggleIcon.querySelector('.a-icon');\r\n\r\n icon.classList.remove(PASSWORD_VISIBLE_ICON, PASSWORD_INVISIBLE_ICON);\r\n if (input.getAttribute('type') === 'password') {\r\n container.classList.add(PASSWORD_VISIBLE_CLASS);\r\n input.setAttribute('type', 'text');\r\n icon.classList.add(PASSWORD_VISIBLE_ICON);\r\n } else {\r\n container.classList.remove(PASSWORD_VISIBLE_CLASS);\r\n input.setAttribute('type', 'password');\r\n icon.classList.add(PASSWORD_INVISIBLE_ICON);\r\n }\r\n });\r\n }\r\n }\r\n}\r\n","import BaseComponent from '../../baseComponent';\r\n\r\nconst TEXTAREA = 'textarea';\r\n\r\nexport default class TextArea extends BaseComponent {\r\n protected static events = ['onInput'];\r\n\r\n private textArea: HTMLTextAreaElement;\r\n\r\n private shadow: HTMLDivElement;\r\n\r\n constructor(container: HTMLElement) {\r\n super(container);\r\n\r\n /**\r\n * Define DOM Elements and Variables\r\n */\r\n this.textArea = container.querySelector(TEXTAREA);\r\n\r\n this.shadow = container.querySelector('.a-text-area__shadow');\r\n\r\n if (this.shadow && this.textArea instanceof HTMLTextAreaElement) {\r\n // register change event for the textarea\r\n this.textArea.addEventListener('input', () => {\r\n this.shadow.textContent = `${this.textArea.value}\\r\\n`;\r\n this.textArea.style.height = `${this.shadow.offsetHeight}px`;\r\n });\r\n }\r\n }\r\n}\r\n","import BaseComponent from '../../baseComponent';\r\n\r\nconst INDETERMINATE_CLASS = 'a-checkbox--indeterminate';\r\n\r\nexport default class Checkbox extends BaseComponent {\r\n private input: HTMLInputElement;\r\n\r\n constructor(container: HTMLElement) {\r\n super(container);\r\n\r\n this.input = container.querySelector('input');\r\n\r\n if (this.input) {\r\n this.input.addEventListener('change', () => {\r\n container.classList.remove(INDETERMINATE_CLASS);\r\n });\r\n }\r\n }\r\n}\r\n","import BaseComponent from '../../baseComponent';\r\nimport ElementWithComponent from '../../ElementWithComponent';\r\n\r\nconst SHOW_CLASS = '-show';\r\nconst MODAL_CLASS = 'a-box--modal';\r\nconst BODY_UNSCROLLABLE_CLASS = '-unscrollable';\r\n\r\n/**\r\n * prevent the body from scrolling\r\n */\r\nconst makeBodyUnscrollable = (): void => {\r\n document.body.classList.add(BODY_UNSCROLLABLE_CLASS);\r\n};\r\n\r\n/**\r\n * re-enable scrolling on the body\r\n */\r\nconst makeBodyScrollable = (): void => {\r\n document.body.classList.remove(BODY_UNSCROLLABLE_CLASS);\r\n};\r\n\r\n/**\r\n * Functionality of Box component\r\n */\r\nclass Box extends BaseComponent {\r\n private static events = ['backgroundClicked'];\r\n\r\n /**\r\n * returns a valid modal ID to place into the DOM for the given string\r\n */\r\n public static modalId = (id: string): string => `frontend-kit-modal-${id}`;\r\n\r\n /**\r\n * finds a modal by the given modal ID\r\n */\r\n public static findModal = (\r\n id: string,\r\n getElementByID: typeof window.document.getElementById = (id: string) => window.document.getElementById(Box.modalId(id))\r\n ): ElementWithComponent | null => {\r\n\r\n return getElementByID(id) as ElementWithComponent;\r\n };\r\n\r\n /**\r\n * shows the modal with the given modal ID, if it exists\r\n */\r\n public static showModal = (id: string): void => {\r\n const modalElement = Box.findModal(id);\r\n\r\n if (!modalElement) {\r\n console.warn(`Could not find a modal with id ${id} to show.`);\r\n } else {\r\n modalElement.component.show();\r\n }\r\n };\r\n\r\n /**\r\n * hides the modal with the given modal ID, if it exists\r\n */\r\n public static hideModal = (id: string): void => {\r\n const modalElement = Box.findModal(id);\r\n\r\n if (!modalElement) {\r\n console.warn(`Could not find a modal with id ${id} to hide.`);\r\n } else {\r\n modalElement.component.hide();\r\n }\r\n };\r\n\r\n constructor(container: HTMLElement) {\r\n super(container);\r\n\r\n if (container.classList.contains(MODAL_CLASS)) {\r\n // immediately move the modal to the end of the body, so the \"fullscreen modal\" aspect works\r\n document.body.appendChild(container);\r\n }\r\n\r\n container.addEventListener('click', (event: MouseEvent) => {\r\n if (event.target === container) {\r\n this.triggerEvent('backgroundClicked');\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * shows this modal\r\n */\r\n public show(): void {\r\n this.container.classList.add(SHOW_CLASS);\r\n\r\n if (this.isModal()) {\r\n makeBodyUnscrollable();\r\n }\r\n }\r\n\r\n /**\r\n * hides this modal\r\n */\r\n public hide(): void {\r\n this.container.classList.remove(SHOW_CLASS);\r\n\r\n makeBodyScrollable();\r\n }\r\n\r\n /**\r\n * returns true if this a modal with dimmed background\r\n */\r\n public isModal(): boolean {\r\n return this.container.classList.contains(MODAL_CLASS);\r\n }\r\n}\r\n\r\nexport default Box;\r\n","import BaseComponent from '../../baseComponent';\r\nimport ElementWithComponent from '../../ElementWithComponent';\r\n\r\nconst BANNER_CLASS = 'a-notification--banner';\r\nconst SHOW_CLASS = '-show';\r\n\r\n/**\r\n * Behavior of a banner notification\r\n */\r\nclass Notification extends BaseComponent {\r\n private static events = ['closeClicked'];\r\n\r\n /**\r\n * returns a DOM id for the given notification id\r\n */\r\n public static notificationId = (id: string): string =>\r\n `frontend-kit-notification-${id}`;\r\n\r\n /**\r\n * finds a notification for the given notification id\r\n */\r\n public static findNotification = (\r\n id: string,\r\n getElementByID: typeof window.document.getElementById = (id: string) => window.document.getElementById(Notification.notificationId(id))\r\n ): ElementWithComponent | null => {\r\n\r\n return getElementByID(id) as ElementWithComponent;\r\n };\r\n\r\n /**\r\n * shows the notification with the given notification id\r\n */\r\n public static showNotification = (id: string): void => {\r\n const notificationElement = Notification.findNotification(id);\r\n\r\n if (!notificationElement) {\r\n console.warn(`Could not find a notification with id ${id} to show`);\r\n } else {\r\n notificationElement.component.show();\r\n }\r\n };\r\n\r\n /**\r\n * hides the notification with the given notification id\r\n */\r\n public static hideNotification = (id: string): void => {\r\n const notificationElement = Notification.findNotification(id);\r\n\r\n if (!notificationElement) {\r\n console.warn(`Could not find a notification with id ${id} to hide`);\r\n } else {\r\n notificationElement.component.hide();\r\n }\r\n };\r\n\r\n constructor(container: HTMLElement) {\r\n super(container);\r\n\r\n // if this is a banner, move it to the end of the DOM to ensure that layout is correct\r\n if (container.classList.contains(BANNER_CLASS)) {\r\n document.body.appendChild(container);\r\n }\r\n\r\n /**\r\n * the close button\r\n */\r\n const closeButton = container.querySelector('[data-frok-action=\"close\"]');\r\n\r\n if (closeButton) {\r\n closeButton.addEventListener('click', () => {\r\n this.triggerEvent('closeClicked');\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * shows this notification\r\n */\r\n public show(): void {\r\n this.container.classList.add(SHOW_CLASS);\r\n }\r\n\r\n /**\r\n * hides this notification\r\n */\r\n public hide(): void {\r\n this.container.classList.remove(SHOW_CLASS);\r\n }\r\n}\r\n\r\nexport default Notification;\r\n","import BaseComponent from '../../baseComponent';\r\n\r\nexport default class ProgressIndicator extends BaseComponent {\r\n constructor(container: HTMLElement) {\r\n super(container);\r\n\r\n const observerOptions = {\r\n childList: false,\r\n subtree: false,\r\n attributes: true,\r\n attributeFilter: ['data-progress'],\r\n };\r\n\r\n const observer = new MutationObserver(ProgressIndicator.callback);\r\n observer.observe(container, observerOptions);\r\n }\r\n\r\n static setWidth(innerBar: HTMLElement, progress: number): void {\r\n innerBar.setAttribute('style', `width:${progress}%`);\r\n }\r\n\r\n static callback(mutationList, observer): void {\r\n mutationList.forEach(mutation => {\r\n const innerBar = mutation.target.querySelector(\r\n '.a-progress-indicator__inner-bar',\r\n );\r\n ProgressIndicator.setWidth(innerBar, mutation.target.dataset.progress);\r\n });\r\n }\r\n}\r\n","import BaseComponent from '../../baseComponent';\r\n\r\nconst MINUS_ICON = 'a-value-modificator__minus-icon';\r\nconst PLUS_ICON = 'a-value-modificator__plus-icon';\r\nconst DISABLED = 'a-value-modificator__icon-disabled';\r\n\r\nconst PRESSED = '-pressed';\r\n\r\nexport default class ValueModificator extends BaseComponent {\r\n protected static events = ['onClick'];\r\n\r\n private readonly minusIcon: HTMLElement;\r\n\r\n private readonly plusIcon: HTMLElement;\r\n\r\n private readonly input: HTMLInputElement;\r\n\r\n constructor(container: HTMLElement) {\r\n super(container);\r\n\r\n /**\r\n * Define DOM Elements and Variables\r\n */\r\n this.minusIcon = container.querySelector(`.${MINUS_ICON}`);\r\n this.plusIcon = container.querySelector(`.${PLUS_ICON}`);\r\n this.input = container.querySelector('input');\r\n\r\n if (this.input instanceof HTMLInputElement) {\r\n if (!this.input.value) {\r\n this.input.value = '0';\r\n }\r\n }\r\n\r\n if (this.minusIcon instanceof HTMLElement) {\r\n this.initElement(this.minusIcon);\r\n\r\n this.minusIcon.onclick = (): void => {\r\n this.stepDownInputValue();\r\n };\r\n this.minusIcon.addEventListener('mousedown', () => {\r\n this.togglePressed(this.minusIcon);\r\n });\r\n this.minusIcon.addEventListener('mouseup', () => {\r\n this.togglePressed(this.minusIcon);\r\n });\r\n }\r\n\r\n if (this.plusIcon instanceof HTMLElement) {\r\n this.initElement(this.plusIcon);\r\n\r\n this.plusIcon.onclick = (): void => {\r\n this.stepUpInputValue();\r\n };\r\n this.plusIcon.addEventListener('mousedown', () => {\r\n this.togglePressed(this.plusIcon);\r\n });\r\n this.plusIcon.addEventListener('mouseup', () => {\r\n this.togglePressed(this.plusIcon);\r\n });\r\n }\r\n }\r\n\r\n initElement(element: HTMLElement): void {\r\n if (this.input.value === this.input.min && element === this.minusIcon) {\r\n this.disable(element);\r\n }\r\n\r\n if (this.input.value === this.input.max && element === this.plusIcon) {\r\n this.disable(element);\r\n }\r\n }\r\n\r\n stepUpInputValue(): void {\r\n if (this.container.classList.contains('-disabled')) {\r\n return;\r\n }\r\n\r\n const value = Number.isNaN(this.input.valueAsNumber)\r\n ? 0\r\n : this.input.valueAsNumber;\r\n\r\n const step: number = +this.input.step;\r\n let update = value + step;\r\n\r\n this.enable(this.minusIcon);\r\n\r\n if (update >= +this.input.max) {\r\n this.disable(this.plusIcon);\r\n update = +this.input.max;\r\n }\r\n\r\n this.input.value = update.toString();\r\n }\r\n\r\n stepDownInputValue(): void {\r\n if (this.container.classList.contains('-disabled')) {\r\n return;\r\n }\r\n\r\n const value = Number.isNaN(this.input.valueAsNumber)\r\n ? 0\r\n : this.input.valueAsNumber;\r\n\r\n const step: number = +this.input.step;\r\n let update = value - step;\r\n\r\n this.enable(this.plusIcon);\r\n\r\n if (update <= +this.input.min) {\r\n this.disable(this.minusIcon);\r\n update = +this.input.min;\r\n }\r\n\r\n this.input.value = update.toString();\r\n }\r\n\r\n disable(element: HTMLElement): void {\r\n element.classList.add(DISABLED);\r\n }\r\n\r\n enable(element: HTMLElement): void {\r\n element.classList.remove(DISABLED);\r\n }\r\n\r\n togglePressed(element: HTMLElement): void {\r\n if (this.container.classList.contains('-disabled')) {\r\n return;\r\n }\r\n if (element.classList.contains(PRESSED)) {\r\n element.classList.remove(PRESSED);\r\n } else {\r\n element.classList.add(PRESSED);\r\n }\r\n }\r\n}\r\n","import BaseComponent from '../../baseComponent';\r\n\r\nexport default class TextField extends BaseComponent {\r\n protected static events = ['onClick'];\r\n\r\n private readonly slider: HTMLInputElement;\r\n\r\n private readonly tooltip: HTMLElement;\r\n\r\n constructor(container: HTMLElement) {\r\n super(container);\r\n\r\n /**\r\n * Define DOM Elements and Variables\r\n */\r\n this.slider = container.querySelector('.a-slider input[type=range]');\r\n this.tooltip = container.querySelector('.a-tooltip');\r\n\r\n // init slider progress\r\n this.setSliderProgress();\r\n // init tooltip\r\n this.setTooltip();\r\n\r\n if (this.slider instanceof HTMLElement) {\r\n this.slider.addEventListener('input', () => {\r\n this.setSliderProgress();\r\n this.setTooltip();\r\n });\r\n this.slider.addEventListener('mouseenter', () => {\r\n this.toggleTooltipVisibility(false);\r\n this.setSliderColor('#00629a');\r\n });\r\n this.slider.addEventListener('mouseleave', () => {\r\n this.toggleTooltipVisibility(true);\r\n this.setSliderColor('#007bc0');\r\n });\r\n this.slider.addEventListener('mousedown', () => {\r\n this.setSliderColor('#004975');\r\n });\r\n this.slider.addEventListener('mouseup', () => {\r\n this.setSliderColor('#00629a');\r\n });\r\n }\r\n }\r\n\r\n private setSliderProgress(): void {\r\n const progress = `${(this.slider.valueAsNumber / +this.slider.max) * 100}%`;\r\n this.slider.style.setProperty('--progress', progress);\r\n }\r\n\r\n private setTooltip(): void {\r\n if (!this.tooltip) {\r\n return;\r\n }\r\n\r\n const min: number = this.slider.min ? Number(this.slider.min) : 0;\r\n\r\n const max: number = this.slider.max ? Number(this.slider.max) : 100;\r\n const percentage = Number(\r\n ((this.slider.valueAsNumber - min) * 100) / (max - min),\r\n );\r\n\r\n // fill tooltip with data\r\n if (this.tooltip.getAttribute('tooltip-type') === 'relative') {\r\n this.tooltip.innerHTML = `${percentage} %`;\r\n } else if (this.tooltip.getAttribute('tooltip-unit')) {\r\n this.tooltip.innerHTML = `${this.slider.value}${this.tooltip.getAttribute(\r\n 'tooltip-unit',\r\n )}`;\r\n } else {\r\n this.tooltip.innerHTML = this.slider.value;\r\n }\r\n\r\n this.calculateAndSetTooltipPosition(percentage);\r\n }\r\n\r\n /**\r\n * The tooltip needs to be placed directly over the center of the thumb element.\r\n * To calculate where the tooltip is placed, we use the percentage of the slider as a base.\r\n * Then half the tooltip width is subtracted.\r\n * When the thumb element is placed at the ends of the spectrum, its center is not placed directly over the percentage value.\r\n * The offset caused by the thumb position follows a linear function based on the percentage.\r\n * The position of the tooltip needs to be corrected for that.\r\n *\r\n * @param percentage The percentage value of the slider\r\n */\r\n private calculateAndSetTooltipPosition(percentage: number): void {\r\n const tooltipOffsetRem = this.tooltip.offsetWidth / 2 / 16;\r\n const thumbOffsetFactor = percentage / 100 - 0.5;\r\n\r\n // thumb has 1.5rem\r\n const offsetRem = tooltipOffsetRem + thumbOffsetFactor * 1.5;\r\n\r\n this.tooltip.style.left = `calc(${percentage}% - (${offsetRem}rem))`;\r\n }\r\n\r\n private toggleTooltipVisibility(isHidden: boolean): void {\r\n if (!this.tooltip) {\r\n return;\r\n }\r\n this.tooltip.style.visibility = isHidden ? 'hidden' : 'visible';\r\n }\r\n\r\n private setSliderColor(hex: string): void {\r\n this.slider.style.setProperty('--color', hex);\r\n }\r\n}\r\n","import BaseComponent from '../../baseComponent';\r\n\r\nconst TAB_SELECTED_CLASS = `-selected`;\r\nconst TAB_DISABLED_CLASS = `-disabled`;\r\n\r\nexport default class TabNavigation extends BaseComponent {\r\n protected static events = ['selected'];\r\n\r\n private readonly tabs: NodeList;\r\n\r\n constructor(container: HTMLElement) {\r\n super(container);\r\n\r\n /**\r\n * Define DOM Elements and Variables\r\n */\r\n this.tabs = container.querySelectorAll('.a-tab-navigation__tab');\r\n\r\n Array.from(this.tabs).forEach(tab => {\r\n if (tab instanceof HTMLElement) {\r\n tab.addEventListener('click', () => {\r\n if (\r\n !tab.classList.contains(TAB_SELECTED_CLASS) &&\r\n !tab.classList.contains(TAB_DISABLED_CLASS)\r\n ) {\r\n this.deselectAllTabs();\r\n tab.classList.add(TAB_SELECTED_CLASS);\r\n tab.setAttribute('aria-pressed', 'true');\r\n this.triggerEvent('selected', tab.dataset.frokTabIdentifier);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n private deselectAllTabs(): void {\r\n Array.from(this.tabs).forEach(tab => {\r\n if (tab instanceof HTMLElement) {\r\n tab.classList.remove(TAB_SELECTED_CLASS);\r\n tab.removeAttribute('aria-pressed');\r\n }\r\n });\r\n }\r\n}\r\n","import BaseComponent from '../../baseComponent';\r\nimport ElementWithComponent from '../../ElementWithComponent';\r\nimport Box from '../../atoms/box';\r\n\r\nclass Dialog extends BaseComponent {\r\n protected static events = [\r\n 'confirmed',\r\n 'canceled',\r\n 'backgroundClicked',\r\n 'closeClicked',\r\n ];\r\n\r\n /**\r\n * returns a valid dialog ID to place into the modal box for the given string\r\n */\r\n public static dialogId = (id: string): string => `frontend-kit-dialog-${id}`;\r\n\r\n /**\r\n * finds a dialog by the given dialog ID\r\n */\r\n public static findDialog = (\r\n id: string,\r\n getElementByID: typeof window.document.getElementById = (id: string) => window.document.getElementById(Dialog.dialogId(id))\r\n ): ElementWithComponent | null => {\r\n\r\n return getElementByID(id) as ElementWithComponent;\r\n }\r\n\r\n /**\r\n * shows the modal with the given modal ID, if it exists\r\n */\r\n public static showDialog = (id: string): void => {\r\n const dialogElement = Dialog.findDialog(id);\r\n\r\n if (!dialogElement) {\r\n console.warn(`Could not find a dialog with id ${id} to show.`);\r\n } else {\r\n dialogElement.component.show();\r\n }\r\n };\r\n\r\n /**\r\n * hides the modal with the given modal ID, if it exists\r\n */\r\n public static hideDialog = (id: string): void => {\r\n const dialogElement = Dialog.findDialog(id);\r\n\r\n if (!dialogElement) {\r\n console.warn(`Could not find a dialog with id ${id} to hide.`);\r\n } else {\r\n dialogElement.component.hide();\r\n }\r\n };\r\n\r\n /**\r\n * the underlying box component\r\n */\r\n private box: Box;\r\n\r\n constructor(container: HTMLElement) {\r\n super(container);\r\n\r\n // setup event buttons as event triggers\r\n const confirmButton = container.querySelector(\r\n '[data-frok-action=\"confirm\"]',\r\n );\r\n if (confirmButton instanceof Element) {\r\n confirmButton.addEventListener('click', () => {\r\n this.triggerEvent('confirmed');\r\n });\r\n }\r\n\r\n const cancelButton = container.querySelector('[data-frok-action=\"cancel\"]');\r\n if (cancelButton instanceof Element) {\r\n cancelButton.addEventListener('click', () => {\r\n this.triggerEvent('canceled');\r\n });\r\n }\r\n\r\n const closeButton = container.querySelector('[data-frok-action=\"close\"]');\r\n if (closeButton instanceof Element) {\r\n closeButton.addEventListener('click', () => {\r\n this.triggerEvent('closeClicked');\r\n });\r\n }\r\n\r\n // setup box sub-component\r\n const boxElement = container.querySelector('.a-box, .a-box--modal');\r\n\r\n if (boxElement) {\r\n this.box = new Box(boxElement as HTMLElement);\r\n\r\n if (this.box.isModal()) {\r\n // move to the end as well\r\n document.body.appendChild(container);\r\n // and move the box back into here\r\n container.appendChild(boxElement);\r\n }\r\n\r\n this.box.addEventListener('backgroundClicked', () =>\r\n this.triggerEvent('backgroundClicked'),\r\n );\r\n } else {\r\n throw new Error(\r\n 'Dialog is missing a box, please check your dialog markup',\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * shows this dialog\r\n */\r\n public show(): void {\r\n this.box.show();\r\n }\r\n\r\n /**\r\n * hides this dialog\r\n */\r\n public hide(): void {\r\n this.box.hide();\r\n }\r\n}\r\n\r\nexport default Dialog;\r\n","enum ArrowPosition {\r\n TOP_LEFT = 'top-left',\r\n TOP_CENTER = 'top-center',\r\n TOP_RIGHT = 'top-right',\r\n LEFT_TOP = 'left-top',\r\n LEFT_CENTER = 'left-center',\r\n LEFT_BOTTOM = 'left-bottom',\r\n BOTTOM_LEFT = 'bottom-left',\r\n BOTTOM_CENTER = 'bottom-center',\r\n BOTTOM_RIGHT = 'bottom-right',\r\n RIGHT_BOTTOM = 'right-bottom',\r\n RIGHT_CENTER = 'right-center',\r\n RIGHT_TOP = 'right-top'\r\n}\r\n\r\nconst arrowPositions: ArrowPosition[] = [\r\n ArrowPosition.TOP_LEFT,\r\n ArrowPosition.TOP_CENTER,\r\n ArrowPosition.TOP_RIGHT,\r\n ArrowPosition.LEFT_TOP,\r\n ArrowPosition.LEFT_CENTER,\r\n ArrowPosition.LEFT_BOTTOM,\r\n ArrowPosition.BOTTOM_LEFT,\r\n ArrowPosition.BOTTOM_CENTER,\r\n ArrowPosition.BOTTOM_RIGHT,\r\n ArrowPosition.RIGHT_BOTTOM,\r\n ArrowPosition.RIGHT_CENTER,\r\n ArrowPosition.RIGHT_TOP\r\n];\r\n\r\nconst arrowClasses = arrowPositions.map(position => `-${position}`);\r\n\r\nexport { ArrowPosition, arrowClasses, arrowPositions };\r\n","import BaseComponent from '../../baseComponent';\r\n\r\nimport { ArrowPosition, arrowClasses } from './constants';\r\n\r\nconst SHOW_CLASS = '-show';\r\nconst DETACHED_CLASS = '-detached';\r\n\r\ninterface Offset {\r\n left: number;\r\n top: number;\r\n}\r\ninterface StringOffset {\r\n left: string;\r\n top: string;\r\n}\r\n\r\nconst getPositionClientRect = (element: HTMLElement): ClientRect => {\r\n const clientRect = element.getBoundingClientRect();\r\n\r\n return {\r\n ...clientRect,\r\n left: clientRect.left + window.pageXOffset,\r\n top: clientRect.top + window.pageYOffset,\r\n bottom: clientRect.bottom + window.pageYOffset,\r\n right: clientRect.right + window.pageXOffset,\r\n };\r\n};\r\n\r\nconst getTargetOffsetForPositionAndArrowClass = (\r\n position: ClientRect,\r\n arrowClass: string,\r\n): Offset => {\r\n switch (arrowClass) {\r\n case ArrowPosition.RIGHT_CENTER:\r\n case ArrowPosition.RIGHT_TOP:\r\n case ArrowPosition.RIGHT_BOTTOM:\r\n return {\r\n left: position.left,\r\n top: position.top + (position.bottom - position.top) / 2,\r\n };\r\n case ArrowPosition.LEFT_CENTER:\r\n case ArrowPosition.LEFT_TOP:\r\n case ArrowPosition.LEFT_BOTTOM:\r\n return {\r\n left: position.right,\r\n top: position.top + (position.bottom - position.top) / 2,\r\n };\r\n case ArrowPosition.BOTTOM_CENTER:\r\n case ArrowPosition.BOTTOM_LEFT:\r\n case ArrowPosition.BOTTOM_RIGHT:\r\n return {\r\n left: position.left + (position.right - position.left) / 2,\r\n top: position.top,\r\n };\r\n case ArrowPosition.TOP_CENTER:\r\n case ArrowPosition.TOP_LEFT:\r\n case ArrowPosition.TOP_RIGHT:\r\n default:\r\n return {\r\n left: position.left + (position.right - position.left) / 2,\r\n top: position.bottom,\r\n };\r\n }\r\n};\r\n\r\nconst getPositionOffsetForDimensionAndArrowClass = (\r\n dimension: ClientRect,\r\n arrowClass: string,\r\n): Offset => {\r\n const left = ((): number => {\r\n switch (arrowClass) {\r\n case ArrowPosition.BOTTOM_RIGHT:\r\n case ArrowPosition.TOP_RIGHT:\r\n case ArrowPosition.RIGHT_TOP:\r\n case ArrowPosition.RIGHT_CENTER:\r\n case ArrowPosition.RIGHT_BOTTOM:\r\n return dimension.right - dimension.left;\r\n case ArrowPosition.BOTTOM_LEFT:\r\n case ArrowPosition.TOP_LEFT:\r\n case ArrowPosition.LEFT_TOP:\r\n case ArrowPosition.LEFT_CENTER:\r\n case ArrowPosition.LEFT_BOTTOM:\r\n return 0;\r\n case ArrowPosition.BOTTOM_CENTER:\r\n case ArrowPosition.TOP_CENTER:\r\n default:\r\n return (dimension.right - dimension.left) / 2;\r\n }\r\n })();\r\n\r\n const top = ((): number => {\r\n switch (arrowClass) {\r\n case ArrowPosition.LEFT_CENTER:\r\n case ArrowPosition.RIGHT_CENTER:\r\n return (dimension.bottom - dimension.top) / 2;\r\n case ArrowPosition.LEFT_BOTTOM:\r\n case ArrowPosition.RIGHT_BOTTOM:\r\n case ArrowPosition.BOTTOM_LEFT:\r\n case ArrowPosition.BOTTOM_RIGHT:\r\n case ArrowPosition.BOTTOM_CENTER:\r\n return dimension.bottom - dimension.top;\r\n case ArrowPosition.LEFT_TOP:\r\n case ArrowPosition.RIGHT_TOP:\r\n case ArrowPosition.TOP_LEFT:\r\n case ArrowPosition.TOP_RIGHT:\r\n case ArrowPosition.TOP_CENTER:\r\n default:\r\n return 0;\r\n }\r\n })();\r\n\r\n return { left, top };\r\n};\r\n\r\nconst getStaticOffsetForArrowClass = (arrowClass: string): StringOffset => {\r\n const left = ((): string => {\r\n switch (arrowClass) {\r\n case ArrowPosition.RIGHT_TOP:\r\n case ArrowPosition.RIGHT_CENTER:\r\n case ArrowPosition.RIGHT_BOTTOM:\r\n return '- 1.75rem';\r\n case ArrowPosition.LEFT_TOP:\r\n case ArrowPosition.LEFT_CENTER:\r\n case ArrowPosition.LEFT_BOTTOM:\r\n return '+ 1.75rem';\r\n case ArrowPosition.BOTTOM_RIGHT:\r\n case ArrowPosition.TOP_RIGHT:\r\n return '+ 1.75rem';\r\n case ArrowPosition.BOTTOM_LEFT:\r\n case ArrowPosition.TOP_LEFT:\r\n return '- 1.75rem';\r\n case ArrowPosition.BOTTOM_CENTER:\r\n case ArrowPosition.TOP_CENTER:\r\n default:\r\n return '0';\r\n }\r\n })();\r\n\r\n const top = ((): string => {\r\n switch (arrowClass) {\r\n case ArrowPosition.LEFT_CENTER:\r\n case ArrowPosition.RIGHT_CENTER:\r\n return '0';\r\n case ArrowPosition.LEFT_TOP:\r\n case ArrowPosition.RIGHT_TOP:\r\n case ArrowPosition.BOTTOM_LEFT:\r\n case ArrowPosition.BOTTOM_RIGHT:\r\n case ArrowPosition.BOTTOM_CENTER:\r\n return '- 1.75rem';\r\n case ArrowPosition.LEFT_BOTTOM:\r\n case ArrowPosition.RIGHT_BOTTOM:\r\n case ArrowPosition.TOP_LEFT:\r\n case ArrowPosition.TOP_RIGHT:\r\n case ArrowPosition.TOP_CENTER:\r\n default:\r\n return '+ 1.75rem';\r\n }\r\n })();\r\n\r\n return { left, top };\r\n};\r\n\r\nconst getArrowClass = (element: HTMLElement): string => {\r\n const candidates = arrowClasses.filter((className) =>\r\n element.classList.contains(className),\r\n );\r\n\r\n if (candidates.length === 0) {\r\n return 'top-center';\r\n }\r\n\r\n return candidates[0].substring(1);\r\n};\r\n\r\nclass Popover extends BaseComponent {\r\n private static events = ['buttonClicked', 'closeButtonClicked'];\r\n private attachedTo: HTMLElement | null;\r\n private attachementContainer: HTMLElement | null;\r\n\r\n constructor(container: HTMLElement) {\r\n super(container);\r\n\r\n const closeButton = container.querySelector('.a-button--integrated');\r\n const button = container.querySelector(\r\n '.a-button:not(.a-button--integrated)',\r\n );\r\n\r\n if (button) {\r\n button.addEventListener('click', () =>\r\n this.triggerEvent('buttonClicked'),\r\n );\r\n }\r\n\r\n if (closeButton) {\r\n closeButton.addEventListener('click', () =>\r\n this.triggerEvent('closeButtonClicked'),\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Attach the popover to the given target element, moving it's position so\r\n * the popover's arrow is pointing at the target\r\n *\r\n * @param target an element to attach to\r\n * @param moveToContainer also, move the popoever element to be a child of this\r\n * container, defaults to document.body.\r\n * NOTE: if you do not want to have the popover leave your\r\n * structure, supply a container with\r\n * `position: relative`here.\r\n */\r\n public attach(\r\n target: HTMLElement,\r\n moveToContainer: HTMLElement = document.body,\r\n ): Popover {\r\n moveToContainer.appendChild(this.container);\r\n this.container.classList.remove(DETACHED_CLASS);\r\n\r\n this.attachedTo = target;\r\n this.attachementContainer = moveToContainer;\r\n\r\n this.recalculatePosition();\r\n\r\n return this;\r\n }\r\n\r\n private recalculatePosition(): void {\r\n if (!this.attachedTo) {\r\n return;\r\n }\r\n const targetRect = getPositionClientRect(this.attachedTo);\r\n\r\n const arrowClass = getArrowClass(this.container);\r\n\r\n this.container.style.left = '-9999px';\r\n this.container.style.display = 'block';\r\n\r\n const dimensions = this.container.getBoundingClientRect();\r\n\r\n const containerOffset = getPositionClientRect(this.attachementContainer);\r\n\r\n const targetOffset = getTargetOffsetForPositionAndArrowClass(\r\n targetRect,\r\n arrowClass,\r\n );\r\n\r\n const positionOffset = getPositionOffsetForDimensionAndArrowClass(\r\n dimensions,\r\n arrowClass,\r\n );\r\n\r\n const staticOffset = getStaticOffsetForArrowClass(arrowClass);\r\n\r\n const leftPixels = `${\r\n targetOffset.left - containerOffset.left - positionOffset.left\r\n }px`;\r\n const leftStyle =\r\n staticOffset.left === '0'\r\n ? leftPixels\r\n : `calc(${leftPixels} ${staticOffset.left})`;\r\n\r\n this.container.style.left = leftStyle;\r\n\r\n const topPixels = `${\r\n targetOffset.top - containerOffset.top - positionOffset.top\r\n }px`;\r\n const topStyle =\r\n staticOffset.top === '0'\r\n ? topPixels\r\n : `calc(${topPixels} ${staticOffset.top})`;\r\n\r\n this.container.style.top = topStyle;\r\n\r\n this.container.style.display = '';\r\n }\r\n\r\n public show(): void {\r\n this.container.classList.add(SHOW_CLASS);\r\n }\r\n\r\n public hide(): void {\r\n this.container.classList.remove(SHOW_CLASS);\r\n }\r\n\r\n public setPosition(position: ArrowPosition): void {\r\n this.container.classList.remove(`-${getArrowClass(this.container)}`);\r\n this.container.classList.add(`-${position}`);\r\n this.recalculatePosition();\r\n }\r\n}\r\n\r\nexport default Popover;\r\n","import BaseComponent from '../../baseComponent';\r\nimport ElementWithComponent from '../../ElementWithComponent';\r\nimport Box from '../../atoms/box';\r\n\r\nconst LONG_CAPTION_CLASS = '-long-caption';\r\nconst FIGCAPTION_OPEN_CLASS = '-open';\r\nconst IMAGE_ACTIVE_CLASS = '-active';\r\nconst mobileWidth = 768;\r\nclass Lightbox extends BaseComponent {\r\n\r\n protected static events = [\r\n 'closeClicked',\r\n 'next',\r\n 'back',\r\n 'backgroundClicked',\r\n ];\r\n\r\n /**\r\n * the underlying box component\r\n */\r\n private box: Box;\r\n\r\n /**\r\n * returns a valid lightbox ID to place into the modal box for the given string\r\n */\r\n public static lightboxId = (id: string): string =>\r\n `frontend-kit-lightbox-${id}`;\r\n\r\n /**\r\n * finds a lightbox with the given ID\r\n */\r\n public static findLightbox = (\r\n id: string,\r\n getElementByID: typeof window.document.getElementById = (id: string) => window.document.getElementById(Lightbox.lightboxId(id))\r\n ): ElementWithComponent | null => {\r\n\r\n return getElementByID(id) as ElementWithComponent;\r\n }\r\n\r\n /**\r\n * shows the modal with the given modal ID, if it exists\r\n */\r\n public static showLightbox = (id: string): void => {\r\n const lightboxElement = Lightbox.findLightbox(id);\r\n\r\n if (!lightboxElement) {\r\n console.warn(`Could not find a lightbox with id ${id} to show.`);\r\n } else {\r\n lightboxElement.component.show();\r\n }\r\n };\r\n\r\n /**\r\n * hides the modal with the given modal ID, if it exists\r\n */\r\n public static hideLightbox = (id: string): void => {\r\n const lightboxElement = Lightbox.findLightbox(id);\r\n\r\n if (!lightboxElement) {\r\n console.warn(`Could not find a lightbox with id ${id} to hide.`);\r\n } else {\r\n lightboxElement.component.hide();\r\n }\r\n };\r\n\r\n /**\r\n * wrapper of lightbox which determines the complete hight of the lightbox\r\n */\r\n private readonly wrapper: HTMLElement;\r\n /**\r\n * An array of images used in the lightbox\r\n */\r\n private readonly images: NodeListOf;\r\n /**\r\n * A counter element\r\n */\r\n private readonly counter: HTMLElement;\r\n /**\r\n * A next button element\r\n */\r\n private readonly nextButton: HTMLElement;\r\n /**\r\n * A back button element\r\n */\r\n private readonly backButton: HTMLElement;\r\n /**\r\n * A close button element\r\n */\r\n private readonly closeButton: HTMLElement;\r\n /**\r\n * A collapse button element\r\n */\r\n private readonly expandButton: HTMLElement;\r\n /**\r\n * Boolean if light box is extended variant\r\n */\r\n private readonly extended: boolean;\r\n /**\r\n * Boolean if light box is sequence variant\r\n */\r\n private readonly sequence: boolean;\r\n /**\r\n * Boolean if light box is open\r\n */\r\n private isOpen: boolean;\r\n /**\r\n * Boolean if light box is in mobile viewport\r\n */\r\n private isMobile: boolean;\r\n /**\r\n * Index of currently shown image\r\n */\r\n private currentIndex: number = 0;\r\n\r\n constructor(container: HTMLElement) {\r\n super(container);\r\n\r\n //inner state of the component\r\n this.extended = false;\r\n this.sequence = false;\r\n this.isOpen = false;\r\n this.isMobile = window.outerWidth < mobileWidth;\r\n\r\n // determine variant of the light box\r\n if (this.container.classList.contains('-extended')) this.extended = true;\r\n if (this.container.classList.contains('m-lightbox--sequence')) this.sequence = true;\r\n\r\n // adding resize handler to watch if caption is to long\r\n // if to long show expand control\r\n // only run when light box is open\r\n // set boolean if mobile viewport\r\n window.addEventListener('resize', () => {\r\n this.isMobile = window.outerWidth < mobileWidth;\r\n\r\n if (this.isOpen && this.extended) {\r\n this.toggleCaption(true);\r\n this.toggleExpandButton(true);\r\n\r\n if (this.isCaptionToLong()) {\r\n this.container.classList.add(LONG_CAPTION_CLASS);\r\n } else {\r\n this.container.classList.remove(LONG_CAPTION_CLASS);\r\n }\r\n }\r\n\r\n })\r\n\r\n // get all relevant elements for further handling\r\n this.wrapper = container.querySelector('.m-lightbox__wrapper');\r\n this.images = container.querySelectorAll('.a-image');\r\n this.counter = container.querySelector('.m-lightbox__counter');\r\n this.closeButton = container.querySelector('[data-frok-action=\"close\"]');\r\n this.nextButton = container.querySelector('[data-frok-action=\"right\"]');\r\n this.backButton = container.querySelector('[data-frok-action=\"left\"]');\r\n this.expandButton = container.querySelector('[data-frok-action=\"expand\"]');\r\n const boxElement = container.querySelector('.a-box, .a-box--modal');\r\n\r\n this.setActiveImage();\r\n\r\n // Set Up Image sequence\r\n if (this.nextButton instanceof HTMLElement && this.sequence) {\r\n this.nextButton.addEventListener('click', () => {\r\n this.triggerEvent('next', this.currentIndex);\r\n });\r\n }\r\n\r\n if (this.backButton instanceof HTMLElement && this.sequence) {\r\n this.backButton.addEventListener('click', () => {\r\n this.triggerEvent('back', this.currentIndex);\r\n });\r\n }\r\n\r\n // close Button\r\n if (this.closeButton instanceof HTMLElement) {\r\n this.closeButton.addEventListener('click', () => {\r\n this.triggerEvent('closeClicked');\r\n });\r\n }\r\n\r\n // expand button for long captions\r\n if (this.expandButton instanceof HTMLElement && this.extended) {\r\n this.expandButton.addEventListener('click', () => {\r\n this.toggleCaption();\r\n this.toggleExpandButton();\r\n })\r\n }\r\n\r\n if (boxElement) {\r\n this.box = new Box(boxElement as HTMLElement);\r\n\r\n if (this.box.isModal()) {\r\n // move to the end as well\r\n document.body.appendChild(container);\r\n // and move the box back into here\r\n container.appendChild(boxElement);\r\n }\r\n\r\n this.wrapper.addEventListener('click', event => {\r\n if (event.target === this.wrapper) {\r\n this.triggerEvent('backgroundClicked');\r\n }\r\n });\r\n\r\n } else {\r\n throw new Error(\r\n 'Dialog is missing a box, please check your dialog markup',\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * @name next\r\n * @param {number} index current index\r\n *\r\n * set new currentIndex\r\n * resets caption & expandButton\r\n * set new active image\r\n * check if changes related to the captions length is needed\r\n */\r\n public next = (index: number): void => {\r\n if (index + 1 !== this.images.length) {\r\n this.currentIndex = index + 1;\r\n }\r\n \r\n this.toggleCaption(true);\r\n this.toggleExpandButton(true);\r\n this.setActiveImage();\r\n this.setLongCaptionClass();\r\n };\r\n \r\n /**\r\n * @name back\r\n * @param {number} index current index\r\n *\r\n * set new currentIndex\r\n * resets caption & expandButton\r\n * set new active image\r\n * check if changes related to the captions length is needed\r\n */\r\n public back = (index: number): void => {\r\n if (index !== 0) {\r\n this.currentIndex = index - 1;\r\n }\r\n\r\n this.toggleCaption(true);\r\n this.toggleExpandButton(true);\r\n this.setActiveImage();\r\n this.setLongCaptionClass();\r\n };\r\n\r\n /**\r\n * @name show\r\n * shows this dialog\r\n */\r\n public show(): void {\r\n this.box.show();\r\n this.isOpen = true;\r\n \r\n this.setLongCaptionClass();\r\n }\r\n\r\n /**\r\n * @name hide\r\n * hides this dialog\r\n * set inner state\r\n * reset caption & long caption class & expand button\r\n * reset currentIndex to 0\r\n * set active image \r\n */\r\n public hide(): void {\r\n this.box.hide();\r\n this.isOpen = false;\r\n\r\n this.container.classList.remove(LONG_CAPTION_CLASS);\r\n this.toggleCaption(true);\r\n this.toggleExpandButton(true);\r\n\r\n this.currentIndex = 0;\r\n this.setActiveImage();\r\n }\r\n\r\n /**\r\n * @name isCaptionToLong\r\n * Checks the sizes of the image caption\r\n * \r\n * @return true if the text needs to be expandable\r\n */\r\n private isCaptionToLong(): boolean {\r\n const imageCaption = this.images[this.currentIndex].querySelector(\r\n 'figcaption',\r\n );\r\n let result: boolean;\r\n\r\n if (this.isMobile) {\r\n /**\r\n * only on mobil the check is different, because the controls need to visible \r\n * compared to tablet and bigger viewport\r\n * check if the scrollHeight of the caption is bigger or equal to\r\n * height of the wrapper - header hight (48) - footer height (48) - the image-size\r\n * \r\n */\r\n result = imageCaption.scrollHeight >= this.wrapper.clientHeight - 48 - 48 - this.images[this.currentIndex].clientHeight;\r\n } else {\r\n result = imageCaption.clientHeight < imageCaption.scrollHeight;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * @name toggleCaption\r\n * @param {boolean} collapse optional parameter to overwrite toggle and collapse the caption\r\n * \r\n * expand caption to be completely visible\r\n * if collapse will passed, the open class will be removed\r\n */\r\n private toggleCaption(collapse?: boolean): void {\r\n const imageCaption = this.images[this.currentIndex].querySelector(\r\n 'figcaption',\r\n );\r\n\r\n if (imageCaption instanceof HTMLElement) {\r\n imageCaption.classList.contains(FIGCAPTION_OPEN_CLASS)\r\n ? imageCaption.classList.remove(FIGCAPTION_OPEN_CLASS)\r\n : imageCaption.classList.add(FIGCAPTION_OPEN_CLASS)\r\n \r\n if (collapse) imageCaption.classList.remove(FIGCAPTION_OPEN_CLASS);\r\n }\r\n }\r\n\r\n /**\r\n * @name toggleExpandButton\r\n * @param {boolean} collapse optional parameter to overwrite toggle and collapse the expandButton\r\n * toggle the expand button to open / close state\r\n */\r\n private toggleExpandButton(collapse?: boolean): void {\r\n if (this.expandButton instanceof HTMLElement) {\r\n this.expandButton.classList.contains(FIGCAPTION_OPEN_CLASS)\r\n ? this.expandButton.classList.remove(FIGCAPTION_OPEN_CLASS)\r\n : this.expandButton.classList.add(FIGCAPTION_OPEN_CLASS)\r\n \r\n if (collapse) this.expandButton.classList.remove(FIGCAPTION_OPEN_CLASS);\r\n }\r\n }\r\n\r\n /**\r\n * @name setLongCaptionClass\r\n *\r\n * set -long-caption class on lightbox if caption is to long\r\n */\r\n private setLongCaptionClass(): void {\r\n if (this.extended && this.isCaptionToLong()) {\r\n this.container.classList.add(LONG_CAPTION_CLASS);\r\n } else if (this.extended && !this.isCaptionToLong()) {\r\n this.container.classList.remove(LONG_CAPTION_CLASS);\r\n }\r\n }\r\n\r\n /**\r\n * @name setActiveImage\r\n * \r\n * sets the new active image, related to current index\r\n * update counter\r\n */\r\n private setActiveImage(): void {\r\n this.images.forEach((image, index) => {\r\n if (index === this.currentIndex) {\r\n image.classList.add(IMAGE_ACTIVE_CLASS);\r\n } else {\r\n image.classList.remove(IMAGE_ACTIVE_CLASS);\r\n };\r\n })\r\n\r\n if (this.counter instanceof HTMLElement) {\r\n this.counter.innerHTML = `${this.currentIndex + 1} / ${this.images.length}`;\r\n }\r\n }\r\n}\r\n\r\nexport default Lightbox;\r\n","import BaseComponent from '../../baseComponent';\r\n\r\n/**\r\n * @name closeAll\r\n * @description\r\n * close all of the listed entries\r\n */\r\nconst closeAll = (navigationEntries: HTMLElement[]) => {\r\n navigationEntries.forEach((entry: HTMLElement): void => {\r\n entry.parentElement.classList.remove('-open');\r\n });\r\n};\r\n\r\n/**\r\n * @name handleOpeningTransitionEnd\r\n * @param {HTMLElement} container the element which should receive the transitionend eventHandler\r\n * @description\r\n * function will add transitionend eventHandler to received element\r\n * handler function will be attached\r\n * handler function itself will detach itself form element after transitionend\r\n */\r\nconst handleOpeningTransitionEnd = (container: HTMLElement): void => {\r\n const handler = () => {\r\n container.classList.add('-open');\r\n container.classList.remove('-opening');\r\n\r\n container.removeEventListener('transitionend', handler);\r\n };\r\n\r\n container.addEventListener('transitionend', handler);\r\n};\r\n\r\nexport default class SideNavigation extends BaseComponent {\r\n private sideMenuTriggerOpen: HTMLButtonElement;\r\n private sideMenuTriggerClose: HTMLButtonElement;\r\n private menuItems: HTMLButtonElement[];\r\n private triggerItems: HTMLElement[];\r\n\r\n /**\r\n * @name show\r\n * @description\r\n * function to open the side navigation with an external trigger\r\n */\r\n public show(): void {\r\n if (\r\n !this.container.classList.contains('-open') &&\r\n !this.container.classList.contains('-opening')\r\n ) {\r\n handleOpeningTransitionEnd(this.container);\r\n this.container.classList.add('-opening');\r\n }\r\n }\r\n\r\n constructor(container: HTMLElement) {\r\n super(container);\r\n\r\n if (this.alreadyInitialized === true) {\r\n // do not set up event handlers twice, as they will not work\r\n return this;\r\n }\r\n /**\r\n * Define DOM Elements and Variables\r\n */\r\n this.sideMenuTriggerOpen = container.querySelector(\r\n '.m-side-navigation__header__trigger.-open',\r\n );\r\n\r\n this.sideMenuTriggerClose = container.querySelector(\r\n '.m-side-navigation__header__trigger.-close',\r\n );\r\n\r\n this.menuItems = Array.from(\r\n container.querySelectorAll('.m-side-navigation__menuItem'),\r\n );\r\n\r\n this.triggerItems = Array.from(\r\n container.querySelectorAll('.m-side-navigation__menuItem button'),\r\n );\r\n\r\n /**\r\n * Define Events\r\n */\r\n // Click the burger icon's button and open the side navigation\r\n // Make the burger icon's accessible\r\n this.sideMenuTriggerOpen.addEventListener('click', () => {\r\n container.classList.add('-opening');\r\n handleOpeningTransitionEnd(this.container);\r\n this.sideMenuTriggerOpen.setAttribute('tabindex', '-1');\r\n this.sideMenuTriggerClose.setAttribute('tabindex', '0');\r\n });\r\n\r\n // Click the close icon's button and close the side navigation\r\n // Make the burger icon's no longer accessible\r\n // Close all the open subitems\r\n this.sideMenuTriggerClose.addEventListener('click', () => {\r\n container.classList.remove('-open');\r\n container.classList.remove('-opening');\r\n // this.container.removeEventListener('transitionend');\r\n this.sideMenuTriggerOpen.setAttribute('tabindex', '0');\r\n this.sideMenuTriggerClose.setAttribute('tabindex', '-1');\r\n closeAll(this.triggerItems);\r\n });\r\n\r\n // Click the icons and open the side navigation\r\n // Once the navigation is open make those items clickable\r\n this.menuItems.forEach((menuItem) => {\r\n menuItem.addEventListener('click', (event) => {\r\n if (!container.classList.contains('-open')) {\r\n event.preventDefault();\r\n }\r\n container.classList.add('-open');\r\n });\r\n });\r\n\r\n this.triggerItems.forEach((button) => {\r\n // Click a group item\r\n button.addEventListener('click', () => {\r\n // if the accordion is open, close it\r\n if (container.classList.contains('-open')) {\r\n if (button.parentElement.classList.contains('-open')) {\r\n button.parentElement.classList.remove('-open');\r\n button.parentElement\r\n .querySelectorAll('a:not(.-disabled')\r\n .forEach((link) => link.setAttribute('tabIndex', '-1'));\r\n } else {\r\n // Close all menus\r\n closeAll(this.triggerItems);\r\n // Open the menu that was clicked\r\n button.parentElement.classList.add('-open');\r\n button.parentElement\r\n .querySelectorAll('a:not(.-disabled')\r\n .forEach((link) => link.removeAttribute('tabIndex'));\r\n }\r\n }\r\n });\r\n });\r\n }\r\n}\r\n","import BaseComponent from '../../baseComponent';\r\n\r\nenum State {\r\n success = 'success',\r\n error = 'error',\r\n warning = 'warning',\r\n neutral = 'neutral',\r\n}\r\n\r\nconst states = [State.success, State.error, State.warning, State.neutral];\r\n\r\n// from https://stackoverflow.com/questions/494143/creating-a-new-dom-element-from-an-html-string-using-built-in-dom-methods-or-pro\r\nconst createElementFromHTML = (htmlString: string): Node => {\r\n const div = document.createElement('div');\r\n div.innerHTML = htmlString.trim();\r\n\r\n return div.firstChild;\r\n};\r\n\r\nconst createNotificationTemplate = (content: string, level: State): string => `\r\n
\r\n ${\r\n level &&\r\n ``\r\n }\r\n
\r\n ${content}\r\n
\r\n
\r\n`;\r\n\r\nclass FormField extends BaseComponent {\r\n private notification: HTMLElement;\r\n\r\n private field: HTMLElement;\r\n\r\n private input: HTMLInputElement;\r\n\r\n constructor(container: HTMLElement) {\r\n super(container);\r\n\r\n this.field = container.querySelector(\r\n '.a-text-field, .a-text-area, .a-radio-button, .a-checkbox, .a-dropdown, .a-toggle',\r\n );\r\n\r\n this.input = this.field.querySelector('input, textarea');\r\n }\r\n\r\n public setState(state: string, notification?: string): void {\r\n if (!states.includes(state as State)) {\r\n console.warn(`Unknown state ${state} for a FormField - ignoring.`);\r\n return;\r\n }\r\n states.forEach((stateEntry) =>\r\n this.field.classList.remove(`-${stateEntry}`),\r\n );\r\n this.field.classList.add(`-${state}`);\r\n if (notification) {\r\n this.setNotification(notification);\r\n } else {\r\n this.clearNotification();\r\n }\r\n }\r\n\r\n private clearNotification(): void {\r\n if (this.notification) {\r\n this.notification.remove();\r\n }\r\n }\r\n\r\n private setNotification(content: string): void {\r\n this.clearNotification();\r\n\r\n this.notification = createElementFromHTML(\r\n createNotificationTemplate(content, this.getState()),\r\n ) as HTMLElement;\r\n\r\n this.container.appendChild(this.notification);\r\n }\r\n\r\n private getState(): State {\r\n const candidates = states.filter((state) =>\r\n this.field.classList.contains(`-${state}`),\r\n );\r\n\r\n if (candidates.length === 0) {\r\n return State.neutral;\r\n }\r\n return candidates[0];\r\n }\r\n}\r\n\r\nexport default FormField;\r\n","/**\r\n * @name updateIndicatorState\r\n *\r\n * @param indicators List of all all indicator elements\r\n * @param activeIndex Current Index of Pagination\r\n * @description\r\n * Updates the indicators selected/unselected state after a change of pagination\r\n */\r\n\r\nconst CLASS_SELECTED = '-selected';\r\n\r\nconst updateIndicatorState = (\r\n indicators: NodeListOf,\r\n activeIndex: number,\r\n): void => {\r\n indicators.forEach(indicator => {\r\n const parsed = parseInt(indicator.getAttribute('data-index'), 0);\r\n\r\n if (parsed === activeIndex) {\r\n indicator.classList.add(CLASS_SELECTED);\r\n } else if (indicator.classList.contains(CLASS_SELECTED)) {\r\n indicator.classList.remove(CLASS_SELECTED);\r\n }\r\n });\r\n};\r\n\r\nexport default updateIndicatorState;\r\n","/**\r\n * @name createPaginationArray\r\n * @author Experience One AG\r\n *\r\n * @param activeIndex Current Index of Pagination\r\n * @param maxPages Maximium Amount of Pages to Show\r\n * @param visiblePagesAroundCurrent How many Pages should surround the Current Page\r\n * @param minVisibleItems Minimal Visible Pages and Truncation-Dots\r\n * @returns Array with Generated Pagination\r\n * @description\r\n * Generate Smart Truncated Pagination from a Range of Pages\r\n */\r\n\r\nconst createPaginationArray = (\r\n activeIndex: number,\r\n maxPages: number,\r\n visiblePagesAroundCurrent = 1,\r\n minVisibleItems = 7,\r\n): (number | string)[] => {\r\n const range = [];\r\n\r\n /**\r\n * If Amount of Pages is <= minimal visible Pages, show all Items\r\n */\r\n if (maxPages <= minVisibleItems) {\r\n return Array.from({ length: maxPages + 1 }, (_, i) => i).slice(1);\r\n }\r\n\r\n /**\r\n * Fill Array with activeIndex and the Surrounding Pages\r\n */\r\n for (\r\n let i = Math.max(2, activeIndex - visiblePagesAroundCurrent);\r\n i <= Math.min(maxPages - 1, activeIndex + visiblePagesAroundCurrent);\r\n i += 1\r\n ) {\r\n range.push(i);\r\n }\r\n\r\n /**\r\n * Add Truncation-Dots to the Beginning of the Array if activeIndex is High Enough.\r\n * We Use 3 as a Decider Because when the Value is < 3 we don't want to Show\r\n * Truncation-Dots at the Array's Beginning.\r\n *\r\n * Example:\r\n * activeIndex - visiblePagesAroundCurrent = 3;\r\n * The Array at this point would be [2,3,4].\r\n * If we would Add Truncation-Dots now, we would get ['...', 2, 3, 4] which is wrong,\r\n * because it ends up with [1, '...', 2, 3, 4].\r\n */\r\n if (activeIndex - visiblePagesAroundCurrent > 3) {\r\n range.unshift('...');\r\n }\r\n\r\n /**\r\n * Add Truncation-Dots to the End of the Array if activeIndex is Low Enough.\r\n */\r\n if (activeIndex + visiblePagesAroundCurrent < maxPages - 2) {\r\n range.push('...');\r\n }\r\n\r\n /**\r\n * The pagination must always show N Items.\r\n * N = minVisibleItems - (2 * visiblePagesAroundCurrent).\r\n * If Length of Array is < N, fill up Array with Missing Pages.\r\n */\r\n if (range.length < minVisibleItems - 2 * visiblePagesAroundCurrent) {\r\n if (activeIndex < minVisibleItems - 2 * visiblePagesAroundCurrent) {\r\n /**\r\n * If activeIndex is low enough, fill up the Array from 1 - N\r\n * and add Truncation-Dots as well as maxPages-Value (aka Last Page).\r\n * N = minVisibleItems - 2.\r\n * - 2 Because of the 2 Items (Dots, maxPages) that will be Added After\r\n * Filling the Array with Missing Pages.\r\n */\r\n\r\n range.length = 0;\r\n\r\n for (let i = 1; i <= minVisibleItems - 2; i += 1) {\r\n range.push(i);\r\n }\r\n\r\n range.push('...');\r\n range.push(maxPages);\r\n\r\n return range;\r\n }\r\n\r\n /**\r\n * If activeIndex is _NOT_ low enough, fill up the Array from N - maxPages\r\n * and add Truncation-Dots as well as the First Page.\r\n */\r\n\r\n range.length = 0;\r\n range.push(1, '...');\r\n\r\n const arrayBaseLength = range.length;\r\n\r\n for (\r\n let i = maxPages;\r\n i > maxPages - (minVisibleItems - arrayBaseLength);\r\n i -= 1\r\n ) {\r\n range.splice(arrayBaseLength, 0, i);\r\n }\r\n\r\n return range;\r\n }\r\n\r\n range.unshift(1);\r\n range.push(maxPages);\r\n\r\n return range;\r\n};\r\n\r\nexport default createPaginationArray;\r\n","import createPaginationArray from './createPaginationArray';\r\n\r\n/**\r\n * @name updatePagination\r\n *\r\n * @param activeIndex Current Index of Pagination\r\n * @param maxPages Maximium Amount of Pages to Show\r\n * @param indicators List of all all indicator elements\r\n * @description\r\n * Updates the numbers of the pagination when active index was changed.\r\n */\r\n\r\nconst updatePagination = (\r\n activeIndex: number,\r\n maxPages: number,\r\n indicators: NodeListOf,\r\n): void => {\r\n const paginationArray = createPaginationArray(activeIndex, maxPages);\r\n\r\n paginationArray.forEach((page, index) => {\r\n if (typeof page === 'number') {\r\n indicators[index].querySelector('span').textContent = page.toString();\r\n indicators[index].setAttribute('data-index', page.toString());\r\n } else if (typeof page === 'string') {\r\n indicators[index].querySelector('span').textContent = '...';\r\n indicators[index].removeAttribute('data-index');\r\n }\r\n });\r\n};\r\n\r\nexport default updatePagination;\r\n","import BaseComponent from '../../baseComponent';\r\nimport updateIndicatorState from './functions/updateIndicatorState';\r\nimport updatePagination from './functions/updatePagination';\r\n\r\nconst CLASS_NUMBERED = `a-page-indicator--numbered`;\r\nconst SELECTOR_INDICATOR = '.a-page-indicator__indicator';\r\nconst SELECTOR_ARROW_LEFT = '.a-page-indicator__caret.-left';\r\nconst SELECTOR_ARROW_RIGHT = '.a-page-indicator__caret.-right';\r\nconst BOUNDARY_CLASS = '-end';\r\n\r\nexport default class PageIndicator extends BaseComponent {\r\n protected static events = [\r\n 'clicked',\r\n 'nextClicked',\r\n 'prevClicked',\r\n 'indexChanged',\r\n 'maxLengthChanged',\r\n ];\r\n\r\n private indicators: NodeListOf;\r\n\r\n private arrowLeft: HTMLElement;\r\n\r\n private arrowRight: HTMLElement;\r\n\r\n public isNumbered: boolean;\r\n\r\n private activeIndex: number;\r\n\r\n private maxLength: number;\r\n\r\n constructor(container: HTMLElement) {\r\n super(container);\r\n\r\n /**\r\n * Define DOM Elements and Variables\r\n */\r\n this.indicators = container.querySelectorAll(SELECTOR_INDICATOR);\r\n this.arrowLeft = container.querySelector(SELECTOR_ARROW_LEFT);\r\n this.arrowRight = container.querySelector(SELECTOR_ARROW_RIGHT);\r\n this.isNumbered = container.classList.contains(CLASS_NUMBERED);\r\n\r\n // update inner state to rendered props given on the DOM element\r\n const startIndex =\r\n parseInt(container.getAttribute('data-start-index'), 0) || 0;\r\n\r\n const maxLength =\r\n parseInt(container.getAttribute('data-max-length'), 0) ||\r\n this.indicators.length;\r\n\r\n this.setMaxLength(maxLength);\r\n this.setActiveIndex(startIndex);\r\n\r\n // register click events for next and prev if arrows are given\r\n if (this.arrowLeft instanceof HTMLElement) {\r\n this.arrowLeft.addEventListener('click', () => {\r\n this.prev();\r\n this.triggerEvent('prevClicked');\r\n });\r\n }\r\n\r\n if (this.arrowRight instanceof HTMLElement) {\r\n this.arrowRight.addEventListener('click', () => {\r\n this.next();\r\n this.triggerEvent('nextClicked');\r\n });\r\n }\r\n\r\n if (this.indicators) {\r\n [...this.indicators].forEach(indicator => {\r\n indicator.addEventListener('click', () => {\r\n const clickedIndex = parseInt(\r\n indicator.getAttribute('data-index'),\r\n 0,\r\n );\r\n\r\n this.setActiveIndex(clickedIndex);\r\n this.triggerEvent('clicked', clickedIndex);\r\n });\r\n });\r\n }\r\n }\r\n\r\n public setActiveIndex(newIndex: number): number {\r\n if (newIndex > 0 && newIndex <= this.maxLength) {\r\n this.activeIndex = newIndex;\r\n\r\n if (this.isNumbered) {\r\n updatePagination(this.activeIndex, this.maxLength, this.indicators);\r\n this.updateArrowStyle();\r\n }\r\n\r\n updateIndicatorState(this.indicators, this.activeIndex);\r\n\r\n this.triggerEvent('indexChanged', newIndex);\r\n }\r\n\r\n /** @TODO don't be optimistic */\r\n return this.activeIndex;\r\n }\r\n\r\n public setMaxLength(length: number): number {\r\n this.maxLength = length;\r\n this.triggerEvent('maxLengthChanged', this.maxLength);\r\n\r\n return this.maxLength;\r\n }\r\n\r\n /**\r\n * @name prev\r\n * @author Experience One AG\r\n * @copyright Robert Bosch GmbH\r\n *\r\n * @param amount Optional: Amount to Move. (Default: 1)\r\n * @returns New Active Index\r\n * @description\r\n * Move Back the Active Index by N\r\n */\r\n public prev(amount = 1): number {\r\n const newIndex = this.activeIndex - amount;\r\n\r\n return this.setActiveIndex(newIndex);\r\n }\r\n\r\n /**\r\n * @name next\r\n * @author Experience One AG\r\n * @copyright Robert Bosch GmbH\r\n *\r\n * @param amount Optional: Amount to Move. (Default: 1)\r\n * @returns New Active Index\r\n * @description\r\n * Move Forth the Active Index by N\r\n */\r\n public next(amount = 1): number {\r\n const newIndex = this.activeIndex + amount;\r\n\r\n return this.setActiveIndex(newIndex);\r\n }\r\n\r\n /**\r\n * @name updateArrowStyle\r\n * @author Experience One AG\r\n * @copyright Rober Bosch GmbH\r\n *\r\n * @description\r\n * update the style of the arrows related to the active index\r\n */\r\n private updateArrowStyle(): void {\r\n if (\r\n this.activeIndex <= 1 &&\r\n !this.arrowLeft.classList.contains(BOUNDARY_CLASS)\r\n ) {\r\n this.arrowLeft.classList.add(BOUNDARY_CLASS);\r\n this.arrowRight.classList.remove(BOUNDARY_CLASS);\r\n } else if (\r\n this.activeIndex >= this.maxLength &&\r\n !this.arrowRight.classList.contains(BOUNDARY_CLASS)\r\n ) {\r\n this.arrowRight.classList.add(BOUNDARY_CLASS);\r\n this.arrowLeft.classList.remove(BOUNDARY_CLASS);\r\n } else {\r\n this.arrowLeft.classList.remove(BOUNDARY_CLASS);\r\n this.arrowRight.classList.remove(BOUNDARY_CLASS);\r\n }\r\n }\r\n}\r\n","import BaseComponent from '../../baseComponent';\r\nimport ElementWithComponent from '../../ElementWithComponent';\r\nimport Popover from '../../molecules/popover';\r\nimport { ArrowPosition } from '../../molecules/popover/constants';\r\n\r\n/**\r\n * closes the given menu entry\r\n */\r\nconst close = (entry: Element): void => {\r\n entry.parentElement.classList.remove('-open');\r\n};\r\n\r\n/**\r\n * close all of the listed entries\r\n */\r\nconst closeAll = (navigationEntries: HTMLElement[]): void => {\r\n navigationEntries.forEach(close);\r\n};\r\n\r\nexport default class ContextMenu extends BaseComponent {\r\n private accordions: HTMLButtonElement[];\r\n private menus: HTMLUListElement[];\r\n private contextMenuTriggerOpen: HTMLButtonElement;\r\n private contextMenuTriggerClose: HTMLButtonElement;\r\n private popoverElement: ElementWithComponent;\r\n private popover: Popover;\r\n\r\n constructor(container: HTMLElement) {\r\n super(container);\r\n\r\n this.contextMenuTriggerOpen = container.querySelector(\r\n '.o-context-menu__trigger[data-frok-action=\"open\"]',\r\n );\r\n\r\n this.contextMenuTriggerClose = container.querySelector(\r\n '.o-context-menu__trigger[data-frok-action=\"close\"]',\r\n );\r\n\r\n this.accordions = Array.from(\r\n container.querySelectorAll('.a-menu-item__group'),\r\n );\r\n\r\n this.menus = Array.from(container.querySelectorAll('.a-menu-item'));\r\n\r\n this.popoverElement = container.querySelector('.m-popover');\r\n this.popover = new Popover(this.popoverElement);\r\n\r\n /**\r\n * Define Events\r\n */\r\n\r\n // The button logic: Clicking it will show the context menu, clicking again will hide it again.\r\n if (this.contextMenuTriggerOpen || this.contextMenuTriggerClose) {\r\n this.contextMenuTriggerOpen.addEventListener('click', () => {\r\n this.open();\r\n });\r\n\r\n this.contextMenuTriggerClose.addEventListener('click', () => {\r\n this.close();\r\n });\r\n }\r\n\r\n // The accordion logic: If I click an accordion it'll open while closing previously opened accordions.\r\n // If I click again it'll closes the accordion.\r\n this.accordions.forEach((accordion) => {\r\n accordion.addEventListener('click', () => {\r\n if (accordion.parentElement.classList.contains('-open')) {\r\n accordion.parentElement.classList.remove('-open');\r\n } else {\r\n closeAll(this.accordions);\r\n accordion.parentElement.classList.add('-open');\r\n }\r\n });\r\n });\r\n\r\n document.addEventListener('click', (event) => {\r\n if (!event.composedPath().includes(this.container)) {\r\n this.close();\r\n }\r\n });\r\n }\r\n\r\n public open(): void {\r\n this.container.classList.add('-open');\r\n this.popover.attach(this.contextMenuTriggerClose, this.container);\r\n this.popover.show();\r\n }\r\n\r\n public close(): void {\r\n this.container.classList.remove('-open');\r\n this.popover.hide();\r\n closeAll(this.accordions);\r\n closeAll(this.menus);\r\n }\r\n\r\n public setPosition(position: ArrowPosition): void {\r\n this.popover.setPosition(position);\r\n }\r\n}\r\n","import BaseComponent from '../../baseComponent';\r\n\r\n/**\r\n * returns the entry for the given trigger\r\n */\r\nconst entryFor = (trigger: Element): Element => trigger.parentElement;\r\n\r\n/**\r\n * returns the menu for the given entry\r\n */\r\nconst menuFor = (entry: Element): Element =>\r\n Array.from(entry.children).find((child) =>\r\n child.classList.contains('o-header__navigation-sub-level'),\r\n );\r\n\r\n/**\r\n * returns the trigger for the given entry\r\n */\r\nconst triggerFor = (entry: Element): Element =>\r\n Array.from(entry.children).find((child) =>\r\n child.classList.contains('o-header__navigation-trigger'),\r\n );\r\n\r\n/**\r\n * set the given tabindex for all \"direct-descendant\" buttons and links in the given menu\r\n */\r\nconst sebTabIndexForButtonsAndLinks = (\r\n menu: Element,\r\n tabIndex: number,\r\n): void => {\r\n const secondLevelChildren = Array.from(menu.children)\r\n .map((child) => Array.from(child.children))\r\n .reduce((flat, list) => flat.concat(list));\r\n\r\n const triggers = secondLevelChildren.filter((child) =>\r\n child.classList.contains('o-header__navigation-trigger'),\r\n );\r\n\r\n triggers.forEach((trigger) => {\r\n const tabbableElement =\r\n trigger.tagName === 'button' ? trigger : trigger.children.item(0);\r\n\r\n tabbableElement.setAttribute('tabindex', tabIndex.toString(10));\r\n });\r\n};\r\n\r\n/**\r\n * closes the given menu entry - only handles DOM state updates\r\n */\r\nconst close = (entry: Element): void => {\r\n const associatedMenu = menuFor(entry);\r\n if (!associatedMenu) {\r\n // entries without any submenu do not need handling;\r\n return;\r\n }\r\n entry.classList.remove('-open');\r\n triggerFor(entry).setAttribute('aria-expanded', 'false');\r\n associatedMenu.setAttribute('aria-hidden', 'true');\r\n sebTabIndexForButtonsAndLinks(associatedMenu, -1);\r\n};\r\n\r\n/**\r\n * opens the given menu entry - only handles DOM state updates\r\n */\r\nconst open = (entry: Element): void => {\r\n const associatedMenu = menuFor(entry);\r\n if (!associatedMenu) {\r\n // entries without any submenu do not need handling;\r\n return;\r\n }\r\n entry.classList.add('-open');\r\n triggerFor(entry).setAttribute('aria-expanded', 'true');\r\n menuFor(entry).setAttribute('aria-hidden', 'false');\r\n sebTabIndexForButtonsAndLinks(associatedMenu, 0);\r\n};\r\n\r\nconst setSearchFormState = (\r\n form: HTMLElement,\r\n trigger: Element,\r\n closer: Element,\r\n enabled: boolean,\r\n): void => {\r\n form.setAttribute('aria-hidden', enabled ? 'false' : 'true');\r\n /* eslint-disable-next-line no-param-reassign */\r\n form.style.display = enabled ? 'inline-block' : 'none';\r\n\r\n const searchFormControls = Array.from(form.children[0].children).filter(\r\n (child) => {\r\n return (\r\n child.tagName.toLowerCase() === 'button' ||\r\n child.tagName.toLowerCase() === 'input'\r\n );\r\n },\r\n );\r\n\r\n searchFormControls.forEach((control) =>\r\n control.setAttribute('tabindex', enabled ? '0' : '-1'),\r\n );\r\n\r\n trigger.setAttribute('aria-expanded', enabled ? 'true' : 'false');\r\n trigger.setAttribute('tabindex', enabled ? '-1' : '0');\r\n closer.setAttribute('tabindex', enabled ? '0' : '-1');\r\n};\r\n\r\nconst enableSearchForm = (\r\n form: HTMLElement,\r\n trigger: Element,\r\n closer: Element,\r\n): void => setSearchFormState(form, trigger, closer, true);\r\n\r\nconst disableSearchForm = (\r\n form: HTMLElement,\r\n trigger: Element,\r\n closer: Element,\r\n): void => setSearchFormState(form, trigger, closer, false);\r\n\r\n/**\r\n * close all of the listed entries\r\n */\r\nconst closeAll = (navigationEntries: HTMLElement[]): void => {\r\n navigationEntries.forEach(close);\r\n};\r\n\r\nexport default class Header extends BaseComponent {\r\n private menuTrigger: HTMLButtonElement;\r\n private searchTrigger: HTMLButtonElement;\r\n private searchCloseTrigger: HTMLButtonElement;\r\n private searchForm: HTMLElement;\r\n private searchInput: HTMLInputElement;\r\n private pageMarginContainer: HTMLDivElement;\r\n private navigationTriggers: HTMLButtonElement[];\r\n private navigationCloseTriggers: HTMLButtonElement[];\r\n private firstLevelNavigationEntries: HTMLLIElement[];\r\n private secondLevelNavigationEntries: HTMLLIElement[];\r\n\r\n constructor(container: HTMLElement) {\r\n super(container);\r\n\r\n /**\r\n * Define DOM Elements and Variables\r\n */\r\n this.menuTrigger = container.querySelector('.o-header__menu-trigger');\r\n\r\n this.searchTrigger = container.querySelector('.o-header__search-open');\r\n this.searchCloseTrigger = container.querySelector(\r\n '.o-header__search .m-search-form .a-text-field__icon-close',\r\n );\r\n\r\n this.searchForm = container.querySelector(\r\n '.o-header__search .m-search-form',\r\n );\r\n\r\n this.searchInput = this.searchForm.querySelector('input');\r\n\r\n this.pageMarginContainer = container.querySelector('.e-container');\r\n\r\n this.navigationTriggers = Array.from(\r\n container.querySelectorAll('button.o-header__navigation-trigger'),\r\n );\r\n\r\n this.navigationCloseTriggers = Array.from(\r\n container.querySelectorAll('button.o-header__navigation-close-trigger'),\r\n );\r\n\r\n this.firstLevelNavigationEntries = Array.from(\r\n container.querySelectorAll('.o-header__navigation-first-level-item'),\r\n );\r\n\r\n this.secondLevelNavigationEntries = Array.from(\r\n container.querySelectorAll(\r\n '.o-header__navigation-first-level-item > ul > .o-header__navigation-sub-level-item',\r\n ),\r\n );\r\n\r\n this.menuTrigger.addEventListener('click', () => {\r\n container.classList.toggle('-menu-open');\r\n closeAll(this.firstLevelNavigationEntries);\r\n closeAll(this.secondLevelNavigationEntries);\r\n container.classList.remove('-second-level-open');\r\n container.classList.remove('-third-level-open');\r\n container.classList.remove('-search-open');\r\n disableSearchForm(\r\n this.searchForm,\r\n this.searchTrigger,\r\n this.searchCloseTrigger,\r\n );\r\n });\r\n\r\n this.searchTrigger.addEventListener('click', () => {\r\n container.classList.add('-search-open');\r\n container.classList.remove('-menu-open');\r\n this.adjustSeachFieldWidth();\r\n enableSearchForm(\r\n this.searchForm,\r\n this.searchTrigger,\r\n this.searchCloseTrigger,\r\n );\r\n this.searchInput.focus();\r\n });\r\n\r\n this.searchCloseTrigger.addEventListener('click', () => {\r\n container.classList.remove('-search-open');\r\n this.adjustSeachFieldWidth();\r\n disableSearchForm(\r\n this.searchForm,\r\n this.searchTrigger,\r\n this.searchCloseTrigger,\r\n );\r\n });\r\n\r\n // disable the form when initializing\r\n disableSearchForm(\r\n this.searchForm,\r\n this.searchTrigger,\r\n this.searchCloseTrigger,\r\n );\r\n\r\n /**\r\n * hide search form properly after initializing\r\n * we need to do this afterwards and out of CSS\r\n * to be able to attach eventListener on the element\r\n */\r\n this.searchForm.style.display = 'none';\r\n\r\n window.addEventListener('resize', () => this.adjustSeachFieldWidth());\r\n\r\n this.navigationTriggers.forEach((trigger) => {\r\n const associatedEntry = entryFor(trigger);\r\n const isOnFirstLevel = trigger.parentElement.classList.contains(\r\n 'o-header__navigation-first-level-item',\r\n );\r\n trigger.addEventListener('click', () => {\r\n associatedEntry.parentElement.scrollTop = 0;\r\n closeAll(this.secondLevelNavigationEntries);\r\n if (isOnFirstLevel) {\r\n closeAll(this.firstLevelNavigationEntries);\r\n container.classList.add('-second-level-open');\r\n container.classList.remove('-third-level-open');\r\n } else {\r\n container.classList.remove('-second-level-open');\r\n container.classList.add('-third-level-open');\r\n }\r\n open(associatedEntry);\r\n });\r\n });\r\n\r\n this.navigationCloseTriggers.forEach((trigger) => {\r\n const associatedEntry = trigger.parentElement.parentElement;\r\n const isOnFirstLevel = associatedEntry.classList.contains(\r\n 'o-header__navigation-first-level-item',\r\n );\r\n trigger.addEventListener('click', () => {\r\n container.classList.remove('-third-level-open');\r\n if (!isOnFirstLevel) {\r\n container.classList.add('-second-level-open');\r\n } else {\r\n container.classList.remove('-second-level-open');\r\n }\r\n\r\n close(associatedEntry);\r\n });\r\n });\r\n }\r\n\r\n private adjustSeachFieldWidth(): void {\r\n if (this.container.classList.contains('-search-open')) {\r\n const menuTriggerWidth = this.menuTrigger.offsetWidth;\r\n const containerWIdth = this.pageMarginContainer.offsetWidth;\r\n // some 16px are still missing from the width - I don't know where, but let's add them here\r\n this.searchForm.style.width = `calc(${\r\n containerWIdth - menuTriggerWidth\r\n }px + 1rem)`;\r\n } else {\r\n this.searchForm.style.width = '0px';\r\n }\r\n }\r\n}\r\n","enum Viewports {\r\n TABLET_AND_UP = '(min-width: 768px)',\r\n DESKTOP_AND_UP = '(min-width: 1194px)',\r\n}\r\n\r\nexport default Viewports;\r\n","import BaseComponent from '../../baseComponent';\r\nimport ElementWithComponent from '../../ElementWithComponent';\r\nimport { ArrowPosition } from '../../molecules/popover/constants';\r\nimport SideNavigation from '../../molecules/sideNavigation';\r\nimport Viewports from '../../viewports';\r\nimport ContextMenu from '../contextMenu';\r\n\r\nexport default class MinimalHeader extends BaseComponent {\r\n private sideNavigation: SideNavigation;\r\n private sideNavigationElement: ElementWithComponent;\r\n private burger: HTMLButtonElement;\r\n private contextMenuElement: ElementWithComponent;\r\n private contextMenu: ContextMenu;\r\n\r\n constructor(container: HTMLElement) {\r\n super(container);\r\n\r\n this.sideNavigationElement = container.querySelector('.m-side-navigation');\r\n this.contextMenuElement = container.querySelector('.o-context-menu');\r\n\r\n this.sideNavigation = new SideNavigation(this.sideNavigationElement);\r\n this.contextMenu = new ContextMenu(this.contextMenuElement);\r\n\r\n this.burger = container.querySelector('.o-minimal-header__burger button');\r\n\r\n this.burger.addEventListener('click', () => this.sideNavigation.show());\r\n\r\n this.adjustPopoverArrowPosition();\r\n window.addEventListener('resize', () => {\r\n this.adjustPopoverArrowPosition();\r\n });\r\n }\r\n\r\n private adjustPopoverArrowPosition() {\r\n if (window.matchMedia(Viewports.TABLET_AND_UP).matches) {\r\n this.contextMenu.setPosition(ArrowPosition.TOP_CENTER);\r\n } else {\r\n this.contextMenu.setPosition(ArrowPosition.TOP_RIGHT);\r\n }\r\n }\r\n}\r\n","/**\r\n * This file contains all logic part of the components\r\n * The file will be used to load components logic\r\n * on static sites\r\n */\r\nimport TextField from './atoms/textField';\r\nimport TextArea from './atoms/textArea';\r\nimport Checkbox from './atoms/checkbox';\r\nimport Box from './atoms/box/index';\r\nimport Notification from './atoms/notification/index';\r\nimport ProgressIndicator from './atoms/progressIndicator/index';\r\nimport ValueModificator from './atoms/valueModificator';\r\nimport Slider from './atoms/slider/index';\r\nimport TabNavigation from './atoms/tabNavigation/index';\r\n\r\nimport Dialog from './molecules/dialog/index';\r\nimport Popover from './molecules/popover';\r\nimport Lightbox from './molecules/lightbox/index';\r\n\r\nimport SideNavigation from './molecules/sideNavigation/index';\r\n\r\nimport ElementWithComponent from './ElementWithComponent';\r\nimport WindowWithFrontendKit from './WindowWithFrontendKit';\r\nimport FormField from './molecules/formField';\r\nimport PageIndicator from './atoms/pageIndicator/index';\r\n\r\nimport ContextMenu from './organisms/contextMenu/index';\r\nimport Header from './organisms/header/index';\r\nimport MinimalHeader from './organisms/minimalHeader/index';\r\n\r\n/**\r\n * @WARNING\r\n * the order of these entries determines the loading order\r\n * of component behavior code.\r\n *\r\n * Keep this in mind when adding components here\r\n */\r\nconst components = [\r\n {\r\n Component: Checkbox,\r\n selector: '.a-checkbox',\r\n },\r\n {\r\n Component: Lightbox,\r\n selector: '.m-lightbox',\r\n },\r\n {\r\n Component: Dialog,\r\n selector: '.m-dialog',\r\n },\r\n {\r\n Component: Box,\r\n // here, we only need functionality for modal boxes\r\n selector: '.a-box--modal',\r\n },\r\n {\r\n Component: Popover,\r\n // here, we only need functionality for detached popovers\r\n selector: '.m-popover:not(.-detached)',\r\n },\r\n {\r\n Component: TextField,\r\n selector: '.a-text-field',\r\n },\r\n {\r\n Component: TextArea,\r\n selector: '.a-text-area',\r\n },\r\n {\r\n Component: Notification,\r\n // here, we only need functionality for banner notifications\r\n selector: '.a-notification--banner',\r\n },\r\n {\r\n Component: ProgressIndicator,\r\n selector: '.a-progress-indicator',\r\n },\r\n {\r\n Component: FormField,\r\n selector: '.m-form-field',\r\n },\r\n {\r\n Component: SideNavigation,\r\n selector: '.m-side-navigation',\r\n },\r\n {\r\n Component: Slider,\r\n selector: '.a-slider',\r\n },\r\n {\r\n Component: PageIndicator,\r\n selector: '.a-page-indicator',\r\n },\r\n {\r\n Component: ValueModificator,\r\n selector: '.a-value-modificator',\r\n },\r\n {\r\n Component: TabNavigation,\r\n selector: '.a-tab-navigation',\r\n },\r\n {\r\n Component: ContextMenu,\r\n selector: '.o-context-menu',\r\n },\r\n {\r\n Component: Header,\r\n selector: '.o-header',\r\n },\r\n {\r\n Component: MinimalHeader,\r\n selector: '.o-minimal-header',\r\n },\r\n];\r\n\r\n/**\r\n * a registry of components that should be published to the\r\n * global object\r\n *\r\n * add any components to be published here\r\n * @TODO should we just publish all of them somehow?\r\n */\r\nconst componentRegistry = {\r\n Box,\r\n Dialog,\r\n Lightbox,\r\n Notification,\r\n};\r\n\r\n/**\r\n * prohibit any changes after here to ensure API stability\r\n */\r\nObject.freeze(componentRegistry);\r\n\r\n/**\r\n * make the registry publically available\r\n * the guard is there to ensure that this only happens once,\r\n * because this code may run more than once in e.g. HMR environments\r\n */\r\nif (!((window as undefined) as WindowWithFrontendKit).boschFrontendKit) {\r\n Object.defineProperty(window, 'boschFrontendKit', {\r\n get: () => componentRegistry,\r\n });\r\n}\r\n\r\ncomponents.forEach((component) => {\r\n [...document.querySelectorAll(component.selector)].forEach((element) => {\r\n if (!(element as ElementWithComponent).component) {\r\n // eslint-disable-next-line no-new\r\n new component.Component(element as ElementWithComponent);\r\n }\r\n });\r\n});\r\n\r\n// // dispatch an event when bootstrapping of frontend-kit is done\r\nconst event = new CustomEvent('bosch.frontend-kit-done');\r\ndocument.dispatchEvent(event);\r\n\r\nexport default components;\r\n"]}