{"mappings":"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","sources":["webportal/config/layout/themes/project/ts/verification.ts","webportal/config/layout/themes/tk/ts/utilities/tk.module.factory.ts","node_modules/@parcel/transformer-js/src/esmodule-helpers.js","webportal/config/layout/themes/tk/ts/basiscs/tk.manager.ts","webportal/config/layout/themes/tk/ts/utilities/tk.custom.element.factory.ts","webportal/config/layout/themes/tk/ts/utilities/tk.notification.ts","webportal/config/layout/themes/tk/ts/utilities/tk.messages.ts","webportal/config/layout/themes/tk/ts/utilities/tk.render.ts","webportal/config/layout/themes/tk/ts/components/tk.header.ts","webportal/config/layout/themes/tk/ts/components/tk.navigation.sidebar.ts","webportal/config/layout/themes/tk/ts/utilities/tk.fetch.ts","webportal/config/layout/themes/tk/ts/basiscs/tk.viewport.ts","webportal/config/layout/themes/tk/ts/controls/tk.search.ts","webportal/config/layout/themes/tk/ts/utilities/tk.shape.detector.ts","webportal/config/layout/themes/tk/ts/controls/tk.form.element.ts","webportal/config/layout/themes/tk/ts/controls/tk.form.validator.ts","webportal/config/layout/themes/tk/ts/controls/tk.form.zipcity.ts","webportal/config/layout/themes/tk/ts/controls/tk.tabs.tab.ts","webportal/config/layout/themes/tk/ts/components/tk.minibasket.ts","webportal/config/layout/themes/tk/ts/controls/tk.tabs.accordion.ts","webportal/config/layout/themes/project/ts/components/ju.start.scan.ts"],"sourcesContent":["import TKModuleFactory from '@tk/utilities/tk.module.factory';\r\nimport TKManager from '@tk/basiscs/tk.manager';\r\nimport TKHeader from '@tk/components/tk.header';\r\nimport TKNavigationSidebar from '@tk/components/tk.navigation.sidebar';\r\nimport TKViewport from '@tk/basiscs/tk.viewport';\r\nimport TKSearch from '@tk/controls/tk.search';\r\nimport TKFormElement from '@tk/controls/tk.form.element';\r\nimport TKFormValidator from '@tk/controls/tk.form.validator';\r\nimport TKFormZipCity from '@tk/controls/tk.form.zipcity';\r\nimport TKTabsTab from '@tk/controls/tk.tabs.tab';\r\nimport TKMinibasket from '@tk/components/tk.minibasket';\r\nimport TKTabsAccordion from '@tk/controls/tk.tabs.accordion';\r\nimport JUStartScan from '@/components/ju.start.scan';\r\n\r\nimport '@scss/modules/verification.scss';\r\n\r\nexport default class Verification extends TKModuleFactory {\r\n constructor() {\r\n super([\r\n { name: 'tk-manager', constructor: TKManager },\r\n { name: 'tk-viewport', constructor: TKViewport },\r\n { name: 'tk-header', constructor: TKHeader },\r\n { name: 'tk-nav-sidebar', constructor: TKNavigationSidebar },\r\n { name: 'tk-search', constructor: TKSearch },\r\n { name: 'tk-form-zip-city', constructor: TKFormZipCity },\r\n { name: 'tk-form-element', constructor: TKFormElement },\r\n { name: 'tk-form-validator', constructor: TKFormValidator },\r\n { name: 'tk-tabs-tab', constructor: TKTabsTab },\r\n { name: 'tk-minibasket', constructor: TKMinibasket },\r\n { name: 'tk-tabs-accordion', constructor: TKTabsAccordion },\r\n { name: 'ju-start-scan', constructor: JUStartScan },\r\n ]);\r\n }\r\n}\r\n\r\n// eslint-disable-next-line no-new\r\nnew Verification();\r\n","export default class TKModuleFactory {\r\n customElementList: CustomElementList[];\r\n\r\n constructor(list: CustomElementList[]) {\r\n this.customElementList = list;\r\n this.init();\r\n }\r\n\r\n init(): void {\r\n this.customElementList.forEach((item) => {\r\n !customElements.get(item.name) && customElements.define(item.name, item.constructor);\r\n });\r\n }\r\n}","exports.interopDefault = function (a) {\n return a && a.__esModule ? a : {default: a};\n};\n\nexports.defineInteropFlag = function (a) {\n Object.defineProperty(a, '__esModule', {value: true});\n};\n\nexports.exportAll = function (source, dest) {\n Object.keys(source).forEach(function (key) {\n if (\n key === 'default' ||\n key === '__esModule' ||\n Object.prototype.hasOwnProperty.call(dest, key)\n ) {\n return;\n }\n\n Object.defineProperty(dest, key, {\n enumerable: true,\n get: function () {\n return source[key];\n },\n });\n });\n\n return dest;\n};\n\nexports.export = function (dest, destName, get) {\n Object.defineProperty(dest, destName, {\n enumerable: true,\n get: get,\n });\n};\n","import TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\nimport { NotificationType, sendNotification } from '@tk/utilities/tk.notification';\r\n\r\ninterface ActionItem {\r\n id: string;\r\n affiliation: string;\r\n revenue: string;\r\n tax: string;\r\n shipping: string;\r\n}\r\n\r\ninterface ProductItem {\r\n id: string;\r\n name: string;\r\n brand: string;\r\n category: string;\r\n price: string;\r\n quantity: string;\r\n position: string;\r\n}\r\n\r\nexport default class TKManager extends TKCustomElementFactory {\r\n messageContainerSelector: string;\r\n basketId?: HTMLElement;\r\n eventName: string;\r\n sessionTimeoutWrapper?: HTMLElement;\r\n sessionTime?: number;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.eventName = this.getAttribute('data-tk-event-name') || 'event-purchase';\r\n this.basketId = this.querySelector('[data-tk-otm-basket-id]') || undefined;\r\n this.messageContainerSelector = (\r\n this.getAttribute('data-tk-message-container-selector')\r\n || '[id^=\"wp_messages_container_\"]'\r\n );\r\n this.sessionTimeoutWrapper = this.querySelector('[data-tk-session-timeout-wrapper]') || undefined;\r\n this.sessionTime = Number(this.sessionTimeoutWrapper?.getAttribute('data-tk-session-time') || 0);\r\n }\r\n\r\n connectedCallback(): void {\r\n this.processNotification();\r\n\r\n this.sessionTimeoutWrapper && this.showSessionTimeout();\r\n\r\n if (!this.basketId || !window.dataLayer) return;\r\n const data = this.getPurchaseData();\r\n data && window.dataLayer.push(data);\r\n }\r\n\r\n processNotification() {\r\n const messageContainer = document.querySelector(this.messageContainerSelector);\r\n if (!messageContainer || !messageContainer.hasChildNodes()) return;\r\n\r\n const infoMessage = messageContainer.querySelectorAll('.Info');\r\n const errorMessage = messageContainer.querySelectorAll('.Error');\r\n const warningMessage = messageContainer.querySelectorAll('.Warning');\r\n const debugMessage = messageContainer.querySelectorAll('.Debug');\r\n\r\n const messageList = Array.from([...infoMessage, ...errorMessage, ...warningMessage, ...debugMessage]);\r\n\r\n const types: Record = {\r\n Info: NotificationType.SUCCESS,\r\n Error: NotificationType.ERROR,\r\n Warning: NotificationType.WARNING,\r\n Debug: NotificationType.INFO,\r\n };\r\n\r\n messageList.forEach((item) => {\r\n const type = types[item.className];\r\n const childList = Array.from(item.firstChild?.childNodes || []);\r\n const message = childList.find((item) => item instanceof Text)?.textContent || '';\r\n const code = item.querySelector('.was-message-code')?.textContent || '';\r\n const addition = item.querySelector('.was-message-addition')?.textContent || '';\r\n const wait = Number(item.querySelector('.was-message-wait')?.textContent) || undefined;\r\n const consoleMessage = `${code}: ${message}} (wait: ${wait} sec.${addition})`;\r\n\r\n sendNotification(type, message, wait, { consoleMessage });\r\n });\r\n messageContainer.remove();\r\n }\r\n\r\n showSessionTimeout() {\r\n setTimeout(() => {\r\n this.sessionTimeoutWrapper!.hidden = false;\r\n }, this.sessionTime);\r\n }\r\n\r\n getPurchaseData() {\r\n return {\r\n event: 'event-purchase',\r\n ecommerce: {\r\n purchase: {\r\n actionField: this.getActionData(),\r\n products: this.getProductData(),\r\n },\r\n },\r\n };\r\n }\r\n\r\n getActionData() {\r\n const affiliation = this.querySelector('[data-tk-otm-affiliation]');\r\n const revenue = this.querySelector('[data-tk-otm-revenue]');\r\n const tax = this.querySelector('[data-tk-otm-tax]');\r\n const shipping = this.querySelector('[data-tk-otm-shipping]');\r\n return {\r\n id: this.basketId!.innerText,\r\n affiliation: affiliation ? affiliation.innerText : '',\r\n revenue: revenue ? revenue.innerText : '',\r\n tax: tax ? tax.innerText : '',\r\n shipping: shipping ? shipping.innerText : '',\r\n } as ActionItem;\r\n }\r\n\r\n getProductData() {\r\n const data: ProductItem[] = [];\r\n const items = this.querySelectorAll('[data-tk-otm-item]');\r\n Array.from(items).forEach((item) => {\r\n const id = item.querySelector('.otm-id');\r\n const name = item.querySelector('.otm-name');\r\n const brand = item.querySelector('.otm-brand');\r\n const category = item.querySelector('.otm-category');\r\n const price = item.querySelector('.otm-price');\r\n const quantity = item.querySelector('.otm-quantity');\r\n const position = item.querySelector('.otm-position');\r\n data.push({\r\n id: id ? id.innerText : '',\r\n name: name ? name.innerText : '',\r\n brand: brand ? brand.innerText : '',\r\n category: category ? category.innerText : '',\r\n price: price ? price.innerText : '',\r\n quantity: quantity ? quantity.innerText : '',\r\n position: position ? position.innerText : '',\r\n });\r\n });\r\n return data;\r\n }\r\n}\r\n","export interface Listener {\r\n event: keyof HTMLElementEventMap | TKCustomEventMap;\r\n element: EventTarget;\r\n action: (event: T) => void;\r\n}\r\n\r\nexport default class TKCustomElementFactory extends HTMLElement {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n listeners: Listener[];\r\n\r\n constructor() {\r\n super();\r\n this.listeners = [];\r\n }\r\n\r\n // eslint-disable-next-line class-methods-use-this\r\n connectedCallback(): void {}\r\n\r\n /**\r\n * If the custom element is getting removed of the dom, all listeners\r\n * are getting removed of the element.\r\n */\r\n disconnectedCallback(): void {\r\n this.listeners.forEach((item) => {\r\n item.element.removeEventListener(item.event, item.action);\r\n });\r\n }\r\n\r\n /**\r\n * Here you can push a listener object directly to the listener array\r\n *\r\n * @param {Listener} {}\r\n */\r\n pushListener({ event, element, action }: Listener): void {\r\n this.listeners.push({ event, element, action });\r\n element.addEventListener(event, action as EventListener);\r\n }\r\n\r\n /**\r\n * Removes the given element from the listener array and removes the\r\n * EventListener from the element and returns the listener object.\r\n * If the element was not found, undefined is returned.\r\n *\r\n * @param {Element} element\r\n * @returns {Listener | undefined}\r\n */\r\n removeListener(element: EventTarget): Listener | undefined {\r\n const foundElement = this.listeners.find((item) => item.element === element);\r\n if (!foundElement) return;\r\n foundElement?.element.removeEventListener(foundElement.event, foundElement.action);\r\n const newList = this.listeners.filter((item) => item.element !== element);\r\n this.listeners = newList;\r\n return foundElement;\r\n }\r\n}","import {\r\n accountMessages, deliveryMessages, generalMessages, paymentMessages, serviceMessages,\r\n} from './tk.messages';\r\nimport render from './tk.render';\r\n\r\nexport enum NotificationType {\r\n SUCCESS = 'Success',\r\n WARNING = 'Warning',\r\n ERROR = 'Error',\r\n INFO = 'Info',\r\n}\r\n\r\ninterface MessageResponse {\r\n pluginId: string;\r\n paymentType: string;\r\n}\r\n\r\nconst mapMessageCodeToText = (response: MessageResponse, messages: Record) => {\r\n let textMessage;\r\n if (!response.pluginId) return '';\r\n if (response.pluginId === 'paymentType') {\r\n const paymentMessages: Record = {\r\n 0: messages.messagePaymentTypeGeneral.text,\r\n 1: messages.messagePaymentTypeCreditCard.text,\r\n 2: messages.messagePaymentTypeInvoice.text,\r\n 5: messages.messagePaymentTypeInAdvance.text,\r\n 6: messages.messagePaymentTypeOnDelivery.text,\r\n };\r\n textMessage = paymentMessages[Number(response.paymentType) || 0];\r\n } else if (response.pluginId === 'deliveryType') {\r\n textMessage = messages.messageDeliveryTypeGeneral.text;\r\n } else if (response.pluginId === 'checkoutAdressChange') {\r\n textMessage = messages.messageChangeSuccess.text;\r\n }\r\n return textMessage;\r\n};\r\n\r\nconst getConsoleStyle = (backgroundColor: string, textColor: string = 'white') => [\r\n `background: ${backgroundColor}`,\r\n `color: ${textColor}`,\r\n 'display: block',\r\n].join(';');\r\n\r\nconst logToConsole = (message: string, type: NotificationType) => {\r\n const consoleHandler: Record void> = {\r\n [NotificationType.SUCCESS](): void {\r\n // eslint-disable-next-line no-console\r\n console.info(`%c ${message}`, getConsoleStyle('green'));\r\n },\r\n [NotificationType.WARNING](): void {\r\n // eslint-disable-next-line no-console\r\n console.warn(`%c ${message}`, getConsoleStyle('yellow', 'black'));\r\n },\r\n [NotificationType.ERROR](): void {\r\n // eslint-disable-next-line no-console\r\n console.log(`%c ${message}`, getConsoleStyle('red'));\r\n },\r\n [NotificationType.INFO](): void {\r\n // eslint-disable-next-line no-console\r\n console.debug(`%c ${message}`, getConsoleStyle('blue'));\r\n },\r\n };\r\n\r\n consoleHandler[type]();\r\n};\r\n\r\nconst renderMessageContainer = (parentElement: HTMLElement) => {\r\n let messageContainer = parentElement.querySelector('[data-tk-message-container]');\r\n if (!messageContainer) {\r\n messageContainer = render(\r\n '
',\r\n );\r\n parentElement.insertAdjacentElement('beforeend', messageContainer);\r\n }\r\n\r\n return messageContainer;\r\n};\r\n\r\nexport const sendNotification = (\r\n type: NotificationType,\r\n message?: string,\r\n wait: number = 2.5,\r\n options: { consoleMessage?: string } = {},\r\n) => {\r\n if (!message) return;\r\n const dialogs = document.querySelectorAll('dialog[open]');\r\n let messageContainer: HTMLElement;\r\n\r\n if (dialogs.length === 0) {\r\n messageContainer = renderMessageContainer(document.body);\r\n } else {\r\n const lastDialog = Array.from(dialogs).at(-1);\r\n if (!lastDialog) {\r\n messageContainer = renderMessageContainer(document.body);\r\n } else {\r\n messageContainer = renderMessageContainer(lastDialog);\r\n }\r\n }\r\n\r\n const toast = render(`\r\n
\r\n \r\n \r\n ${message}\r\n ${serviceMessages.messageServiceInfo.text !== '' ? serviceMessages.messageServiceInfo.text : ''}\r\n \r\n \r\n
\r\n `);\r\n\r\n toast.style.animation = `fadein .5s, fadeout .5s ${wait}s`;\r\n toast.classList.add('tk-message--show');\r\n\r\n messageContainer.appendChild(toast);\r\n\r\n toast.addEventListener('animationend', (event) => {\r\n if ((event as AnimationEvent).animationName !== 'fadeout') return;\r\n messageContainer.removeChild(toast);\r\n });\r\n\r\n const close = toast.querySelector('[data-tk-message-close]') || undefined;\r\n close?.addEventListener('click', () => {\r\n toast.remove();\r\n });\r\n\r\n options.consoleMessage\r\n ? logToConsole(options.consoleMessage, type)\r\n : logToConsole(message, type);\r\n};\r\n\r\nexport const sendNotificationByItem = (item: Message, messageOverride?: string) => {\r\n const type = item.code.substring(0, 1);\r\n const message = messageOverride || item.text;\r\n\r\n const typeHandler: Record void> = {\r\n 1: () => sendNotification(NotificationType.SUCCESS, message, item.wait),\r\n 2: () => sendNotification(NotificationType.WARNING, message, item.wait),\r\n 3: () => sendNotification(NotificationType.ERROR, message, item.wait),\r\n 4: () => sendNotification(NotificationType.INFO, message, item.wait),\r\n };\r\n\r\n typeHandler[type]();\r\n};\r\n\r\nexport const sendNotificationByItems = (items: Message[], response: MessageResponse) => {\r\n const messages = {\r\n ...generalMessages, ...accountMessages, ...paymentMessages, ...deliveryMessages,\r\n };\r\n items.forEach((item) => {\r\n sendNotificationByItem(item, mapMessageCodeToText(response, messages));\r\n });\r\n};","/* eslint-disable max-len */\r\n\r\nconst globalFormErrorMessages: FormValidatorMessages = {\r\n badInput: 'Please enter a number.',\r\n patternMismatch: 'Please match the requested format.',\r\n rangeOverflow: 'Please select a value that is no more than {max}.',\r\n rangeUnderflow: 'Please select a value that is no less than {min}.',\r\n stepMismatch: 'Please select a value that is a multiple from {step}.',\r\n tooLong:\r\n 'Please shorten this text to no more than {maxLength} characters. You are currently using {length} characters.',\r\n tooShort:\r\n 'Please lengthen this text to {minLength} characters or more. You are currently using {length} characters.',\r\n typeMismatch: 'The value you have entered for this field is invalid.',\r\n valueMissing: 'Please fill out this field.',\r\n // These properties must be empty.\r\n valid: '',\r\n customError: '',\r\n};\r\n\r\nconst globalFormPasswordValidityMessages: FormExpandValidatorMessages = {\r\n passwordNotMatching: 'The password does not match the one above.',\r\n};\r\n\r\nconst globalFormExpandErrorMessages: FormExpandValidatorMessages = {\r\n stepAdjust: 'The value you entered for this field is invalid. The value has been changed from {currentValue} to {newValue}',\r\n existigName: 'This name {currentValue} already exists.',\r\n};\r\n\r\nconst globalBasketMessages: Translation = {\r\n messageEmptyBasket: { code: '1-6-6220', text: 'Shopping cart is empty' },\r\n messageAddedToBasket: { code: '1-6-6221', text: 'added to the shopping cart' },\r\n quickOrderMessageTooShort: { code: '1-6-6222', text: 'At least %1 characters are required for a search.' },\r\n};\r\n\r\nconst globalDeliveryMessages: Translation = {\r\n messageDeliveryTypeGeneral: { code: '1-6-6226', text: 'Delivery method changed' },\r\n};\r\n\r\nconst globalPaymentMessages: Translation = {\r\n messagePaymentTypeCreditCard: { code: '1-6-6227', text: 'Payment type credit card' },\r\n messagePaymentTypeInvoice: { code: '1-6-6227', text: 'Payment type invoice' },\r\n messagePaymentTypeInAdvance: { code: '1-6-6227', text: 'Payment type advance payment' },\r\n messagePaymentTypeOnDelivery: { code: '1-6-6227', text: 'Payment type cash on delivery' },\r\n messagePaymentTypeGeneral: { code: '1-6-6227', text: 'Payment type changed' },\r\n};\r\n\r\nconst globalCompareMessages: Translation = {\r\n messageHint: { code: '1-6-6240', text: '' },\r\n};\r\n\r\nconst globalFavoriteMessages: Translation = {\r\n messageInvalidName: { code: '2-6-6270', text: 'Unable to create the wish list; the name is invalid.' },\r\n messageMaxLists: { code: '2-6-6277', text: 'Max. number of wish lists reached!' },\r\n messageMaxPositions: { code: '2-6-6278', text: 'Max. number of positions reached!' },\r\n messageDeleteConfirmation: { code: '2-6-6273', text: 'Do you really want to delete the wish list?' },\r\n};\r\n\r\nconst globalAutocompleteMessages: Translation = {\r\n messageNoValueFound: { code: '1-6-6290', text: 'No match found!' },\r\n};\r\n\r\nconst globalAccountMessages: Translation = {\r\n messageDelete: { code: '1-6-6200', text: 'Do you really want to delete this address?' },\r\n messageChangeSuccess: { code: '1-6-6200', text: 'Address successfully modified.' },\r\n};\r\n\r\nconst globalGeneralMessages: Translation = {\r\n messageEmptyText: { code: '1-6-6290', text: 'The output was suppressed due to an empty text.' },\r\n messageOk: { code: '1-6-6290', text: 'Yes' },\r\n messageCancel: { code: '1-6-6290', text: 'No' },\r\n messageChange: { code: '1-6-6290', text: 'The selection was changed' },\r\n messageDefault: { code: '1-6-0000', text: '' },\r\n messageDefaultInfo: { code: '1-6-0000', text: '' },\r\n messageDefaultWarning: { code: '2-6-0000', text: '' },\r\n messageDefaultError: { code: '3-6-0000', text: '' },\r\n messageDefaultDebug: { code: '4-6-0000', text: '' },\r\n};\r\n\r\nconst globalServiceMessages: Translation = {\r\n messageServiceInfo: { code: '1-6-6969', text: '' },\r\n};\r\n\r\nconst globalDirectSearchSuggestMessages: Translation = {\r\n messageTooShort: { code: '1-6-6260', text: 'At least 3 characters!' },\r\n messageResultEmpty: { code: '1-6-6260', text: 'No items found!' },\r\n};\r\n\r\nconst globalFileuploadAreaMessages: Translation = {\r\n defaultMessage: { code: '1-6-2002', text: 'Store the files here to upload them' },\r\n fallbackMessage: { code: '2-6-2002', text: 'Your browser does not support drag&drop file uploads' },\r\n fallbackText: { code: '2-6-2002', text: 'Use the form to upload your files' },\r\n fileTooBig: { code: '2-6-2002', text: 'The file is too large. The maximum file size is {{maxFileSize}} MB' },\r\n invalidFileType: { code: '2-6-2002', text: 'Unable to upload files of this type' },\r\n responseError: { code: '3-6-2002', text: 'The server rejected your request with status {{statusCode}}' },\r\n cancelUpload: { code: '1-6-2002', text: 'Cancel upload' },\r\n cancelUploadConfirmation: { code: '1-6-2002', text: 'Cancel upload?' },\r\n removeFile: { code: '1-6-2002', text: 'Remove file' },\r\n maxFilesExceeded: { code: '2-6-2002', text: 'You are not allowed to upload any more files' },\r\n buttonBrowse: { code: '1-6-2002', text: 'Select files to upload' },\r\n uploadHint: { code: '1-6-2002', text: 'Drag files and folders here' },\r\n};\r\n\r\nconst globalFilterMessages: Translation = {\r\n emptyResult: { code: '1-1-6280', text: 'Keine Ergebnisse gefunden.' },\r\n};\r\n\r\nconst globalCheckoutMessages: Translation = {\r\n missingTerms: { code: '3-6-6230', text: 'Please accept the General terms and conditions.' },\r\n loadingCheckoutTitle: { code: '1-6-6260', text: 'Almost done!' },\r\n loadingCheckoutText: { code: '1-6-6261', text: 'The order is carried out. This can take a moment!' },\r\n};\r\n\r\nconst globalHtmlErrorCodeMessages: Translation = {\r\n htmlErrorGeneral: { code: '3-6-6000', text: 'Something has gone wrong!' },\r\n htmlError401: { code: '3-6-6000', text: 'A valid authentication is required to process the request.' },\r\n htmlError403: { code: '3-6-6000', text: 'The request could not be processed due to missing authorization of the client.' },\r\n htmlError404: { code: '3-6-6000', text: 'The requested site does not exist.' },\r\n htmlError413: { code: '3-6-6000', text: 'The file is too large.' },\r\n htmlError415: { code: '3-6-6000', text: 'This media type is not supported.' },\r\n htmlError422: { code: '3-6-6000', text: 'Unable to display the requested site correctly.' },\r\n htmlError500: { code: '3-6-6000', text: 'Internal server error' },\r\n htmlError503: { code: '3-6-6000', text: 'The server is temporarily unavailable.' },\r\n};\r\n\r\nif (!window.opacc) {\r\n window.opacc = {};\r\n}\r\n\r\nexport const formErrorMessages = {\r\n ...globalFormErrorMessages,\r\n ...globalFormPasswordValidityMessages,\r\n ...globalFormExpandErrorMessages,\r\n ...window.opacc.tkFormValidityMessages,\r\n ...window.opacc.tkFormPasswordValidityMessages,\r\n ...window.opacc.tkFormExpandErrorMessages,\r\n ...window.opacc.projectFormValidityMessages,\r\n ...window.opacc.projectFormPasswordValidityMessages,\r\n ...window.opacc.projectFormExpandErrorMessages,\r\n};\r\n\r\nexport const formExpandErrorMessages = {\r\n ...globalFormExpandErrorMessages,\r\n ...window.opacc.tkFormExpandErrorMessages,\r\n ...window.opacc.projectFormExpandErrorMessages,\r\n};\r\n\r\nexport const basketMessages = {\r\n ...globalBasketMessages,\r\n ...window.opacc.tkBasketMessages,\r\n ...window.opacc.projectBasketMessages,\r\n};\r\n\r\nexport const compareMessages = {\r\n ...globalCompareMessages,\r\n ...window.opacc.tkCompareMessages,\r\n ...window.opacc.projectCompareMessages,\r\n};\r\n\r\nexport const favoriteMessages = {\r\n ...globalFavoriteMessages,\r\n ...window.opacc.tkFavoriteMessages,\r\n ...window.opacc.projectFavoriteMessages,\r\n};\r\n\r\nexport const generalMessages = {\r\n ...globalGeneralMessages,\r\n ...window.opacc.tkGeneralMessages,\r\n ...window.opacc.projectGeneralMessages,\r\n};\r\n\r\nexport const serviceMessages = {\r\n ...globalServiceMessages,\r\n ...window.opacc.tkServiceMessages,\r\n ...window.opacc.projectServiceMessages,\r\n};\r\n\r\nexport const directSearchSuggestMessages = {\r\n ...globalDirectSearchSuggestMessages,\r\n ...window.opacc.tkDirectSearchSuggestMessages,\r\n ...window.opacc.projectDirectSearchSuggestMessages,\r\n};\r\n\r\nexport const fileuploadAreaMessages = {\r\n ...globalFileuploadAreaMessages,\r\n ...window.opacc.tkFileUploadAreaMessages,\r\n ...window.opacc.projectFileUploadAreaMessages,\r\n};\r\n\r\nexport const filterMessages = {\r\n ...globalFilterMessages,\r\n ...window.opacc.tkFilterMessages,\r\n ...window.opacc.projectFilterMessages,\r\n};\r\n\r\nexport const autocompleteMessages = {\r\n ...globalAutocompleteMessages,\r\n ...window.opacc.tkAutocompleteMessages,\r\n ...window.opacc.projectAutocompleteMessages,\r\n};\r\n\r\nexport const paymentMessages = {\r\n ...globalPaymentMessages,\r\n ...window.opacc.tkPaymentMessages,\r\n ...window.opacc.projectPaymentMessages,\r\n};\r\nexport const deliveryMessages = {\r\n ...globalDeliveryMessages,\r\n ...window.opacc.tkDeliveryMessages,\r\n ...window.opacc.projectDeliveryMessages,\r\n};\r\nexport const accountMessages = {\r\n ...globalAccountMessages,\r\n ...window.opacc.tkAccountMessages,\r\n ...window.opacc.projectAccountMessages,\r\n};\r\nexport const checkoutMessages = {\r\n ...globalCheckoutMessages,\r\n ...window.opacc.tkCheckoutMessages,\r\n ...window.opacc.projectCheckoutMessages,\r\n};\r\nexport const htmlErrorCodeMessages = {\r\n ...globalHtmlErrorCodeMessages,\r\n ...window.opacc.tkHtmlErrorCodeMessages,\r\n ...window.opacc.projectHtmlErrorCodeMessages,\r\n};","/**\r\n * @param {string} html representing any number of sibling elements\r\n * @return {NodeListOf}\r\n */\r\nconst render = (html: string, isBody = false): T => {\r\n if (!html) render('
');\r\n const parser = new DOMParser();\r\n const doc = parser.parseFromString(html, 'text/html');\r\n return isBody\r\n ? doc.body as T\r\n : doc.body.children.item(0) as T;\r\n};\r\n\r\nexport default render;","import TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\n\nexport default class TKHeader extends TKCustomElementFactory {\n header?: HTMLElement;\n disableScrolldownBreakpoint?: Breakpoint;\n minWidthBreakpoint: number;\n elementToScrollWith?: HTMLElement;\n\n private lastScrollPosY: number = 0;\n private maxHeightScrollWith: number;\n private scrollWay: number = 0;\n private scrollDeltaY: number;\n\n constructor() {\n super();\n\n this.header = this.querySelector('header') || undefined;\n if (!this.header) throw new Error('Header: Header is missing!');\n this.disableScrolldownBreakpoint = (\n this.getAttribute('data-tk-disable-scrolldown-breakpoint') as Breakpoint\n ) || 's';\n this.minWidthBreakpoint = window.viewport.breakpoints.get(this.disableScrolldownBreakpoint) || 0;\n this.elementToScrollWith = this.querySelector('[data-tk-to-scroll-with]') || undefined;\n if (!this.elementToScrollWith) {\n throw new Error('Header: Element to scroll with is missing! Use the [data-tk-to-scroll-with] selector.');\n }\n\n this.maxHeightScrollWith = this.getMaxHeight();\n this.scrollDeltaY = Number(this.getAttribute('data-tk-scroll-delta-y')) || 1;\n }\n\n connectedCallback(): void {\n this.registerViewportListener();\n window.viewport.clientWidth < this.minWidthBreakpoint && this.registerScrollListener();\n }\n\n registerScrollListener(): void {\n if (!this.elementToScrollWith) return;\n const onScrolldown = this.handleScrolldown.bind(this);\n this.maxHeightScrollWith = this.getMaxHeight();\n this.pushListener({\n event: 'scroll',\n element: window,\n action: onScrolldown,\n });\n }\n\n registerViewportListener(): void {\n const onViewportResize = this.handleViewportResize.bind(this);\n this.pushListener({\n event: 'tk-viewport-resize',\n element: window.viewport,\n action: onViewportResize,\n });\n }\n\n handleViewportResize(event: Event): void {\n const customEvent = event as CustomEvent;\n if (customEvent.detail.width < this.minWidthBreakpoint) {\n this.registerScrollListener();\n } else {\n this.removeListener(window);\n }\n }\n\n handleScrolldown(event: Event): void {\n if (!(this.header && this.elementToScrollWith)) return;\n const { scrollY } = event.currentTarget as Window;\n\n if (scrollY > this.lastScrollPosY) {\n if (scrollY <= this.maxHeightScrollWith) {\n this.scrollWay = scrollY;\n } else {\n this.scrollWay = this.maxHeightScrollWith;\n }\n } else if (this.scrollWay > this.scrollDeltaY) {\n this.scrollWay = this.lastScrollPosY - scrollY >= this.maxHeightScrollWith\n ? 0\n : this.lastScrollPosY - scrollY;\n } else {\n this.scrollWay = 0;\n }\n\n this.elementToScrollWith.style.transform = `translateY(-${this.scrollWay}px)`;\n this.lastScrollPosY = scrollY;\n }\n\n getMaxHeight(): number {\n if (!this.elementToScrollWith) return 0;\n const { paddingBottom } = window.getComputedStyle(this.elementToScrollWith);\n const { height } = this.elementToScrollWith.getBoundingClientRect();\n return height - parseInt(paddingBottom, 10);\n }\n}","import render from '@tk/utilities/tk.render';\r\nimport TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\nimport { fetchRequest } from '@tk/utilities/tk.fetch';\r\n\r\ninterface NextLevelResponse {\r\n showItems: string\r\n}\r\n\r\ninterface Page {\r\n id: string\r\n element: HTMLElement\r\n}\r\n\r\nexport default class TKNavigationSidebar extends TKCustomElementFactory {\r\n navigationWrapper?: HTMLElement;\r\n wrapper?: HTMLElement;\r\n openButton?: HTMLElement;\r\n closeButton?: HTMLElement;\r\n openClassName: string;\r\n hasChildrenClassName: string;\r\n isMobile: boolean;\r\n isMobileActive: boolean;\r\n currentMenuId?: string;\r\n asyncTemplateName: string;\r\n desktopMinWidth: number;\r\n overlayClassName: string;\r\n overlay: HTMLElement;\r\n\r\n desktopView?: string;\r\n mobileView?: string;\r\n\r\n private pages: Page[] = [];\r\n\r\n constructor() {\r\n super();\r\n\r\n this.navigationWrapper = document.querySelector('[data-tk-nav-wrapper]') || undefined;\r\n this.wrapper = this.querySelector('[data-tk-wrapper]') || undefined;\r\n this.openButton = document.querySelector(`[data-tk-nav-open=\"${this.id}\"]`) || undefined;\r\n this.closeButton = document.querySelector(`[data-tk-nav-close=\"${this.id}\"]`) || undefined;\r\n this.openClassName = this.getAttribute('data-tk-open-class-name') || 'viewport__navigation--open';\r\n this.currentMenuId = this.getAttribute('data-tk-current-menu-id') || undefined;\r\n this.hasChildrenClassName = (\r\n this.getAttribute('data-tk-has-children-class-name') || 'tk-nav-burger-item--has-children'\r\n );\r\n this.asyncTemplateName = this.getAttribute('data-tk-nav-async-template-name') || 'tk-navigation-burgerlist';\r\n this.desktopMinWidth = Number(this.getAttribute('data-tk-desktop-min-width')) || 1200;\r\n this.overlayClassName = this.getAttribute('data-tk-overlay-class-name') || 'viewport__overlay';\r\n this.isMobile = window.viewport.clientWidth < this.desktopMinWidth;\r\n this.isMobileActive = false;\r\n this.overlay = render(`
`)!;\r\n }\r\n\r\n connectedCallback(): void {\r\n if (!this.currentMenuId) throw new Error('Current menu id is missing!');\r\n\r\n this.registerViewportListener();\r\n this.registerButtonListener();\r\n this.registerClickListener();\r\n\r\n this.isMobile && this.switchToMobile();\r\n }\r\n\r\n registerViewportListener(): void {\r\n const onViewportResize = this.handleViewportResize.bind(this);\r\n this.pushListener({ event: 'tk-viewport-resize', element: window.viewport, action: onViewportResize });\r\n }\r\n\r\n handleViewportResize(event: Event): void {\r\n const customEvent = event as CustomEvent;\r\n this.isMobile = customEvent.detail.width < this.desktopMinWidth;\r\n this.isMobile ? this.switchToMobile() : this.switchToDesktop();\r\n }\r\n\r\n registerButtonListener(): void {\r\n this.openButton?.addEventListener('click', this.openNavigation.bind(this));\r\n this.closeButton?.addEventListener('click', this.closeNavigation.bind(this));\r\n }\r\n\r\n registerClickListener(): void {\r\n this.addEventListener('click', this.handleClickLink.bind(this));\r\n }\r\n\r\n openNavigation(): void {\r\n this.navigationWrapper\r\n ? this.navigationWrapper.classList.add(this.openClassName)\r\n : this.classList.add(this.openClassName);\r\n document.body.insertAdjacentElement('beforeend', this.overlay);\r\n }\r\n\r\n closeNavigation(): void {\r\n this.navigationWrapper\r\n ? this.navigationWrapper.classList.remove(this.openClassName)\r\n : this.classList.remove(this.openClassName);\r\n const overlay = document.querySelector(`.${this.overlayClassName}`);\r\n overlay?.remove();\r\n }\r\n\r\n async handleClickLink(event: Event): Promise {\r\n if (!this.isMobile) return;\r\n event.preventDefault();\r\n\r\n const target = event.target as HTMLAnchorElement;\r\n let element: HTMLAnchorElement | null;\r\n if (target.hasAttribute('data-tk-nav-id')) {\r\n element = target;\r\n } else {\r\n element = target.closest('[data-tk-nav-id]');\r\n }\r\n\r\n if (!element) return;\r\n if (\r\n !element.parentElement?.classList.contains(this.hasChildrenClassName)\r\n && !element.parentElement?.hasAttribute('data-tk-nav-page')\r\n ) {\r\n window.location.href = element.href;\r\n this.closeNavigation();\r\n return;\r\n }\r\n const id = element.getAttribute('data-tk-nav-id');\r\n\r\n if (!id) return;\r\n if (this.existPage(id)) {\r\n const page = this.getPage(id);\r\n if (!page) return;\r\n this.insertPage(page.element);\r\n TKNavigationSidebar.jumpToPage(page.element);\r\n this.removeLastPageFromDOM();\r\n } else {\r\n const response = await this.getTemplate(id);\r\n this.responseNextLevel(response);\r\n }\r\n }\r\n\r\n getTemplate(id: string) {\r\n const url = window.opacc.systemUrls?.async || '/WebPortal/async.aspx';\r\n const data = {\r\n type: 'navigation',\r\n navigationid: id,\r\n template: this.asyncTemplateName,\r\n };\r\n\r\n return new Promise>((resolve, reject) => {\r\n fetchRequest({\r\n requestURL: url,\r\n resolveHandler: (response: TKResponse) => resolve(response),\r\n rejectHandler: (error: unknown) => reject(error),\r\n payload: data,\r\n });\r\n });\r\n }\r\n\r\n responseNextLevel(response: TKResponse) {\r\n if (!response.success) return;\r\n const html = render(response.dataAsJson.showItems);\r\n if (!html) return;\r\n const navigation = html.querySelector('[data-tk-nav-page]');\r\n if (!navigation) return;\r\n this.addPage(navigation);\r\n this.insertPage(navigation);\r\n TKNavigationSidebar.jumpToPage(navigation);\r\n this.removeLastPageFromDOM();\r\n }\r\n\r\n insertPage(element: Element) {\r\n const pages = this.querySelector('[data-tk-nav-pages]');\r\n if (!pages) return;\r\n pages.insertAdjacentElement('afterbegin', element);\r\n }\r\n\r\n addPage(element: Element) {\r\n const id = element.getAttribute('data-tk-nav-page') || '';\r\n !this.existPage(id) && this.pages.push({ id, element } as Page);\r\n }\r\n\r\n getPage(id: string) {\r\n return this.pages.find((page) => page.id === id);\r\n }\r\n\r\n existPage(id: string) {\r\n if (id === '') return false;\r\n const foundPage = this.pages.filter((page) => page.id === id);\r\n return foundPage.length > 0;\r\n }\r\n\r\n removeLastPageFromDOM() {\r\n const pages = this.querySelector('[data-tk-nav-pages]');\r\n if (!pages) return;\r\n const pageList = Array.from(pages.children);\r\n const oldPages = pageList.filter((element) => element !== pages.firstElementChild);\r\n oldPages.forEach((element) => element.remove());\r\n }\r\n\r\n async switchToMobile() {\r\n if (this.isMobileActive) return;\r\n this.isMobileActive = true;\r\n this.closeButton && (this.closeButton.hidden = false);\r\n if (!this.wrapper) return;\r\n this.desktopView = this.wrapper.innerHTML;\r\n\r\n if (!this.mobileView) {\r\n const response = await this.getTemplate(this.currentMenuId!);\r\n const html = render(response.dataAsJson.showItems);\r\n if (!html) throw new Error('Burgerlist: Root Element is missing!');\r\n this.wrapper.replaceChildren(html);\r\n const navigation = html.querySelector('[data-tk-nav-page]');\r\n navigation && this.addPage(navigation);\r\n } else {\r\n this.wrapper.innerHTML = '';\r\n this.wrapper.insertAdjacentHTML('afterbegin', this.mobileView);\r\n }\r\n }\r\n\r\n async switchToDesktop() {\r\n if (!this.isMobileActive) return;\r\n this.isMobileActive = false;\r\n this.closeButton && (this.closeButton.hidden = true);\r\n if (!this.wrapper) return;\r\n this.mobileView = this.wrapper.innerHTML;\r\n if (!this.desktopView) return;\r\n this.wrapper.innerHTML = '';\r\n this.wrapper.insertAdjacentHTML('afterbegin', this.desktopView);\r\n }\r\n\r\n static jumpToPage(element: Element) {\r\n element.scrollIntoView(false);\r\n }\r\n}","import { sendNotificationByItems } from './tk.notification';\r\n\r\ninterface FetchAsyncParams {\r\n requestURL: string;\r\n resolveHandler: (response: TKResponse) => void;\r\n rejectHandler?: (response: unknown) => void;\r\n payload?: Record | FormData | URLSearchParams;\r\n decodeJSONResponse?: boolean;\r\n}\r\n\r\nconst getDefaultErrorFnc = (error: unknown) => {\r\n throw new Error(`Request failed: ${error}`);\r\n};\r\n\r\nexport const setAsyncUrl = (checkForReadOnlyContext = false) => {\r\n const asyncUrl = '/WebPortal/async.aspx';\r\n\r\n if (\r\n !window.opacc\r\n || !window.opacc.systemUrls\r\n || !checkForReadOnlyContext\r\n || !window.opacc.systemUrls.asyncReadOnly\r\n ) return asyncUrl;\r\n\r\n return window.opacc.systemUrls.asyncReadOnly;\r\n};\r\n\r\nconst prepareJsonResponse = (response: WASResponse) => {\r\n const data = window.atob(response.data);\r\n const html = document.createElement('div');\r\n html.innerHTML = data;\r\n\r\n const json = response.contentType === 'application/json' && html.innerText !== ''\r\n ? JSON.parse(html.innerText)\r\n : {};\r\n\r\n sendNotificationByItems(response.messages, json);\r\n\r\n return {\r\n status: response.status,\r\n messages: response.messages,\r\n dataAsBase64: response.data,\r\n contentType: response,\r\n success: response.status === 'ok',\r\n dataAsHtml: response.contentType === 'text/html' ? html.innerText : '',\r\n dataAsJson: json,\r\n data,\r\n } as unknown as TKResponse;\r\n};\r\n\r\nconst recordToURLSearchParams = (data: Record): URLSearchParams => {\r\n const searchParams = new URLSearchParams();\r\n Object.entries(data).forEach(([key, value]) => {\r\n searchParams.append(key, value || '');\r\n });\r\n return searchParams;\r\n};\r\n\r\nconst formDataToURLSearchParams = (formData: FormData): URLSearchParams => {\r\n const searchParams = new URLSearchParams();\r\n formData.forEach((value, key) => {\r\n searchParams.append(key, value as string);\r\n });\r\n return searchParams;\r\n};\r\n\r\nexport const fetchRequest = async ({\r\n requestURL,\r\n resolveHandler,\r\n rejectHandler = getDefaultErrorFnc,\r\n payload,\r\n decodeJSONResponse = true,\r\n}: FetchAsyncParams) => {\r\n const headers = new Headers({\r\n 'x-requested-with': 'XMLHttpRequest',\r\n 'response-type': 'json',\r\n });\r\n\r\n let body;\r\n if (payload) {\r\n headers.set('content-type', 'application/x-www-form-urlencoded; charset=UTF-8');\r\n if (payload instanceof URLSearchParams) {\r\n body = payload;\r\n } else if (payload instanceof FormData) {\r\n body = formDataToURLSearchParams(payload);\r\n } else if (payload instanceof Object) {\r\n body = recordToURLSearchParams(payload);\r\n }\r\n }\r\n\r\n const init: RequestInit = {\r\n method: payload ? 'POST' : 'GET',\r\n headers,\r\n credentials: 'include',\r\n body,\r\n };\r\n\r\n try {\r\n const response = await fetch(requestURL, init);\r\n const contentType = response.headers.get('content-type');\r\n const data = contentType?.includes('application/json')\r\n ? await response.json()\r\n : await response.text();\r\n const preparedData = decodeJSONResponse ? prepareJsonResponse(data) : data;\r\n resolveHandler(preparedData);\r\n } catch (error) {\r\n rejectHandler(error);\r\n }\r\n};","import TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\n\nexport default class TKViewport extends TKCustomElementFactory {\n resizeEventName: string;\n resizeObserver: ResizeObserver;\n breakpoints: Map;\n currentBreakpoint: Breakpoint;\n\n constructor() {\n super();\n\n this.resizeEventName = this.getAttribute('data-tk-resize-event-name') || 'tk-viewport-resize';\n this.resizeObserver = new ResizeObserver(this.checkSize.bind(this));\n\n // * These breakpoints must match the CSS breakpoints, otherwise conflicts may occur.\n this.breakpoints = new Map([\n ['xs', 576],\n ['s', 768],\n ['m', 992],\n ['l', 1200],\n ['xl', 1440],\n ]);\n this.currentBreakpoint = this.getCurrentBreakpoint(this.clientWidth);\n }\n\n connectedCallback(): void {\n this.resizeObserver.observe(this);\n window.viewport = this;\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n this.resizeObserver.unobserve(this);\n }\n\n checkSize(entries: ResizeObserverEntry[]) {\n entries.forEach(() => {\n const currentWidth = window.innerWidth;\n const currentBreakpoint = this.getCurrentBreakpoint(currentWidth);\n if (this.currentBreakpoint !== currentBreakpoint) {\n const event = new CustomEvent(this.resizeEventName, {\n bubbles: true,\n detail: {\n width: currentWidth,\n breakpoint: currentBreakpoint,\n },\n });\n this.currentBreakpoint = currentBreakpoint;\n this.dispatchEvent(event);\n }\n });\n }\n\n getCurrentBreakpoint(width: number): Breakpoint {\n let currentBreakpoint: Breakpoint = 'xs';\n this.breakpoints.forEach((value, key) => {\n if (width >= value) {\n currentBreakpoint = key;\n }\n });\n return currentBreakpoint;\n }\n}","import { fetchRequest, setAsyncUrl } from '@tk/utilities/tk.fetch';\nimport TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\nimport { directSearchSuggestMessages } from '@tk/utilities/tk.messages';\nimport { isOutsideShapes } from '@tk/utilities/tk.shape.detector';\n\ninterface ISeachInputField {\n minimum: number;\n value: string;\n valid: boolean;\n hasDangerousString: boolean;\n hasDisallowedChars: boolean;\n}\n// eslint-disable-next-line no-use-before-define\ntype FieldElement = HTMLElement | TKSearch;\n\ninterface IDOMElement {\n element?: FieldElement;\n className: string;\n}\n\ninterface ISearchDataRequest {\n type: string;\n inputValue: string;\n filterValue?: string;\n filterAttribute?: string;\n}\n\ninterface SearchResponse {\n html: string;\n}\n\nexport default class TKSearch extends TKCustomElementFactory {\n selectorSearch: string = '[data-tk-search]';\n selectorSearchBackButton: string = '[data-tk-search-back]';\n selectorSearchResetButton: string = '[data-tk-search-reset]';\n selectorSearchSubmitButton: string = '[data-tk-search-submit]';\n selectorSearchFilterElement: string = '[data-tk-search-filter]';\n selectorSearchResult: string = '[data-tk-search-result]';\n attributeSearchMinLength: string = '[data-tk-search-min-input-length]';\n activeClassName: string;\n activeResultClassName: string;\n tooShortClassName: string;\n loadingClassName: string;\n\n directSearchForm?: HTMLFormElement;\n directSearchInputElement?: HTMLInputElement;\n directSearchBackButton?: HTMLButtonElement;\n directSearchResetButton?: HTMLButtonElement;\n directSearchSubmitButton?: HTMLButtonElement;\n directSearchFilterElement?: HTMLSelectElement;\n directSearchInputObj: ISeachInputField = {} as ISeachInputField;\n directSearchResult?: HTMLElement;\n directSearchMinLength: number;\n timerID: number = 0;\n\n searchTermAsUrlParam: boolean = true;\n disallowedCharacters: string = '';\n disallowedCharactersRegex: RegExp = /[^a-zA-Z0-9 äÄãÃåÅáÁàÀâÂéÉèÈêÊëËöÖóÓòÒôÔõÕüÜúÚùÙûÛìÌíÍîÎïÏñÑøØçÇß',-_.]+/;\n\n constructor() {\n super();\n this.directSearchForm = this.querySelector(this.selectorSearch) || undefined;\n this.directSearchBackButton = this.querySelector(this.selectorSearchBackButton) || undefined;\n this.directSearchResetButton = this.querySelector(this.selectorSearchResetButton) || undefined;\n this.directSearchSubmitButton = this.querySelector(this.selectorSearchSubmitButton) || undefined;\n this.directSearchFilterElement = this.querySelector(this.selectorSearchFilterElement) || undefined;\n this.directSearchResult = this.querySelector(this.selectorSearchResult) || undefined;\n this.directSearchMinLength = Number(this.getAttribute(this.attributeSearchMinLength)) || 3;\n this.activeClassName = this.getAttribute('data-tk-active-class-name') || 'tk-search--active';\n this.activeResultClassName = (\n this.getAttribute('data-tk-active-result-class-name') || 'tk-search--has-data'\n );\n this.tooShortClassName = this.getAttribute('data-tk-too-short-class-name') || 'tk-search__result--too-short';\n this.loadingClassName = this.getAttribute('data-tk-loading-class-name') || 'tk-search__result--loading';\n\n if (!this.directSearchForm) {\n throw new Error('TK: Missing Direct-Search');\n }\n\n this.directSearchInputElement = this.directSearchForm.querySelector('input') || undefined;\n\n if (!this.directSearchInputElement) {\n throw new Error('TK: Missing Direct-Search-Input');\n }\n\n if (!this.directSearchResult) {\n throw new Error('TK: Missing Direct-Search Result Wrapper');\n }\n TKSearch.replaceToActionUrl();\n }\n\n connectedCallback(): void {\n this.registerListener();\n }\n\n registerListener(): void {\n if (this.directSearchInputElement) {\n const keyUpEventHandler = this.getSuggest.bind(this);\n const setClassEventHandler = this.setActiveClass.bind(this);\n const focusOutEventHandler = this.focusOut.bind(this);\n this.pushListener({ event: 'input', element: this.directSearchInputElement, action: keyUpEventHandler });\n this.pushListener({\n event: 'focusin',\n element: this.directSearchInputElement,\n action: setClassEventHandler,\n });\n this.pushListener({ event: 'click', element: window, action: focusOutEventHandler });\n }\n\n if (this.directSearchBackButton) {\n const navigateBackEventHandler = this.navigateBack.bind(this);\n this.pushListener({\n event: 'click',\n element: this.directSearchBackButton,\n action: navigateBackEventHandler,\n });\n }\n\n if (this.directSearchResetButton) {\n const resetEventHandler = this.resetSearch.bind(this);\n this.pushListener({\n event: 'click',\n element: this.directSearchResetButton,\n action: resetEventHandler,\n });\n }\n\n if (this.directSearchFilterElement) {\n const selectboxEventHandler = this.getSuggest.bind(this);\n this.pushListener({\n event: 'change',\n element: this.directSearchFilterElement,\n action: selectboxEventHandler,\n });\n }\n }\n\n setActiveClass(): void {\n this.classList.add(this.activeClassName);\n }\n\n focusOut(event: MouseEvent): void {\n const fieldElement = this.directSearchInputElement;\n const resultElement = this.directSearchResult;\n if (!fieldElement || !resultElement) return;\n const fieldElementRect = fieldElement.getBoundingClientRect();\n const resultRect = resultElement.getBoundingClientRect();\n const rectangles = [\n { rectangle: fieldElementRect },\n { rectangle: resultRect },\n ];\n if (isOutsideShapes(event, rectangles)) {\n this.classList.remove(this.activeClassName);\n }\n }\n\n setProgressBar(): void {\n const progressBarTpl: string = `\n
\n
\n
`;\n\n this.directSearchResult?.insertAdjacentHTML('beforeend', progressBarTpl);\n }\n\n setMessageTooShort(): void {\n const msgTpl: string = `\n
\n \n \n \n \n ${directSearchSuggestMessages.messageTooShort.text.replace('%1', String(this.directSearchMinLength))}\n \n
`;\n\n this.directSearchResult?.insertAdjacentHTML('beforeend', msgTpl);\n }\n\n getSuggest(): void {\n if (!this.directSearchResult) return;\n\n this.directSearchInputObj = this.validateSearchInput();\n this.modifyDOM();\n\n if (!this.directSearchInputObj.valid) {\n this.classList.add(this.activeResultClassName);\n this.setMessageTooShort();\n return;\n }\n\n this.resetResultList();\n\n this.timerID && clearTimeout(this.timerID);\n this.timerID = window.setTimeout(() => {\n // append Progress-Bar\n this.setProgressBar();\n\n const searchData = this.setDataForRequest();\n const data: Record = Object.fromEntries(Object.entries(searchData) as [string, string][]);\n\n const url = setAsyncUrl();\n fetchRequest({\n requestURL: url,\n resolveHandler: this.getDirectSearchSuggestDataFromResult.bind(this),\n payload: data,\n });\n }, 500);\n }\n\n setDataForRequest(): ISearchDataRequest {\n const retVal: ISearchDataRequest = {\n type: 'directsearchsuggest',\n inputValue: encodeURIComponent(this.directSearchInputObj.value),\n filterAttribute: this.directSearchFilterElement?.dataset.tkSearchFilterAttribute,\n filterValue: this.directSearchFilterElement?.value,\n };\n\n if (!this.directSearchFilterElement) {\n delete retVal.filterAttribute;\n delete retVal.filterValue;\n }\n\n return retVal;\n }\n\n getDirectSearchSuggestDataFromResult(response: TKResponse): void {\n if (!this.directSearchResult) {\n return;\n }\n\n this.classList.add(this.activeResultClassName);\n this.directSearchResult.innerHTML = response.dataAsJson.html;\n }\n\n modifyDOM(): void {\n const classListObj = TKSearch.clearClassListObj();\n\n classListObj.push(\n {\n element: this,\n className: this.activeClassName,\n },\n {\n element: this,\n className: this.activeResultClassName,\n },\n );\n\n if (this.directSearchInputObj.valid) {\n TKSearch.addClassList(classListObj);\n } else {\n this.resetResultList();\n }\n }\n\n static clearClassListObj(): IDOMElement[] {\n const classListObj: IDOMElement[] = [];\n return classListObj;\n }\n\n static addClassList(items: IDOMElement[]): void {\n items.forEach((item: IDOMElement) => {\n item.element?.classList.add(item.className);\n });\n }\n\n static removeClassList(items: IDOMElement[]): void {\n items.forEach((item: IDOMElement) => {\n item.element?.classList.remove(item.className);\n });\n }\n\n resetResultList(): void {\n this.directSearchResult?.replaceChildren();\n }\n\n navigateBack(): void {\n const classListObj = TKSearch.clearClassListObj();\n classListObj.push({\n element: this,\n className: this.activeClassName,\n });\n\n TKSearch.removeClassList(classListObj);\n }\n\n resetSearch(): void {\n const classListObj = TKSearch.clearClassListObj();\n classListObj.push(\n {\n element: this,\n className: this.activeClassName,\n },\n {\n element: this,\n className: this.activeResultClassName,\n },\n );\n this.resetResultList();\n TKSearch.removeClassList(classListObj);\n this.directSearchForm?.reset();\n }\n\n static replaceToActionUrl(): void {\n const actionUrl = localStorage.getItem('searchActionUrl')\n ? new URL(localStorage.getItem('searchActionUrl') as string)\n : undefined;\n\n if (actionUrl && actionUrl.pathname === window.location.pathname) {\n window.history.replaceState(null, 'searchActionUrl', actionUrl);\n }\n if (actionUrl) {\n localStorage.removeItem('searchActionUrl');\n }\n }\n\n validateSearchInput(): ISeachInputField {\n const value = this.directSearchInputElement?.value.trim() || '';\n const minLength = Number(this.getAttribute('data-tk-search-min-input-length') || 3);\n const hasDangerousString = value?.includes('<');\n const hasDisallowedChars = this.hasDisallowedCharacters(value);\n\n return {\n minimum: minLength,\n value,\n valid: value.length >= minLength && !hasDangerousString && !hasDisallowedChars,\n hasDangerousString,\n hasDisallowedChars,\n };\n }\n\n hasDisallowedCharacters(value: string): boolean {\n if (value === '') {\n this.disallowedCharacters = '';\n return false;\n }\n\n let disallowedCharactersRegex: RegExp;\n if (window.opacc.tkSearchTermModifier) {\n disallowedCharactersRegex = new RegExp(window.opacc.tkSearchTermModifier.disallowCharacters);\n } else {\n disallowedCharactersRegex = this.disallowedCharactersRegex;\n }\n const matches = value.match(disallowedCharactersRegex);\n if (matches && matches.length > 0) {\n const character = matches.at(0);\n if (character) {\n this.disallowedCharacters = character;\n return true;\n }\n return false;\n }\n\n this.disallowedCharacters = '';\n return false;\n }\n}","export interface Point {\n x: number;\n y: number;\n}\n\nexport interface Offset {\n left?: number;\n right?: number;\n top?: number;\n bottom?: number;\n}\n\nexport interface RectangleItem {\n rectangle: DOMRect;\n offset?: Offset;\n}\n\nexport function isPointOutsideRectangle(point: Point, rectangle: DOMRect, offset?: Offset): boolean {\n return (\n point.x < rectangle.left + (offset?.left || 0)\n || point.x > rectangle.right + (offset?.right || 0)\n || point.y < rectangle.top + (offset?.top || 0)\n || point.y > rectangle.bottom + (offset?.bottom || 0)\n );\n}\n\nexport function isOutsideShapes(event: MouseEvent, rectangles: RectangleItem[]): boolean {\n const point: Point = { x: event.clientX, y: event.clientY };\n return rectangles.every((item) => isPointOutsideRectangle(point, item.rectangle, item.offset));\n}","import TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\nimport { fetchRequest } from '@tk/utilities/tk.fetch';\r\n\r\ntype FieldElement = HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement | undefined;\r\ntype AddonType = 'prefix' | 'suffix';\r\n// type EventHandler = (event: Event) => void;\r\n// type DebouncedFunction = (...args: Parameters) => void;\r\ntype EventHandler = (event: Event) => void;\r\ntype DebouncedFunction = (event: Event) => void;\r\n\r\nexport default class TKFormElement extends TKCustomElementFactory {\r\n fieldElement: FieldElement;\r\n labelElement: HTMLLabelElement | undefined;\r\n materialDataAttribute: string;\r\n materialClass: string;\r\n materialNumberInputClass: string;\r\n materialLabelInsideClass: string;\r\n materialSelectFocussedClass: string;\r\n materialLoadedClass: string;\r\n addonElement: HTMLSpanElement | undefined;\r\n isFunctionalCheckInput:boolean;\r\n addonSuffixDistance: number;\r\n addonPrefixDistance: number;\r\n addonDefaultPadding: number;\r\n isPasswordInput: boolean;\r\n onTransitionEnd: () => void;\r\n timeoutId: number | undefined;\r\n\r\n constructor() {\r\n super();\r\n this.fieldElement = this.querySelector('input, select, textarea') as FieldElement;\r\n this.labelElement = this.querySelector('label')\r\n || undefined;\r\n this.materialDataAttribute = 'data-tk-is-material';\r\n this.materialClass = this.getAttribute('data-tk-material-class')\r\n || 'tk-form-material';\r\n this.materialNumberInputClass = this.getAttribute('data-tk-material-number-input-class')\r\n || 'tk-form-material--number';\r\n this.materialLabelInsideClass = this.getAttribute('data-tk-material-label-inside-class')\r\n || 'tk-form-material--label-inside';\r\n this.materialSelectFocussedClass = this.getAttribute('data-tk-material-select-focussed-class')\r\n || 'tk-form-select--focussed';\r\n this.materialLoadedClass = this.getAttribute('data-tk-material-loaded-class')\r\n || 'tk-form-material--loaded';\r\n this.addonElement = this.querySelector('[data-tk-addon]')\r\n || undefined;\r\n this.isFunctionalCheckInput = this.getAttribute('data-functional-check') === 'true';\r\n this.isPasswordInput = this.hasAttribute('data-tk-toggle-password');\r\n this.addonSuffixDistance = 0;\r\n this.addonPrefixDistance = 0;\r\n this.addonDefaultPadding = parseInt(this.getAttribute('data-tk-addon-default-padding') || '0', 10)\r\n || 4;\r\n this.onTransitionEnd = () => {};\r\n }\r\n\r\n connectedCallback() {\r\n this.checkRequiredAttribute();\r\n this.registerAddonClickedListener();\r\n this.registerShowPasswordClickedListener();\r\n this.initMaterialInput();\r\n this.handelFunctionalCheckInput();\r\n }\r\n\r\n // #region Required\r\n checkRequiredAttribute() {\r\n if (!this.labelElement || !this.fieldElement || !this.fieldElement.hasAttribute('required')) return;\r\n this.labelElement.innerText = `${this.labelElement.innerText} *`;\r\n }\r\n // #endregion\r\n\r\n // #region Addon\r\n registerAddonClickedListener() {\r\n if (!this.addonElement) return;\r\n\r\n const addonClickHandler = this.onAddonClicked.bind(this);\r\n\r\n this.pushListener({ event: 'click', element: this.addonElement, action: addonClickHandler });\r\n }\r\n\r\n onAddonClicked() {\r\n if (\r\n !this.fieldElement\r\n || (!(this.fieldElement instanceof HTMLInputElement)\r\n && !(this.fieldElement instanceof HTMLTextAreaElement))\r\n ) throw new Error('No Input element found');\r\n\r\n if (this.isPasswordInput) return;\r\n this.fieldElement.focus();\r\n }\r\n\r\n registerShowPasswordClickedListener() {\r\n if (!this.isPasswordInput || !this.addonElement) return;\r\n\r\n const passwordShowClickHandler = this.onPasswordShowClicked.bind(this);\r\n this.pushListener({ event: 'mousedown', element: this.addonElement, action: passwordShowClickHandler });\r\n this.pushListener({ event: 'mouseup', element: this.addonElement, action: passwordShowClickHandler });\r\n this.pushListener({ event: 'touchstart', element: this.addonElement, action: passwordShowClickHandler });\r\n this.pushListener({ event: 'touchend', element: this.addonElement, action: passwordShowClickHandler });\r\n }\r\n\r\n onPasswordShowClicked(event: Event) {\r\n if (\r\n !this.fieldElement\r\n || !(this.fieldElement instanceof HTMLInputElement)\r\n ) throw new Error('Missing input element');\r\n\r\n if (event.type === 'mousedown' || event.type === 'touchstart') {\r\n this.fieldElement.type = 'text';\r\n } else {\r\n this.fieldElement.type = 'password';\r\n }\r\n }\r\n // #endregion\r\n\r\n // #region Material\r\n initMaterialInput() {\r\n if (!this.hasAttribute(this.materialDataAttribute)) return;\r\n if (!this.fieldElement) throw new Error('No element found');\r\n\r\n this.classList.add(this.materialClass);\r\n\r\n if (this.isNumberInput()) {\r\n this.classList.add(this.materialNumberInputClass);\r\n }\r\n\r\n this.registerLabelTransitionEndListener();\r\n this.calculateAddonWidth();\r\n this.setMaterialLabelState();\r\n this.registerMaterialValueChangeListener();\r\n this.registerMaterialSelectFocusChangeListener();\r\n }\r\n\r\n /**\r\n * This function is mainly used to check whether a valid value has been\r\n * set for the data-tk-addon attribute\r\n * @returns addonType: string representing the addon type\r\n */\r\n getAddonType() {\r\n if (!this.addonElement) throw new Error('Missing addon');\r\n const addonType = this.addonElement.getAttribute('data-tk-addon') as AddonType;\r\n\r\n if ((addonType !== 'prefix') && (addonType !== 'suffix')) throw new Error('Wrong addon type');\r\n\r\n return addonType;\r\n }\r\n\r\n /**\r\n * Checks whether the element contains a value or not. This information is required\r\n * to determine whether the label should be displayed inside or outside the element.\r\n * @returns isEmptyElement: boolean\r\n */\r\n checkForValue() {\r\n let isEmptyElement;\r\n\r\n if (this.fieldElement instanceof HTMLSelectElement) {\r\n const selectedOption = this.querySelector('option:checked');\r\n const isPlaceholderOption = selectedOption?.hasAttribute('data-empty-option');\r\n isEmptyElement = isPlaceholderOption;\r\n } else {\r\n isEmptyElement = this.fieldElement?.value === '';\r\n }\r\n\r\n return isEmptyElement;\r\n }\r\n\r\n /**\r\n * This function implements the material functionality by displaying the label either\r\n * inside or outside the control, depending on the content\r\n */\r\n setMaterialLabelState() {\r\n // check input value\r\n const isEmptyMaterialInput = this.checkForValue();\r\n\r\n if (isEmptyMaterialInput) {\r\n this.classList.add(this.materialLabelInsideClass);\r\n if (!this.labelElement) throw new Error('Missing label element');\r\n\r\n if (this.isNumberInput()) {\r\n this.setupMaterialNumberLabelStyle();\r\n }\r\n\r\n if (!this.isNumberInput()) {\r\n this.setupMaterialDefaultLabelStyle();\r\n }\r\n } else {\r\n this.classList.remove(this.materialLabelInsideClass);\r\n if (!this.labelElement) throw new Error('Missing label element');\r\n this.labelElement.removeAttribute('style');\r\n }\r\n }\r\n\r\n /**\r\n * This function calculates the label position for a material input that is not of type\r\n * number and where the label is located within the input\r\n */\r\n setupMaterialDefaultLabelStyle() {\r\n if ((this.addonPrefixDistance === 0 && this.addonSuffixDistance === 0)) return;\r\n this.labelElement!.style.marginLeft = this.addonPrefixDistance > 0\r\n ? `${this.addonPrefixDistance + this.addonDefaultPadding}px` : '0px';\r\n this.labelElement!.style.marginRight = this.addonSuffixDistance > 0\r\n ? `${this.addonSuffixDistance + this.addonDefaultPadding}px` : '0px';\r\n this.labelElement!.style.paddingInline = '0';\r\n }\r\n\r\n /**\r\n * This function calculates the label position for a material input of type Number where\r\n * the label is located within the input\r\n */\r\n setupMaterialNumberLabelStyle() {\r\n this.labelElement!.style.paddingInline = '0';\r\n const labelWidthWithPadding = this.labelElement!.getBoundingClientRect().width;\r\n const computedLabelStyle = window.getComputedStyle(this.labelElement!);\r\n const labelPaddingLeft = parseFloat(computedLabelStyle.paddingLeft);\r\n const labelPaddingRight = parseFloat(computedLabelStyle.paddingRight);\r\n const labelWidth = (labelWidthWithPadding - labelPaddingLeft - labelPaddingRight);\r\n\r\n const formControlWidth = this.getBoundingClientRect().width;\r\n\r\n const computetInputStyle = window.getComputedStyle(this.fieldElement!);\r\n const inputPaddingRight = parseFloat(computetInputStyle.paddingRight);\r\n\r\n const addonWidth = (this.addonElement && (this.getAddonType() === 'suffix'))\r\n ? this.addonElement.getBoundingClientRect().width : 0;\r\n\r\n const xOffset = Math.round(formControlWidth - labelWidth - addonWidth - inputPaddingRight);\r\n\r\n this.labelElement!.style.paddingLeft = `${xOffset}px`;\r\n }\r\n\r\n /**\r\n * This function checks whether the current control has an addon. If so, depending\r\n * on the type of control, it checks whether the material label requires additional\r\n * spacing in the folded state\r\n */\r\n calculateAddonWidth() {\r\n if (!this.addonElement) return;\r\n if (this.fieldElement instanceof HTMLSelectElement) return;\r\n\r\n /* The text is displayed right-aligned for the number inputs.\r\n They must therefore be treated separately */\r\n const isNumberInput = this.isNumberInput();\r\n const addonType = this.getAddonType();\r\n\r\n if (!isNumberInput && (addonType === 'prefix')) {\r\n this.addonPrefixDistance = this.addonElement.offsetWidth;\r\n } else if (isNumberInput && (addonType === 'suffix')) {\r\n this.addonSuffixDistance = this.addonElement.offsetWidth;\r\n }\r\n }\r\n\r\n /**\r\n * Checks whether the input is of type Number. This information is required because\r\n * the text does not start on the left when the number input is collapsed\r\n * @returns boolean: representing is input of type number\r\n */\r\n isNumberInput() {\r\n if (!(this.fieldElement instanceof HTMLInputElement)) return false;\r\n\r\n return (this.fieldElement && (this.fieldElement.type === 'number'));\r\n }\r\n\r\n /**\r\n * Listener for material control value changes\r\n */\r\n registerMaterialValueChangeListener() {\r\n const onValueChanged = this.setMaterialLabelState.bind(this);\r\n if (!(this.fieldElement instanceof HTMLSelectElement)) {\r\n this.pushListener({ event: 'keyup', element: this.fieldElement!, action: onValueChanged });\r\n } else {\r\n this.pushListener({ event: 'change', element: this.fieldElement!, action: onValueChanged });\r\n }\r\n }\r\n\r\n /**\r\n * Is required so that a class can be added to the focused material select\r\n * element that colors the text of the select white\r\n */\r\n registerMaterialSelectFocusChangeListener() {\r\n if (!(this.fieldElement instanceof HTMLSelectElement)) return;\r\n\r\n const onFocusChanged = this.onMaterialSelectFocusChanged.bind(this);\r\n\r\n this.pushListener({ event: 'focusin', element: this.fieldElement, action: onFocusChanged });\r\n this.pushListener({ event: 'focusout', element: this.fieldElement, action: onFocusChanged });\r\n }\r\n\r\n /**\r\n * This function is used to add a class to the focused material select, which sets\r\n * the font to white if no option has been selected\r\n * @param event: Used to determin if focus has been set or removed\r\n */\r\n onMaterialSelectFocusChanged(event: Event) {\r\n const { type } = event;\r\n\r\n if (type === 'focusin') {\r\n this.classList.add(this.materialSelectFocussedClass);\r\n } else {\r\n this.classList.remove(this.materialSelectFocussedClass);\r\n }\r\n }\r\n\r\n /**\r\n * This function fades in the material element as soon as the label is in\r\n * the correct position\r\n */\r\n registerLabelTransitionEndListener() {\r\n if (!this.labelElement) throw new Error('Missing label element');\r\n\r\n this.onTransitionEnd = this.addMaterialLoadedModifier.bind(this);\r\n this.pushListener({ event: 'transitionend', element: this.labelElement, action: this.onTransitionEnd });\r\n }\r\n\r\n addMaterialLoadedModifier() {\r\n this.classList.add(this.materialLoadedClass);\r\n this.labelElement!.removeEventListener('transitionend', this.onTransitionEnd);\r\n }\r\n // #endregion\r\n\r\n // #region Functional Check\r\n handelFunctionalCheckInput() {\r\n const input:HTMLInputElement | null = this.querySelector('[data-fc-input]');\r\n if (!this.isFunctionalCheckInput || !input) return;\r\n if (input.type === 'checkbox') {\r\n input.addEventListener('change', (e:Event) => this.saveFunctionalCheckInput(e));\r\n } else {\r\n input.addEventListener('input', this.debounce((e:Event) => this.saveFunctionalCheckInput(e), 300));\r\n }\r\n }\r\n\r\n // eslint-disable-next-line class-methods-use-this\r\n saveFunctionalCheckInput(e: Event) {\r\n const target = e.target as HTMLInputElement;\r\n const { type } = target;\r\n let value:string | number | null;\r\n if (type === 'checkbox') {\r\n value = target.checked ? 1 : 0;\r\n } else {\r\n value = target.value;\r\n }\r\n const url:string | null = target.getAttribute('data-fc-url');\r\n\r\n if (value === undefined || !url) return;\r\n\r\n fetchRequest({\r\n requestURL: url,\r\n payload: {\r\n 'fc-value': `${value}`,\r\n },\r\n resolveHandler: () => {},\r\n });\r\n }\r\n\r\n debounce(func: EventHandler, delay: number): DebouncedFunction {\r\n return (event: Event): void => {\r\n if (this.timeoutId) {\r\n clearTimeout(this.timeoutId);\r\n }\r\n this.timeoutId = window.setTimeout(() => func(event), delay);\r\n };\r\n }\r\n // #endregion\r\n}","import TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\nimport { fetchRequest } from '@tk/utilities/tk.fetch';\r\nimport { formErrorMessages, formExpandErrorMessages } from '@tk/utilities/tk.messages';\r\n\r\ntype FieldElement = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n\r\ninterface ValidityMessages {\r\n key: keyof ValidityState;\r\n value: string;\r\n}\r\n\r\ninterface Validation {\r\n element: FieldElement;\r\n wrapper: Element;\r\n state?: ValidityState;\r\n messageElement?: HTMLSpanElement;\r\n messages: ValidityMessages[];\r\n}\r\n\r\ninterface ValidityItem {\r\n key: keyof ValidityState;\r\n value: boolean;\r\n}\r\n\r\ninterface ValidationResponse {\r\n isValid: boolean;\r\n}\r\n\r\nenum matchType {\r\n Some = 'SOME',\r\n Full= 'FULLMATCH',\r\n}\r\n\r\nexport default class TKFormValidator extends TKCustomElementFactory {\r\n form?: HTMLFormElement;\r\n validationList: Validation[];\r\n fieldWrapperSelector: string;\r\n formErrorClassName: string;\r\n fieldHintClassName: string;\r\n shouldValidateInline: boolean;\r\n passwordStrengthMeter?: HTMLElement;\r\n passwordNewElement?: HTMLElement;\r\n passwordRepeatElement?: HTMLElement;\r\n passwordValidClassName: string;\r\n passwordInvalidClassName: string;\r\n firstElementToScrollTo?: HTMLElement;\r\n googleRecaptcha?: HTMLInputElement;\r\n preventEnterDefaultAction: string | undefined;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.form = this.querySelector('form') || undefined;\r\n this.validationList = [];\r\n this.fieldWrapperSelector = this.getAttribute('data-tk-field-wrapper-selector') || '[data-tk-field-wrapper]';\r\n this.formErrorClassName = this.getAttribute('data-tk-form-error-class-name') || 'tk-form--error';\r\n this.fieldHintClassName = this.getAttribute('data-tk-field-hint-class-name') || 'tk-form__hint';\r\n this.shouldValidateInline = this.hasAttribute('data-tk-should-validate-inline');\r\n this.passwordStrengthMeter = this.querySelector('[data-tk-password-strength-meter]') || undefined;\r\n this.passwordNewElement = this.querySelector('[data-tk-password-new]') || undefined;\r\n this.passwordRepeatElement = this.querySelector('[data-tk-password-repeat]') || undefined;\r\n this.passwordValidClassName = this.getAttribute('data-tk-password-valid-class-name') || 'tk-form--valid';\r\n this.passwordInvalidClassName = this.getAttribute('data-tk-password-valid-class-name') || 'tk-form--invalid';\r\n this.googleRecaptcha = this.querySelector('[data-tk-google-recaptcha]') || undefined;\r\n // Selects an element that is clicked when the enter key is pressed\r\n this.preventEnterDefaultAction = this.getAttribute('data-tk-enter-data-attribute-selector')\r\n || undefined;\r\n }\r\n\r\n connectedCallback(): void {\r\n if (!this.form) return;\r\n\r\n this.validationList = [];\r\n\r\n this.setNoValidateForm();\r\n this.searchFieldElements();\r\n this.registerSubmitListener();\r\n this.registerPasswordListener();\r\n this.shouldValidateInline && this.registerFieldValidationListener();\r\n }\r\n\r\n setNoValidateForm() {\r\n if (!this.form) return;\r\n this.form.noValidate = true;\r\n }\r\n\r\n searchFieldElements(): void {\r\n const formElements: NodeListOf = this.querySelectorAll('input, select, textarea');\r\n const formElementList = Array.from(formElements);\r\n const filteredFormElements = formElementList.filter((element) => !element.disabled);\r\n filteredFormElements.forEach((element) => {\r\n const wrapper = element.closest(this.fieldWrapperSelector);\r\n wrapper\r\n && this.validationList.push({\r\n element,\r\n wrapper,\r\n messages: TKFormValidator.generateValidityMessages(element),\r\n });\r\n });\r\n }\r\n\r\n registerSubmitListener() {\r\n if (!this.form) return;\r\n const onSubmitHandler = this.validateForm.bind(this);\r\n this.pushListener({ event: 'submit', element: this.form, action: onSubmitHandler });\r\n }\r\n\r\n registerPasswordListener() {\r\n if (!(this.passwordStrengthMeter && this.passwordNewElement && this.passwordRepeatElement)) return;\r\n\r\n const onValidatePassword = this.validatePassword.bind(this);\r\n this.pushListener({ event: 'input', element: this.passwordNewElement, action: onValidatePassword });\r\n this.pushListener({ event: 'input', element: this.passwordRepeatElement, action: onValidatePassword });\r\n }\r\n\r\n registerFieldValidationListener() {\r\n this.validationList.forEach((item) => {\r\n const onValidation = this.validateField.bind(this, item);\r\n this.pushListener({ event: 'blur', element: item.element, action: onValidation });\r\n this.pushListener({ event: 'input', element: item.element, action: onValidation });\r\n });\r\n }\r\n\r\n async validateRecaptcha(): Promise {\r\n if (!this.googleRecaptcha) return true;\r\n return false;\r\n // return new Promise((resolve) => {\r\n // grecaptcha.ready(async () => {\r\n // const siteKey = this.googleRecaptcha!.getAttribute('data-tk-site-key');\r\n // if (!siteKey) return resolve(false);\r\n // const token = await grecaptcha.execute(siteKey, { action: 'submit' });\r\n // if (!token) return resolve(false);\r\n // this.googleRecaptcha!.value = token;\r\n // resolve(true);\r\n // });\r\n // });\r\n }\r\n\r\n async validateByAPI(): Promise {\r\n const validationList: boolean[] = [];\r\n const fieldElements = this.querySelectorAll('[data-tk-field-check-api]');\r\n if (fieldElements.length === 0) return true;\r\n const apiPromises = Array.from(fieldElements).map(async (element) => {\r\n const apiURL = element.getAttribute('data-tk-field-check-api');\r\n const input = element.querySelector('input');\r\n if (!input || !apiURL) return true;\r\n const response = await TKFormValidator.fetchExistAPI(apiURL, input.value);\r\n const validationItem = this.validationList.find((item) => item.wrapper === element);\r\n const { isValid } = response.dataAsJson;\r\n if (!isValid && validationItem) {\r\n this.removeMessage(validationItem);\r\n this.createElementMessage(\r\n validationItem,\r\n formExpandErrorMessages.existigName,\r\n );\r\n }\r\n return isValid;\r\n });\r\n const results = await Promise.all(apiPromises);\r\n validationList.push(...results);\r\n return validationList.every((item) => item);\r\n }\r\n\r\n static async fetchExistAPI(url: string, value: string): Promise> {\r\n return new Promise((resolve) => {\r\n fetchRequest({\r\n requestURL: url,\r\n payload: {\r\n value,\r\n },\r\n resolveHandler: (response: TKResponse) => {\r\n resolve(response);\r\n },\r\n });\r\n });\r\n }\r\n\r\n async validateForm(event: Event) {\r\n event.preventDefault();\r\n const isFormValid = await this.isFormValid();\r\n if (!isFormValid) return;\r\n if (this.preventEnterDefaultAction) {\r\n const elemntToClick = document.querySelector(`[${this.preventEnterDefaultAction}]`);\r\n elemntToClick?.querySelector('button')?.click();\r\n return;\r\n }\r\n this.form?.submit();\r\n }\r\n\r\n async isFormValid() {\r\n await this.validateFields();\r\n const areFieldsValid = this.validationList.every((item) => item.element.validity.valid);\r\n if (!areFieldsValid) return false;\r\n const isValid = await this.validateByAPI();\r\n const isRecaptchaValid = await this.validateRecaptcha();\r\n\r\n return (\r\n (!this.passwordStrengthMeter || this.checkPasswordStengthMeter())\r\n && this.checkPasswordMatching()\r\n && isValid\r\n && isRecaptchaValid\r\n );\r\n }\r\n\r\n private async validateFields(): Promise {\r\n this.validationList.forEach((item) => {\r\n this.validateField(item);\r\n });\r\n\r\n this.firstElementToScrollTo = undefined;\r\n }\r\n\r\n validateField(item: Validation) {\r\n this.removeMessage(item);\r\n if (!item.element.validity.valid) {\r\n this.showMessage(item);\r\n }\r\n }\r\n\r\n showMessage(item: Validation) {\r\n const validityList = TKFormValidator.createValidityDictionary(item.element);\r\n const invalidMessage = validityList.find((validity) => validity.value);\r\n const message = invalidMessage\r\n ? item.messages.find((message) => message.key === invalidMessage.key)?.value || ''\r\n : item.element.validationMessage;\r\n\r\n this.createElementMessage(item, message);\r\n }\r\n\r\n createElementMessage(item: Validation, message: string) {\r\n const spanElement = document.createElement('span');\r\n spanElement.classList.add(this.fieldHintClassName);\r\n spanElement.textContent = TKFormValidator.replacePlaceholders(message, item.element);\r\n item.messageElement = spanElement;\r\n item.wrapper.classList.add(this.formErrorClassName);\r\n item.wrapper.insertAdjacentElement('beforeend', spanElement);\r\n if (this.firstElementToScrollTo) return;\r\n this.firstElementToScrollTo = item.messageElement;\r\n this.firstElementToScrollTo.scrollIntoView({ behavior: 'smooth' });\r\n }\r\n\r\n removeMessage(item: Validation) {\r\n const spanElement = item.messageElement;\r\n if (!spanElement) return;\r\n spanElement.remove();\r\n item.wrapper.classList.remove(this.formErrorClassName);\r\n }\r\n\r\n static createValidityDictionary(element: FieldElement) {\r\n const { validity } = element;\r\n const validityList: ValidityItem[] = [];\r\n // eslint-disable-next-line guard-for-in, no-restricted-syntax\r\n for (const key in validity) {\r\n const validityItem: ValidityItem = {\r\n key: key as keyof ValidityState,\r\n value: Boolean(validity[key as keyof ValidityState]),\r\n };\r\n validityList.push(validityItem);\r\n }\r\n return validityList;\r\n }\r\n\r\n static generateValidityMessages(element: FieldElement): ValidityMessages[] {\r\n const list: ValidityMessages[] = [];\r\n const customErrorPrefix = 'data-tk-error-msg-';\r\n const attributeList = element.getAttributeNames().filter((name) => name.startsWith(customErrorPrefix));\r\n attributeList.forEach((key) => {\r\n const keyFormatted = key\r\n .replace(customErrorPrefix, '')\r\n .replace(/-./g, (x) => x[1].toUpperCase()) as keyof ValidityState;\r\n const value = element.getAttribute(key);\r\n value\r\n && list.push({\r\n key: keyFormatted,\r\n value,\r\n });\r\n });\r\n\r\n if (formErrorMessages) {\r\n const messages = formErrorMessages;\r\n Object.entries(messages).forEach((entry) => {\r\n const [key, value] = entry;\r\n const foundMessage = list.filter((item) => item.key === key);\r\n !foundMessage.length\r\n && list.push({\r\n key: key as keyof ValidityState,\r\n value,\r\n });\r\n });\r\n }\r\n\r\n return list;\r\n }\r\n\r\n static replacePlaceholders(value: string, element: FieldElement): string {\r\n const dictionary: Record = {\r\n '{minLength}': element.getAttribute('minlength') || '',\r\n '{maxLength}': element.getAttribute('maxlength') || '',\r\n '{length}': element.value.length.toString() || '',\r\n '{step}': element.getAttribute('step') || '',\r\n '{min}': element.getAttribute('min') || '',\r\n '{max}': element.getAttribute('max') || '',\r\n '{currentValue}': element.value,\r\n };\r\n const re = new RegExp(Object.keys(dictionary).join('|'), 'gi');\r\n return value.replace(re, (matched) => dictionary[matched]);\r\n }\r\n\r\n checkPasswordStengthMeter() {\r\n const patterns = this.getPasswordPatterns();\r\n return patterns.every((item) => item.element?.classList.contains(this.passwordValidClassName));\r\n }\r\n\r\n checkPasswordMatching(): boolean {\r\n let isValid: boolean;\r\n const newPasswordItem = this.validationList.find((item) => item.element === this.passwordNewElement);\r\n const repeatPasswordItem = this.validationList.find((item) => item.element === this.passwordRepeatElement);\r\n if (!newPasswordItem || !repeatPasswordItem) return true;\r\n if (newPasswordItem.element.value !== repeatPasswordItem.element.value) {\r\n this.removeMessage(repeatPasswordItem);\r\n // this.createElementMessage(\r\n // repeatPasswordItem,\r\n // formErrorMessages.passwordNotMatching,\r\n // );\r\n isValid = false;\r\n } else {\r\n isValid = true;\r\n }\r\n return isValid;\r\n }\r\n\r\n validatePassword(event: Event) {\r\n const target = event.currentTarget as HTMLInputElement;\r\n const patterns = this.getPasswordPatterns();\r\n\r\n patterns.forEach((item) => {\r\n const regex = new RegExp(item.pattern || '', item.matchtype === matchType.Full ? 'g' : '');\r\n\r\n const regexpMatch = target.value.match(regex);\r\n\r\n if (item.matchtype === matchType.Some) {\r\n if (regexpMatch) {\r\n item.element?.classList.remove(this.passwordInvalidClassName);\r\n item.element?.classList.add(this.passwordValidClassName);\r\n } else {\r\n item.element?.classList.remove(this.passwordValidClassName);\r\n item.element?.classList.add(this.passwordInvalidClassName);\r\n }\r\n }\r\n\r\n if (item.matchtype === matchType.Full) {\r\n if (regexpMatch?.length === target.value.length) {\r\n item.element?.classList.remove(this.passwordInvalidClassName);\r\n item.element?.classList.add(this.passwordValidClassName);\r\n } else {\r\n item.element?.classList.remove(this.passwordValidClassName);\r\n item.element?.classList.add(this.passwordInvalidClassName);\r\n }\r\n }\r\n });\r\n }\r\n\r\n getPasswordPatterns() {\r\n const characterPatternElement = this.passwordStrengthMeter?.querySelector('[data-tk-pwd-character-pattern]');\r\n const upperPatternElement = this.passwordStrengthMeter?.querySelector('[data-tk-pwd-upper-pattern]');\r\n const numberPatternElement = this.passwordStrengthMeter?.querySelector('[data-tk-pwd-number-pattern]');\r\n const allowedSymbolPatternElement = this.passwordStrengthMeter?.querySelector(\r\n '[data-tk-pwd-allowed-symbols-pattern]',\r\n );\r\n const characterPattern = characterPatternElement?.getAttribute('data-tk-pwd-character-pattern');\r\n const upperPattern = upperPatternElement?.getAttribute('data-tk-pwd-upper-pattern');\r\n const numberPattern = numberPatternElement?.getAttribute('data-tk-pwd-number-pattern');\r\n const allowedSymbolPattern = allowedSymbolPatternElement?.getAttribute('data-tk-pwd-allowed-symbols-pattern');\r\n return [\r\n {\r\n pattern: characterPattern,\r\n element: characterPatternElement,\r\n matchtype: matchType.Some,\r\n },\r\n {\r\n pattern: upperPattern,\r\n element: upperPatternElement,\r\n matchtype: matchType.Some,\r\n },\r\n {\r\n pattern: numberPattern,\r\n element: numberPatternElement,\r\n matchtype: matchType.Some,\r\n },\r\n {\r\n pattern: allowedSymbolPattern,\r\n element: allowedSymbolPatternElement,\r\n matchtype: matchType.Full,\r\n },\r\n ];\r\n }\r\n}","import { fetchRequest } from '@tk/utilities/tk.fetch';\nimport TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\nimport { autocompleteMessages } from '@tk/utilities/tk.messages';\n\ninterface ZipCityData {\n zip: string;\n city: string;\n country: string;\n}\n\ninterface ZipCityField {\n inputField?: HTMLInputElement;\n dropdown?: HTMLElement;\n listItemSelected?: HTMLElement;\n data?: ZipCityData[];\n}\n\nexport default class TKFormZipCity extends TKCustomElementFactory {\n fieldCountry?: HTMLInputElement | HTMLSelectElement;\n fieldZip?: HTMLInputElement;\n fieldCity?: HTMLInputElement;\n inputObject: ZipCityField;\n selectedField?: HTMLInputElement;\n listWrapper: HTMLElement;\n timer?: ReturnType;\n lastSearchTerm: string;\n listWrapperClassName: string;\n\n constructor() {\n super();\n\n this.listWrapperClassName = this.getAttribute('data-tk-zip-list-class') || 'tk-form-zipcity__list';\n this.fieldCountry = this.querySelector('[data-tk-zip-country]') || undefined;\n this.fieldZip = this.querySelector('[data-tk-zip-zip]') || undefined;\n this.fieldCity = this.querySelector('[data-tk-zip-city]') || undefined;\n this.lastSearchTerm = '';\n this.selectedField = undefined;\n this.listWrapper = document.createElement('div');\n this.listWrapper.classList.add(this.listWrapperClassName);\n this.listWrapper.hidden = true;\n\n this.inputObject = {\n inputField: undefined,\n dropdown: this.listWrapper,\n listItemSelected: undefined,\n data: [],\n };\n }\n\n connectedCallback(): void {\n this.registerListener();\n }\n\n registerListener() {\n if (!this.fieldZip && !this.fieldCity) return;\n\n const onInputHandler = this.searchZipCity.bind(this);\n const onClickHandler = this.toggleDropdown.bind(this);\n const onSelectHandler = this.selectItem.bind(this);\n const onChangeHandler = this.clearFormFields.bind(this);\n const onInputKeyNavigationHandler = this.inputKeyNavigation.bind(this);\n const onDropdownKeyNavigationHandler = this.dropdownKeyNavigation.bind(this);\n\n this.pushListener({ event: 'click', element: this.fieldZip!, action: onClickHandler });\n this.pushListener({ event: 'click', element: this.fieldCity!, action: onClickHandler });\n this.pushListener({ event: 'click', element: this.inputObject.dropdown!, action: onSelectHandler });\n this.pushListener({ event: 'input', element: this.fieldZip!, action: onInputHandler });\n this.pushListener({ event: 'input', element: this.fieldCity!, action: onInputHandler });\n this.pushListener({ event: 'keydown', element: this.fieldZip!, action: onInputKeyNavigationHandler });\n this.pushListener({ event: 'keydown', element: this.fieldCity!, action: onInputKeyNavigationHandler });\n this.pushListener({\n event: 'keydown',\n element: this.inputObject.dropdown!,\n action: onDropdownKeyNavigationHandler,\n });\n\n if (this.fieldCountry) {\n this.pushListener({ event: 'change', element: this.fieldCountry, action: onChangeHandler });\n }\n }\n\n inputKeyNavigation(event: KeyboardEvent): void {\n if (!(event.code === 'Tab' || event.code === 'Enter' || event.code === 'ArrowDown')) return;\n\n this.inputObject.listItemSelected = this.inputObject.dropdown?.firstElementChild as HTMLElement;\n\n if (!this.inputObject.listItemSelected) return;\n\n this.inputObject.dropdown?.classList.remove('hide');\n this.inputObject.listItemSelected.focus();\n event.preventDefault();\n }\n\n dropdownKeyNavigation(event: KeyboardEvent): void {\n const keyActions: Record void> = {\n ArrowDown: () => this.handleArrowKey(true),\n ArrowUp: () => this.handleArrowKey(false),\n Enter: () => this.selectItem(event),\n Space: () => this.selectItem(event),\n Tab: () => this.hideDropdown(true),\n Escape: () => this.hideDropdown(true),\n };\n\n const action = keyActions[event.code];\n if (!action) return;\n\n action();\n event.preventDefault();\n }\n\n handleArrowKey(isDown: boolean): void {\n if (this.inputObject.listItemSelected) {\n const nextElement = isDown\n ? this.inputObject.listItemSelected.nextElementSibling\n : this.inputObject.listItemSelected.previousElementSibling;\n\n if (nextElement instanceof HTMLElement) {\n this.inputObject.listItemSelected = nextElement;\n }\n } else {\n this.inputObject.listItemSelected = this.inputObject.dropdown?.firstElementChild as HTMLElement;\n }\n\n if (!this.inputObject.listItemSelected) {\n return;\n }\n\n this.inputObject.listItemSelected.focus();\n this.setScroller();\n }\n\n hideDropdown(isHidden: boolean = false): void {\n if (this.inputObject.dropdown) {\n this.inputObject.dropdown.hidden = isHidden;\n }\n }\n\n toggleDropdown() {\n if (this.inputObject.dropdown && this.inputObject.dropdown.hasChildNodes()) {\n this.inputObject.dropdown.hidden = !this.inputObject.dropdown.hidden;\n }\n }\n\n setScroller(): void {\n const { dropdown, listItemSelected } = this.inputObject;\n\n if (!dropdown || !listItemSelected) return;\n\n const index = Array.from(dropdown.children).indexOf(listItemSelected);\n const elHeight = listItemSelected.offsetHeight;\n const { scrollTop } = dropdown;\n const viewport = scrollTop + dropdown.offsetHeight;\n const elOffset = elHeight * index;\n\n if (elOffset >= scrollTop && (elOffset + elHeight) <= viewport) return;\n\n dropdown.scrollTop = elOffset;\n }\n\n setInputObject(): void {\n if (!this.selectedField?.parentElement?.querySelector(`.${this.listWrapperClassName}`)) {\n this.selectedField?.insertAdjacentElement('afterend', this.listWrapper);\n }\n\n this.inputObject.inputField = this.selectedField;\n }\n\n searchZipCity(event: Event): void {\n this.selectedField = event.target as HTMLInputElement;\n const value = this.selectedField!.value.trim();\n\n if (value.length < 2) {\n this.clearData();\n return;\n }\n\n this.lastSearchTerm = value;\n\n this.setInputObject();\n this.timer && clearTimeout(this.timer);\n this.timer = setTimeout(() => {\n this.callApi(value);\n }, 300);\n }\n\n callApi(value: string) {\n if (!this.inputObject.dropdown) return;\n this.hideDropdown(false);\n\n if (this.lastSearchTerm !== value) return;\n\n const zipCity = this.parseZipCity(value);\n const apiUrl = `${window.location.origin}/api/portal/v1/zipsearch`;\n\n const urlObject = new URL(apiUrl);\n const { searchParams } = urlObject;\n\n Object.entries(zipCity).forEach(([key, value]) => {\n searchParams.set(key, value);\n });\n\n fetchRequest({\n requestURL: urlObject.toString(),\n resolveHandler: this.refreshResultList.bind(this),\n decodeJSONResponse: false,\n });\n }\n\n parseZipCity(value: string) {\n let zip: string | number;\n let city: string;\n\n const country: string = this.fieldCountry?.value?.toLowerCase() || 'ch';\n\n const arr = value.split(' ');\n const numberRegex = /^[0-9]+$/;\n const regexTest = arr.find((elem) => numberRegex.test(elem));\n if (regexTest === undefined) {\n zip = '';\n } else {\n zip = regexTest;\n }\n\n if (!zip) {\n if (arr.length > 1) {\n zip = +arr[1] || '';\n }\n }\n\n zip = zip.toString();\n city = value.replace(zip, '').trim();\n if (city === 'undefined') {\n city = '';\n }\n\n return {\n zip,\n city,\n country,\n };\n }\n\n refreshResultList(response: TKResponse): void {\n if (!response) return;\n this.clearData();\n if (Array.isArray(response)) {\n response.forEach((element: ZipCityData) => {\n const listItemTpl: string = `\n `;\n\n this.inputObject.dropdown!.insertAdjacentHTML('beforeend', listItemTpl);\n this.inputObject.data?.push({ zip: element.zip, city: element.city, country: element.country });\n });\n }\n\n if (this.inputObject.data!.length === 0) {\n const listItemTpl: string = `\n `;\n\n this.inputObject.dropdown!.insertAdjacentHTML('beforeend', listItemTpl);\n }\n this.inputObject.dropdown!.hidden = false;\n }\n\n selectItem(event: Event): void {\n let selectedItem: HTMLElement = event.target as HTMLElement;\n selectedItem = selectedItem.closest('[data-tk-zip]') as HTMLElement;\n\n if (!selectedItem) return;\n const zip = selectedItem.getAttribute('data-tk-zip') as string;\n const city = selectedItem.getAttribute('data-tk-city') as string;\n const country = selectedItem.getAttribute('data-tk-country') as string;\n\n if (this.fieldZip) {\n this.fieldZip.value = zip;\n }\n if (this.fieldCity) {\n this.fieldCity.value = city;\n }\n if (this.fieldCountry) {\n this.fieldCountry.value = country;\n }\n\n this.inputObject.inputField!.focus();\n this.clearData();\n }\n\n clearFormFields(): void {\n this.clearData();\n this.fieldCity!.value = '';\n this.fieldZip!.value = '';\n }\n\n clearData(): void {\n if (this.inputObject.dropdown) {\n this.hideDropdown(true);\n this.inputObject.dropdown.replaceChildren();\n }\n this.inputObject.data = [];\n }\n}","import TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\n\r\nexport default class TKTabsTab extends TKCustomElementFactory {\r\n selectorTabsHead: string = '[data-tk-tab-head]';\r\n selectorTabsBody: string = '[data-tk-tab-body]';\r\n activeClassName: string;\r\n initialTabIndex: number;\r\n tabList?: HTMLCollection;\r\n tabContentList?: HTMLCollection;\r\n enableLinks: boolean;\r\n\r\n constructor() {\r\n super();\r\n const tabHead = this.querySelector(this.selectorTabsHead);\r\n const tabBody = this.querySelector(this.selectorTabsBody);\r\n this.activeClassName = this.getAttribute('data-tk-active-class-name') || 'tk-tabs-tab--active';\r\n this.initialTabIndex = Number(this.getAttribute('data-tk-initial-tab')) || 1;\r\n this.enableLinks = this.hasAttribute('data-tk-enable-links');\r\n\r\n if (!tabHead) {\r\n throw new Error('TK: Missing Tab-Header');\r\n }\r\n\r\n if (!tabBody) {\r\n throw new Error('TK: Missing Tab-Body');\r\n }\r\n\r\n this.tabList = tabHead.childElementCount > 0 ? tabHead.children : undefined;\r\n this.tabContentList = tabBody.childElementCount > 0 ? tabBody.children : undefined;\r\n\r\n if (!this.tabList) {\r\n throw new Error('TK: Empty Tab-Header');\r\n }\r\n\r\n if (!this.tabContentList) {\r\n throw new Error('TK: Empty Tab-Content');\r\n }\r\n\r\n if (this.tabList.length !== this.tabContentList.length && !this.enableLinks) {\r\n throw new Error('TK: Tab-Header Elements and Tab-Content Elements must be equal');\r\n }\r\n }\r\n\r\n connectedCallback(): void {\r\n this.registerListener();\r\n if (this.tabList && +this.initialTabIndex > 0) {\r\n const button = this.tabList.item(this.initialTabIndex - 1) as HTMLButtonElement;\r\n this.setTabActive(button, this.initialTabIndex - 1);\r\n }\r\n }\r\n\r\n registerListener(): void {\r\n if (this.tabList) {\r\n [...this.tabList].forEach((element, index) => {\r\n const button = element as HTMLButtonElement;\r\n const eventHandler = this.setTabActive.bind(this, button, index);\r\n this.pushListener({ event: 'click', element: button, action: eventHandler });\r\n });\r\n }\r\n }\r\n\r\n setTabActive(button: HTMLButtonElement, index: number): void {\r\n const input = button.querySelector('input');\r\n if ((input && input.disabled) || button.disabled) return;\r\n const item = this.tabContentList?.item(index);\r\n if (!item) {\r\n const url = button.getAttribute('data-tk-url');\r\n const target = button.getAttribute('target') || undefined;\r\n if (!url) return;\r\n window.open(url, target);\r\n } else {\r\n this.setTabInactive();\r\n button.classList.add(this.activeClassName);\r\n item.classList.add(this.activeClassName);\r\n }\r\n this.toggleRequiredAttribute(index);\r\n }\r\n\r\n setTabInactive(): void {\r\n if (!this.tabContentList) return;\r\n [...this.tabContentList].forEach((element, index) => {\r\n const button = element as HTMLButtonElement;\r\n button.classList.remove(this.activeClassName);\r\n const item = this.tabList?.item(index);\r\n if (!item) return;\r\n item.classList.remove(this.activeClassName);\r\n });\r\n }\r\n\r\n toggleRequiredAttribute(index: number) {\r\n if (!this.tabContentList) return;\r\n const currentElement = this.tabContentList.item(index);\r\n const contentList = Array.from(this.tabContentList);\r\n const filteredList = contentList.filter((element) => element !== currentElement);\r\n filteredList.forEach((element) => {\r\n const fieldElements = element.querySelectorAll('input');\r\n fieldElements.forEach((fieldElement) => {\r\n fieldElement.required = false;\r\n fieldElement.setAttribute('data-tk-is-required', '');\r\n });\r\n });\r\n const fieldElements = currentElement?.querySelectorAll('input[data-tk-is-required]');\r\n fieldElements?.forEach((fieldElement) => {\r\n fieldElement.required = true;\r\n fieldElement.removeAttribute('data-tk-is-required');\r\n });\r\n }\r\n}","import { fetchRequest } from '@tk/utilities/tk.fetch';\nimport TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\nimport render from '@tk/utilities/tk.render';\nimport { RectangleItem, isOutsideShapes } from '@tk/utilities/tk.shape.detector';\n\ninterface QuantityResponse {\n quantity: number;\n}\n\nexport default class TKMinibasket extends TKCustomElementFactory {\n headerButton?: HTMLButtonElement;\n overlay?: HTMLElement;\n contentWrapper?: HTMLUListElement;\n countItemsRequestURL?: string;\n getContentRequestURL?: string;\n headerButtonEmptyClassName: string;\n openClassName: string;\n isDataFetched: boolean = false;\n offset: number;\n minDistanceToBorder: number;\n\n // Custom Events\n openedEventName: TKCustomEventMap;\n openedEvent: CustomEvent;\n closedEventName: TKCustomEventMap;\n closedEvent: CustomEvent;\n updateEventName: TKCustomEventMap;\n updateEvent: CustomEvent;\n\n static observedAttributes = ['data-count'];\n\n constructor() {\n super();\n\n this.headerButton = this.querySelector('[data-tk-header-button]') || undefined;\n this.overlay = this.querySelector('[data-tk-minibasket-overlay]') || undefined;\n this.contentWrapper = this.querySelector('[data-tk-minibasket-content]') || undefined;\n this.countItemsRequestURL = this.getAttribute('data-tk-count-items-request-url') || undefined;\n this.getContentRequestURL = this.getAttribute('data-tk-get-content-request-url') || undefined;\n this.headerButtonEmptyClassName = this.getAttribute('data-tk-header-button-empty-class-name')\n || 'tk-button__header--empty';\n this.offset = Number(this.getAttribute('data-tk-minibasket-offset')) || 4;\n this.openClassName = this.getAttribute('data-tk-open-class-name') || 'tk-minibasket--open';\n this.minDistanceToBorder = Number(this.getAttribute('data-tk-min-distance-to-border')) || 5;\n\n // Custom Events\n this.openedEventName = (\n this.getAttribute('data-tk-event-opened-name') || 'tk-minibasket-opened'\n ) as TKCustomEventMap;\n this.openedEvent = new CustomEvent(this.openedEventName);\n this.closedEventName = (\n this.getAttribute('data-tk-event-closed-name') || 'tk-minibasket-closed'\n ) as TKCustomEventMap;\n this.closedEvent = new CustomEvent(this.closedEventName);\n this.updateEventName = (\n this.getAttribute('data-tk-event-update-name') || 'tk-minibasket-update'\n ) as TKCustomEventMap;\n this.updateEvent = new CustomEvent(this.updateEventName);\n }\n\n connectedCallback(): void {\n if (!this.headerButton) throw new Error('Minibasket: Header Button is missing!');\n if (\n !this.countItemsRequestURL\n || !this.getContentRequestURL\n ) {\n throw new Error('Minibasket: Request URLs are missing!');\n }\n this.registerInitializeListener();\n this.fetchQuantity();\n }\n\n attributeChangedCallback(name: string, oldValue: string, newValue: string) {\n if (name === 'data-count') {\n this.setCounter(Number(newValue));\n }\n }\n\n registerInitializeListener(): void {\n const handleOpen = this.open.bind(this);\n this.pushListener({ event: 'click', element: this.headerButton!, action: handleOpen });\n\n const handleOpened = this.opened.bind(this);\n this.pushListener({ event: this.openedEventName, element: this, action: handleOpened });\n\n const handleUpdate = this.update.bind(this);\n this.pushListener({ event: this.updateEventName, element: this, action: handleUpdate });\n }\n\n registerCloseListener(): void {\n const handleClose = this.close.bind(this);\n this.pushListener({ event: 'click', element: window, action: handleClose });\n }\n\n registerScrollListener(): void {\n const handleScroll = this.alignOverlayToButton.bind(this);\n this.pushListener({ event: 'scroll', element: window, action: handleScroll });\n }\n\n open() {\n document.body.insertAdjacentElement('beforeend', this.overlay!);\n this.overlay!.classList.add(this.openClassName);\n this.alignOverlayToButton();\n !this.isDataFetched && this.fetchAll();\n this.dispatchEvent(this.openedEvent);\n }\n\n opened() {\n // This method would be used to execute code in a non-blocking way to prevent potential delays.\n setTimeout(() => {\n this.registerCloseListener();\n this.registerScrollListener();\n }, 0);\n }\n\n update() {\n this.fetchQuantity();\n this.fetchAll();\n }\n\n close(event: MouseEvent) {\n if (!this.overlay) return;\n const headerButtonRect = this.headerButton!.getBoundingClientRect();\n const overlayRect = this.overlay!.getBoundingClientRect();\n const rectangles = [\n { rectangle: headerButtonRect },\n { rectangle: overlayRect },\n ] as RectangleItem[];\n if (isOutsideShapes(event, rectangles)) {\n this.overlay!.classList.remove(this.openClassName);\n this.dispatchEvent(this.closedEvent);\n this.removeListener(window);\n }\n }\n\n fetchAll() {\n Promise.all([\n TKMinibasket.fetchData(this.getContentRequestURL!),\n ]).then((responses) => {\n this.isDataFetched = true;\n this.placeContent(responses[0]);\n }).catch(() => {\n this.isDataFetched = false;\n });\n }\n\n fetchQuantity(): void {\n fetchRequest({\n requestURL: this.countItemsRequestURL!,\n resolveHandler: this.getQuantity.bind(this),\n });\n }\n\n static fetchData(url: string): Promise> {\n return new Promise((resolve) => {\n fetchRequest({\n requestURL: url,\n resolveHandler: (response: TKResponse) => {\n resolve(response);\n },\n });\n });\n }\n\n getQuantity(response: TKResponse): void {\n if (!response || !response.success) return;\n const { quantity } = response.dataAsJson;\n this.setCounter(quantity);\n }\n\n setCounter(quantity: number) {\n if (quantity === 0) {\n this.headerButton?.classList.add(this.headerButtonEmptyClassName);\n } else {\n this.headerButton?.setAttribute('data-count', `${quantity || 0}`);\n this.headerButton?.classList.remove(this.headerButtonEmptyClassName);\n }\n }\n\n placeContent(response: TKResponse): void {\n if (!response || !response.success) return;\n if (!this.contentWrapper) return;\n const items = render(response.dataAsHtml);\n this.contentWrapper.innerHTML = '';\n this.contentWrapper.insertAdjacentHTML('beforeend', items.innerHTML);\n }\n\n alignOverlayToButton() {\n const { bottom, right } = this.headerButton!.getBoundingClientRect();\n const { width } = this.overlay!.getBoundingClientRect();\n const distanceToBorder = right - width;\n\n this.overlay!.style.top = `${bottom + this.offset}px`;\n\n if (distanceToBorder >= this.minDistanceToBorder) {\n this.overlay!.style.left = `${right - width}px`;\n } else {\n this.overlay!.style.left = '50%';\n this.overlay!.style.transform = 'translateX(-50%)';\n }\n }\n}","import TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\n\ninterface CustomElementAccordionIcon {\n iconAdd: string;\n iconRemove: string;\n}\n\nexport default class TKTabsAccordion extends TKCustomElementFactory {\n activeClassName: string;\n accordionHead?: HTMLDivElement;\n accordionBody?: HTMLDivElement;\n accordionIcon?: HTMLElement;\n triggerArea?: Element;\n accordionIcons: CustomElementAccordionIcon;\n isActive: boolean;\n isHeaderLink?: boolean;\n\n constructor() {\n super();\n\n this.accordionHead = this.querySelector('[data-tk-accordion-head]') || undefined;\n this.accordionBody = this.querySelector('[data-tk-accordion-body]') || undefined;\n this.accordionIcon = this.querySelector('[data-tk-accordion-icon]') || undefined;\n this.accordionIcons = {\n iconAdd: this.getAttribute('data-tk-icon-open') || 'tk-icon-add',\n iconRemove: this.getAttribute('data-tk-icon-collapse') || 'tk-icon-remove',\n };\n this.isActive = this.hasAttribute('data-tk-accordion-is-active');\n this.isHeaderLink = this.accordionHead && this.accordionHead.hasAttribute('data-tk-accordion-link');\n this.activeClassName = this.getAttribute('data-tk-active-class-name') || 'tk-tabs-accordion--active';\n }\n\n connectedCallback(): void {\n if (\n (!this.accordionHead\n || !this.accordionBody\n || !this.accordionIcon)\n && !this.isHeaderLink\n ) throw new Error('Accordion: Elements are missing!');\n\n this.setAccordionState(this.isActive);\n this.registerListener();\n }\n\n registerListener(): void {\n const eventHandler = this.toggleEvent.bind(this);\n this.pushListener({ event: 'click', element: this.accordionHead!, action: eventHandler });\n }\n\n toggleEvent(): void {\n this.toggleMarkupElements();\n }\n\n toggleMarkupElements(): void {\n this.classList.toggle(this.activeClassName);\n this.accordionIcon?.classList.toggle(this.accordionIcons.iconAdd);\n this.accordionIcon?.classList.toggle(this.accordionIcons.iconRemove);\n }\n\n setAccordionState(isActive: boolean): void {\n if (isActive) {\n this.classList.toggle(this.activeClassName);\n this.accordionIcon?.classList.add(this.accordionIcons.iconRemove);\n } else {\n this.accordionIcon?.classList.add(this.accordionIcons.iconAdd);\n }\n }\n}","import TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\n\r\nexport default class JUStartScan extends TKCustomElementFactory {\r\n cameraButton?: HTMLButtonElement;\r\n form?: HTMLFormElement;\r\n input?: HTMLInputElement;\r\n\r\n constructor() {\r\n super();\r\n\r\n // this.cameraButton = this.querySelector('[data-ju-camera]') || undefined;\r\n this.form = this.querySelector('[data-ju-scan-form]') || undefined;\r\n this.input = this.querySelector('[data-ju-device-input]') || undefined;\r\n }\r\n\r\n connectedCallback(): void {\r\n if (!this.form || !this.input) return;\r\n this.input!.focus();\r\n // this.registerEventListener();\r\n }\r\n\r\n registerEventListener() {\r\n const startScan = this.showForm.bind(this);\r\n this.pushListener({ event: 'click', element: this.cameraButton!, action: startScan });\r\n }\r\n\r\n showForm() {\r\n this.form!.hidden = false;\r\n this.input!.focus();\r\n }\r\n}"],"names":[],"version":3,"file":"verification.js.map","sourceRoot":"../../../../../../../"}