{"version":3,"file":"js/main.e56ff670b1d769fd9a9b.js","mappings":"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","sources":["webpack:///./Features/Layout/Features/Header/Features/Disturbance/js/disturbance.ts","webpack:///./Features/Layout/Features/Header/Features/Menu/js/menu.ts","webpack:///./Features/Shared/Forms/_js/form-elements-main.ts","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/hasOwnProperty shorthand"],"sourcesContent":["const disturbance = document.querySelector('.header__disturbance');\r\nlet root = document.documentElement;\r\n\r\ninterface DisturbanceCookieData {\r\n closed: boolean;\r\n id: string;\r\n}\r\n\r\nfunction closeDisturbanceMessage() {\r\n disturbance?.classList.add('hidden');\r\n root.style.setProperty('--disturbance-height', 0 + \"rem\");\r\n const id = (disturbance?.querySelector('#disturbance-id') as HTMLInputElement).value;\r\n\r\n if (id != null) {\r\n const cookieData: DisturbanceCookieData = {\r\n closed: true,\r\n id: id\r\n };\r\n\r\n setCookie('Ekn_disturbance', cookieData, 2); // Set the cookie to expire in 2 days \r\n }\r\n}\r\n\r\nfunction setCookie(name: string, value: DisturbanceCookieData, days: number) {\r\n const expires = new Date();\r\n expires.setDate(expires.getDate() + days);\r\n const cookieValue = encodeURIComponent(JSON.stringify(value)) + `; expires=${expires.toUTCString()}; path=/`;\r\n document.cookie = `${name}=${cookieValue}`;\r\n}\r\n\r\nif (disturbance) {\r\n const height = disturbance.clientHeight/10; \r\n root.style.setProperty('--disturbance-height', height + \"rem\");\r\n const disturbanceMessageCloseButton = disturbance.querySelector('#disturbance-message-close-button') as HTMLButtonElement;\r\n disturbanceMessageCloseButton.addEventListener('click', closeDisturbanceMessage);\r\n}\r\n\r\n\r\n","/* HTML element constants */\r\nconst menuToggleButton = document.querySelector('.menu__toggle-button') as HTMLButtonElement;\r\nconst menuContentArea = document.querySelector('#menu-content-area') as HTMLDivElement;\r\nconst menuList = document.querySelector('.menu__list') as HTMLUListElement | null;\r\nconst menuItems = document.querySelectorAll('.menu__item') as NodeListOf;\r\nconst subMenuContainerLists = document.querySelectorAll('.sub-menu__item--container-list') as NodeListOf;\r\nconst subMenuToggleButtons = document.querySelectorAll('.menu__sub-menu-toggle-button') as NodeListOf;\r\nconst toolMenuList = document.querySelector('.tool-menu__list') as HTMLUListElement;\r\n\r\n/* Media query for desktop */\r\nconst desktopMediaQuery = window.matchMedia('(min-width: 1260px)');\r\n\r\nenum ScreenSizes {\r\n MOBILE = 'Mobile',\r\n DESKTOP = 'Desktop'\r\n}\r\n\r\n/* Set aria controls on sub menu buttons */\r\nconst setControlledSubMenu = (button: HTMLButtonElement): void => {\r\n const menuItemContainer = button.parentElement as HTMLDivElement;\r\n const subMenu = menuItemContainer.nextElementSibling as HTMLDivElement;\r\n const subMenuId = subMenu.id;\r\n\r\n button.setAttribute('aria-controls', subMenuId);\r\n}\r\n\r\n/* Expand and minify buttons */\r\nconst expandButton = (button: HTMLButtonElement, buttonClass: string): void => {\r\n button.classList.add(`${buttonClass}--expanded`);\r\n button.setAttribute('aria-expanded', 'true');\r\n}\r\n\r\nconst minifyButton = (button: HTMLButtonElement, buttonClass: string): void => {\r\n button.classList.remove(`${buttonClass}--expanded`);\r\n button.setAttribute('aria-expanded', 'false');\r\n}\r\n\r\n/* Open and close */\r\nconst getHeight = (element: HTMLDivElement): string => {\r\n element.style.display = 'block';\r\n\r\n const height = element.scrollHeight + 'px';\r\n element.style.removeProperty('display');\r\n return height;\r\n}\r\n\r\nconst openMenu = (element: HTMLDivElement, openClass: string): void => {\r\n const elementHeight = getHeight(element);\r\n element.classList.add(openClass);\r\n element.style.height = elementHeight;\r\n \r\n if (element.parentElement?.classList.contains('menu__item') && desktopMediaQuery.matches) {\r\n document.body.classList.add('menu-is-open');\r\n }\r\n\r\n window.setTimeout(() => {\r\n element.removeAttribute('style');\r\n }, 150);\r\n}\r\n\r\nconst closeMenu = (element: HTMLDivElement, openClass: string): void => {\r\n element.style.height = element.scrollHeight + 'px';\r\n\r\n window.setTimeout(() => {\r\n element.style.height = '0';\r\n }, 1);\r\n\r\n window.setTimeout(function () {\r\n element.classList.remove(openClass);\r\n element.removeAttribute('style');\r\n\r\n if (element.parentElement?.classList.contains('menu__item') && desktopMediaQuery.matches) {\r\n document.body.classList.remove('menu-is-open');\r\n }\r\n }, 150);\r\n}\r\n\r\nconst closeOpenMenuItems = (): void => {\r\n const openMenuItems = document.querySelectorAll('.menu__item--open') as NodeListOf;\r\n\r\n if (openMenuItems.length > 0) {\r\n openMenuItems.forEach(item => {\r\n const toggleButton = item.querySelector('.menu__item-container .menu__sub-menu-toggle-button') as HTMLButtonElement;\r\n const subMenu = item.lastElementChild as HTMLDivElement;\r\n\r\n item.classList.remove('menu__item--open');\r\n minifyButton(toggleButton, 'menu__sub-menu-toggle-button');\r\n closeMenu(subMenu, 'sub-menu--open');\r\n });\r\n }\r\n}\r\n\r\nconst openCurrentMenuItem = (): void => {\r\n const currentMenuItem: HTMLLIElement | null = document.querySelector('.menu__item--selected-parent');\r\n \r\n if (currentMenuItem) {\r\n const toggleButton = currentMenuItem.querySelector('.menu__item-container .menu__sub-menu-toggle-button') as HTMLButtonElement;\r\n \r\n currentMenuItem.classList.add('menu__item--open');\r\n expandButton(toggleButton, 'menu__sub-menu-toggle-button');\r\n currentMenuItem?.querySelector('.sub-menu')?.classList.add('sub-menu--open');\r\n }\r\n}\r\n\r\n// Close functions on desktop events\r\nconst closeMenuOnFocusOut = (event: FocusEvent, menuItem: HTMLLIElement): void => {\r\n if (event.relatedTarget instanceof Element && !menuItem.contains(event.relatedTarget)) {\r\n closeOpenMenuItems();\r\n }\r\n}\r\n\r\nconst closeMenuOnEsc = (event: KeyboardEvent): void => {\r\n if (event.defaultPrevented) {\r\n return;\r\n }\r\n\r\n if (event.key === 'Escape') {\r\n closeOpenMenuItems();\r\n }\r\n event.preventDefault();\r\n}\r\n\r\nconst closeMenuWhenClickingOutside = (event: MouseEvent): void => {\r\n if (event.target instanceof Element) {\r\n let clickedElement: Element = event.target;\r\n const headerContainer = document.querySelector('.header__container') as HTMLDivElement;\r\n\r\n if (headerContainer !== clickedElement && !headerContainer.contains(clickedElement)) {\r\n closeOpenMenuItems();\r\n }\r\n }\r\n}\r\n\r\n/* Toggle buttons */\r\nconst toggleMenuButton = (): void => {\r\n const buttonClass = 'menu__toggle-button';\r\n const buttonStateText = menuToggleButton.querySelector('.menu__toggle-button-state-text') as HTMLSpanElement;\r\n const buttonMenuText = menuToggleButton.querySelector('.menu__toggle-button-menu-text') as HTMLSpanElement;\r\n\r\n if (!menuToggleButton.classList.contains(`${buttonClass}--expanded`)) {\r\n expandButton(menuToggleButton, buttonClass);\r\n buttonStateText.textContent = menuToggleButton.dataset.closeMenuText!;\r\n buttonStateText.classList.remove('sr-only');\r\n buttonMenuText.classList.add('sr-only');\r\n } else {\r\n minifyButton(menuToggleButton, buttonClass);\r\n buttonStateText.textContent = menuToggleButton.dataset.openMenuText!;\r\n buttonStateText.classList.add('sr-only');\r\n buttonMenuText.classList.remove('sr-only');\r\n }\r\n}\r\n\r\nconst toggleSubMenuButton = (button: HTMLButtonElement): void => {\r\n const buttonClass = \"menu__sub-menu-toggle-button\";\r\n const hiddenButtonText = button.querySelector('.sr-only') as HTMLSpanElement;\r\n\r\n if (button.classList.contains(`${buttonClass}--expanded`)) {\r\n minifyButton(button, buttonClass);\r\n hiddenButtonText.textContent = `${button.dataset.minimizeText} ${button.dataset.itemName}`;\r\n } else {\r\n expandButton(button, buttonClass);\r\n hiddenButtonText.textContent = `${button.dataset.expandText} ${button.dataset.itemName}`;\r\n }\r\n}\r\n\r\n/* Toggle menu content on smaller screens */\r\nconst toggleMenuContent = (): void => {\r\n toggleMenuButton();\r\n\r\n const openClass = 'menu__content-area--open';\r\n if (menuContentArea.classList.contains(openClass)) {\r\n closeMenu(menuContentArea, openClass);\r\n } else {\r\n openMenu(menuContentArea, openClass);\r\n }\r\n}\r\n\r\nmenuToggleButton.addEventListener('click', toggleMenuContent);\r\n\r\n/* Toggle sub menu */\r\nconst toggleSubMenu = (button: HTMLButtonElement): void => {\r\n const itemContainer = button.parentElement as HTMLDivElement;\r\n const item = itemContainer.parentElement as HTMLLIElement;\r\n const subMenu = itemContainer.nextElementSibling as HTMLDivElement;\r\n\r\n // Handling top layer\r\n if (item.classList.contains('menu__item')) {\r\n if (desktopMediaQuery.matches && !item.classList.contains('menu__item--open')) {\r\n closeOpenMenuItems();\r\n }\r\n\r\n item.classList.toggle('menu__item--open');\r\n }\r\n\r\n toggleSubMenuButton(button);\r\n const openClass = 'sub-menu--open';\r\n if (subMenu.classList.contains(openClass)) {\r\n closeMenu(subMenu, openClass);\r\n } else {\r\n openMenu(subMenu, openClass);\r\n }\r\n}\r\n\r\nconst placeToolMenuAfterMenu = (): void => {\r\n if (menuList && toolMenuList) {\r\n menuList.after(toolMenuList);\r\n }\r\n}\r\n\r\nconst placeToolMenuBeforeMenu = (): void => {\r\n if (menuList && toolMenuList) {\r\n menuList.before(toolMenuList);\r\n }\r\n}\r\n\r\nconst setNavigation = (event: MediaQueryListEvent | MediaQueryList): void => {\r\n if (event.matches) {\r\n placeToolMenuAfterMenu();\r\n closeOpenMenuItems();\r\n } else {\r\n if (document.body.classList.contains('menu-is-open')) {\r\n document.body.classList.remove('menu-is-open');\r\n }\r\n placeToolMenuBeforeMenu();\r\n openCurrentMenuItem();\r\n }\r\n}\r\n\r\n/* Event listeners */\r\nif (subMenuToggleButtons.length > 0) {\r\n subMenuToggleButtons.forEach(button => {\r\n setControlledSubMenu(button);\r\n button.addEventListener('click', (): void => {\r\n toggleSubMenu(button);\r\n });\r\n });\r\n}\r\n\r\ndesktopMediaQuery.addEventListener('change', setNavigation);\r\nsetNavigation(desktopMediaQuery);\r\n\r\nwindow.addEventListener('keyup', (event: KeyboardEvent): void => {\r\n if (desktopMediaQuery.matches) {\r\n closeMenuOnEsc(event);\r\n } \r\n});\r\n\r\ndocument.addEventListener('click', (event: MouseEvent): void => {\r\n if (desktopMediaQuery.matches) {\r\n closeMenuWhenClickingOutside(event);\r\n }\r\n});\r\n\r\nif (menuItems.length > 0) {\r\n menuItems.forEach(menuItem => {\r\n menuItem.addEventListener('focusout', (event: FocusEvent): void => {\r\n if (desktopMediaQuery.matches) {\r\n closeMenuOnFocusOut(event, menuItem);\r\n }\r\n });\r\n });\r\n}\r\n","interface Validator {\r\n regex: string;\r\n errorMessage: string\r\n}\r\n\r\nwindow.addEventListener(\"DOMContentLoaded\", () => {\r\n let submitButtons: NodeListOf = document.querySelectorAll(\".FormSubmitButton.button\") as NodeListOf;\r\n \r\n // Scroll to the top of the form when the submit button is clicked\r\n submitButtons.forEach((submitButton: HTMLButtonElement) => {\r\n if (!!submitButton) {\r\n submitButton.addEventListener(\"click\", () => {\r\n let form: HTMLFormElement = submitButton.closest(\".EPiServerForms\") as HTMLFormElement;\r\n window.scrollTo({top: form.offsetTop - 200, behavior: 'smooth'})\r\n });\r\n }\r\n });\r\n \r\n updateValidationErrorSpanElements();\r\n checkRequiredFieldsHasContent();\r\n\r\n let textBoxes: NodeListOf = document.querySelectorAll(\".FormTextBox\");\r\n validateTextElements(textBoxes);\r\n\r\n let textAreas: NodeListOf = document.querySelectorAll(\".FormTextbox--Textarea\");\r\n validateTextElements(textAreas);\r\n\r\n let urlFields: NodeListOf = document.querySelectorAll(\".FormTextbox--Url\");\r\n validateTextElements(urlFields);\r\n\r\n let numberFields: NodeListOf = document.querySelectorAll(\".FormTextbox--Number\");\r\n validateTextElements(numberFields);\r\n\r\n let selectionFields: NodeListOf = document.querySelectorAll(\".FormSelection\");\r\n validateSelectionElements(selectionFields);\r\n\r\n let choiceFields: NodeListOf = document.querySelectorAll(\".FormChoice\")\r\n validateChoiceElements(choiceFields);\r\n})\r\n\r\nfunction validateChoiceElements(nodeList: NodeListOf) {\r\n nodeList.forEach((element: HTMLElement | any) => {\r\n if (element.classList.contains(\"form-validation--required\")) {\r\n const validators = JSON.parse(element.dataset.validators);\r\n let inputFields = element.querySelectorAll(\".checkbox__input, .radio-button__input\")\r\n let spanElement = element.querySelector(\".Form__Element__ValidationError\");\r\n\r\n validators.forEach((validator: Validator) => {\r\n inputFields.forEach((field: HTMLElement | any, index: number) => {\r\n field.addEventListener(\"change\", () => {\r\n let inputFields = element.querySelectorAll(\".checkbox__input:checked, .radio-button__input:checked\");\r\n if (inputFields.length == 0) {\r\n element.classList.add(\"form-validation--required\")\r\n addErrorValidationClassesToSpanElements(spanElement, validator.errorMessage);\r\n }\r\n else {\r\n spanElement?.classList.remove(\"validation-message--error\");\r\n element.classList.remove(\"form-validation--required\")\r\n\r\n spanElement.style.display = \"none\";\r\n }\r\n checkRequiredFieldsHasContent();\r\n });\r\n if (index == inputFields.length - 1)\r\n {\r\n field.addEventListener(\"blur\", () => {\r\n let inputFields = element.querySelectorAll(\".checkbox__input:checked, .radio-button__input:checked\");\r\n if (inputFields.length == 0) {\r\n element.classList.add(\"form-validation--required\")\r\n addErrorValidationClassesToSpanElements(spanElement, validator.errorMessage);\r\n }\r\n })\r\n }\r\n })\r\n })\r\n }\r\n })\r\n}\r\n\r\n\r\nfunction validateSelectionElements(nodeList: NodeListOf) {\r\n nodeList.forEach((element: HTMLElement | any) => {\r\n const validators = JSON.parse(element.dataset.validators);\r\n let dropdownSelect = element.querySelector(\".dropdown__select\");\r\n let spanElement = element.querySelector(\".Form__Element__ValidationError\");\r\n\r\n validators.forEach((item: Validator) => {\r\n const regex = new RegExp(item.regex);\r\n\r\n dropdownSelect.addEventListener(\"blur\", () => {\r\n const value = dropdownSelect.value;\r\n if (regex.test(value)) {\r\n // Remove \"invalid\" classes\r\n element.classList.remove(\"input-text--invalid\");\r\n spanElement?.classList.remove(\"validation-message--error\");\r\n dropdownSelect.classList.remove(\"form-validation--required\")\r\n\r\n // Add \"valid\" classes\r\n element.classList.add(\"input-text--valid\")\r\n spanElement.style.display = \"none\";\r\n } else {\r\n // Remove \"valid\" classes\r\n element.classList.remove(\"input-text--valid\");\r\n\r\n // Add \"invalid\" classes\r\n element.classList.add(\"input-text--invalid\");\r\n dropdownSelect.classList.add(\"form-validation--required\")\r\n addErrorValidationClassesToSpanElements(spanElement, item.errorMessage);\r\n }\r\n\r\n checkRequiredFieldsHasContent();\r\n })\r\n })\r\n })\r\n}\r\nfunction validateTextElements(nodeList: NodeListOf) {\r\n nodeList.forEach((element: HTMLElement | any) => {\r\n const validators = JSON.parse(element.dataset.validators);\r\n let inputField: HTMLInputElement | any = element.querySelector(\".FormTextbox__Input\");\r\n let spanElement = element.querySelector(\".Form__Element__ValidationError\");\r\n\r\n validators.forEach((item: Validator) => {\r\n const regex = new RegExp(item.regex);\r\n\r\n inputField.addEventListener(\"blur\", () => {\r\n const value = inputField.value;\r\n if (regex.test(value)) {\r\n // Remove \"invalid\" classes\r\n element.classList.remove(\"input-text--invalid\");\r\n spanElement?.classList.remove(\"validation-message--error\");\r\n inputField.classList.remove(\"form-validation--required\")\r\n\r\n // Add \"valid\" classes\r\n element.classList.add(\"input-text--valid\")\r\n inputField?.classList.add(\"input-text__input--with-icon\");\r\n spanElement.style.display = \"none\";\r\n } else {\r\n // Remove \"valid\" classes\r\n element.classList.remove(\"input-text--valid\");\r\n\r\n // Add \"invalid\" classes\r\n element.classList.add(\"input-text--invalid\");\r\n inputField?.classList.add(\"input-text__input--with-icon\");\r\n inputField.classList.add(\"form-validation--required\")\r\n addErrorValidationClassesToSpanElements(spanElement, item.errorMessage);\r\n }\r\n\r\n checkRequiredFieldsHasContent();\r\n });\r\n })\r\n\r\n\r\n })\r\n}\r\n\r\nfunction addErrorValidationClassesToSpanElements(spanElement: HTMLSpanElement, errorMessage: string) {\r\n spanElement.style.display = \"block\";\r\n spanElement.textContent = errorMessage;\r\n spanElement?.classList.add(\"validation-message\");\r\n spanElement?.classList.add(\"validation-message--error\");\r\n spanElement?.setAttribute('aria-live', 'polite');\r\n}\r\n\r\nfunction checkRequiredFieldsHasContent() {\r\n const formContainers = document.querySelectorAll(\".EPiServerForms\");\r\n formContainers.forEach((form: HTMLElement | any) => {\r\n const requiredFields = form.querySelectorAll(\".form-validation--required\");\r\n let submitButton: HTMLButtonElement | any = form.querySelector(\".FormSubmitButton\");\r\n\r\n // Only do this check if a form exists\r\n if (requiredFields.length < 1 && !!submitButton) {\r\n submitButton.disabled = false;\r\n }\r\n\r\n requiredFields.forEach((field: HTMLElement | any) => {\r\n if (field instanceof HTMLInputElement && !field.textContent) {\r\n submitButton.disabled = true;\r\n }\r\n else if (field instanceof HTMLSelectElement && field.selectedIndex < 1) {\r\n submitButton.disabled = true;\r\n }\r\n else if (field.classList.contains(\"FormChoice\")) {\r\n let inputFields = field.querySelectorAll(\".checkbox__input:checked, .radio-button__input:checked\");\r\n if (!!inputFields) {\r\n submitButton.disabled = true;\r\n }\r\n }\r\n })\r\n });\r\n}\r\n\r\nfunction updateValidationErrorSpanElements() {\r\n document.querySelectorAll(\".Form__Element__ValidationError\").forEach((span: HTMLSpanElement | any) => {\r\n // Check if the span is visible, that means that the form was submitted but an error occurred\r\n if (span.style.display != \"none\") {\r\n let parent = span.parentElement;\r\n let sibling = span.nextElementSibling;\r\n if (sibling instanceof HTMLInputElement) {\r\n sibling.classList.add(\"input-text__input--with-icon\");\r\n }\r\n parent?.classList.add(\"input-text--invalid\")\r\n span.classList.add(\"validation-message\");\r\n span.classList.add(\"validation-message--error\");\r\n span.setAttribute('aria-live', 'polite');\r\n }\r\n })\r\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))"],"names":["disturbance","document","querySelector","root","documentElement","height","clientHeight","style","setProperty","addEventListener","classList","add","id","value","name","days","expires","Date","setDate","getDate","cookieValue","encodeURIComponent","JSON","stringify","toUTCString","cookie","setCookie","closed","menuToggleButton","menuContentArea","menuList","menuItems","querySelectorAll","subMenuToggleButtons","toolMenuList","desktopMediaQuery","window","matchMedia","ScreenSizes","expandButton","button","buttonClass","setAttribute","minifyButton","remove","openMenu","element","openClass","elementHeight","display","scrollHeight","removeProperty","getHeight","parentElement","contains","matches","body","setTimeout","removeAttribute","closeMenu","closeOpenMenuItems","openMenuItems","length","forEach","item","toggleButton","subMenu","lastElementChild","buttonStateText","buttonMenuText","textContent","dataset","openMenuText","closeMenuText","toggleMenuButton","toggleSubMenu","itemContainer","nextElementSibling","toggle","hiddenButtonText","minimizeText","itemName","expandText","toggleSubMenuButton","setNavigation","event","after","before","currentMenuItem","openCurrentMenuItem","subMenuId","setControlledSubMenu","defaultPrevented","key","preventDefault","closeMenuOnEsc","target","Element","clickedElement","headerContainer","closeMenuWhenClickingOutside","menuItem","relatedTarget","closeMenuOnFocusOut","validateTextElements","nodeList","validators","parse","inputField","spanElement","regex","RegExp","test","addErrorValidationClassesToSpanElements","errorMessage","checkRequiredFieldsHasContent","form","requiredFields","submitButton","disabled","field","HTMLInputElement","HTMLSelectElement","selectedIndex","closest","scrollTo","top","offsetTop","behavior","span","parent","sibling","selectionFields","dropdownSelect","inputFields","validator","index","validateChoiceElements","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","n","getter","__esModule","d","a","definition","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call"],"sourceRoot":""}