{"version":3,"file":"site.js","mappings":"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","sources":["webpack:///./Ts/100vh-fix.ts","webpack:///./Ts/card-object.ts","webpack:///./Ts/clear-cookies.ts","webpack:///./Ts/drag-drop/dom-control.ts","webpack:///./Ts/drag-drop/file-manager.ts","webpack:///./Ts/drag-drop/helpers.ts","webpack:///./Ts/drag-drop/index.ts","webpack:///./Ts/drag-drop/request-handler.ts","webpack:///./Ts/focus-trap.ts","webpack:///./Ts/form-validation.ts","webpack:///./Ts/forms/form.utilities.ts","webpack:///./Ts/forms/index.ts","webpack:///./Ts/forms/validators/index.ts","webpack:///./Ts/forms/validators/validator/email.validator.ts","webpack:///./Ts/forms/validators/validator/iban.validator.ts","webpack:///./Ts/forms/validators/validator/index.ts","webpack:///./Ts/forms/validators/validator/phone.validator.ts","webpack:///./Ts/forms/validators/validator/required.validator.ts","webpack:///./Ts/forms/validators/validators.models.ts","webpack:///./Ts/forms/validators/validators.ts","webpack:///./Ts/loading-bar.ts","webpack:///./Ts/pages/additional-inputs/additional-inputs.page.ts","webpack:///./Ts/pages/application-form/application-form.page.ts","webpack:///./Ts/pages/index.ts","webpack:///./Ts/pages/welcome/welcome.page.ts","webpack:///./Ts/pie-progress.ts","webpack:///./Ts/tabbed.ts","webpack:///./Ts/utilities.ts","webpack:///webpack/bootstrap","webpack:///webpack/runtime/make namespace object","webpack:///./Ts/index.ts"],"sourcesContent":["(function(){\n const calculateVh = () => {\n var vh = window.innerHeight * 0.01;\n document.documentElement.style.setProperty('--vh', vh + 'px');\n }\n\n calculateVh();\n window.addEventListener('resize', calculateVh);\n\n window.addEventListener('orientationchange', calculateVh);\n}())","(function(){\n const toggleClass = 'is-closed'; \n\n const handleCardToggle = elem => {\n if(elem.classList.contains('o-card__title')) {\n elem.parentElement.classList.toggle(toggleClass);\n }\n }\n\n document.addEventListener('keyup', (e)=>{\n const listenToCodes = ['Enter', 'Space'];\n \n if(listenToCodes.find(code => code === e.code)){\n if(e.target instanceof Element) {\n handleCardToggle(e.target)\n }\n }\n })\n\n window.addEventListener('DOMContentLoaded', ()=>{\n const toggleElements = Array.from(document.querySelectorAll('.o-card--toggle'));\n\n if(toggleElements['length']) {\n for(const elem of toggleElements) {\n elem.classList.add(toggleClass);\n elem.querySelector('h2')?.setAttribute('tabindex', '0');\n elem.addEventListener('click', (e) =>{\n if(e.target instanceof Element) {\n handleCardToggle(e.target);\n }\n })\n }\n }\n })\n}())\n","(function() {\n function clearAllCookies() {\n var cookies = document.cookie.split(\";\");\n \n for (var i = 0; i < cookies.length; i++) {\n var cookie = cookies[i];\n var eqPos = cookie.indexOf(\"=\");\n var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;\n document.cookie = name + \"=;expires=Thu, 01 Jan 1970 00:00:00 GMT\";\n }\n }\n\n (window as any).clearAllCookies = clearAllCookies;\n})();\n","import { findFormControl } from \"./helpers\";\n\nconst HINT_FIELD_CLASS = \"o-form-control__hint\";\nconst ERROR_MODIFIER_CLASS = \"o-form-control--error\";\n\nexport function setErrorInHint(\n element: T,\n error: string\n) {\n const formControl = findFormControl(element);\n if (!formControl) return;\n const hint = formControl.querySelector(\n `.${HINT_FIELD_CLASS}`\n ) as HTMLParagraphElement;\n\n if (!error) {\n formControl.classList.remove(ERROR_MODIFIER_CLASS);\n } else {\n formControl.classList.add(ERROR_MODIFIER_CLASS);\n }\n\n hint.innerText = error;\n}\n\nexport function addFileToHTML(box: T, file: File) {\n const fileTemplateNode = box.querySelector(\"template\")!;\n const fileTemplate = document.importNode(fileTemplateNode, true);\n const filesContainer = box.querySelector(\".c-file-box__files\")!;\n const fileDiv = fileTemplate.content.querySelector(\"div\")!;\n const fileSpan = fileDiv.querySelector(\"span\")!;\n const newSpan = document.createElement(\"span\");\n const fileName = document.createTextNode(`${file.name}`);\n newSpan.appendChild(fileName);\n fileDiv.replaceChild(newSpan, fileSpan);\n filesContainer.appendChild(fileDiv);\n\n return fileDiv;\n}\n\ntype FileStatus = \"success\" | \"loading\" | \"upload-error\" | \"delete-error\";\n\nexport function updateFileStatus(\n fileElement: T,\n status: FileStatus,\n id = \"\"\n) {\n const loadingClass = \"is-loading\";\n const addClass = (className) => fileElement.classList.add(className);\n const removeClass = (className) => fileElement.classList.remove(className);\n\n switch (status) {\n case \"success\":\n removeClass(loadingClass);\n if (id) {\n fileElement.setAttribute(\"data-id\", id);\n }\n break;\n case \"loading\":\n addClass(loadingClass);\n break;\n case \"upload-error\":\n removeClass(loadingClass);\n addClass(\"is-upload-error\");\n break;\n case \"delete-error\":\n removeClass(loadingClass);\n addClass(\"is-delete-error\");\n break;\n }\n}","import { addFileToHTML, setErrorInHint, updateFileStatus } from \"./dom-control\";\nimport {\n fileDeleteUrl,\n fileUploadUrl,\n formatFormData,\n isError,\n} from \"./helpers\";\nimport { postRequest } from \"./request-handler\";\n\ntype DeletedFile = {\n id: string;\n};\n\ntype UploadedFile = {\n id: string;\n fileName: string;\n sizeInBytes: string;\n};\n\ntype UploadedFiles = {\n uploadedFiles: UploadedFile[];\n};\n\nexport default class FileManager {\n constructor(private appGuid: string, private tags: string) { }\n\n async uploadFiles(box: T, filesToUpload: FileList) {\n setErrorInHint(box, \"\");\n\n for (let i = 0; i < filesToUpload[\"length\"]; i++) {\n const fileToUpload = filesToUpload[i];\n\n const fileDiv = addFileToHTML(box, fileToUpload);\n\n try {\n const formData = formatFormData(fileToUpload, this.tags);\n const data = await postRequest(\n fileUploadUrl(this.appGuid),\n formData\n );\n const { id } = data.uploadedFiles[0];\n updateFileStatus(fileDiv, \"success\", id);\n \n let event = new Event(\"uploaded\", {bubbles: true});\n box.dispatchEvent(event);\n } catch (error) {\n const { name } = fileToUpload;\n updateFileStatus(fileDiv, \"upload-error\");\n\n setTimeout(() => {\n fileDiv.remove();\n }, 4000);\n\n if (isError(error)) {\n setErrorInHint(box, error.message);\n }\n\n let event = new Event(\"upload-error\", {bubbles: true});\n box.dispatchEvent(event);\n }\n }\n }\n\n async deleteFile(element: T) {\n setErrorInHint(element, \"\");\n\n const fileId = element.dataset.id;\n\n if (!fileId) return;\n\n updateFileStatus(element, \"loading\");\n\n const deleteUrl = fileDeleteUrl(this.appGuid, fileId);\n\n try {\n await postRequest(deleteUrl);\n element.remove();\n } catch (error) {\n updateFileStatus(element, \"delete-error\");\n\n if (isError(error)) {\n setErrorInHint(element, error.message);\n }\n }\n }\n}","export function findFileDiv(element: T, box: U) {\n if (!box.contains(element)) {\n return;\n }\n if (element instanceof HTMLDivElement && element.classList.contains('c-file-box__file')) {\n return element as HTMLDivElement;\n }\n const parent = element.parentElement as T;\n if (parent) {\n return findFileDiv(parent, box);\n }\n}\n\nexport function findDeleteButton(element: T, box: U) {\n if (!box.contains(element)) {\n return;\n }\n if (element instanceof HTMLButtonElement && element.classList.contains('o-button')) {\n return element as HTMLButtonElement;\n }\n const parent = element.parentElement as T;\n if (parent) {\n return findDeleteButton(parent, box);\n }\n}\n\nexport function findFormControl(element: T) {\n if (element === document.body || !document.body.contains(element)) {\n return;\n }\n if (element instanceof HTMLDivElement && element.classList.contains('o-form-control')) {\n return element as HTMLDivElement;\n }\n const parent = element.parentElement as T;\n if (parent) {\n return findFormControl(parent);\n }\n}\n\nexport function fileUploadUrl(appGuid: string) {\n return `/webhooks/upload/${appGuid}` as const;\n}\n\nexport function fileDeleteUrl(appGuid: string, fileId: string) {\n return `/webhooks/delete/${appGuid}/${fileId}` as const;\n}\n\nexport function formatFormData(file: File, tags: string) {\n const formData = new FormData();\n formData.append('file', file);\n formData.set('Content-Type', file.type);\n formData.set('tags', tags)\n return formData;\n}\n\nexport function isAdvancedUpload() {\n var div = document.createElement('div');\n return (('draggable' in div) || ('ondragstart' in div && 'ondrop' in div)) && 'FormData' in window && 'FileReader' in window;\n};\n\nexport function addListenerMulti(element, eventNames, callback) {\n const events = eventNames.split(' ');\n events.forEach(event => {\n element.addEventListener(event, callback, false);\n })\n};\n\nexport const isError = (err: any): err is Error => {\n return (\n err &&\n err.stack !== undefined &&\n err.message !== undefined &&\n typeof err.stack === 'string' &&\n typeof err.message === 'string'\n )\n}","import FileManager from \"./file-manager\";\nimport {\n addListenerMulti,\n findDeleteButton,\n findFileDiv,\n isAdvancedUpload,\n} from \"./helpers\";\n\nwindow.addEventListener(\"DOMContentLoaded\", () => {\n const fileBoxes = document.getElementsByClassName(\n \"c-file-box\"\n ) as HTMLCollectionOf;\n\n if (!fileBoxes[\"length\"]) return;\n\n const firstBox = fileBoxes[0];\n\n if (!firstBox.dataset.guid) return;\n\n const appGuid = firstBox.dataset.guid;\n const tags = firstBox.dataset.tags || '';\n const fm = new FileManager(appGuid, tags);\n\n for (let box of Array.from(fileBoxes)) {\n //If onClick target is file delete button respond to click\n box.addEventListener(\"click\", (e) => {\n const target = e.target;\n let btnElement: ReturnType;\n\n if (target instanceof HTMLElement) {\n btnElement = findDeleteButton(target, box);\n }\n\n if (!btnElement) return;\n\n e.preventDefault();\n\n const fileDiv = findFileDiv(btnElement, box);\n\n if (fileDiv?.dataset.id) {\n fm.deleteFile(fileDiv);\n }\n });\n\n const boxInput = box.querySelector(\"input\");\n\n if (boxInput) {\n //Handle file updates in input[type=\"file\"]\n boxInput.addEventListener(\"change\", (e) => {\n const target = e.target as HTMLInputElement;\n const selectedFiles = target.files;\n\n if (selectedFiles) fm.uploadFiles(box, selectedFiles);\n });\n }\n\n if (!isAdvancedUpload()) return;\n\n //If browser supports drag drop add it to file upload.\n addListenerMulti(\n box,\n \"drag dragstart dragend dragover dragenter dragleave drop\",\n (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n }\n );\n\n addListenerMulti(box, \"dragover dragenter\", () => {\n box.classList.add(\"is-dragover\");\n });\n\n addListenerMulti(box, \"dragleave dragend drop\", () => {\n box.classList.remove(\"is-dragover\");\n });\n\n box.addEventListener(\"drop\", (e) => {\n const droppedFiles = e?.dataTransfer?.files;\n\n if (!droppedFiles) return;\n\n fm.uploadFiles(box, droppedFiles);\n });\n }\n});","export const postRequest = async (url: string, body?: BodyInit | null | undefined): Promise => {\n const headers = {\n 'X-CSRF-TOKEN': (document.getElementsByName(\"__RequestVerificationToken\")[0] as HTMLInputElement).value\n };\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body\n })\n if (!response.ok) {\n try {\n const data = await response.json();\n let err = new Error(data.errorMessage);\n throw err\n }\n catch {\n throw new Error(\"Het bestand kon niet geupload worden\");\n }\n }\n const data = await response.json();\n return data;\n}","import { isHidden } from \"./utilities\";\n\nconst _MENU_TOGGLE = \"#menu-toggle\";\nconst _MENU_BUTTON = \".c-menu__toggle\";\nconst _SIDEBAR = \".c-menu__items\";\nconst _MENU_ITEM = \"a\";\nconst _CLOSE_TITLE = \"Close the menu\";\nconst _OPEN_TITLE = \"Open the menu\";\n\nconst toggleMenu =\n ({ menutoggle, menubutton, allMenuItems }) =>\n (e) => {\n if (isHidden(menubutton)) {\n return;\n }\n const keysToScan = [\"Enter\", \"Tab\", \"Escape\"];\n\n if (e.type === \"keydown\" && !keysToScan.includes(e.key)) {\n return;\n }\n\n if (e.type === \"keydown\" && e.key === \"Tab\") {\n if (menutoggle.checked && e.shiftKey) {\n e.preventDefault();\n allMenuItems[allMenuItems.length - 1].focus({\n focusVisible: true,\n });\n }\n if (menutoggle.checked && !e.shiftKey) {\n e.preventDefault();\n allMenuItems[0].focus({ focusVisible: true });\n }\n return;\n }\n\n if (e.type === \"keydown\") {\n menutoggle.click();\n }\n\n const closeAction = () => {\n menubutton.title = _CLOSE_TITLE;\n menubutton.ariaLabel = _CLOSE_TITLE;\n menubutton.focus({ focusVisible: true });\n };\n\n const openAction = () => {\n menubutton.title = _OPEN_TITLE;\n menubutton.ariaLabel = _OPEN_TITLE;\n allMenuItems[0].focus({ focusVisible: true });\n };\n\n menutoggle.checked ? openAction() : closeAction();\n };\n\nconst handleMenuEvents =\n ({ allMenuItems, menubutton, menutoggle }) =>\n (e) => {\n if (isHidden(menubutton)) {\n return;\n }\n const keysToScan = [\"Tab\", \"Escape\"];\n\n if (!keysToScan.includes(e.key)) {\n return;\n }\n\n if (e.key === \"Escape\") {\n menutoggle.click();\n menubutton.focus({ focusVisible: true });\n return;\n }\n\n const lastMenuItem = allMenuItems[allMenuItems.length - 1];\n\n if (e.target === lastMenuItem && !e.shiftKey) {\n e.preventDefault();\n menubutton.focus({ focusVisible: true });\n }\n\n if (e.target === allMenuItems[0] && e.shiftKey) {\n e.preventDefault();\n menubutton.focus({ focusVisible: true });\n }\n };\n\nconst presetListenerEvent = (DOMElements) => (CallbackFn) =>\n CallbackFn(DOMElements);\n\nconst setupFocusTrap = () => {\n const menubutton = document.querySelector(_MENU_BUTTON)! as HTMLElement;\n \n if (!menubutton) return;\n \n const menutoggle = document.querySelector(_MENU_TOGGLE)!;\n const menuList = document.querySelector(_SIDEBAR)!;\n const allMenuItems = menuList?.querySelectorAll(_MENU_ITEM)!;\n const elems = { menutoggle, menubutton, allMenuItems };\n const presetLE = presetListenerEvent(elems);\n\n menubutton.title = _OPEN_TITLE;\n menubutton.ariaLabel = _OPEN_TITLE;\n menubutton.addEventListener(\"keydown\", presetLE(toggleMenu));\n menubutton.addEventListener(\"click\", presetLE(toggleMenu));\n menuList.addEventListener(\"keydown\", presetLE(handleMenuEvents));\n menuList.addEventListener(\"click\", presetLE(handleMenuEvents));\n};\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n setTimeout(setupFocusTrap, 500);\n});","(function () {\n\n /*\n * ====================================================\n * GLOBAL PRIVATE CONSTS\n * ====================================================\n */\n const _formControlClass = \"o-form-control\";\n const _formControlInputClass = \":is(input:not(input[type='submit']):not(input[type='checkbox']):not(input[type='hidden']), select, textarea)\";\n const _hintClass = \"o-form-control__hint\";\n const _errorClass = \"o-form-control--error\";\n\n /*\n * =====================================================\n * HELPER FUNCTIONS\n * =====================================================\n */\n /**\n * Allows chaining of functions without passing in arguments to each new function. This one is curried.\n * @params {Function(s)} Arbitrary number of functions. Types must line up.\n * @param {Unknown} This depends on the type signature of the first function inside the pipe.\n * @return {Unkown} Return value of last function inside the pipe.\n */\n const pipe = (...fns) => (val) => fns.reduce((acc, curr) => curr(acc), val);\n\n /**\n * Turns regular functions into curried versions of themselves.\n * @param {Function} arg1 Function to curry\n * @param {arr = Unknown[]} arg2 Used recursively by curry, no need to actively set this.\n * @param {args = Unknown} arg3 The arguments to the function. Can by supplied multiple at a time, or one by one.\n */\n const curry = (fn, arr = []) => (...args) =>\n ((a: any) => (a.length === fn.length ? fn(...a) : curry(fn, a)))([\n ...arr,\n ...args\n ]);\n\n /**\n * A more concise console.log\n * @param {Any} arg1 Whatever message you would normally console.log\n */\n function log(...message) {\n console.log(...message);\n }\n\n /**\n * Manager for error state form(s) on page.\n * @return {Object} Functions to interact with manager.\n */\n const formsErrorMapManager = (function Manager() {\n let formsMap = new Map();\n\n /**\n * Returns Map() of the form the input element is part of.\n * @param {HTMLElement} arg1 Any to verify input HTMLElement\n * @return {Map(HTMLElement, boolean)} Map of all form inputs inside the form and if they have errors.\n */\n function _getFormMap(inputElement) {\n return formsMap.get(findParentForm(inputElement));\n }\n\n /**\n * Adds new Map() formMap to manager.\n * @param {HTMLElement} arg1 Form HTMLElement that has inputs to verify.\n */\n function define(form) {\n if (formsMap.has(form)) {\n return \"Already exists\";\n }\n\n formsMap.set(form, new Map());\n }\n\n /**\n * Sets error state of input element\n * @param {HTMLElement} arg1 Input element.\n * @param {Boolean} arg2 If input has errors.\n */\n function set(inputElement, error = true) {\n const formMap = _getFormMap(inputElement);\n formMap.set(inputElement, error);\n }\n\n /**\n * Returns error state of input element\n * @param {HTMLElement} arg1 Input element\n * @return {Boolean} Does input element have errors?\n */\n function get(input) {\n const formMap = _getFormMap(input);\n return formMap.get(input);\n }\n\n /**\n * Checks all inputs, currently visible to the user inside provided form for errors. Returns form validity.\n * @param {HTMLElement} arg1 HTML Form element.\n * @return {Boolean} If form is valid (true/false).\n */\n function isValid(form) {\n const formMap = formsMap.get(form);\n let valid = true;\n formMap.forEach((errors, key) => {\n if (isHidden(key)) {\n return;\n }\n if (errors === true) {\n valid = false;\n }\n });\n return valid;\n }\n\n return {\n define,\n set,\n get,\n isValid\n };\n })();\n\n /*\n * =====================================================================\n * VALIDATION SEGMENT\n * =====================================================================\n */\n const _validationMap = {\n valEmail: validateEmail,\n valRequired: validateRequired,\n valIban: validateIban,\n valBsn: validateBsn,\n valMaxlength: validateMaxLength,\n valMinlength: validateMinLength\n };\n\n /**\n * Email validator\n * @param {HTMLElement} arg1 Input element.\n * @return {Boolean} Input valid (true/false).\n */\n function validateEmail(inputElement) {\n const value = inputElement.value;\n return String(value)\n .toLowerCase()\n .match(\n /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/\n );\n }\n\n /**\n * BSN validator\n * @param {HTMLElement} arg1 Input element.\n * @return {Boolean} Input valid (true/false).\n */\n function validateBsn(inputElement) {\n\n let bsn = inputElement.value?.replace(/\\s/g, '').toUpperCase().replace(/[^0-9]/g, '');\n if (bsn.length === 8) {\n bsn = '0' + bsn;\n }\n\n if (!bsn || bsn.length !== 9) {\n return false;\n }\n\n var elevenProof = elfProefValidation(bsn);\n return elevenProof;\n }\n\n function elfProefValidation(value) {\n let returnValue = false\n if (!value || value?.length === 0) {\n return true\n }\n if (value === '00000000000' || value.length !== 9) {\n return false\n }\n const values = value.split('')\n const firstCharacter = parseInt(values[0], 10)\n const lastCharacter = parseInt(values[values.length - 1], 10)\n const [a, b, c, d, e, f, g, h, i] = values.map(char => parseInt(char, 10))\n let result = 9 * a + 8 * b + 7 * c + 6 * d + 5 * e + 4 * f + 3 * g + 2 * h + -1 * i;\n return result > 0 && result % 11 === 0;\n }\n\n /**\n * IBAN validator\n * @param {HTMLElement} arg1 Input element.\n * @return {Boolean} Input valid (true/false).\n */\n function validateIban(inputElement) {\n\n const iban = inputElement.value?.replace(/\\s/g, '').toUpperCase().replace(/[^A-Z0-9]/g, '');\n const code = iban.match(/^([A-Z]{2})(\\d{2})([A-Z\\d]+)$/);\n\n if (!code || iban.length !== 18) {\n return false;\n }\n const digits = (code[3] + code[1] + code[2]).replace(/[A-Z]/g, function (letter) {\n return letter.charCodeAt(0) - 55;\n });\n return mod97(digits) === 1;\n }\n\n function mod97(string) {\n var checksum = string.slice(0, 2), fragment;\n for (var offset = 2; offset < string.length; offset += 7) {\n fragment = String(checksum) + string.substring(offset, offset + 7);\n checksum = parseInt(fragment, 10) % 97;\n }\n return checksum;\n }\n\n /**\n * Required validator\n * @param {HTMLElement} arg1 Input element\n * @return {Boolean} Input valid (true/false).\n */\n function validateRequired(inputElement) {\n\n const type = inputElement.type;\n\n switch (type) {\n case 'checkbox':\n case 'radio': {\n const wrapper = inputElement.parentNode;\n const checked = wrapper.querySelector('input:checked');\n return checked;\n break;\n }\n case 'file': {\n const control = findFormControl(inputElement);\n const files = control?.querySelectorAll('.c-file-box__file:not(.is-upload-error):not(.is-loading)');\n console.log({ control, files })\n return files.length;\n break;\n }\n }\n const value = inputElement.value;\n return !!value.length;\n }\n /**\n * Max length validator\n * @param {HTMLElement} arg1 Input element\n * @return {Boolean} Input valid (true/false).\n */\n function validateMaxLength(inputElement) {\n const value = inputElement.value;\n const maxLength = inputElement.getAttribute(\"data-val-maxlength-max\");\n return value.length <= maxLength;\n }\n /**\n * Min length validator\n * @param {HTMLElement} arg1 Input element\n * @return {Boolean} Input valid (true/false).\n */\n function validateMinLength(inputElement) {\n const value = inputElement.value;\n const minLength = inputElement.getAttribute(\"data-val-minlength-min\");\n return value.length >= minLength;\n }\n\n /**\n * Returns HTMLElement and validation errors. Checks input value against validation rules.\n * @param {HTMLElement} arg1 Input HTMLElement to validate.\n * @return {Object} Input HTMLElement and Error messages String[]\n */\n function findInputErrors(element) {\n const validationRules = { ...element.dataset };\n let errors: any = [];\n\n for (let rule of Object.keys(validationRules)) {\n const ruleInValidationMap = _validationMap[rule];\n if (ruleInValidationMap && !ruleInValidationMap(element)) {\n errors.push(validationRules[rule]);\n }\n }\n\n return { element, errors };\n }\n\n /**\n * Sets provided errors on input and update formsErrorMapManager.\n * @param {Object} arg1 Input HTMLElement and Error messages String[];\n */\n function handleInputErrors({ element, errors }) {\n if (errors.length) {\n setError(element, errors[0]);\n addClass(findFormControl(element), _errorClass);\n }\n\n formsErrorMapManager.set(element, !!errors.length);\n }\n\n const validationPipe = pipe(findInputErrors, handleInputErrors);\n\n /*\n * ================================================================\n * DOM MANIPULATION\n * ================================================================\n */\n /**\n * Returns whether HTMLElement is currently hidden from users view\n * @param {HTMLElement} arg1 Any HTMLElement to check for visibility\n * @return {Boolean} Visible (true/false)\n */\n function isHidden(element) {\n return element.offsetParent === null;\n }\n\n /**\n * Adds classname to an HTMLElement.\n * @param {HTMLElement} arg1 HTMLElement to add the class to.\n * @param {String} arg2 Classname to add.\n */\n function addClass(element, cssClass) {\n element.classList.add(cssClass);\n }\n\n /**\n * Removes classname from HTMLElement.\n * @param {HTMLElement} arg1 HTMLElement to remove the class from.\n * @param {String} arg2 Classname to remove.\n */\n function removeClass(element, cssClass) {\n element?.classList.remove(cssClass);\n }\n\n /**\n * Returns whether classname exists on HTMLElement\n * @param {HTMLElement} arg1 HTMLElement to search for classname\n * @param {String} arg2 Classname to check for.\n * @return {Boolean} Has class name (true/false)\n */\n function hasClass(element, classToFind) {\n return element.classList.contains(classToFind);\n }\n\n /**\n * Returns parent form element to provided HTMLElement\n * @param {HTMLElement} arg1 HTMLElement to find wrapping Form for.\n * @return {HTMLElement} Form HTMLElement\n */\n function findParentForm(element) {\n if (element.tagName === \"HTML\") {\n return \"Not Found\";\n }\n if (element.tagName !== \"FORM\") {\n return findParentForm(element.parentNode);\n }\n return element;\n }\n\n /**\n * Returns input wrapper with _formControlClass to provided HTMLElement.\n * @param {HTMLElement} arg1 Input HTMLElement\n * @return {HTMLElement} HTMLElement with _formControlClass.\n */\n function findFormControl(element) {\n if (element.tagName === \"HTML\") {\n return null;\n }\n if (!hasClass(element, _formControlClass)) {\n return findFormControl(element.parentNode);\n }\n\n return element;\n }\n\n /**\n * Returns hint div/span element attached to input.\n * @param {HTMLElement} arg1 Input HTMLElement.\n * @return {HTMLElement} Hint div/span\n */\n function findClosestHint(element) {\n if (hasClass(element, _hintClass)) {\n return element;\n }\n const formControl = findFormControl(element);\n const hint = formControl.querySelector(`.${_hintClass}`);\n\n return hint;\n }\n\n /**\n * Updates innerHTML of input hint with provided text.\n * @param {HTMLElement} arg1 Any HTMLElement inside an HTMLElement with _formControlClass\n * @param {String} arg2 Error to set in hint field.\n */\n function setError(element, error) {\n if (!(element instanceof HTMLElement)) {\n return \"not found\";\n }\n if (!hasClass(element, _hintClass)) {\n return setError(findClosestHint(element), error);\n }\n\n element.innerHTML = error;\n }\n\n /*\n * =======================================================================\n * GENERAL SETUP\n * =======================================================================\n */\n /**\n * Handles field validation for visible inputs on focus update.\n * @param {Event} arg1 Focus event from eventListener\n */\n function manageFormControlInputFocus(event) {\n const eventType = event.type;\n let formControlInput = event.target;\n\n if (formControlInput.type === 'radio') {\n formControlInput = formControlInput.parentNode.querySelector('input');\n }\n\n const formControl = findFormControl(formControlInput);\n\n //Skips validation if input is hidden.\n if (formControl === null || isHidden(formControlInput)) {\n return;\n }\n\n removeClass(formControl, _errorClass);\n validationPipe(formControlInput);\n }\n\n /**\n * Check all inputs inside form for correct validation\n * @param {Event} arg1 Click event from clicking the submit button.\n */\n function checkAllInputs(event) {\n event.preventDefault();\n const submit = event.target;\n const form = findParentForm(submit);\n const formControlInputs = form.querySelectorAll(\n `${_formControlInputClass}:first-of-type`\n );\n\n formControlInputs.forEach((formControlInput) => {\n const formControl = findFormControl(formControlInput);\n removeClass(formControl, _errorClass);\n if (isHidden(formControlInput)) {\n return;\n }\n validationPipe(formControlInput);\n });\n\n const valid = formsErrorMapManager.isValid(form);\n if (!valid) {\n form.querySelector(`.${_errorClass} ${_formControlInputClass}`).focus();\n return;\n }\n\n form.submit();\n\n const button = document.querySelector('[type=submit]');\n if (button) {\n (button as HTMLButtonElement).disabled = true;\n button.classList.add('u-disabled');\n button.classList.add('u-not-allowed');\n }\n }\n\n /**\n * Finds forms on page, sets eventListeners, defines forms in formsErrorMapManager.\n */\n function setupFormValidation() {\n const allForms = document.querySelectorAll(\"form\");\n\n const allFormControlInputs = document.querySelectorAll(`form .${_formControlClass} ${_formControlInputClass}`);\n\n allForms.forEach((form) => {\n formsErrorMapManager.define(form);\n\n const submit = form.querySelector(\"input[type='submit']\");\n if (submit) {\n submit.addEventListener(\"click\", checkAllInputs);\n }\n });\n\n allFormControlInputs.forEach((formControlInput) => {\n formControlInput.addEventListener(\"change\", manageFormControlInputFocus);\n });\n }\n\n document.addEventListener(\"DOMContentLoaded\", setupFormValidation);\n\n})();","import { FormValidatorFn } from './validators/validators.models';\n\nexport function setupFormControl(\n name: string, \n page: HTMLElement, \n selector: string, \n validators: FormValidatorFn[]\n) {\n const block = page.querySelector(selector) as HTMLInputElement;\n const input = block.querySelector('input');\n const formControlBlock = block.querySelector('.o-form-control');\n const errorHint = block.querySelector('.o-form-control__hint');\n\n if (!block || !input || !errorHint || !formControlBlock) {\n throw new Error(`${ name } field not setup properly`);\n }\n\n input.addEventListener('blur', () => {\n const errors = validators\n .map(validatorFn => validatorFn(input.value))\n .filter(value => !!value);\n const errorMessage = errors.length ? errors[0] : '';\n\n errorMessage ? formControlBlock.classList.add('o-form-control--error') : formControlBlock.classList.remove('o-form-control--error');\n errorHint.textContent = errorMessage;\n }); \n}\n","import './validators';\nimport './form.utilities';\n","import './validators';\nimport './validators.models';\n\nimport './validator';\n","import { FormValidatorFn, FormValidationErrors } from '../validators.models';\n\nexport const emailValidatorFn: FormValidatorFn = (value: string) => {\n const emailRegex = /(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])/\n \n return emailRegex.test(value) ? null : FormValidationErrors.Email;\n}\n","import { FormValidatorFn, FormValidationErrors } from '../validators.models';\n\nexport const ibanValidatorFn: FormValidatorFn = (value: string) => {\n\n // Remove any spaces from the IBAN\n let iban = value.replace(/\\s/g, '');\n\n // Check if the IBAN length is valid\n if (iban.length !== 18) {\n return FormValidationErrors.IBAN;\n }\n\n // Move the first four characters to the end of the string\n iban = iban.substring(4) + iban.substring(0, 4);\n\n // Convert letters to numbers (A = 10, B = 11, ..., Z = 35)\n iban = iban.replace(/[A-Z]/g, function (char) {\n return (char.charCodeAt(0) - 55).toString();\n });\n\n // Interpret the IBAN as a number and check if it is divisible by 97\n if (parseInt(iban, 10) % 97 !== 1) {\n return FormValidationErrors.IBAN;\n }\n\n // Validate the check digits for Dutch IBANs\n var checkDigits = iban.substring(2, 4);\n var numericCheckDigits = parseInt(checkDigits, 10);\n if (numericCheckDigits !== 61) {\n return FormValidationErrors.IBAN;\n }\n\n return null;\n}\n","import './required.validator';\nimport './phone.validator';\nimport './email.validator';\nimport './iban.validator';\n","import { FormValidatorFn, FormValidationErrors } from '../validators.models';\n\nexport const phoneValidatorFn: FormValidatorFn = (value: string) => {\n const phoneRegex = /^06[0-9]{8}$/;\n\n return phoneRegex.test(value) ? null : FormValidationErrors.Phone;\n}\n","import { FormValidatorFn, FormValidationErrors } from '../validators.models';\n\nexport const requiredValidatorFn: FormValidatorFn = (value: any) => {\n return (typeof value !== 'undefined' && value.length > 0) ? null : FormValidationErrors.Required;\n}\n","export type FormValidatorFn = (value: any) => string | null;\n\nexport enum FormValidationErrors {\n Required = 'Dit veld is verplicht.',\n Email = 'Vul een valide e-mail adres in',\n Phone = 'Vul een mobiel telefoonnummer in dat uit maximaal 10 karakters bestaat',\n IBAN = 'Vul een geldige IBAN in',\n Date = 'Vul een geldige datum in (dd-mm-jjjj)',\n}\n","import { requiredValidatorFn } from './validator/required.validator';\nimport { emailValidatorFn } from './validator/email.validator';\nimport { phoneValidatorFn } from './validator/phone.validator';\nimport { ibanValidatorFn } from './validator/iban.validator';\n\nexport class FormValidators {\n static Required = requiredValidatorFn;\n static Email = emailValidatorFn;\n static Phone = phoneValidatorFn;\n static IBAN = ibanValidatorFn;\n}\n","import messages from './loading-bar_msg.json';\n\n(function () {\n \n window.addEventListener('DOMContentLoaded', (e) => {\n\n if (document.getElementById('ProductType') == null) return;\n const productType = (document.getElementById('ProductType') as HTMLInputElement).value;\n const originOfData = (document.getElementById('OriginOfData') as HTMLInputElement).value;\n\n const round = (value, precision) => {\n var multiplier = Math.pow(10, precision || 0);\n return Math.round(value * multiplier) / multiplier;\n }\n\n const productRelatedConfiguration = messages[productType] || messages['Default'];\n const processRelatedConfiguration = productRelatedConfiguration[originOfData] || productRelatedConfiguration['Default'];\n\n const animationDuration = (processRelatedConfiguration.ProcessingDuration * 1000);\n const animationUpdate = 50;\n const setElemStyle = (elem, prop, val) => {\n const rval = round(val, 2);\n elem.style.setProperty(`--${prop}`, rval);\n }\n const setMessage = (elem, time) => {\n let setIndex = Math.floor((time / animationDuration) * processRelatedConfiguration.Messages.length);\n const textElement = elem.querySelector('p');\n \n if (time >= animationDuration) {\n textElement.innerText = 'Nog even geduld. Het scherm wordt vernieuwd zodra de gegevens zijn verwerkt';\n } else {\n textElement.innerText = processRelatedConfiguration.Messages[setIndex];\n }\n }\n const loadingBars = Array.from(document.querySelectorAll('.c-loading-bar'));\n\n if (loadingBars['length']) {\n for (let loadingBar of loadingBars) {\n let currentTime = 0;\n const animInterval = setInterval(() => {\n if (currentTime <= animationDuration) {\n const currentPercent = 100 / (animationDuration / currentTime);\n setElemStyle(loadingBar, 'progress', currentPercent);\n setMessage(loadingBar, currentTime);\n currentTime = currentTime + animationUpdate;\n }\n else {\n clearInterval(animInterval);\n setMessage(loadingBar, animationDuration);\n setElemStyle(loadingBar, 'progress', 100);\n }\n }, animationUpdate);\n }\n }\n })\n}());","import { FormValidators } from '../../forms/validators/validators';\nimport { setupFormControl } from '../../forms/form.utilities';\n\n(function () {\n window.addEventListener('DOMContentLoaded', (e) => {\n const page = document.getElementById('additional-inputs-page');\n\n if (!page) return;\n\n setupFormControl('Required0', page, '.required-block-0', [ FormValidators.Required ] );\n setupFormControl('Required1', page, '.required-block-1', [ FormValidators.Required ] );\n });\n})();\n","import { FormValidators } from '../../forms/validators/validators';\nimport { setupFormControl } from '../../forms/form.utilities';\n\n(function () {\n window.addEventListener('DOMContentLoaded', (e) => {\n const page = document.getElementById('application-form');\n\n if (!page) return;\n\n setupFormControl('Required0', page, '.required-block-0', [ FormValidators.Required ] );\n setupFormControl('Required1', page, '.required-block-1', [FormValidators.Required]);\n setupFormControl('Email', page, '.email-block', [FormValidators.Email]);\n setupFormControl('Phone', page, '.phone-block', [FormValidators.Phone]);\n setupFormControl('IBAN', page, '.iban-block', [FormValidators.IBAN]);\n });\n})();\n","import './welcome/welcome.page';\nimport './additional-inputs/additional-inputs.page';\nimport './application-form/application-form.page';","import { FormValidators } from '../../forms/validators/validators';\nimport { setupFormControl } from '../../forms/form.utilities';\n\n(function () {\n window.addEventListener('DOMContentLoaded', (e) => {\n const page = document.getElementById('welcome-page');\n\n if (!page) return;\n\n setupFormControl('Email', page, '.email-block', [ FormValidators.Email ] );\n setupFormControl('Phone', page, '.phone-block', [ FormValidators.Phone ] );\n });\n})();\n","(function () {\n const rnd1d = num => Math.round(num * 10) / 10;\n const rnd = num => Math.round(num);\n //fix rounding glitch in css between 49 and 51.\n const formatCurrentPercent = num => (num >= 49 && num <= 51) ? rnd(num) : rnd1d(num);\n const animationDuration = 8000;\n const animationUpdate = 50;\n\n const setElemStyle = (elem, prop, val) => { elem.style.setProperty(prop, val) };\n window.addEventListener('DOMContentLoaded', () => {\n const progress = document.querySelector('.c-progress-pie');\n\n if (progress) {\n let currentTime = 0;\n let animInterval = setInterval(() => {\n if (currentTime <= animationDuration) {\n const currentPercent = 100 / (animationDuration / currentTime);\n setElemStyle(progress, '--p', formatCurrentPercent(currentPercent));\n currentTime = currentTime + animationUpdate;\n } else {\n clearInterval(animInterval);\n setElemStyle(progress, '--p', 100);\n }\n }, animationUpdate)\n\n }\n })\n}());\n","document.addEventListener(\"DOMContentLoaded\", () => {\n // Get relevant elements and collections\n const tabbed = document.querySelector(\".c-tabbed\");\n if (!tabbed) return;\n const tablist = tabbed.querySelector(\"ul\");\n if (!tablist) return;\n const tabs = tablist.querySelectorAll(\"a\");\n const panels = tabbed.querySelectorAll('[id^=\"section\"]') as NodeListOf;\n\n // The tab switching function\n const switchTab = (oldTab: T, newTab: U) => {\n \n const tabLink = newTab.getAttribute(\"href\");\n if (tabLink != null && !tabLink.startsWith('#'))\n {\n window.location.assign(tabLink);\n return;\n }\n \n newTab.focus();\n // Make the active tab focusable by the user (Tab key)\n newTab.removeAttribute(\"tabindex\");\n // Set the selected state\n newTab.setAttribute(\"aria-selected\", \"true\");\n oldTab.removeAttribute(\"aria-selected\");\n oldTab.setAttribute(\"tabindex\", \"-1\");\n // Get the indices of the new and old tabs to find the correct\n // tab panels to show and hide\n let index = Array.prototype.indexOf.call(tabs, newTab);\n let oldIndex = Array.prototype.indexOf.call(tabs, oldTab);\n panels[oldIndex].hidden = true;\n panels[index].hidden = false;\n };\n\n // Add the tablist role to the first
    in the .tabbed container\n tablist.setAttribute(\"role\", \"tablist\");\n\n // Add semantics are remove user focusability for each tab\n Array.prototype.forEach.call(tabs, (tab: T, i: number) => {\n tab.setAttribute(\"role\", \"tab\");\n tab.setAttribute(\"id\", \"tab\" + (i + 1));\n tab.setAttribute(\"tabindex\", \"-1\");\n if(tab.parentNode && tab.parentNode instanceof HTMLElement) tab.parentNode.setAttribute(\"role\", \"presentation\");\n\n // Handle clicking of tabs for mouse users\n tab.addEventListener(\"click\", (e: MouseEvent) => {\n e.preventDefault();\n let currentTab = tablist.querySelector(\"[aria-selected]\") as HTMLAnchorElement;\n if (e.currentTarget && e.currentTarget instanceof HTMLElement && e.currentTarget !== currentTab) {\n switchTab(currentTab, e.currentTarget);\n }\n });\n\n // Handle keydown events for keyboard users\n tab.addEventListener(\"keydown\", (e) => {\n const target = e.currentTarget as HTMLElement;\n // Get the index of the current tab in the tabs node list\n let index = Array.prototype.indexOf.call(tabs, target);\n // Work out which key the user is pressing and\n // Calculate the new tab's index where appropriate\n let dir =\n e.which === 37\n ? index - 1\n : e.which === 39\n ? index + 1\n : e.which === 40\n ? \"down\"\n : null;\n if (dir !== null) {\n e.preventDefault();\n // If the down key is pressed, move focus to the open panel,\n // otherwise switch to the adjacent tab\n dir === \"down\"\n ? panels[i].focus()\n : tabs[dir]\n ? switchTab(target, tabs[dir])\n : void 0;\n }\n });\n });\n\n // Add tab panel semantics and hide them all\n Array.prototype.forEach.call(panels, (panel: T, i: number) => {\n panel.setAttribute(\"role\", \"tabpanel\");\n panel.setAttribute(\"tabindex\", \"-1\");\n let id = panel.getAttribute(\"id\");\n panel.setAttribute(\"aria-labelledby\", tabs[i].id);\n panel.hidden = true;\n });\n\n // Initially activate the first tab and reveal the first tab panel\n let tabIndex = 0;\n if (window.location.hash) {\n let activeTab = Array.from(tabs).find((element) => element.getAttribute('href') === window.location.hash);\n if (activeTab){\n tabIndex = Array.from(tabs).indexOf(activeTab);\n }\n }\n else {\n let activeTab = Array.from(tabs).find((element) => element.getAttribute('aria-selected') === 'true');\n if (activeTab) {\n tabIndex = Array.from(tabs).indexOf(activeTab);\n }\n }\n\n tabs[tabIndex].removeAttribute(\"tabindex\");\n tabs[tabIndex].setAttribute(\"aria-selected\", \"true\");\n if (panels && panels.length > 0) {\n panels[tabIndex].hidden = false;\n }\n});","export const isHidden = (el) => el.offsetParent === null;\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].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import \"./drag-drop\";\nimport \"./form-validation\";\nimport \"./pie-progress\";\nimport \"./loading-bar\";\nimport \"./card-object\";\nimport \"./100vh-fix\";\nimport \"./clear-cookies\";\nimport \"./focus-trap\";\nimport \"./tabbed\";\nimport \"./inbox-btn-dialog\";\n\nimport \"./forms\";\nimport \"./pages\";"],"names":["calculateVh","vh","window","innerHeight","document","documentElement","style","setProperty","addEventListener","toggleClass","handleCardToggle","elem","classList","contains","parentElement","toggle","e","find","code","target","Element","toggleElements","Array","from","querySelectorAll","add","querySelector","setAttribute","clearAllCookies","cookies","cookie","split","i","length","eqPos","indexOf","name","substr","ERROR_MODIFIER_CLASS","element","error","formControl","findFormControl","hint","remove","innerText","box","file","fileTemplateNode","fileTemplate","importNode","filesContainer","fileDiv","content","fileSpan","newSpan","createElement","fileName","createTextNode","appendChild","replaceChild","fileElement","status","id","loadingClass","addClass","className","removeClass","constructor","appGuid","tags","uploadFiles","filesToUpload","setErrorInHint","fileToUpload","addFileToHTML","formData","formatFormData","this","data","postRequest","fileUploadUrl","uploadedFiles","updateFileStatus","event","Event","bubbles","dispatchEvent","setTimeout","isError","message","deleteFile","fileId","dataset","deleteUrl","fileDeleteUrl","findFileDiv","HTMLDivElement","parent","findDeleteButton","HTMLButtonElement","body","FormData","append","set","type","div","eventNames","callback","forEach","err","undefined","stack","fileBoxes","getElementsByClassName","firstBox","guid","fm","btnElement","HTMLElement","preventDefault","boxInput","selectedFiles","files","isAdvancedUpload","addListenerMulti","stopPropagation","droppedFiles","dataTransfer","url","headers","getElementsByName","value","response","fetch","method","ok","json","Error","errorMessage","_CLOSE_TITLE","_OPEN_TITLE","toggleMenu","menutoggle","menubutton","allMenuItems","isHidden","includes","key","checked","shiftKey","focus","focusVisible","click","title","ariaLabel","handleMenuEvents","lastMenuItem","setupFocusTrap","menuList","presetLE","DOMElements","CallbackFn","_formControlClass","_formControlInputClass","_hintClass","_errorClass","formsErrorMapManager","formsMap","Map","_getFormMap","inputElement","get","findParentForm","define","form","has","input","isValid","formMap","valid","errors","_validationMap","valEmail","String","toLowerCase","match","valRequired","wrapper","parentNode","control","console","log","valIban","iban","replace","toUpperCase","string","fragment","checksum","slice","offset","substring","parseInt","mod97","letter","charCodeAt","valBsn","bsn","values","a","b","c","d","f","g","h","map","char","result","elfProefValidation","valMaxlength","maxLength","getAttribute","valMinlength","minLength","validationPipe","fns","val","reduce","acc","curr","pipe","validationRules","rule","Object","keys","ruleInValidationMap","push","setError","cssClass","offsetParent","hasClass","classToFind","tagName","innerHTML","findClosestHint","manageFormControlInputFocus","formControlInput","checkAllInputs","submit","button","disabled","allForms","allFormControlInputs","page","selector","validators","block","formControlBlock","errorHint","validatorFn","filter","textContent","emailValidatorFn","test","FormValidationErrors","Email","ibanValidatorFn","IBAN","toString","checkDigits","phoneValidatorFn","Phone","requiredValidatorFn","Required","FormValidators","getElementById","productType","originOfData","productRelatedConfiguration","processRelatedConfiguration","animationDuration","ProcessingDuration","setElemStyle","prop","rval","precision","multiplier","Math","pow","round","setMessage","time","setIndex","floor","Messages","textElement","loadingBars","loadingBar","currentTime","animInterval","setInterval","clearInterval","setupFormControl","formatCurrentPercent","num","rnd","rnd1d","progress","tabbed","tablist","tabs","panels","switchTab","oldTab","newTab","tabLink","startsWith","location","assign","removeAttribute","index","prototype","call","oldIndex","hidden","tab","currentTab","currentTarget","dir","which","panel","tabIndex","hash","activeTab","el","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","r","Symbol","toStringTag","defineProperty"],"sourceRoot":""}