{"mappings":"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,IAAI;QAChC,MAAOP,WAAW,KAAM;YACtB,MAAMQ,OAAOvE,yBAAyB+D,QAAQO;YAE9C,IAAIC,MAAM;gBACR,IAAIA,KAAKC,GAAG,EACV,OAAO1D,QAAQyD,KAAKC,GAAG;gBAGzB,IAAI,OAAOD,KAAKL,KAAK,KAAK,YACxB,OAAOpD,QAAQyD,KAAKL,KAAK;YAE7B;YAEAH,SAAShE,eAAegE;QAC1B;QAEA,SAASU;YACP,OAAO;QACT;QAEA,OAAOA;IACT;IC1LO,MAAMC,SAAOxE,OAAO;QACzB;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;KACD;IAED,MAAA;IACO,MAAMyE,QAAMzE,OAAO;QACxB;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;KACD;IAEM,MAAM0E,aAAa1E,OAAO;QAC/B;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;KACD;IAED,uDAAA;IACA,yDAAA;IACA,mDAAA;IACA,cAAA;IACO,MAAM2E,gBAAgB3E,OAAO;QAClC;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;KACD;IAEM,MAAM4E,WAAS5E,OAAO;QAC3B;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;KACD;IAED,yDAAA;IACA,0CAAA;IACO,MAAM6E,mBAAmB7E,OAAO;QACrC;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;KACD;IAEM,MAAM8E,OAAO9E,OAAO;QAAC;KAAQ;ICrR7B,MAAMwE,OAAOxE,OAAO;QACzB;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;KACD;IAEM,MAAMyE,MAAMzE,OAAO;QACxB;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;KACD;IAEM,MAAM4E,SAAS5E,OAAO;QAC3B;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA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","sources":["webportal/config/layout/themes/project/ts/article.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/basiscs/tk.viewport.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/components/tk.header.ts","webportal/config/layout/themes/tk/ts/components/tk.basket.button.ts","webportal/config/layout/themes/tk/ts/utilities/tk.basket.action.ts","webportal/config/layout/themes/tk/ts/components/tk.carousel.ts","node_modules/@splidejs/splide/dist/js/splide.esm.js","webportal/config/layout/themes/tk/ts/components/tk.context.menu.ts","webportal/config/layout/themes/tk/ts/utilities/tk.shape.detector.ts","webportal/config/layout/themes/tk/ts/components/tk.flag.ts","webportal/config/layout/themes/tk/ts/components/tk.product.tile.ts","webportal/config/layout/themes/tk/ts/components/tk.product.variants.ts","webportal/config/layout/themes/tk/ts/components/tk.price.ts","webportal/config/layout/themes/tk/ts/utilities/tk.base64.ts","webportal/config/layout/themes/tk/ts/components/tk.stock.ts","webportal/config/layout/themes/tk/ts/controls/tk.static.content.ts","webportal/config/layout/themes/tk/ts/components/tk.dialog.ts","node_modules/@parcel/runtime-js/lib/runtime-4124d56d33f52257.js","node_modules/@parcel/runtime-js/lib/helpers/browser/js-loader.js","node_modules/@parcel/runtime-js/lib/helpers/cacheLoader.js","node_modules/@parcel/runtime-js/lib/helpers/bundle-url.js","webportal/config/layout/themes/tk/ts/components/tk.article.list.ts","webportal/config/layout/themes/tk/ts/components/tk.favorite.button.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/components/tk.asset.gallery.ts","webportal/config/layout/themes/tk/ts/controls/tk.selection.ts","webportal/config/layout/themes/tk/ts/components/tk.art.spec.table.ts","webportal/config/layout/themes/tk/ts/utilities/tk.array.group.ts","webportal/config/layout/themes/tk/ts/components/tk.compare.button.ts","webportal/config/layout/themes/tk/ts/components/tk.show.more.ts","webportal/config/layout/themes/tk/ts/controls/tk.select.redirect.ts","webportal/config/layout/themes/tk/ts/components/tk.popup.ts","webportal/config/layout/themes/tk/ts/components/tk.article.list.sort.ts","webportal/config/layout/themes/tk/ts/utilities/tk.dimmer.ts","webportal/config/layout/themes/tk/ts/utilities/tk.storage.ts","webportal/config/layout/themes/tk/ts/utilities/tk.sanitize.ts","node_modules/dompurify/dist/purify.js","node_modules/dompurify/src/utils.js","node_modules/dompurify/src/tags.js","node_modules/dompurify/src/attrs.js","node_modules/dompurify/src/regexp.js","node_modules/dompurify/src/purify.js","webportal/config/layout/themes/tk/ts/components/tk.article.list.layout.switch.ts","webportal/config/layout/themes/tk/ts/components/tk.breadcrumb.ts","webportal/config/layout/themes/tk/ts/components/tk.compare.list.link.ts","webportal/config/layout/themes/tk/ts/components/tk.table.ts","webportal/config/layout/themes/tk/ts/utilities/tk.sort.ts","webportal/config/layout/themes/project/ts/components/kdmz.quick.order.ts","webportal/config/layout/themes/project/ts/components/kdmz.freitext.ts","webportal/config/layout/themes/project/ts/components/kdmz.tabs.tab.ts","webportal/config/layout/themes/project/ts/components/tk.favorite.info.ts","webportal/config/layout/themes/project/ts/components/kdmz.tabs.accordion.ts","webportal/config/layout/themes/project/ts/controls/kdmz.button.dropdown.ts","webportal/config/layout/themes/project/ts/components/kdmz.search.ts","webportal/config/layout/themes/project/ts/components/tk.header.search.ts","webportal/config/layout/themes/project/ts/components/kdmz.form.element.ts","webportal/config/layout/themes/tk/ts/controls/tk.form.element.ts","webportal/config/layout/themes/project/ts/components/kdmz.dialog.ts","webportal/config/layout/themes/project/ts/components/kdmz.minibasket.ts","webportal/config/layout/themes/tk/ts/components/tk.minibasket.ts","webportal/config/layout/themes/project/ts/components/kdmz.basket.button.ts","webportal/config/layout/themes/project/ts/components/kdmz.web2print.ts"],"sourcesContent":["import TKModuleFactory from '@tk/utilities/tk.module.factory';\r\nimport TKManager from '@tk/basiscs/tk.manager';\r\nimport TKViewport from '@tk/basiscs/tk.viewport';\r\nimport TKNavigationSidebar from '@tk/components/tk.navigation.sidebar';\r\nimport TKHeader from '@tk/components/tk.header';\r\nimport TKBasketButton from '@tk/components/tk.basket.button';\r\nimport TKCarousel from '@tk/components/tk.carousel';\r\nimport TKContextMenu from '@tk/components/tk.context.menu';\r\nimport TKFlag from '@tk/components/tk.flag';\r\nimport TKProductTile from '@tk/components/tk.product.tile';\r\nimport TKProductVariants from '@tk/components/tk.product.variants';\r\n// import TKTooltip from '@tk/components/tk.tooltip';\r\nimport TKPrice from '@tk/components/tk.price';\r\nimport TKStock from '@tk/components/tk.stock';\r\nimport TKStaticContent from '@tk/controls/tk.static.content';\r\nimport TKArticleList from '@tk/components/tk.article.list';\r\nimport TKFavoriteButton from '@tk/components/tk.favorite.button';\r\nimport TKFormValidator from '@tk/controls/tk.form.validator';\r\nimport TKAssetGallery from '@tk/components/tk.asset.gallery';\r\nimport TKSelection from '@tk/controls/tk.selection';\r\nimport TKArtSpecTable from '@tk/components/tk.art.spec.table';\r\nimport TKCompareButton from '@tk/components/tk.compare.button';\r\nimport TKShowMore from '@tk/components/tk.show.more';\r\nimport TKSelectRedirect from '@tk/controls/tk.select.redirect';\r\nimport TKPopup from '@tk/components/tk.popup';\r\nimport TKArticleListSort from '@tk/components/tk.article.list.sort';\r\nimport TKArticleListLayoutSwitch from '@tk/components/tk.article.list.layout.switch';\r\nimport TKBreadcrumb from '@tk/components/tk.breadcrumb';\r\nimport TKCompareListLink from '@tk/components/tk.compare.list.link';\r\nimport TKTable from '@tk/components/tk.table';\r\nimport TKQuickOrder from '@/components/kdmz.quick.order';\r\nimport KDMZFreitext from '@/components/kdmz.freitext';\r\nimport TKTabsTab from '@/components/kdmz.tabs.tab';\r\nimport TKFavoriteInfo from '@/components/tk.favorite.info';\r\nimport TKTabsAccordion from '@/components/kdmz.tabs.accordion';\r\nimport TKButtonDropdown from '@/controls/kdmz.button.dropdown';\r\nimport KDMZSearch from '@/components/kdmz.search';\r\nimport TKHeaderSearch from '@/components/tk.header.search';\r\n\r\n// Custom KDMZ elements\r\nimport KDMZFormElement from '@/components/kdmz.form.element';\r\nimport KDMZDialog from '@/components/kdmz.dialog';\r\nimport KDMZMinibasket from '@/components/kdmz.minibasket';\r\nimport KDMZBasketButton from '@/components/kdmz.basket.button';\r\nimport KDMZWeb2print from '@/components/kdmz.web2print';\r\n\r\nimport 'tippy.js/dist/tippy.css';\r\nimport '@splidejs/splide/dist/css/splide.min.css';\r\nimport '@scss/modules/article.scss';\r\nimport '@iconfont/iconfont/material-icons.css';\r\n\r\nexport default class Article 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-nav-sidebar', constructor: TKNavigationSidebar },\r\n { name: 'tk-header', constructor: TKHeader },\r\n { name: 'tk-basket-button', constructor: TKBasketButton },\r\n { name: 'tk-carousel', constructor: TKCarousel },\r\n { name: 'tk-context-menu', constructor: TKContextMenu },\r\n { name: 'tk-flag', constructor: TKFlag },\r\n { name: 'tk-product-tile', constructor: TKProductTile },\r\n { name: 'tk-product-variants', constructor: TKProductVariants },\r\n // { name: 'tk-tooltip', constructor: TKTooltip },\r\n // ab hier\r\n { name: 'tk-price', constructor: TKPrice },\r\n { name: 'tk-stock', constructor: TKStock },\r\n { name: 'tk-static-content', constructor: TKStaticContent },\r\n { name: 'tk-tabs-tab', constructor: TKTabsTab },\r\n { name: 'tk-article-list', constructor: TKArticleList },\r\n { name: 'tk-favorite-button', constructor: TKFavoriteButton },\r\n { name: 'tk-favorite-info', constructor: TKFavoriteInfo },\r\n { name: 'tk-form-validator', constructor: TKFormValidator },\r\n { name: 'tk-asset-gallery', constructor: TKAssetGallery },\r\n { name: 'tk-tabs-accordion', constructor: TKTabsAccordion },\r\n { name: 'tk-selection', constructor: TKSelection },\r\n { name: 'tk-art-spec-table', constructor: TKArtSpecTable },\r\n { name: 'tk-compare-button', constructor: TKCompareButton },\r\n { name: 'tk-show-more', constructor: TKShowMore },\r\n // bis hier\r\n { name: 'tk-select-redirect', constructor: TKSelectRedirect },\r\n { name: 'tk-popup', constructor: TKPopup },\r\n { name: 'tk-article-list-sort', constructor: TKArticleListSort },\r\n { name: 'tk-article-list-layout-switch', constructor: TKArticleListLayoutSwitch },\r\n { name: 'tk-breadcrumb', constructor: TKBreadcrumb },\r\n { name: 'tk-compare-list-link', constructor: TKCompareListLink },\r\n { name: 'tk-button-dropdown', constructor: TKButtonDropdown },\r\n { name: 'tk-header-search', constructor: TKHeaderSearch },\r\n { name: 'kdmz-search', constructor: KDMZSearch },\r\n\r\n { name: 'tk-form-element', constructor: KDMZFormElement },\r\n { name: 'tk-dialog', constructor: KDMZDialog },\r\n { name: 'tk-minibasket', constructor: KDMZMinibasket },\r\n { name: 'tk-table', constructor: TKTable },\r\n { name: 'tk-quick-order', constructor: TKQuickOrder },\r\n { name: 'kdmz-basket-button', constructor: KDMZBasketButton },\r\n { name: 'kdmz-web2print', constructor: KDMZWeb2print },\r\n { name: 'kdmz-freitext', constructor: KDMZFreitext },\r\n ]);\r\n }\r\n}\r\n\r\n// eslint-disable-next-line no-new\r\nnew Article();\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}\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 firstItemToScrollInto?: HTMLElement;\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 this.firstItemToScrollInto = this.querySelector('[data-tk-scroll-into]') || undefined;\r\n }\r\n\r\n connectedCallback(): void {\r\n this.processNotification();\r\n\r\n this.sessionTimeoutWrapper && this.showSessionTimeout();\r\n\r\n this.firstItemToScrollInto && this.scrollToElement();\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 scrollToElement() {\r\n const { top } = this.firstItemToScrollInto!.getBoundingClientRect();\r\n const offset = Number(this.firstItemToScrollInto?.getAttribute('data-tk-scroll-into-offset')) || 16;\r\n const mainContainer = this.querySelector('main');\r\n const mainRect = mainContainer?.getBoundingClientRect();\r\n const mainRectTop = mainRect?.top || 0;\r\n const scrollY = top - mainRectTop - offset;\r\n setTimeout(() => {\r\n window.scrollTo({ top: scrollY, behavior: 'smooth' });\r\n }, 0);\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}\r\n","import {\n accountMessages, deliveryMessages, generalMessages, paymentMessages,\n} from './tk.messages';\nimport render from './tk.render';\n\nexport enum NotificationType {\n SUCCESS = 'Success',\n WARNING = 'Warning',\n ERROR = 'Error',\n INFO = 'Info',\n}\n\ninterface MessageResponse {\n pluginId: string;\n paymentType: string;\n}\n\nconst mapMessageCodeToText = (response: MessageResponse, messages: Record) => {\n let textMessage;\n if (!response.pluginId) return '';\n if (response.pluginId === 'paymentType') {\n const paymentMessages: Record = {\n 0: messages.messagePaymentTypeGeneral.text,\n 1: messages.messagePaymentTypeCreditCard.text,\n 2: messages.messagePaymentTypeInvoice.text,\n 5: messages.messagePaymentTypeInAdvance.text,\n 6: messages.messagePaymentTypeOnDelivery.text,\n };\n textMessage = paymentMessages[Number(response.paymentType) || 0];\n } else if (response.pluginId === 'deliveryType') {\n textMessage = messages.messageDeliveryTypeGeneral.text;\n } else if (response.pluginId === 'checkoutAdressChange') {\n textMessage = messages.messageChangeSuccess.text;\n }\n return textMessage;\n};\n\nconst getConsoleStyle = (backgroundColor: string, textColor: string = 'white') => [\n `background: ${backgroundColor}`,\n `color: ${textColor}`,\n 'display: block',\n].join(';');\n\nconst logToConsole = (message: string, type: NotificationType) => {\n const consoleHandler: Record void> = {\n [NotificationType.SUCCESS](): void {\n // eslint-disable-next-line no-console\n console.info(`%c ${message}`, getConsoleStyle('green'));\n },\n [NotificationType.WARNING](): void {\n // eslint-disable-next-line no-console\n console.warn(`%c ${message}`, getConsoleStyle('yellow', 'black'));\n },\n [NotificationType.ERROR](): void {\n // eslint-disable-next-line no-console\n console.log(`%c ${message}`, getConsoleStyle('red'));\n },\n [NotificationType.INFO](): void {\n // eslint-disable-next-line no-console\n console.debug(`%c ${message}`, getConsoleStyle('blue'));\n },\n };\n\n consoleHandler[type]();\n};\n\nconst renderMessageContainer = (parentElement: HTMLElement) => {\n let messageContainer = parentElement.querySelector('[data-tk-message-container]');\n if (!messageContainer) {\n messageContainer = render(\n '
',\n );\n parentElement.insertAdjacentElement('beforeend', messageContainer);\n }\n\n return messageContainer;\n};\n\nexport const sendNotification = (\n type: NotificationType,\n message?: string,\n wait: number = 2.5,\n options: { consoleMessage?: string } = {},\n) => {\n if (!message) return;\n const dialogs = document.querySelectorAll('dialog[open]');\n let messageContainer: HTMLElement;\n\n if (dialogs.length === 0) {\n messageContainer = renderMessageContainer(document.body);\n } else {\n const lastDialog = Array.from(dialogs).at(-1);\n if (!lastDialog) {\n messageContainer = renderMessageContainer(document.body);\n } else {\n messageContainer = renderMessageContainer(lastDialog);\n }\n }\n\n const toast = render(`\n
\n \n ${message}\n
\n `);\n\n toast.style.animation = `fadein .5s, fadeout .5s ${wait}s`;\n toast.classList.add('tk-message--show');\n\n messageContainer.appendChild(toast);\n\n toast.addEventListener('animationend', (event) => {\n if ((event as AnimationEvent).animationName !== 'fadeout') return;\n messageContainer.removeChild(toast);\n });\n\n options.consoleMessage\n ? logToConsole(options.consoleMessage, type)\n : logToConsole(message, type);\n};\n\nexport const sendNotificationByItem = (item: Message, messageOverride?: string) => {\n const type = item.code.substring(0, 1);\n const message = messageOverride || item.text;\n\n const typeHandler: Record void> = {\n 1: () => sendNotification(NotificationType.SUCCESS, message, item.wait),\n 2: () => sendNotification(NotificationType.WARNING, message, item.wait),\n 3: () => sendNotification(NotificationType.ERROR, message, item.wait),\n 4: () => sendNotification(NotificationType.INFO, message, item.wait),\n };\n\n typeHandler[type]();\n};\n\nexport const sendNotificationByItems = (items: Message[], response: MessageResponse) => {\n const messages = {\n ...generalMessages, ...accountMessages, ...paymentMessages, ...deliveryMessages,\n };\n items.forEach((item) => {\n sendNotificationByItem(item, mapMessageCodeToText(response, messages));\n });\n};\n","/* eslint-disable max-len */\n\n\n\nconst globalFormErrorMessages: FormValidatorMessages = {\n\n badInput: 'Please enter a number.',\n\n patternMismatch: 'Please match the requested format.',\n\n rangeOverflow: 'Please select a value that is no more than {max}.',\n\n rangeUnderflow: 'Please select a value that is no less than {min}.',\n\n stepMismatch: 'Please select a value that is a multiple from {step}.',\n\n tooLong:\n\n 'Please shorten this text to no more than {maxLength} characters. You are currently using {length} characters.',\n\n tooShort:\n\n 'Please lengthen this text to {minLength} characters or more. You are currently using {length} characters.',\n\n typeMismatch: 'The value you have entered for this field is invalid.',\n\n valueMissing: 'Please fill out this field.....',\n\n // These properties must be empty.\n\n valid: '',\n\n customError: '',\n\n};\n\n\n\nconst globalFormPasswordValidityMessages: FormExpandValidatorMessages = {\n\n passwordNotMatching: 'The password does not match the one above.',\n\n};\n\n\n\nconst globalFormExpandErrorMessages: FormExpandValidatorMessages = {\n\n stepAdjust: 'The value you entered for this field is invalid. The value has been changed from {currentValue} to {newValue}',\n\n existigName: 'This name {currentValue} already exists.',\n\n};\n\n\n\nconst globalBasketMessages: Translation = {\n\n messageEmptyBasket: { code: '1-6-6220', text: 'Shopping cart is empty' },\n\n messageAddedToBasket: { code: '1-6-6221', text: 'added to the shopping cart' },\n\n quickOrderMessageTooShort: { code: '1-6-6222', text: 'At least %1 characters are required for a search.' },\n\n};\n\n\n\nconst globalDeliveryMessages: Translation = {\n\n messageDeliveryTypeGeneral: { code: '1-6-6226', text: 'Delivery method changed' },\n\n};\n\n\n\nconst globalPaymentMessages: Translation = {\n\n messagePaymentTypeCreditCard: { code: '1-6-6227', text: 'Payment type credit card' },\n\n messagePaymentTypeInvoice: { code: '1-6-6227', text: 'Payment type invoice' },\n\n messagePaymentTypeInAdvance: { code: '1-6-6227', text: 'Payment type advance payment' },\n\n messagePaymentTypeOnDelivery: { code: '1-6-6227', text: 'Payment type cash on delivery' },\n\n messagePaymentTypeGeneral: { code: '1-6-6227', text: 'Payment type changed' },\n\n};\n\n\n\nconst globalCompareMessages: Translation = {\n\n messageHint: { code: '1-6-6240', text: '' },\n\n allRemoved: { code: '1-6-6240', text: 'All items removed' },\n\n empty: { code: '1-6-6240', text: 'Your article comparison is empty.' },\n\n};\n\n\n\nconst globalFavoriteMessages: Translation = {\n\n messageInvalidName: { code: '2-6-6270', text: 'Unable to create the wish list; the name is invalid.' },\n\n messageMaxLists: { code: '2-6-6277', text: 'Max. number of wish lists reached!' },\n\n messageMaxPositions: { code: '2-6-6278', text: 'Max. number of positions reached!' },\n\n messageDeleteConfirmation: { code: '2-6-6273', text: 'Do you really want to delete the wish list?' },\n\n};\n\n\n\nconst globalAutocompleteMessages: Translation = {\n\n messageNoValueFound: { code: '1-6-6290', text: 'No match found!' },\n\n};\n\n\n\nconst globalAccountMessages: Translation = {\n\n messageDelete: { code: '1-6-6200', text: 'Do you really want to delete this address?' },\n\n messageChangeSuccess: { code: '1-6-6200', text: 'Address successfully modified.' },\n\n};\n\n\n\nconst globalGeneralMessages: Translation = {\n\n messageEmptyText: { code: '1-6-6290', text: 'The output was suppressed due to an empty text.' },\n\n messageOk: { code: '1-6-6290', text: 'Yes' },\n\n messageCancel: { code: '1-6-6290', text: 'No' },\n\n messageChange: { code: '1-6-6290', text: 'The selection was changed' },\n\n messageDefault: { code: '1-6-0000', text: '' },\n\n messageDefaultInfo: { code: '1-6-0000', text: '' },\n\n messageDefaultWarning: { code: '2-6-0000', text: '' },\n\n messageDefaultError: { code: '3-6-0000', text: '' },\n\n messageDefaultDebug: { code: '4-6-0000', text: '' },\n\n};\n\n\n\nconst globalDirectSearchSuggestMessages: Translation = {\n\n messageTooShort: { code: '1-6-6260', text: 'At least 3 characters!' },\n\n messageResultEmpty: { code: '1-6-6260', text: 'No items found!' },\n\n};\n\n\n\nconst globalFileuploadAreaMessages: Translation = {\n\n defaultMessage: { code: '1-6-2002', text: 'Store the files here to upload them' },\n\n fallbackMessage: { code: '2-6-2002', text: 'Your browser does not support drag&drop file uploads' },\n\n fallbackText: { code: '2-6-2002', text: 'Use the form to upload your files' },\n\n fileTooBig: { code: '2-6-2002', text: 'The file is too large. The maximum file size is {{maxFileSize}} MB' },\n\n invalidFileType: { code: '2-6-2002', text: 'Unable to upload files of this type' },\n\n responseError: { code: '3-6-2002', text: 'The server rejected your request with status {{statusCode}}' },\n\n cancelUpload: { code: '1-6-2002', text: 'Cancel upload' },\n\n cancelUploadConfirmation: { code: '1-6-2002', text: 'Cancel upload?' },\n\n removeFile: { code: '1-6-2002', text: 'Remove file' },\n\n maxFilesExceeded: { code: '2-6-2002', text: 'You are not allowed to upload any more files' },\n\n buttonBrowse: { code: '1-6-2002', text: 'Select files to upload' },\n\n uploadHint: { code: '1-6-2002', text: 'Drag files and folders here' },\n\n};\n\n\n\nconst globalFilterMessages: Translation = {\n\n emptyResult: { code: '1-1-6280', text: 'Keine Ergebnisse gefunden.' },\n\n};\n\n\n\nconst globalCheckoutMessages: Translation = {\n\n missingTerms: { code: '3-6-6230', text: 'Please accept the General terms and conditions.' },\n\n loadingCheckoutTitle: { code: '1-6-6260', text: 'Almost done!' },\n\n loadingCheckoutText: { code: '1-6-6261', text: 'The order is carried out. This can take a moment!' },\n\n};\n\n\n\nconst globalHtmlErrorCodeMessages: Translation = {\n\n htmlErrorGeneral: { code: '3-6-6000', text: 'Something has gone wrong!' },\n\n htmlError401: { code: '3-6-6000', text: 'A valid authentication is required to process the request.' },\n\n htmlError403: { code: '3-6-6000', text: 'The request could not be processed due to missing authorization of the client.' },\n\n htmlError404: { code: '3-6-6000', text: 'The requested site does not exist.' },\n\n htmlError413: { code: '3-6-6000', text: 'The file is too large.' },\n\n htmlError415: { code: '3-6-6000', text: 'This media type is not supported.' },\n\n htmlError422: { code: '3-6-6000', text: 'Unable to display the requested site correctly.' },\n\n htmlError500: { code: '3-6-6000', text: 'Internal server error' },\n\n htmlError503: { code: '3-6-6000', text: 'The server is temporarily unavailable.' },\n\n};\n\n\n\nif (!window.opacc) {\n\n window.opacc = {};\n\n}\n\n\n\nexport const formErrorMessages: FormValidatorMessages & FormExpandValidatorMessages = {\n\n ...globalFormErrorMessages,\n\n ...globalFormPasswordValidityMessages,\n\n ...globalFormExpandErrorMessages,\n\n ...window.opacc.tkFormValidityMessages,\n\n ...window.opacc.tkFormPasswordValidityMessages,\n\n ...window.opacc.tkFormExpandErrorMessages,\n\n ...window.opacc.projectFormValidityMessages,\n\n ...window.opacc.projectFormPasswordValidityMessages,\n\n ...window.opacc.projectFormExpandErrorMessages,\n\n};\n\n\n\nexport const formExpandErrorMessages = {\n\n ...globalFormExpandErrorMessages,\n\n ...window.opacc.tkFormExpandErrorMessages,\n\n ...window.opacc.projectFormExpandErrorMessages,\n\n};\n\n\n\nexport const basketMessages = {\n\n ...globalBasketMessages,\n\n ...window.opacc.tkBasketMessages,\n\n ...window.opacc.projectBasketMessages,\n\n};\n\n\n\nexport const compareMessages = {\n\n ...globalCompareMessages,\n\n ...window.opacc.tkCompareMessages,\n\n ...window.opacc.projectCompareMessages,\n\n};\n\n\n\nexport const favoriteMessages = {\n\n ...globalFavoriteMessages,\n\n ...window.opacc.tkFavoriteMessages,\n\n ...window.opacc.projectFavoriteMessages,\n\n};\n\n\n\nexport const generalMessages = {\n\n ...globalGeneralMessages,\n\n ...window.opacc.tkGeneralMessages,\n\n ...window.opacc.projectGeneralMessages,\n\n};\n\n\n\nexport const directSearchSuggestMessages = {\n\n ...globalDirectSearchSuggestMessages,\n\n ...window.opacc.tkDirectSearchSuggestMessages,\n\n ...window.opacc.projectDirectSearchSuggestMessages,\n\n};\n\n\n\nexport const fileuploadAreaMessages = {\n\n ...globalFileuploadAreaMessages,\n\n ...window.opacc.tkFileUploadAreaMessages,\n\n ...window.opacc.projectFileUploadAreaMessages,\n\n};\n\n\n\nexport const filterMessages = {\n\n ...globalFilterMessages,\n\n ...window.opacc.tkFilterMessages,\n\n ...window.opacc.projectFilterMessages,\n\n};\n\n\n\nexport const autocompleteMessages = {\n\n ...globalAutocompleteMessages,\n\n ...window.opacc.tkAutocompleteMessages,\n\n ...window.opacc.projectAutocompleteMessages,\n\n};\n\n\n\nexport const paymentMessages = {\n\n ...globalPaymentMessages,\n\n ...window.opacc.tkPaymentMessages,\n\n ...window.opacc.projectPaymentMessages,\n\n};\n\nexport const deliveryMessages = {\n\n ...globalDeliveryMessages,\n\n ...window.opacc.tkDeliveryMessages,\n\n ...window.opacc.projectDeliveryMessages,\n\n};\n\nexport const accountMessages = {\n\n ...globalAccountMessages,\n\n ...window.opacc.tkAccountMessages,\n\n ...window.opacc.projectAccountMessages,\n\n};\n\nexport const checkoutMessages = {\n\n ...globalCheckoutMessages,\n\n ...window.opacc.tkCheckoutMessages,\n\n ...window.opacc.projectCheckoutMessages,\n\n};\n\nexport const htmlErrorCodeMessages = {\n\n ...globalHtmlErrorCodeMessages,\n\n ...window.opacc.tkHtmlErrorCodeMessages,\n\n ...window.opacc.projectHtmlErrorCodeMessages,\n\n};\n\n\n\nexport const zipCityMessages = {\n\n ...window.opacc.tkZipCityMessages,\n\n};\n\n","/**\n * @param {string} html representing any number of sibling elements\n * @return {NodeListOf}\n */\nconst render = (html: string, isBody = false): T => {\n if (!html) render('
');\n const parser = new DOMParser();\n const doc = parser.parseFromString(html, 'text/html');\n return isBody\n ? doc.body as T\n : doc.body.children.item(0) as T;\n};\n\nexport default render;\n","import TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\n\r\nexport default class TKViewport extends TKCustomElementFactory {\r\n resizeEventName: string;\r\n resizeObserver: ResizeObserver;\r\n breakpoints: Map;\r\n currentBreakpoint: Breakpoint;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.resizeEventName = this.getAttribute('data-tk-resize-event-name') || 'tk-viewport-resize';\r\n this.resizeObserver = new ResizeObserver(this.checkSize.bind(this));\r\n\r\n // * These breakpoints must match the CSS breakpoints, otherwise conflicts may occur.\r\n this.breakpoints = new Map([\r\n ['xs', 576],\r\n ['s', 768],\r\n ['m', 992],\r\n ['l', 1200],\r\n ['xl', 1440],\r\n ]);\r\n this.currentBreakpoint = this.getCurrentBreakpoint(this.clientWidth);\r\n }\r\n\r\n connectedCallback(): void {\r\n this.resizeObserver.observe(this);\r\n window.viewport = this;\r\n }\r\n\r\n disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n this.resizeObserver.unobserve(this);\r\n }\r\n\r\n checkSize(entries: ResizeObserverEntry[]) {\r\n entries.forEach(() => {\r\n const currentWidth = window.innerWidth;\r\n const currentBreakpoint = this.getCurrentBreakpoint(currentWidth);\r\n if (this.currentBreakpoint !== currentBreakpoint) {\r\n const event = new CustomEvent(this.resizeEventName, {\r\n bubbles: true,\r\n detail: {\r\n width: currentWidth,\r\n breakpoint: currentBreakpoint,\r\n },\r\n });\r\n this.currentBreakpoint = currentBreakpoint;\r\n this.dispatchEvent(event);\r\n }\r\n });\r\n }\r\n\r\n getCurrentBreakpoint(width: number): Breakpoint {\r\n let currentBreakpoint: Breakpoint = 'xs';\r\n this.breakpoints.forEach((value, key) => {\r\n if (width >= value) {\r\n currentBreakpoint = key;\r\n }\r\n });\r\n return currentBreakpoint;\r\n }\r\n}\r\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}\r\n","import { sendNotificationByItems } from './tk.notification';\r\n\r\nexport interface 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 cache?: RequestCache;\r\n showMessages?: 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, showMessages: boolean) => {\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 showMessages && 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 cache = 'default',\r\n showMessages = 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 cache,\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, showMessages) : data;\r\n resolveHandler(preparedData);\r\n } catch (error) {\r\n rejectHandler(error);\r\n }\r\n};\r\n","import TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\n\r\nexport default class TKHeader extends TKCustomElementFactory {\r\n header?: HTMLElement;\r\n disableScrolldownBreakpoint?: Breakpoint;\r\n minWidthBreakpoint: number;\r\n elementToScrollWith?: HTMLElement;\r\n\r\n private lastScrollPosY: number = 0;\r\n private maxHeightScrollWith: number;\r\n private scrollWay: number = 0;\r\n private scrollDeltaY: number;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.header = this.querySelector('header') || undefined;\r\n if (!this.header) throw new Error('Header: Header is missing!');\r\n this.disableScrolldownBreakpoint = (\r\n this.getAttribute('data-tk-disable-scrolldown-breakpoint') as Breakpoint\r\n ) || 's';\r\n this.minWidthBreakpoint = window.viewport.breakpoints.get(this.disableScrolldownBreakpoint) || 0;\r\n this.elementToScrollWith = this.querySelector('[data-tk-to-scroll-with]') || undefined;\r\n if (!this.elementToScrollWith) {\r\n throw new Error('Header: Element to scroll with is missing! Use the [data-tk-to-scroll-with] selector.');\r\n }\r\n\r\n this.maxHeightScrollWith = this.getMaxHeight();\r\n this.scrollDeltaY = Number(this.getAttribute('data-tk-scroll-delta-y')) || 1;\r\n }\r\n\r\n connectedCallback(): void {\r\n this.registerViewportListener();\r\n window.viewport.clientWidth < this.minWidthBreakpoint && this.registerScrollListener();\r\n }\r\n\r\n registerScrollListener(): void {\r\n if (!this.elementToScrollWith) return;\r\n const onScrolldown = this.handleScrolldown.bind(this);\r\n this.maxHeightScrollWith = this.getMaxHeight();\r\n this.pushListener({\r\n event: 'scroll',\r\n element: window,\r\n action: onScrolldown,\r\n });\r\n }\r\n\r\n registerViewportListener(): void {\r\n const onViewportResize = this.handleViewportResize.bind(this);\r\n this.pushListener({\r\n event: 'tk-viewport-resize',\r\n element: window.viewport,\r\n action: onViewportResize,\r\n });\r\n }\r\n\r\n handleViewportResize(event: Event): void {\r\n const customEvent = event as CustomEvent;\r\n if (customEvent.detail.width < this.minWidthBreakpoint) {\r\n this.registerScrollListener();\r\n } else {\r\n this.removeListener(window);\r\n }\r\n }\r\n\r\n handleScrolldown(event: Event): void {\r\n if (!(this.header && this.elementToScrollWith)) return;\r\n const { scrollY } = event.currentTarget as Window;\r\n\r\n if (scrollY > this.lastScrollPosY) {\r\n if (scrollY <= this.maxHeightScrollWith) {\r\n this.scrollWay = scrollY;\r\n } else {\r\n this.scrollWay = this.maxHeightScrollWith;\r\n }\r\n } else if (this.scrollWay > this.scrollDeltaY) {\r\n this.scrollWay = this.lastScrollPosY - scrollY >= this.maxHeightScrollWith\r\n ? 0\r\n : this.lastScrollPosY - scrollY;\r\n } else {\r\n this.scrollWay = 0;\r\n }\r\n\r\n this.elementToScrollWith.style.transform = `translateY(-${this.scrollWay}px)`;\r\n this.lastScrollPosY = scrollY;\r\n }\r\n\r\n getMaxHeight(): number {\r\n if (!this.elementToScrollWith) return 0;\r\n const { paddingBottom } = window.getComputedStyle(this.elementToScrollWith);\r\n const { height } = this.elementToScrollWith.getBoundingClientRect();\r\n return height - parseInt(paddingBottom, 10);\r\n }\r\n}\r\n","import TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\nimport TKBasketAction, { BasketAction, BasketData } from '@tk/utilities/tk.basket.action';\r\nimport { NotificationType, sendNotification } from '@tk/utilities/tk.notification';\r\nimport { formErrorMessages } from '@tk/utilities/tk.messages';\r\n\r\nexport enum BasketActionTypes {\r\n ADD = 'add',\r\n CHANGE = 'change',\r\n DELETE = 'delete',\r\n ADD_ALL = 'addall',\r\n DELETE_ALL = 'deleteall',\r\n}\r\n\r\nexport default class TKBasketButton extends TKCustomElementFactory {\r\n basketAction: TKBasketAction;\r\n action: BasketActionTypes;\r\n button?: HTMLButtonElement;\r\n variantWrapper?: HTMLElement;\r\n counterWrapper?: HTMLElement;\r\n decreaser?: HTMLButtonElement;\r\n increaser?: HTMLButtonElement;\r\n counter?: HTMLInputElement;\r\n counters?: NodeListOf;\r\n timer?: ReturnType;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.basketAction = new TKBasketAction(this);\r\n this.action = this.getAttribute('data-tk-action') as BasketActionTypes || BasketActionTypes.ADD;\r\n this.button = this.querySelector('[data-tk-basket-button]') || undefined;\r\n this.counterWrapper = this.querySelector('[data-tk-counter]') || undefined;\r\n this.variantWrapper = this.querySelector('[data-tk-basket-variants]') || undefined;\r\n if (this.counterWrapper) {\r\n this.decreaser = this.querySelector('[data-tk-counter-decreaser]') || undefined;\r\n this.increaser = this.querySelector('[data-tk-counter-increaser]') || undefined;\r\n this.counter = this.querySelector('[data-tk-input-quantity]') || undefined;\r\n this.counters = this.querySelectorAll('[data-tk-input-quantity]');\r\n }\r\n }\r\n\r\n connectedCallback(): void {\r\n if (!this.button) throw new Error('Basket: Button is missing!');\r\n this.registerClickListener();\r\n this.counterWrapper && this.registerCounter();\r\n this.registerBasketListener();\r\n this.variantWrapper && this.registerVariantListener();\r\n }\r\n\r\n registerClickListener() {\r\n const onClick = this.handleBasketClick.bind(this);\r\n this.pushListener({ event: 'click', element: this.button!, action: onClick });\r\n }\r\n\r\n registerVariantListener() {\r\n const onInput = this.updateDimensions.bind(this);\r\n const fieldElement = this.variantWrapper?.querySelector('input[type=\"hidden\"]');\r\n fieldElement && this.pushListener({ event: 'change', element: fieldElement, action: onInput });\r\n }\r\n\r\n registerCounter() {\r\n if (!this.decreaser || !this.increaser) return;\r\n if (this.action === BasketActionTypes.CHANGE) {\r\n const onChange = this.change.bind(this);\r\n this.pushListener({ event: 'click', element: this.decreaser, action: onChange });\r\n this.pushListener({ event: 'click', element: this.increaser, action: onChange });\r\n this.counters?.forEach((counter) => {\r\n this.pushListener({ event: 'change', element: counter, action: onChange });\r\n });\r\n } else {\r\n const onDecrease = this.decrease.bind(this);\r\n this.pushListener({ event: 'click', element: this.decreaser, action: onDecrease });\r\n const onIncrease = this.increase.bind(this);\r\n this.pushListener({ event: 'click', element: this.increaser, action: onIncrease });\r\n }\r\n }\r\n\r\n registerBasketListener() {\r\n this.basketAction.subscribe((event) => {\r\n const basketActionHandler: Record void> = {\r\n fetching: () => {},\r\n 'refreshed-list': () => event.data && this.closeDialog(event.data),\r\n 'refreshed-basket': () => {},\r\n };\r\n basketActionHandler[event.action]();\r\n });\r\n }\r\n\r\n closeDialog(data: BasketData) {\r\n this.button!.disabled = false;\r\n if (!data.success) return;\r\n const dialog = this.closest('dialog');\r\n if (!dialog) return;\r\n dialog.close();\r\n }\r\n\r\n handleBasketClick() {\r\n this.button!.disabled = true;\r\n this.validateQuantity();\r\n this.basketAction.fetch(false);\r\n }\r\n\r\n increase() {\r\n if (!this.counter || !this.increaser) return;\r\n const {\r\n step, max, value,\r\n } = this.counter;\r\n const valueNumber = Number(value);\r\n if (Number(max) !== 0 && valueNumber >= Number(max)) return;\r\n this.counter.value = String(valueNumber + (Number(step) || 1));\r\n }\r\n\r\n decrease() {\r\n if (!this.counter || !this.decreaser) return;\r\n const {\r\n step, min, value,\r\n } = this.counter;\r\n const valueNumber = Number(value);\r\n if (valueNumber <= (Number(min) || 1)) return;\r\n this.counter.value = String(valueNumber - (Number(step) || 1));\r\n }\r\n\r\n change(event: KeyboardEvent) {\r\n TKBasketAction.quantityChanger(event);\r\n this.timer && clearTimeout(this.timer);\r\n this.timer = setTimeout(() => {\r\n this.button?.click();\r\n }, 500);\r\n }\r\n\r\n validateQuantity() {\r\n const shouldCheckDimension = this.counter?.getAttribute('data-tk-art-dim-check-cd') === '1';\r\n if (!shouldCheckDimension || !this.counter) return;\r\n const step = Number(this.counter.step) || 1;\r\n const currentValue = Number(this.counter.value) || 1;\r\n const max = Number(this.counter.max);\r\n const min = Number(this.counter.min);\r\n\r\n if (currentValue % step === 0) return;\r\n let result = Math.ceil(currentValue / step) * step;\r\n if (min > 0 && result < min) result += step;\r\n if (max > 0 && result > max) result -= step;\r\n this.counter.value = String(result);\r\n sendNotification(\r\n NotificationType.WARNING,\r\n formErrorMessages.stepAdjust\r\n .replace('{currentValue}', String(currentValue))\r\n .replace('{newValue}', String(result))\r\n .replace('{step}', String(step)),\r\n );\r\n }\r\n\r\n updateDimensions(event: Event): void {\r\n const selectedVariant = event.target as HTMLInputElement;\r\n\r\n const getDimensionValue = (dimension: string): string => (\r\n selectedVariant.getAttribute(`data-tk-${dimension}-value`) || '0'\r\n );\r\n const getDimensionName = (dimension: string): string => (\r\n selectedVariant.getAttribute(`data-tk-${dimension}-name`) || ''\r\n );\r\n const getDimensionUnit = (dimension: string): string => (\r\n selectedVariant.getAttribute(`data-tk-${dimension}-unit`) || ''\r\n );\r\n const getDimensionMin = (): number => (\r\n Number(selectedVariant.getAttribute('data-tk-min'))\r\n );\r\n const getDimensionMax = (): number => (\r\n Number(selectedVariant.getAttribute('data-tk-max'))\r\n );\r\n const getDimensionStep = (): number => (\r\n Number(selectedVariant.getAttribute('data-tk-step'))\r\n );\r\n const getDimensionCheckCd = (): string => (\r\n selectedVariant.getAttribute('data-tk-art-dim-check-cd') || ''\r\n );\r\n\r\n const setDimension = (wrapper: HTMLElement, dimension: string): void => {\r\n const value = getDimensionValue(dimension);\r\n const fieldElement = wrapper.querySelector('[data-tk-input-quantity]');\r\n const nameElement = wrapper.querySelector('[data-tk-basket-dim-unit-name]');\r\n const unitElements = wrapper.querySelectorAll('[data-tk-basket-dim-unit]');\r\n\r\n if (!fieldElement) return;\r\n fieldElement.value = value !== '0' ? value : '';\r\n fieldElement.setAttribute('data-tk-art-dim-check-cd', getDimensionCheckCd());\r\n\r\n if (getDimensionMin() > 0) {\r\n fieldElement.setAttribute('min', String(getDimensionMin()));\r\n } else {\r\n fieldElement.removeAttribute('min');\r\n }\r\n\r\n if (getDimensionMax() > 0) {\r\n fieldElement.setAttribute('max', String(getDimensionMax()));\r\n } else {\r\n fieldElement.removeAttribute('max');\r\n }\r\n\r\n if (getDimensionStep() > 0) {\r\n fieldElement.setAttribute('step', String(getDimensionStep()));\r\n } else {\r\n fieldElement.removeAttribute('step');\r\n }\r\n\r\n nameElement && (nameElement.textContent = getDimensionName(dimension));\r\n\r\n unitElements.forEach((element) => {\r\n element.textContent = getDimensionUnit(dimension);\r\n });\r\n };\r\n\r\n const dimensionWrappers = this.querySelectorAll('[data-tk-dimension]:not([hidden])');\r\n dimensionWrappers.forEach((wrapper) => {\r\n const dimension = wrapper.getAttribute('data-tk-dimension');\r\n dimension && setDimension(wrapper, dimension);\r\n });\r\n\r\n this.setAttribute('data-tk-variant', selectedVariant.value);\r\n }\r\n}\r\n","// @ts-ignore Import module\r\nimport { basketMessages, formErrorMessages } from '@tk/utilities/tk.messages';\r\nimport { fetchRequest, setAsyncUrl } from '@tk/utilities/tk.fetch';\r\nimport TKMinibasket from '@tk/components/tk.minibasket';\r\nimport render from '@tk/utilities/tk.render';\r\nimport { NotificationType, sendNotification, sendNotificationByItem } from '@tk/utilities/tk.notification';\r\n\r\nexport enum BasketAction {\r\n FETCHING = 'fetching',\r\n REFRESHED_LIST = 'refreshed-list',\r\n REFRESHED_BASKET = 'refreshed-basket',\r\n}\r\n\r\nexport interface BasketMessage {\r\n code: string;\r\n text: string;\r\n addition: string;\r\n}\r\n\r\nexport interface BasketData {\r\n action: string;\r\n additionalAttributes: string;\r\n allMessagesFromPortal: string;\r\n amount: string;\r\n currency: string;\r\n debugMessagesFromPortal: string;\r\n itemAmount: string;\r\n itemPrice: string;\r\n items: string;\r\n messageObj: BasketMessage;\r\n quantity: number;\r\n salDocItemBoId: string;\r\n shippingAmount: string;\r\n success: boolean;\r\n totalAmount: string;\r\n totalVat: string;\r\n}\r\n\r\ninterface BasketEvent {\r\n action: BasketAction;\r\n data?: BasketData;\r\n}\r\n\r\nexport default class TKBasketAction {\r\n protected listeners: ((data: BasketEvent) => void)[] = [];\r\n\r\n component: HTMLElement;\r\n basketList?: HTMLElement;\r\n totalAmount?: HTMLElement;\r\n miniBasket?: TKMinibasket;\r\n componentSelector: string;\r\n emptyClassName: string;\r\n\r\n constructor(component: HTMLElement) {\r\n this.component = component;\r\n this.componentSelector = `.${this.component.classList.value}`;\r\n this.basketList = document.querySelector('[data-tk-basket-list]') || undefined;\r\n this.totalAmount = document.querySelector('[data-tk-basket-total-amount]') || undefined;\r\n this.miniBasket = document.querySelector('tk-minibasket') || undefined;\r\n this.emptyClassName = (\r\n this.basketList?.getAttribute('data-tk-basket-empty-class-name') || 'module-basket--empty'\r\n );\r\n }\r\n\r\n subscribe(listener: (data: BasketEvent) => void) {\r\n this.listeners.push(listener);\r\n }\r\n\r\n emit(data: BasketEvent) {\r\n this.listeners.forEach((listener) => {\r\n listener(data);\r\n });\r\n }\r\n\r\n fetch(checkForReadonlyContext = false) {\r\n const url = setAsyncUrl(checkForReadonlyContext);\r\n this.emit({ action: BasketAction.FETCHING });\r\n fetchRequest({\r\n requestURL: url,\r\n resolveHandler: this.refreshResultList.bind(this),\r\n payload: this.prepareDataSubmission(),\r\n });\r\n }\r\n\r\n prepareDataSubmission() {\r\n const {\r\n tkAction,\r\n tkModule,\r\n tkArtInternalno,\r\n tkSalDocItemBoId,\r\n tkSalDocBoId,\r\n tkAddAllOptions,\r\n tkVariant,\r\n tkQuantityId1,\r\n tkQuantityId2,\r\n tkQuantityId3,\r\n tkAsyncTemplate,\r\n tkRequest,\r\n tkEncrypted,\r\n } = this.component.dataset;\r\n\r\n const data: Record = {\r\n type: 'basket',\r\n action: tkAction,\r\n module: tkModule,\r\n originalUrl: window.location.href,\r\n };\r\n\r\n tkArtInternalno && (data.artInternalNo = tkArtInternalno);\r\n tkSalDocItemBoId && (data.salDocItemBoId = tkSalDocItemBoId);\r\n tkSalDocBoId && (data.salDocBoId = tkSalDocBoId);\r\n tkAddAllOptions && (data.addalloptions = tkAddAllOptions);\r\n tkVariant && (data.artDimVariantNo = tkVariant);\r\n tkQuantityId1 && (data.catItemQuantityDim1 = this.getButtonDimValue(tkQuantityId1));\r\n tkQuantityId2 && (data.catItemQuantityDim2 = this.getButtonDimValue(tkQuantityId2));\r\n tkQuantityId3 && (data.catItemQuantityDim3 = this.getButtonDimValue(tkQuantityId3));\r\n tkAsyncTemplate && (data.template = tkAsyncTemplate);\r\n tkRequest && (data.request = tkRequest);\r\n tkEncrypted && (data.encrypted = tkEncrypted);\r\n\r\n Object.keys(this.component.dataset)\r\n .filter((key) => key.startsWith('tkSaldocitem.'))\r\n .forEach((key) => {\r\n data[key.substring(2).toLowerCase()] = this.component.dataset[key];\r\n });\r\n\r\n if (tkAction === 'addall') {\r\n const quantities = TKBasketAction.getQuantitiesFromPositions();\r\n quantities !== '{}' && (data.addall = quantities);\r\n }\r\n\r\n return data;\r\n }\r\n\r\n static getQuantitiesFromPositions(): string {\r\n const quantities: Record = {};\r\n const articleList = document.querySelector('[data-tk-basket-add-all-wrapper]');\r\n const articles = articleList?.querySelectorAll('article');\r\n articles?.forEach((article) => {\r\n const id = article.getAttribute('data-tk-item-number');\r\n if (!id) return;\r\n const basketButton = article.querySelector('tk-basket-button');\r\n if (!basketButton) return;\r\n const dimensions = basketButton.querySelectorAll('[data-tk-dimension]:not([hidden])');\r\n dimensions.forEach((dimension) => {\r\n const dimensionNumber = dimension.getAttribute('data-tk-dimension') || '';\r\n const fieldElement = dimension.querySelector('[data-tk-input-quantity]');\r\n quantities[`position${id}${dimensionNumber}`] = fieldElement?.value || '0';\r\n });\r\n });\r\n return JSON.stringify(quantities);\r\n }\r\n\r\n getButtonDimValue(dimNumIdVal: string): string {\r\n let retVal = '';\r\n const dim = this.component.querySelector(`[data-tk-dim-id=\"${dimNumIdVal}\"]`);\r\n if (!dim) return retVal;\r\n const input = dim.querySelector('[data-tk-input-quantity]');\r\n if (!input) return retVal;\r\n let value = Number(input.value);\r\n\r\n const defaultValue = Number(input.min) || 1;\r\n\r\n if (dim.hidden) return retVal;\r\n if (Number.isNaN(value) || value <= 0) {\r\n value = defaultValue;\r\n retVal = String(defaultValue);\r\n } else {\r\n retVal = String(value);\r\n }\r\n return retVal;\r\n }\r\n\r\n getButtonDimUnit(dimNumIdVal: string) {\r\n let unit = '';\r\n const dim = this.component.querySelector(`[data-tk-dim-id=\"${dimNumIdVal}\"]`);\r\n if (!dim) return unit;\r\n if (dim.hidden) return unit;\r\n const unitElement = dim.querySelector('[data-tk-basket-dim-unit]');\r\n if (!unitElement) return unit;\r\n unit = unitElement.innerText;\r\n return unit;\r\n }\r\n\r\n refreshResultList(response: TKResponse) {\r\n this.emit({\r\n action: BasketAction.REFRESHED_LIST,\r\n data: response.dataAsJson,\r\n });\r\n if (!response.success) return;\r\n this.updateMiniBasket(response.dataAsJson);\r\n this.updateBasket(response.dataAsJson);\r\n if (response.dataAsJson.action === 'added') {\r\n sendNotificationByItem(this.getQuantityMessage());\r\n }\r\n }\r\n\r\n updateMiniBasket(data: BasketData) {\r\n this.miniBasket?.dispatchEvent(this.miniBasket.updateEvent);\r\n this.miniBasket?.setAttribute('data-count', `${data.quantity}`);\r\n }\r\n\r\n updateBasket(data: BasketData) {\r\n if (!this.basketList) return;\r\n\r\n const { tkAction } = this.component.dataset;\r\n if (tkAction === 'delete' || tkAction === 'deleteall') {\r\n if (data.quantity === 0) {\r\n window.location.reload();\r\n } else {\r\n const basketPos = (\r\n this.basketList.querySelector(`[data-tk-internalno=\"${this.component.dataset.tkInternalno}\"]`)\r\n || this.component.closest('[data-tk-basket-item]')\r\n );\r\n if (basketPos) basketPos.remove();\r\n }\r\n } else if (tkAction === 'change') {\r\n // update item price and amount\r\n const price = this.component.closest('[data-tk-basket-item]')\r\n ?.querySelector('[data-tk-basket-item-price]');\r\n if (price) {\r\n price.innerHTML = `${data.currency} ${data.itemPrice}`;\r\n }\r\n const amount = this.component.closest('[data-tk-basket-item]')\r\n ?.querySelector('[data-tk-basket-item-amount]');\r\n if (!amount) return;\r\n amount.innerHTML = `${data.currency} ${data.itemAmount}`;\r\n } else if (this.component.closest('tk-quick-order')) {\r\n // update after quickorder\r\n const quickorder = this.component.closest('tk-quick-order');\r\n if (!quickorder) return;\r\n fetchRequest({\r\n requestURL: quickorder.dataset.tkUrlRefresh || window.location.href,\r\n resolveHandler: this.refreshBasketList.bind(this),\r\n });\r\n }\r\n // update total amount and VAT\r\n if (this.totalAmount) {\r\n this.totalAmount.innerHTML = `${data.currency} ${data.totalAmount}`;\r\n }\r\n const totalVat = this.basketList.querySelector('[data-tk-basket-total-vat]');\r\n if (totalVat) {\r\n totalVat.innerHTML = `${data.currency} ${data.totalVat}`;\r\n }\r\n\r\n this.emit({ action: BasketAction.REFRESHED_BASKET });\r\n }\r\n\r\n refreshBasketList(response: TKResponse) {\r\n if (!response || !response.success || !this.basketList) return;\r\n\r\n const html = render(response.dataAsHtml);\r\n const basketListWrapper = html.querySelector('[data-tk-basket-list]');\r\n basketListWrapper && (this.basketList.innerHTML = basketListWrapper.innerHTML);\r\n this.basketList.classList.remove(this.emptyClassName);\r\n\r\n const existDeleteAllButton = document.querySelector('[data-tk-basket-list-actions] > tk-basket-button');\r\n if (!existDeleteAllButton) {\r\n const basketHeaderActionWrapper = document.querySelector('[data-tk-basket-list-actions]');\r\n const deleteAllButton = html.querySelector('[data-tk-basket-list-actions] > tk-basket-button');\r\n deleteAllButton && basketHeaderActionWrapper?.insertAdjacentElement('beforeend', deleteAllButton);\r\n }\r\n\r\n const footer = document.querySelector('[data-tk-basket-list-footer]');\r\n if (!footer) {\r\n const footerWrapper = html.querySelector('[data-tk-basket-list-footer]');\r\n footerWrapper && this.basketList.insertAdjacentElement('afterend', footerWrapper);\r\n }\r\n }\r\n\r\n static quantityChanger(event: KeyboardEvent) {\r\n const target = event.target as HTMLElement;\r\n const currentTarget = event.currentTarget as HTMLElement;\r\n if (!target || !target.parentElement) return;\r\n let wrapper: HTMLElement | null = null;\r\n wrapper = target.closest('[data-tk-counter]');\r\n if (!wrapper) wrapper = target.closest('[data-tk-dimension]');\r\n if (!wrapper) return;\r\n const decrementButton = wrapper.querySelector('[data-tk-counter-decreaser]');\r\n const incrementButton = wrapper.querySelector('[data-tk-counter-increaser]');\r\n const inputField = wrapper.querySelector('[data-tk-input-quantity]');\r\n if (!inputField) return;\r\n const step = Number(inputField.getAttribute('step') || 1);\r\n const min = Number(inputField.getAttribute('min') || step);\r\n const max = Number(inputField.getAttribute('max') || 0);\r\n const isMaxSet = max > 0;\r\n const { tkArtDimCheckCd } = inputField.dataset;\r\n const artDimCheck = tkArtDimCheckCd ? Number(tkArtDimCheckCd) : 0;\r\n const oldValue = Number(inputField.value || 0);\r\n let hasChanged = false;\r\n let operator = '+';\r\n\r\n if (incrementButton && target === incrementButton) {\r\n operator = '+';\r\n if (oldValue < min) { operator = '-'; }\r\n } else if (decrementButton && target === decrementButton) {\r\n operator = '-';\r\n if (oldValue > max && isMaxSet) {\r\n operator = '+';\r\n }\r\n }\r\n\r\n if (event.key === 'ENTER') {\r\n if (oldValue > max) {\r\n operator = '+';\r\n } else if (oldValue < min) {\r\n operator = '-';\r\n }\r\n }\r\n\r\n if (artDimCheck > 0) {\r\n const multiplikator = TKBasketAction.countDecimals(step);\r\n const currentValPow = oldValue * 10 ** multiplikator;\r\n const stepPow = step * 10 ** multiplikator;\r\n if ((currentValPow === 0 || (currentValPow % stepPow !== 0)) && oldValue >= min) {\r\n const result = (currentValPow + stepPow - (currentValPow % stepPow)) / 10 ** multiplikator;\r\n sendNotification(\r\n NotificationType.ERROR,\r\n formErrorMessages.stepMismatch\r\n .replace('{currentValue}', String(oldValue))\r\n .replace('{newValue}', String(result))\r\n .replace('{step}', String(step)),\r\n );\r\n operator = '+';\r\n }\r\n }\r\n if (currentTarget === decrementButton || currentTarget === incrementButton) {\r\n hasChanged = TKBasketAction.setCalculatedQuantityField(oldValue, inputField, step, min, max, operator);\r\n }\r\n return hasChanged;\r\n }\r\n\r\n getQuantityMessage() {\r\n const message = { ...basketMessages.messageAddedToBasket };\r\n const { tkQuantityId1, tkQuantityId2, tkQuantityId3 } = this.component.dataset;\r\n const dim1Value = this.getButtonDimValue(tkQuantityId1 || '');\r\n const dim1Unit = this.getButtonDimUnit(tkQuantityId1 || '');\r\n const dim2Value = this.getButtonDimValue(tkQuantityId2 || '');\r\n const dim2Unit = this.getButtonDimUnit(tkQuantityId2 || '');\r\n const dim3Value = this.getButtonDimValue(tkQuantityId3 || '');\r\n const dim3Unit = this.getButtonDimUnit(tkQuantityId3 || '');\r\n\r\n let quantity = `${dim1Value} ${dim1Unit} `;\r\n if (dim2Value) {\r\n quantity = `${quantity}x ${dim2Value} ${dim2Unit} `;\r\n }\r\n if (dim3Value) {\r\n quantity = `${quantity}x ${dim3Value} ${dim3Unit} `;\r\n }\r\n message.text = quantity + basketMessages.messageAddedToBasket.text;\r\n return message;\r\n }\r\n\r\n static setCalculatedQuantityField(\r\n currentVal: number,\r\n fieldElement: HTMLInputElement,\r\n step: number,\r\n min: number,\r\n max: number = 0,\r\n operator: string = '+',\r\n ) {\r\n const multiplikator = TKBasketAction.countDecimals(step);\r\n const currentValPow = currentVal * 10 ** multiplikator;\r\n const stepPow = step * 10 ** multiplikator;\r\n const minPow = min * 10 ** multiplikator;\r\n const maxPow = max * 10 ** multiplikator;\r\n let newValuePow = currentValPow;\r\n\r\n const { tkArtDimCheckCd } = fieldElement.dataset;\r\n const artDimCheck = Number(tkArtDimCheckCd);\r\n const operatorHandler: Record number> = {\r\n '-': () => TKBasketAction.calcMinus(currentVal, newValuePow, stepPow, minPow, min, Number(artDimCheck)),\r\n '+': () => TKBasketAction.calcPlus(currentVal, newValuePow, stepPow, maxPow, max, Number(artDimCheck)),\r\n };\r\n\r\n newValuePow = operatorHandler[operator]();\r\n\r\n // Wert veraendert und Step beruecksichtigt?\r\n\r\n if (newValuePow !== currentValPow) {\r\n if (newValuePow % stepPow === 0 || artDimCheck === 0) {\r\n fieldElement.value = String(newValuePow / 10 ** multiplikator);\r\n return true;\r\n }\r\n newValuePow = currentValPow;\r\n sendNotification(\r\n NotificationType.ERROR,\r\n formErrorMessages.stepMismatch.replace('{step}', String(step)),\r\n );\r\n }\r\n return false;\r\n }\r\n\r\n static calcPlus(\r\n currentValPow: number,\r\n newValuePow: number,\r\n stepPow: number,\r\n maxPow: number,\r\n max: number,\r\n artDimCheck: number,\r\n ) {\r\n if (maxPow > 0 && newValuePow > maxPow) {\r\n sendNotification(\r\n NotificationType.ERROR,\r\n formErrorMessages.rangeOverflow.replace('{max}', String(max)),\r\n );\r\n return maxPow;\r\n }\r\n return (currentValPow + stepPow - (artDimCheck > 0 ? (currentValPow % stepPow) : 0));\r\n }\r\n\r\n static calcMinus(\r\n currentValPow: number,\r\n newValuePow: number,\r\n stepPow: number,\r\n minPow: number,\r\n min: number,\r\n artDimCheck: number,\r\n ) {\r\n if (newValuePow < minPow) {\r\n sendNotification(\r\n NotificationType.ERROR,\r\n formErrorMessages.rangeOverflow.replace('{min}', String(min)),\r\n );\r\n return minPow;\r\n }\r\n const adjustment = (artDimCheck === 0 || currentValPow % stepPow === 0) ? stepPow : currentValPow % stepPow;\r\n return currentValPow - adjustment;\r\n }\r\n\r\n static countDecimals(value: number) {\r\n if (Math.floor(value) === value) return 0;\r\n return value.toString().split('.')[1].length || 0;\r\n }\r\n}\r\n","import { Splide, Options } from '@splidejs/splide';\r\nimport TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\n\r\nexport default class TKCarousel extends TKCustomElementFactory {\r\n root?: HTMLElement;\r\n origin?: HTMLElement;\r\n options?: string;\r\n customOptions: object = {};\r\n paginationClassName: string;\r\n paginationPageClassName: string;\r\n arrowsClassName: string;\r\n arrowClassName: string;\r\n prevClassName: string;\r\n nextClassName: string;\r\n loadedClassName: string;\r\n slider?: Splide;\r\n\r\n constructor() {\r\n super();\r\n this.root = this.querySelector('[data-tk-carousel-root]') || undefined;\r\n this.options = this.getAttribute('data-tk-carousel-options') || undefined;\r\n this.paginationClassName = this.getAttribute('data-tk-pagination-class-name') || 'tk-carousel__pagination';\r\n this.paginationPageClassName = this.getAttribute('data-tk-pagination-page-class-name')\r\n || 'tk-carousel__pagination-page';\r\n this.arrowsClassName = this.getAttribute('data-tk-arrows-class-name') || 'tk-carousel__arrows';\r\n this.arrowClassName = this.getAttribute('data-tk-arrow-class-name') || 'tk-carousel__arrow';\r\n this.prevClassName = this.getAttribute('data-tk-prev-class-name') || 'tk-carousel__arrow--prev';\r\n this.nextClassName = this.getAttribute('data-tk-next-class-name') || 'tk-carousel__arrow--next';\r\n this.loadedClassName = this.getAttribute('data-tk-loaded-class-name') || 'tk-carousel--loaded';\r\n if (this.options) {\r\n this.customOptions = JSON.parse(this.options);\r\n }\r\n }\r\n\r\n connectedCallback(): void {\r\n this.mountCarousel();\r\n }\r\n\r\n mountCarousel(): void {\r\n const carouselBreakpoints: Record = {};\r\n carouselBreakpoints[window.viewport.breakpoints.get('l') || 1200] = {\r\n perPage: 3,\r\n arrows: true,\r\n pagination: true,\r\n };\r\n\r\n const defaultOptions = {\r\n type: 'slide',\r\n arrows: false,\r\n pagination: false,\r\n perMove: 1,\r\n padding: { left: '4px', right: '4px' },\r\n gap: 24,\r\n mediaQuery: 'min',\r\n classes: {\r\n pagination: `splide__pagination ${this.paginationClassName}`,\r\n page: `splide__pagination__page ${this.paginationPageClassName}`,\r\n arrows: `splide__arrows ${this.arrowsClassName}`,\r\n arrow: `splide__arrow ${this.arrowClassName}`,\r\n prev: `splide__arrow--prev ${this.prevClassName}`,\r\n next: `splide__arrow--next ${this.nextClassName}`,\r\n },\r\n breakpoints: carouselBreakpoints,\r\n width: '100%',\r\n } as Options;\r\n if (!this.root) return;\r\n this.slider = new Splide(this.root, Object.assign(defaultOptions, this.customOptions));\r\n this.slider.on('ready', this.movePaginationToArrows.bind(this));\r\n this.slider.on('resized', this.movePaginationToArrows.bind(this));\r\n this.slider.mount();\r\n }\r\n\r\n movePaginationToArrows() {\r\n const arrows = this.querySelector(`.${this.arrowsClassName}`);\r\n const pagination = this.querySelector(`.${this.paginationClassName}`);\r\n if (arrows?.querySelector(`.${this.paginationClassName}`)) return;\r\n if (!arrows || !pagination) return;\r\n arrows?.insertAdjacentElement('beforeend', pagination);\r\n this.root?.classList.add(this.loadedClassName);\r\n }\r\n}\r\n","function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\n/*!\n * Splide.js\n * Version : 4.1.4\n * License : MIT\n * Copyright: 2022 Naotoshi Fujita\n */\nvar MEDIA_PREFERS_REDUCED_MOTION = \"(prefers-reduced-motion: reduce)\";\nvar CREATED = 1;\nvar MOUNTED = 2;\nvar IDLE = 3;\nvar MOVING = 4;\nvar SCROLLING = 5;\nvar DRAGGING = 6;\nvar DESTROYED = 7;\nvar STATES = {\n CREATED: CREATED,\n MOUNTED: MOUNTED,\n IDLE: IDLE,\n MOVING: MOVING,\n SCROLLING: SCROLLING,\n DRAGGING: DRAGGING,\n DESTROYED: DESTROYED\n};\n\nfunction empty(array) {\n array.length = 0;\n}\n\nfunction slice(arrayLike, start, end) {\n return Array.prototype.slice.call(arrayLike, start, end);\n}\n\nfunction apply(func) {\n return func.bind.apply(func, [null].concat(slice(arguments, 1)));\n}\n\nvar nextTick = setTimeout;\n\nvar noop = function noop() {};\n\nfunction raf(func) {\n return requestAnimationFrame(func);\n}\n\nfunction typeOf(type, subject) {\n return typeof subject === type;\n}\n\nfunction isObject(subject) {\n return !isNull(subject) && typeOf(\"object\", subject);\n}\n\nvar isArray = Array.isArray;\nvar isFunction = apply(typeOf, \"function\");\nvar isString = apply(typeOf, \"string\");\nvar isUndefined = apply(typeOf, \"undefined\");\n\nfunction isNull(subject) {\n return subject === null;\n}\n\nfunction isHTMLElement(subject) {\n try {\n return subject instanceof (subject.ownerDocument.defaultView || window).HTMLElement;\n } catch (e) {\n return false;\n }\n}\n\nfunction toArray(value) {\n return isArray(value) ? value : [value];\n}\n\nfunction forEach(values, iteratee) {\n toArray(values).forEach(iteratee);\n}\n\nfunction includes(array, value) {\n return array.indexOf(value) > -1;\n}\n\nfunction push(array, items) {\n array.push.apply(array, toArray(items));\n return array;\n}\n\nfunction toggleClass(elm, classes, add) {\n if (elm) {\n forEach(classes, function (name) {\n if (name) {\n elm.classList[add ? \"add\" : \"remove\"](name);\n }\n });\n }\n}\n\nfunction addClass(elm, classes) {\n toggleClass(elm, isString(classes) ? classes.split(\" \") : classes, true);\n}\n\nfunction append(parent, children) {\n forEach(children, parent.appendChild.bind(parent));\n}\n\nfunction before(nodes, ref) {\n forEach(nodes, function (node) {\n var parent = (ref || node).parentNode;\n\n if (parent) {\n parent.insertBefore(node, ref);\n }\n });\n}\n\nfunction matches(elm, selector) {\n return isHTMLElement(elm) && (elm[\"msMatchesSelector\"] || elm.matches).call(elm, selector);\n}\n\nfunction children(parent, selector) {\n var children2 = parent ? slice(parent.children) : [];\n return selector ? children2.filter(function (child) {\n return matches(child, selector);\n }) : children2;\n}\n\nfunction child(parent, selector) {\n return selector ? children(parent, selector)[0] : parent.firstElementChild;\n}\n\nvar ownKeys = Object.keys;\n\nfunction forOwn(object, iteratee, right) {\n if (object) {\n (right ? ownKeys(object).reverse() : ownKeys(object)).forEach(function (key) {\n key !== \"__proto__\" && iteratee(object[key], key);\n });\n }\n\n return object;\n}\n\nfunction assign(object) {\n slice(arguments, 1).forEach(function (source) {\n forOwn(source, function (value, key) {\n object[key] = source[key];\n });\n });\n return object;\n}\n\nfunction merge(object) {\n slice(arguments, 1).forEach(function (source) {\n forOwn(source, function (value, key) {\n if (isArray(value)) {\n object[key] = value.slice();\n } else if (isObject(value)) {\n object[key] = merge({}, isObject(object[key]) ? object[key] : {}, value);\n } else {\n object[key] = value;\n }\n });\n });\n return object;\n}\n\nfunction omit(object, keys) {\n forEach(keys || ownKeys(object), function (key) {\n delete object[key];\n });\n}\n\nfunction removeAttribute(elms, attrs) {\n forEach(elms, function (elm) {\n forEach(attrs, function (attr) {\n elm && elm.removeAttribute(attr);\n });\n });\n}\n\nfunction setAttribute(elms, attrs, value) {\n if (isObject(attrs)) {\n forOwn(attrs, function (value2, name) {\n setAttribute(elms, name, value2);\n });\n } else {\n forEach(elms, function (elm) {\n isNull(value) || value === \"\" ? removeAttribute(elm, attrs) : elm.setAttribute(attrs, String(value));\n });\n }\n}\n\nfunction create(tag, attrs, parent) {\n var elm = document.createElement(tag);\n\n if (attrs) {\n isString(attrs) ? addClass(elm, attrs) : setAttribute(elm, attrs);\n }\n\n parent && append(parent, elm);\n return elm;\n}\n\nfunction style(elm, prop, value) {\n if (isUndefined(value)) {\n return getComputedStyle(elm)[prop];\n }\n\n if (!isNull(value)) {\n elm.style[prop] = \"\" + value;\n }\n}\n\nfunction display(elm, display2) {\n style(elm, \"display\", display2);\n}\n\nfunction focus(elm) {\n elm[\"setActive\"] && elm[\"setActive\"]() || elm.focus({\n preventScroll: true\n });\n}\n\nfunction getAttribute(elm, attr) {\n return elm.getAttribute(attr);\n}\n\nfunction hasClass(elm, className) {\n return elm && elm.classList.contains(className);\n}\n\nfunction rect(target) {\n return target.getBoundingClientRect();\n}\n\nfunction remove(nodes) {\n forEach(nodes, function (node) {\n if (node && node.parentNode) {\n node.parentNode.removeChild(node);\n }\n });\n}\n\nfunction parseHtml(html) {\n return child(new DOMParser().parseFromString(html, \"text/html\").body);\n}\n\nfunction prevent(e, stopPropagation) {\n e.preventDefault();\n\n if (stopPropagation) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n}\n\nfunction query(parent, selector) {\n return parent && parent.querySelector(selector);\n}\n\nfunction queryAll(parent, selector) {\n return selector ? slice(parent.querySelectorAll(selector)) : [];\n}\n\nfunction removeClass(elm, classes) {\n toggleClass(elm, classes, false);\n}\n\nfunction timeOf(e) {\n return e.timeStamp;\n}\n\nfunction unit(value) {\n return isString(value) ? value : value ? value + \"px\" : \"\";\n}\n\nvar PROJECT_CODE = \"splide\";\nvar DATA_ATTRIBUTE = \"data-\" + PROJECT_CODE;\n\nfunction assert(condition, message) {\n if (!condition) {\n throw new Error(\"[\" + PROJECT_CODE + \"] \" + (message || \"\"));\n }\n}\n\nvar min = Math.min,\n max = Math.max,\n floor = Math.floor,\n ceil = Math.ceil,\n abs = Math.abs;\n\nfunction approximatelyEqual(x, y, epsilon) {\n return abs(x - y) < epsilon;\n}\n\nfunction between(number, x, y, exclusive) {\n var minimum = min(x, y);\n var maximum = max(x, y);\n return exclusive ? minimum < number && number < maximum : minimum <= number && number <= maximum;\n}\n\nfunction clamp(number, x, y) {\n var minimum = min(x, y);\n var maximum = max(x, y);\n return min(max(minimum, number), maximum);\n}\n\nfunction sign(x) {\n return +(x > 0) - +(x < 0);\n}\n\nfunction camelToKebab(string) {\n return string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n}\n\nfunction format(string, replacements) {\n forEach(replacements, function (replacement) {\n string = string.replace(\"%s\", \"\" + replacement);\n });\n return string;\n}\n\nfunction pad(number) {\n return number < 10 ? \"0\" + number : \"\" + number;\n}\n\nvar ids = {};\n\nfunction uniqueId(prefix) {\n return \"\" + prefix + pad(ids[prefix] = (ids[prefix] || 0) + 1);\n}\n\nfunction EventBinder() {\n var listeners = [];\n\n function bind(targets, events, callback, options) {\n forEachEvent(targets, events, function (target, event, namespace) {\n var isEventTarget = (\"addEventListener\" in target);\n var remover = isEventTarget ? target.removeEventListener.bind(target, event, callback, options) : target[\"removeListener\"].bind(target, callback);\n isEventTarget ? target.addEventListener(event, callback, options) : target[\"addListener\"](callback);\n listeners.push([target, event, namespace, callback, remover]);\n });\n }\n\n function unbind(targets, events, callback) {\n forEachEvent(targets, events, function (target, event, namespace) {\n listeners = listeners.filter(function (listener) {\n if (listener[0] === target && listener[1] === event && listener[2] === namespace && (!callback || listener[3] === callback)) {\n listener[4]();\n return false;\n }\n\n return true;\n });\n });\n }\n\n function dispatch(target, type, detail) {\n var e;\n var bubbles = true;\n\n if (typeof CustomEvent === \"function\") {\n e = new CustomEvent(type, {\n bubbles: bubbles,\n detail: detail\n });\n } else {\n e = document.createEvent(\"CustomEvent\");\n e.initCustomEvent(type, bubbles, false, detail);\n }\n\n target.dispatchEvent(e);\n return e;\n }\n\n function forEachEvent(targets, events, iteratee) {\n forEach(targets, function (target) {\n target && forEach(events, function (events2) {\n events2.split(\" \").forEach(function (eventNS) {\n var fragment = eventNS.split(\".\");\n iteratee(target, fragment[0], fragment[1]);\n });\n });\n });\n }\n\n function destroy() {\n listeners.forEach(function (data) {\n data[4]();\n });\n empty(listeners);\n }\n\n return {\n bind: bind,\n unbind: unbind,\n dispatch: dispatch,\n destroy: destroy\n };\n}\n\nvar EVENT_MOUNTED = \"mounted\";\nvar EVENT_READY = \"ready\";\nvar EVENT_MOVE = \"move\";\nvar EVENT_MOVED = \"moved\";\nvar EVENT_CLICK = \"click\";\nvar EVENT_ACTIVE = \"active\";\nvar EVENT_INACTIVE = \"inactive\";\nvar EVENT_VISIBLE = \"visible\";\nvar EVENT_HIDDEN = \"hidden\";\nvar EVENT_REFRESH = \"refresh\";\nvar EVENT_UPDATED = \"updated\";\nvar EVENT_RESIZE = \"resize\";\nvar EVENT_RESIZED = \"resized\";\nvar EVENT_DRAG = \"drag\";\nvar EVENT_DRAGGING = \"dragging\";\nvar EVENT_DRAGGED = \"dragged\";\nvar EVENT_SCROLL = \"scroll\";\nvar EVENT_SCROLLED = \"scrolled\";\nvar EVENT_OVERFLOW = \"overflow\";\nvar EVENT_DESTROY = \"destroy\";\nvar EVENT_ARROWS_MOUNTED = \"arrows:mounted\";\nvar EVENT_ARROWS_UPDATED = \"arrows:updated\";\nvar EVENT_PAGINATION_MOUNTED = \"pagination:mounted\";\nvar EVENT_PAGINATION_UPDATED = \"pagination:updated\";\nvar EVENT_NAVIGATION_MOUNTED = \"navigation:mounted\";\nvar EVENT_AUTOPLAY_PLAY = \"autoplay:play\";\nvar EVENT_AUTOPLAY_PLAYING = \"autoplay:playing\";\nvar EVENT_AUTOPLAY_PAUSE = \"autoplay:pause\";\nvar EVENT_LAZYLOAD_LOADED = \"lazyload:loaded\";\nvar EVENT_SLIDE_KEYDOWN = \"sk\";\nvar EVENT_SHIFTED = \"sh\";\nvar EVENT_END_INDEX_CHANGED = \"ei\";\n\nfunction EventInterface(Splide2) {\n var bus = Splide2 ? Splide2.event.bus : document.createDocumentFragment();\n var binder = EventBinder();\n\n function on(events, callback) {\n binder.bind(bus, toArray(events).join(\" \"), function (e) {\n callback.apply(callback, isArray(e.detail) ? e.detail : []);\n });\n }\n\n function emit(event) {\n binder.dispatch(bus, event, slice(arguments, 1));\n }\n\n if (Splide2) {\n Splide2.event.on(EVENT_DESTROY, binder.destroy);\n }\n\n return assign(binder, {\n bus: bus,\n on: on,\n off: apply(binder.unbind, bus),\n emit: emit\n });\n}\n\nfunction RequestInterval(interval, onInterval, onUpdate, limit) {\n var now = Date.now;\n var startTime;\n var rate = 0;\n var id;\n var paused = true;\n var count = 0;\n\n function update() {\n if (!paused) {\n rate = interval ? min((now() - startTime) / interval, 1) : 1;\n onUpdate && onUpdate(rate);\n\n if (rate >= 1) {\n onInterval();\n startTime = now();\n\n if (limit && ++count >= limit) {\n return pause();\n }\n }\n\n id = raf(update);\n }\n }\n\n function start(resume) {\n resume || cancel();\n startTime = now() - (resume ? rate * interval : 0);\n paused = false;\n id = raf(update);\n }\n\n function pause() {\n paused = true;\n }\n\n function rewind() {\n startTime = now();\n rate = 0;\n\n if (onUpdate) {\n onUpdate(rate);\n }\n }\n\n function cancel() {\n id && cancelAnimationFrame(id);\n rate = 0;\n id = 0;\n paused = true;\n }\n\n function set(time) {\n interval = time;\n }\n\n function isPaused() {\n return paused;\n }\n\n return {\n start: start,\n rewind: rewind,\n pause: pause,\n cancel: cancel,\n set: set,\n isPaused: isPaused\n };\n}\n\nfunction State(initialState) {\n var state = initialState;\n\n function set(value) {\n state = value;\n }\n\n function is(states) {\n return includes(toArray(states), state);\n }\n\n return {\n set: set,\n is: is\n };\n}\n\nfunction Throttle(func, duration) {\n var interval = RequestInterval(duration || 0, func, null, 1);\n return function () {\n interval.isPaused() && interval.start();\n };\n}\n\nfunction Media(Splide2, Components2, options) {\n var state = Splide2.state;\n var breakpoints = options.breakpoints || {};\n var reducedMotion = options.reducedMotion || {};\n var binder = EventBinder();\n var queries = [];\n\n function setup() {\n var isMin = options.mediaQuery === \"min\";\n ownKeys(breakpoints).sort(function (n, m) {\n return isMin ? +n - +m : +m - +n;\n }).forEach(function (key) {\n register(breakpoints[key], \"(\" + (isMin ? \"min\" : \"max\") + \"-width:\" + key + \"px)\");\n });\n register(reducedMotion, MEDIA_PREFERS_REDUCED_MOTION);\n update();\n }\n\n function destroy(completely) {\n if (completely) {\n binder.destroy();\n }\n }\n\n function register(options2, query) {\n var queryList = matchMedia(query);\n binder.bind(queryList, \"change\", update);\n queries.push([options2, queryList]);\n }\n\n function update() {\n var destroyed = state.is(DESTROYED);\n var direction = options.direction;\n var merged = queries.reduce(function (merged2, entry) {\n return merge(merged2, entry[1].matches ? entry[0] : {});\n }, {});\n omit(options);\n set(merged);\n\n if (options.destroy) {\n Splide2.destroy(options.destroy === \"completely\");\n } else if (destroyed) {\n destroy(true);\n Splide2.mount();\n } else {\n direction !== options.direction && Splide2.refresh();\n }\n }\n\n function reduce(enable) {\n if (matchMedia(MEDIA_PREFERS_REDUCED_MOTION).matches) {\n enable ? merge(options, reducedMotion) : omit(options, ownKeys(reducedMotion));\n }\n }\n\n function set(opts, base, notify) {\n merge(options, opts);\n base && merge(Object.getPrototypeOf(options), opts);\n\n if (notify || !state.is(CREATED)) {\n Splide2.emit(EVENT_UPDATED, options);\n }\n }\n\n return {\n setup: setup,\n destroy: destroy,\n reduce: reduce,\n set: set\n };\n}\n\nvar ARROW = \"Arrow\";\nvar ARROW_LEFT = ARROW + \"Left\";\nvar ARROW_RIGHT = ARROW + \"Right\";\nvar ARROW_UP = ARROW + \"Up\";\nvar ARROW_DOWN = ARROW + \"Down\";\nvar LTR = \"ltr\";\nvar RTL = \"rtl\";\nvar TTB = \"ttb\";\nvar ORIENTATION_MAP = {\n width: [\"height\"],\n left: [\"top\", \"right\"],\n right: [\"bottom\", \"left\"],\n x: [\"y\"],\n X: [\"Y\"],\n Y: [\"X\"],\n ArrowLeft: [ARROW_UP, ARROW_RIGHT],\n ArrowRight: [ARROW_DOWN, ARROW_LEFT]\n};\n\nfunction Direction(Splide2, Components2, options) {\n function resolve(prop, axisOnly, direction) {\n direction = direction || options.direction;\n var index = direction === RTL && !axisOnly ? 1 : direction === TTB ? 0 : -1;\n return ORIENTATION_MAP[prop] && ORIENTATION_MAP[prop][index] || prop.replace(/width|left|right/i, function (match, offset) {\n var replacement = ORIENTATION_MAP[match.toLowerCase()][index] || match;\n return offset > 0 ? replacement.charAt(0).toUpperCase() + replacement.slice(1) : replacement;\n });\n }\n\n function orient(value) {\n return value * (options.direction === RTL ? 1 : -1);\n }\n\n return {\n resolve: resolve,\n orient: orient\n };\n}\n\nvar ROLE = \"role\";\nvar TAB_INDEX = \"tabindex\";\nvar DISABLED = \"disabled\";\nvar ARIA_PREFIX = \"aria-\";\nvar ARIA_CONTROLS = ARIA_PREFIX + \"controls\";\nvar ARIA_CURRENT = ARIA_PREFIX + \"current\";\nvar ARIA_SELECTED = ARIA_PREFIX + \"selected\";\nvar ARIA_LABEL = ARIA_PREFIX + \"label\";\nvar ARIA_LABELLEDBY = ARIA_PREFIX + \"labelledby\";\nvar ARIA_HIDDEN = ARIA_PREFIX + \"hidden\";\nvar ARIA_ORIENTATION = ARIA_PREFIX + \"orientation\";\nvar ARIA_ROLEDESCRIPTION = ARIA_PREFIX + \"roledescription\";\nvar ARIA_LIVE = ARIA_PREFIX + \"live\";\nvar ARIA_BUSY = ARIA_PREFIX + \"busy\";\nvar ARIA_ATOMIC = ARIA_PREFIX + \"atomic\";\nvar ALL_ATTRIBUTES = [ROLE, TAB_INDEX, DISABLED, ARIA_CONTROLS, ARIA_CURRENT, ARIA_LABEL, ARIA_LABELLEDBY, ARIA_HIDDEN, ARIA_ORIENTATION, ARIA_ROLEDESCRIPTION];\nvar CLASS_PREFIX = PROJECT_CODE + \"__\";\nvar STATUS_CLASS_PREFIX = \"is-\";\nvar CLASS_ROOT = PROJECT_CODE;\nvar CLASS_TRACK = CLASS_PREFIX + \"track\";\nvar CLASS_LIST = CLASS_PREFIX + \"list\";\nvar CLASS_SLIDE = CLASS_PREFIX + \"slide\";\nvar CLASS_CLONE = CLASS_SLIDE + \"--clone\";\nvar CLASS_CONTAINER = CLASS_SLIDE + \"__container\";\nvar CLASS_ARROWS = CLASS_PREFIX + \"arrows\";\nvar CLASS_ARROW = CLASS_PREFIX + \"arrow\";\nvar CLASS_ARROW_PREV = CLASS_ARROW + \"--prev\";\nvar CLASS_ARROW_NEXT = CLASS_ARROW + \"--next\";\nvar CLASS_PAGINATION = CLASS_PREFIX + \"pagination\";\nvar CLASS_PAGINATION_PAGE = CLASS_PAGINATION + \"__page\";\nvar CLASS_PROGRESS = CLASS_PREFIX + \"progress\";\nvar CLASS_PROGRESS_BAR = CLASS_PROGRESS + \"__bar\";\nvar CLASS_TOGGLE = CLASS_PREFIX + \"toggle\";\nvar CLASS_TOGGLE_PLAY = CLASS_TOGGLE + \"__play\";\nvar CLASS_TOGGLE_PAUSE = CLASS_TOGGLE + \"__pause\";\nvar CLASS_SPINNER = CLASS_PREFIX + \"spinner\";\nvar CLASS_SR = CLASS_PREFIX + \"sr\";\nvar CLASS_INITIALIZED = STATUS_CLASS_PREFIX + \"initialized\";\nvar CLASS_ACTIVE = STATUS_CLASS_PREFIX + \"active\";\nvar CLASS_PREV = STATUS_CLASS_PREFIX + \"prev\";\nvar CLASS_NEXT = STATUS_CLASS_PREFIX + \"next\";\nvar CLASS_VISIBLE = STATUS_CLASS_PREFIX + \"visible\";\nvar CLASS_LOADING = STATUS_CLASS_PREFIX + \"loading\";\nvar CLASS_FOCUS_IN = STATUS_CLASS_PREFIX + \"focus-in\";\nvar CLASS_OVERFLOW = STATUS_CLASS_PREFIX + \"overflow\";\nvar STATUS_CLASSES = [CLASS_ACTIVE, CLASS_VISIBLE, CLASS_PREV, CLASS_NEXT, CLASS_LOADING, CLASS_FOCUS_IN, CLASS_OVERFLOW];\nvar CLASSES = {\n slide: CLASS_SLIDE,\n clone: CLASS_CLONE,\n arrows: CLASS_ARROWS,\n arrow: CLASS_ARROW,\n prev: CLASS_ARROW_PREV,\n next: CLASS_ARROW_NEXT,\n pagination: CLASS_PAGINATION,\n page: CLASS_PAGINATION_PAGE,\n spinner: CLASS_SPINNER\n};\n\nfunction closest(from, selector) {\n if (isFunction(from.closest)) {\n return from.closest(selector);\n }\n\n var elm = from;\n\n while (elm && elm.nodeType === 1) {\n if (matches(elm, selector)) {\n break;\n }\n\n elm = elm.parentElement;\n }\n\n return elm;\n}\n\nvar FRICTION = 5;\nvar LOG_INTERVAL = 200;\nvar POINTER_DOWN_EVENTS = \"touchstart mousedown\";\nvar POINTER_MOVE_EVENTS = \"touchmove mousemove\";\nvar POINTER_UP_EVENTS = \"touchend touchcancel mouseup click\";\n\nfunction Elements(Splide2, Components2, options) {\n var _EventInterface = EventInterface(Splide2),\n on = _EventInterface.on,\n bind = _EventInterface.bind;\n\n var root = Splide2.root;\n var i18n = options.i18n;\n var elements = {};\n var slides = [];\n var rootClasses = [];\n var trackClasses = [];\n var track;\n var list;\n var isUsingKey;\n\n function setup() {\n collect();\n init();\n update();\n }\n\n function mount() {\n on(EVENT_REFRESH, destroy);\n on(EVENT_REFRESH, setup);\n on(EVENT_UPDATED, update);\n bind(document, POINTER_DOWN_EVENTS + \" keydown\", function (e) {\n isUsingKey = e.type === \"keydown\";\n }, {\n capture: true\n });\n bind(root, \"focusin\", function () {\n toggleClass(root, CLASS_FOCUS_IN, !!isUsingKey);\n });\n }\n\n function destroy(completely) {\n var attrs = ALL_ATTRIBUTES.concat(\"style\");\n empty(slides);\n removeClass(root, rootClasses);\n removeClass(track, trackClasses);\n removeAttribute([track, list], attrs);\n removeAttribute(root, completely ? attrs : [\"style\", ARIA_ROLEDESCRIPTION]);\n }\n\n function update() {\n removeClass(root, rootClasses);\n removeClass(track, trackClasses);\n rootClasses = getClasses(CLASS_ROOT);\n trackClasses = getClasses(CLASS_TRACK);\n addClass(root, rootClasses);\n addClass(track, trackClasses);\n setAttribute(root, ARIA_LABEL, options.label);\n setAttribute(root, ARIA_LABELLEDBY, options.labelledby);\n }\n\n function collect() {\n track = find(\".\" + CLASS_TRACK);\n list = child(track, \".\" + CLASS_LIST);\n assert(track && list, \"A track/list element is missing.\");\n push(slides, children(list, \".\" + CLASS_SLIDE + \":not(.\" + CLASS_CLONE + \")\"));\n forOwn({\n arrows: CLASS_ARROWS,\n pagination: CLASS_PAGINATION,\n prev: CLASS_ARROW_PREV,\n next: CLASS_ARROW_NEXT,\n bar: CLASS_PROGRESS_BAR,\n toggle: CLASS_TOGGLE\n }, function (className, key) {\n elements[key] = find(\".\" + className);\n });\n assign(elements, {\n root: root,\n track: track,\n list: list,\n slides: slides\n });\n }\n\n function init() {\n var id = root.id || uniqueId(PROJECT_CODE);\n var role = options.role;\n root.id = id;\n track.id = track.id || id + \"-track\";\n list.id = list.id || id + \"-list\";\n\n if (!getAttribute(root, ROLE) && root.tagName !== \"SECTION\" && role) {\n setAttribute(root, ROLE, role);\n }\n\n setAttribute(root, ARIA_ROLEDESCRIPTION, i18n.carousel);\n setAttribute(list, ROLE, \"presentation\");\n }\n\n function find(selector) {\n var elm = query(root, selector);\n return elm && closest(elm, \".\" + CLASS_ROOT) === root ? elm : void 0;\n }\n\n function getClasses(base) {\n return [base + \"--\" + options.type, base + \"--\" + options.direction, options.drag && base + \"--draggable\", options.isNavigation && base + \"--nav\", base === CLASS_ROOT && CLASS_ACTIVE];\n }\n\n return assign(elements, {\n setup: setup,\n mount: mount,\n destroy: destroy\n });\n}\n\nvar SLIDE = \"slide\";\nvar LOOP = \"loop\";\nvar FADE = \"fade\";\n\nfunction Slide$1(Splide2, index, slideIndex, slide) {\n var event = EventInterface(Splide2);\n var on = event.on,\n emit = event.emit,\n bind = event.bind;\n var Components = Splide2.Components,\n root = Splide2.root,\n options = Splide2.options;\n var isNavigation = options.isNavigation,\n updateOnMove = options.updateOnMove,\n i18n = options.i18n,\n pagination = options.pagination,\n slideFocus = options.slideFocus;\n var resolve = Components.Direction.resolve;\n var styles = getAttribute(slide, \"style\");\n var label = getAttribute(slide, ARIA_LABEL);\n var isClone = slideIndex > -1;\n var container = child(slide, \".\" + CLASS_CONTAINER);\n var destroyed;\n\n function mount() {\n if (!isClone) {\n slide.id = root.id + \"-slide\" + pad(index + 1);\n setAttribute(slide, ROLE, pagination ? \"tabpanel\" : \"group\");\n setAttribute(slide, ARIA_ROLEDESCRIPTION, i18n.slide);\n setAttribute(slide, ARIA_LABEL, label || format(i18n.slideLabel, [index + 1, Splide2.length]));\n }\n\n listen();\n }\n\n function listen() {\n bind(slide, \"click\", apply(emit, EVENT_CLICK, self));\n bind(slide, \"keydown\", apply(emit, EVENT_SLIDE_KEYDOWN, self));\n on([EVENT_MOVED, EVENT_SHIFTED, EVENT_SCROLLED], update);\n on(EVENT_NAVIGATION_MOUNTED, initNavigation);\n\n if (updateOnMove) {\n on(EVENT_MOVE, onMove);\n }\n }\n\n function destroy() {\n destroyed = true;\n event.destroy();\n removeClass(slide, STATUS_CLASSES);\n removeAttribute(slide, ALL_ATTRIBUTES);\n setAttribute(slide, \"style\", styles);\n setAttribute(slide, ARIA_LABEL, label || \"\");\n }\n\n function initNavigation() {\n var controls = Splide2.splides.map(function (target) {\n var Slide2 = target.splide.Components.Slides.getAt(index);\n return Slide2 ? Slide2.slide.id : \"\";\n }).join(\" \");\n setAttribute(slide, ARIA_LABEL, format(i18n.slideX, (isClone ? slideIndex : index) + 1));\n setAttribute(slide, ARIA_CONTROLS, controls);\n setAttribute(slide, ROLE, slideFocus ? \"button\" : \"\");\n slideFocus && removeAttribute(slide, ARIA_ROLEDESCRIPTION);\n }\n\n function onMove() {\n if (!destroyed) {\n update();\n }\n }\n\n function update() {\n if (!destroyed) {\n var curr = Splide2.index;\n updateActivity();\n updateVisibility();\n toggleClass(slide, CLASS_PREV, index === curr - 1);\n toggleClass(slide, CLASS_NEXT, index === curr + 1);\n }\n }\n\n function updateActivity() {\n var active = isActive();\n\n if (active !== hasClass(slide, CLASS_ACTIVE)) {\n toggleClass(slide, CLASS_ACTIVE, active);\n setAttribute(slide, ARIA_CURRENT, isNavigation && active || \"\");\n emit(active ? EVENT_ACTIVE : EVENT_INACTIVE, self);\n }\n }\n\n function updateVisibility() {\n var visible = isVisible();\n var hidden = !visible && (!isActive() || isClone);\n\n if (!Splide2.state.is([MOVING, SCROLLING])) {\n setAttribute(slide, ARIA_HIDDEN, hidden || \"\");\n }\n\n setAttribute(queryAll(slide, options.focusableNodes || \"\"), TAB_INDEX, hidden ? -1 : \"\");\n\n if (slideFocus) {\n setAttribute(slide, TAB_INDEX, hidden ? -1 : 0);\n }\n\n if (visible !== hasClass(slide, CLASS_VISIBLE)) {\n toggleClass(slide, CLASS_VISIBLE, visible);\n emit(visible ? EVENT_VISIBLE : EVENT_HIDDEN, self);\n }\n\n if (!visible && document.activeElement === slide) {\n var Slide2 = Components.Slides.getAt(Splide2.index);\n Slide2 && focus(Slide2.slide);\n }\n }\n\n function style$1(prop, value, useContainer) {\n style(useContainer && container || slide, prop, value);\n }\n\n function isActive() {\n var curr = Splide2.index;\n return curr === index || options.cloneStatus && curr === slideIndex;\n }\n\n function isVisible() {\n if (Splide2.is(FADE)) {\n return isActive();\n }\n\n var trackRect = rect(Components.Elements.track);\n var slideRect = rect(slide);\n var left = resolve(\"left\", true);\n var right = resolve(\"right\", true);\n return floor(trackRect[left]) <= ceil(slideRect[left]) && floor(slideRect[right]) <= ceil(trackRect[right]);\n }\n\n function isWithin(from, distance) {\n var diff = abs(from - index);\n\n if (!isClone && (options.rewind || Splide2.is(LOOP))) {\n diff = min(diff, Splide2.length - diff);\n }\n\n return diff <= distance;\n }\n\n var self = {\n index: index,\n slideIndex: slideIndex,\n slide: slide,\n container: container,\n isClone: isClone,\n mount: mount,\n destroy: destroy,\n update: update,\n style: style$1,\n isWithin: isWithin\n };\n return self;\n}\n\nfunction Slides(Splide2, Components2, options) {\n var _EventInterface2 = EventInterface(Splide2),\n on = _EventInterface2.on,\n emit = _EventInterface2.emit,\n bind = _EventInterface2.bind;\n\n var _Components2$Elements = Components2.Elements,\n slides = _Components2$Elements.slides,\n list = _Components2$Elements.list;\n var Slides2 = [];\n\n function mount() {\n init();\n on(EVENT_REFRESH, destroy);\n on(EVENT_REFRESH, init);\n }\n\n function init() {\n slides.forEach(function (slide, index) {\n register(slide, index, -1);\n });\n }\n\n function destroy() {\n forEach$1(function (Slide2) {\n Slide2.destroy();\n });\n empty(Slides2);\n }\n\n function update() {\n forEach$1(function (Slide2) {\n Slide2.update();\n });\n }\n\n function register(slide, index, slideIndex) {\n var object = Slide$1(Splide2, index, slideIndex, slide);\n object.mount();\n Slides2.push(object);\n Slides2.sort(function (Slide1, Slide2) {\n return Slide1.index - Slide2.index;\n });\n }\n\n function get(excludeClones) {\n return excludeClones ? filter(function (Slide2) {\n return !Slide2.isClone;\n }) : Slides2;\n }\n\n function getIn(page) {\n var Controller = Components2.Controller;\n var index = Controller.toIndex(page);\n var max = Controller.hasFocus() ? 1 : options.perPage;\n return filter(function (Slide2) {\n return between(Slide2.index, index, index + max - 1);\n });\n }\n\n function getAt(index) {\n return filter(index)[0];\n }\n\n function add(items, index) {\n forEach(items, function (slide) {\n if (isString(slide)) {\n slide = parseHtml(slide);\n }\n\n if (isHTMLElement(slide)) {\n var ref = slides[index];\n ref ? before(slide, ref) : append(list, slide);\n addClass(slide, options.classes.slide);\n observeImages(slide, apply(emit, EVENT_RESIZE));\n }\n });\n emit(EVENT_REFRESH);\n }\n\n function remove$1(matcher) {\n remove(filter(matcher).map(function (Slide2) {\n return Slide2.slide;\n }));\n emit(EVENT_REFRESH);\n }\n\n function forEach$1(iteratee, excludeClones) {\n get(excludeClones).forEach(iteratee);\n }\n\n function filter(matcher) {\n return Slides2.filter(isFunction(matcher) ? matcher : function (Slide2) {\n return isString(matcher) ? matches(Slide2.slide, matcher) : includes(toArray(matcher), Slide2.index);\n });\n }\n\n function style(prop, value, useContainer) {\n forEach$1(function (Slide2) {\n Slide2.style(prop, value, useContainer);\n });\n }\n\n function observeImages(elm, callback) {\n var images = queryAll(elm, \"img\");\n var length = images.length;\n\n if (length) {\n images.forEach(function (img) {\n bind(img, \"load error\", function () {\n if (! --length) {\n callback();\n }\n });\n });\n } else {\n callback();\n }\n }\n\n function getLength(excludeClones) {\n return excludeClones ? slides.length : Slides2.length;\n }\n\n function isEnough() {\n return Slides2.length > options.perPage;\n }\n\n return {\n mount: mount,\n destroy: destroy,\n update: update,\n register: register,\n get: get,\n getIn: getIn,\n getAt: getAt,\n add: add,\n remove: remove$1,\n forEach: forEach$1,\n filter: filter,\n style: style,\n getLength: getLength,\n isEnough: isEnough\n };\n}\n\nfunction Layout(Splide2, Components2, options) {\n var _EventInterface3 = EventInterface(Splide2),\n on = _EventInterface3.on,\n bind = _EventInterface3.bind,\n emit = _EventInterface3.emit;\n\n var Slides = Components2.Slides;\n var resolve = Components2.Direction.resolve;\n var _Components2$Elements2 = Components2.Elements,\n root = _Components2$Elements2.root,\n track = _Components2$Elements2.track,\n list = _Components2$Elements2.list;\n var getAt = Slides.getAt,\n styleSlides = Slides.style;\n var vertical;\n var rootRect;\n var overflow;\n\n function mount() {\n init();\n bind(window, \"resize load\", Throttle(apply(emit, EVENT_RESIZE)));\n on([EVENT_UPDATED, EVENT_REFRESH], init);\n on(EVENT_RESIZE, resize);\n }\n\n function init() {\n vertical = options.direction === TTB;\n style(root, \"maxWidth\", unit(options.width));\n style(track, resolve(\"paddingLeft\"), cssPadding(false));\n style(track, resolve(\"paddingRight\"), cssPadding(true));\n resize(true);\n }\n\n function resize(force) {\n var newRect = rect(root);\n\n if (force || rootRect.width !== newRect.width || rootRect.height !== newRect.height) {\n style(track, \"height\", cssTrackHeight());\n styleSlides(resolve(\"marginRight\"), unit(options.gap));\n styleSlides(\"width\", cssSlideWidth());\n styleSlides(\"height\", cssSlideHeight(), true);\n rootRect = newRect;\n emit(EVENT_RESIZED);\n\n if (overflow !== (overflow = isOverflow())) {\n toggleClass(root, CLASS_OVERFLOW, overflow);\n emit(EVENT_OVERFLOW, overflow);\n }\n }\n }\n\n function cssPadding(right) {\n var padding = options.padding;\n var prop = resolve(right ? \"right\" : \"left\");\n return padding && unit(padding[prop] || (isObject(padding) ? 0 : padding)) || \"0px\";\n }\n\n function cssTrackHeight() {\n var height = \"\";\n\n if (vertical) {\n height = cssHeight();\n assert(height, \"height or heightRatio is missing.\");\n height = \"calc(\" + height + \" - \" + cssPadding(false) + \" - \" + cssPadding(true) + \")\";\n }\n\n return height;\n }\n\n function cssHeight() {\n return unit(options.height || rect(list).width * options.heightRatio);\n }\n\n function cssSlideWidth() {\n return options.autoWidth ? null : unit(options.fixedWidth) || (vertical ? \"\" : cssSlideSize());\n }\n\n function cssSlideHeight() {\n return unit(options.fixedHeight) || (vertical ? options.autoHeight ? null : cssSlideSize() : cssHeight());\n }\n\n function cssSlideSize() {\n var gap = unit(options.gap);\n return \"calc((100%\" + (gap && \" + \" + gap) + \")/\" + (options.perPage || 1) + (gap && \" - \" + gap) + \")\";\n }\n\n function listSize() {\n return rect(list)[resolve(\"width\")];\n }\n\n function slideSize(index, withoutGap) {\n var Slide = getAt(index || 0);\n return Slide ? rect(Slide.slide)[resolve(\"width\")] + (withoutGap ? 0 : getGap()) : 0;\n }\n\n function totalSize(index, withoutGap) {\n var Slide = getAt(index);\n\n if (Slide) {\n var right = rect(Slide.slide)[resolve(\"right\")];\n var left = rect(list)[resolve(\"left\")];\n return abs(right - left) + (withoutGap ? 0 : getGap());\n }\n\n return 0;\n }\n\n function sliderSize(withoutGap) {\n return totalSize(Splide2.length - 1) - totalSize(0) + slideSize(0, withoutGap);\n }\n\n function getGap() {\n var Slide = getAt(0);\n return Slide && parseFloat(style(Slide.slide, resolve(\"marginRight\"))) || 0;\n }\n\n function getPadding(right) {\n return parseFloat(style(track, resolve(\"padding\" + (right ? \"Right\" : \"Left\")))) || 0;\n }\n\n function isOverflow() {\n return Splide2.is(FADE) || sliderSize(true) > listSize();\n }\n\n return {\n mount: mount,\n resize: resize,\n listSize: listSize,\n slideSize: slideSize,\n sliderSize: sliderSize,\n totalSize: totalSize,\n getPadding: getPadding,\n isOverflow: isOverflow\n };\n}\n\nvar MULTIPLIER = 2;\n\nfunction Clones(Splide2, Components2, options) {\n var event = EventInterface(Splide2);\n var on = event.on;\n var Elements = Components2.Elements,\n Slides = Components2.Slides;\n var resolve = Components2.Direction.resolve;\n var clones = [];\n var cloneCount;\n\n function mount() {\n on(EVENT_REFRESH, remount);\n on([EVENT_UPDATED, EVENT_RESIZE], observe);\n\n if (cloneCount = computeCloneCount()) {\n generate(cloneCount);\n Components2.Layout.resize(true);\n }\n }\n\n function remount() {\n destroy();\n mount();\n }\n\n function destroy() {\n remove(clones);\n empty(clones);\n event.destroy();\n }\n\n function observe() {\n var count = computeCloneCount();\n\n if (cloneCount !== count) {\n if (cloneCount < count || !count) {\n event.emit(EVENT_REFRESH);\n }\n }\n }\n\n function generate(count) {\n var slides = Slides.get().slice();\n var length = slides.length;\n\n if (length) {\n while (slides.length < count) {\n push(slides, slides);\n }\n\n push(slides.slice(-count), slides.slice(0, count)).forEach(function (Slide, index) {\n var isHead = index < count;\n var clone = cloneDeep(Slide.slide, index);\n isHead ? before(clone, slides[0].slide) : append(Elements.list, clone);\n push(clones, clone);\n Slides.register(clone, index - count + (isHead ? 0 : length), Slide.index);\n });\n }\n }\n\n function cloneDeep(elm, index) {\n var clone = elm.cloneNode(true);\n addClass(clone, options.classes.clone);\n clone.id = Splide2.root.id + \"-clone\" + pad(index + 1);\n return clone;\n }\n\n function computeCloneCount() {\n var clones2 = options.clones;\n\n if (!Splide2.is(LOOP)) {\n clones2 = 0;\n } else if (isUndefined(clones2)) {\n var fixedSize = options[resolve(\"fixedWidth\")] && Components2.Layout.slideSize(0);\n var fixedCount = fixedSize && ceil(rect(Elements.track)[resolve(\"width\")] / fixedSize);\n clones2 = fixedCount || options[resolve(\"autoWidth\")] && Splide2.length || options.perPage * MULTIPLIER;\n }\n\n return clones2;\n }\n\n return {\n mount: mount,\n destroy: destroy\n };\n}\n\nfunction Move(Splide2, Components2, options) {\n var _EventInterface4 = EventInterface(Splide2),\n on = _EventInterface4.on,\n emit = _EventInterface4.emit;\n\n var set = Splide2.state.set;\n var _Components2$Layout = Components2.Layout,\n slideSize = _Components2$Layout.slideSize,\n getPadding = _Components2$Layout.getPadding,\n totalSize = _Components2$Layout.totalSize,\n listSize = _Components2$Layout.listSize,\n sliderSize = _Components2$Layout.sliderSize;\n var _Components2$Directio = Components2.Direction,\n resolve = _Components2$Directio.resolve,\n orient = _Components2$Directio.orient;\n var _Components2$Elements3 = Components2.Elements,\n list = _Components2$Elements3.list,\n track = _Components2$Elements3.track;\n var Transition;\n\n function mount() {\n Transition = Components2.Transition;\n on([EVENT_MOUNTED, EVENT_RESIZED, EVENT_UPDATED, EVENT_REFRESH], reposition);\n }\n\n function reposition() {\n if (!Components2.Controller.isBusy()) {\n Components2.Scroll.cancel();\n jump(Splide2.index);\n Components2.Slides.update();\n }\n }\n\n function move(dest, index, prev, callback) {\n if (dest !== index && canShift(dest > prev)) {\n cancel();\n translate(shift(getPosition(), dest > prev), true);\n }\n\n set(MOVING);\n emit(EVENT_MOVE, index, prev, dest);\n Transition.start(index, function () {\n set(IDLE);\n emit(EVENT_MOVED, index, prev, dest);\n callback && callback();\n });\n }\n\n function jump(index) {\n translate(toPosition(index, true));\n }\n\n function translate(position, preventLoop) {\n if (!Splide2.is(FADE)) {\n var destination = preventLoop ? position : loop(position);\n style(list, \"transform\", \"translate\" + resolve(\"X\") + \"(\" + destination + \"px)\");\n position !== destination && emit(EVENT_SHIFTED);\n }\n }\n\n function loop(position) {\n if (Splide2.is(LOOP)) {\n var index = toIndex(position);\n var exceededMax = index > Components2.Controller.getEnd();\n var exceededMin = index < 0;\n\n if (exceededMin || exceededMax) {\n position = shift(position, exceededMax);\n }\n }\n\n return position;\n }\n\n function shift(position, backwards) {\n var excess = position - getLimit(backwards);\n var size = sliderSize();\n position -= orient(size * (ceil(abs(excess) / size) || 1)) * (backwards ? 1 : -1);\n return position;\n }\n\n function cancel() {\n translate(getPosition(), true);\n Transition.cancel();\n }\n\n function toIndex(position) {\n var Slides = Components2.Slides.get();\n var index = 0;\n var minDistance = Infinity;\n\n for (var i = 0; i < Slides.length; i++) {\n var slideIndex = Slides[i].index;\n var distance = abs(toPosition(slideIndex, true) - position);\n\n if (distance <= minDistance) {\n minDistance = distance;\n index = slideIndex;\n } else {\n break;\n }\n }\n\n return index;\n }\n\n function toPosition(index, trimming) {\n var position = orient(totalSize(index - 1) - offset(index));\n return trimming ? trim(position) : position;\n }\n\n function getPosition() {\n var left = resolve(\"left\");\n return rect(list)[left] - rect(track)[left] + orient(getPadding(false));\n }\n\n function trim(position) {\n if (options.trimSpace && Splide2.is(SLIDE)) {\n position = clamp(position, 0, orient(sliderSize(true) - listSize()));\n }\n\n return position;\n }\n\n function offset(index) {\n var focus = options.focus;\n return focus === \"center\" ? (listSize() - slideSize(index, true)) / 2 : +focus * slideSize(index) || 0;\n }\n\n function getLimit(max) {\n return toPosition(max ? Components2.Controller.getEnd() : 0, !!options.trimSpace);\n }\n\n function canShift(backwards) {\n var shifted = orient(shift(getPosition(), backwards));\n return backwards ? shifted >= 0 : shifted <= list[resolve(\"scrollWidth\")] - rect(track)[resolve(\"width\")];\n }\n\n function exceededLimit(max, position) {\n position = isUndefined(position) ? getPosition() : position;\n var exceededMin = max !== true && orient(position) < orient(getLimit(false));\n var exceededMax = max !== false && orient(position) > orient(getLimit(true));\n return exceededMin || exceededMax;\n }\n\n return {\n mount: mount,\n move: move,\n jump: jump,\n translate: translate,\n shift: shift,\n cancel: cancel,\n toIndex: toIndex,\n toPosition: toPosition,\n getPosition: getPosition,\n getLimit: getLimit,\n exceededLimit: exceededLimit,\n reposition: reposition\n };\n}\n\nfunction Controller(Splide2, Components2, options) {\n var _EventInterface5 = EventInterface(Splide2),\n on = _EventInterface5.on,\n emit = _EventInterface5.emit;\n\n var Move = Components2.Move;\n var getPosition = Move.getPosition,\n getLimit = Move.getLimit,\n toPosition = Move.toPosition;\n var _Components2$Slides = Components2.Slides,\n isEnough = _Components2$Slides.isEnough,\n getLength = _Components2$Slides.getLength;\n var omitEnd = options.omitEnd;\n var isLoop = Splide2.is(LOOP);\n var isSlide = Splide2.is(SLIDE);\n var getNext = apply(getAdjacent, false);\n var getPrev = apply(getAdjacent, true);\n var currIndex = options.start || 0;\n var endIndex;\n var prevIndex = currIndex;\n var slideCount;\n var perMove;\n var perPage;\n\n function mount() {\n init();\n on([EVENT_UPDATED, EVENT_REFRESH, EVENT_END_INDEX_CHANGED], init);\n on(EVENT_RESIZED, onResized);\n }\n\n function init() {\n slideCount = getLength(true);\n perMove = options.perMove;\n perPage = options.perPage;\n endIndex = getEnd();\n var index = clamp(currIndex, 0, omitEnd ? endIndex : slideCount - 1);\n\n if (index !== currIndex) {\n currIndex = index;\n Move.reposition();\n }\n }\n\n function onResized() {\n if (endIndex !== getEnd()) {\n emit(EVENT_END_INDEX_CHANGED);\n }\n }\n\n function go(control, allowSameIndex, callback) {\n if (!isBusy()) {\n var dest = parse(control);\n var index = loop(dest);\n\n if (index > -1 && (allowSameIndex || index !== currIndex)) {\n setIndex(index);\n Move.move(dest, index, prevIndex, callback);\n }\n }\n }\n\n function scroll(destination, duration, snap, callback) {\n Components2.Scroll.scroll(destination, duration, snap, function () {\n var index = loop(Move.toIndex(getPosition()));\n setIndex(omitEnd ? min(index, endIndex) : index);\n callback && callback();\n });\n }\n\n function parse(control) {\n var index = currIndex;\n\n if (isString(control)) {\n var _ref = control.match(/([+\\-<>])(\\d+)?/) || [],\n indicator = _ref[1],\n number = _ref[2];\n\n if (indicator === \"+\" || indicator === \"-\") {\n index = computeDestIndex(currIndex + +(\"\" + indicator + (+number || 1)), currIndex);\n } else if (indicator === \">\") {\n index = number ? toIndex(+number) : getNext(true);\n } else if (indicator === \"<\") {\n index = getPrev(true);\n }\n } else {\n index = isLoop ? control : clamp(control, 0, endIndex);\n }\n\n return index;\n }\n\n function getAdjacent(prev, destination) {\n var number = perMove || (hasFocus() ? 1 : perPage);\n var dest = computeDestIndex(currIndex + number * (prev ? -1 : 1), currIndex, !(perMove || hasFocus()));\n\n if (dest === -1 && isSlide) {\n if (!approximatelyEqual(getPosition(), getLimit(!prev), 1)) {\n return prev ? 0 : endIndex;\n }\n }\n\n return destination ? dest : loop(dest);\n }\n\n function computeDestIndex(dest, from, snapPage) {\n if (isEnough() || hasFocus()) {\n var index = computeMovableDestIndex(dest);\n\n if (index !== dest) {\n from = dest;\n dest = index;\n snapPage = false;\n }\n\n if (dest < 0 || dest > endIndex) {\n if (!perMove && (between(0, dest, from, true) || between(endIndex, from, dest, true))) {\n dest = toIndex(toPage(dest));\n } else {\n if (isLoop) {\n dest = snapPage ? dest < 0 ? -(slideCount % perPage || perPage) : slideCount : dest;\n } else if (options.rewind) {\n dest = dest < 0 ? endIndex : 0;\n } else {\n dest = -1;\n }\n }\n } else {\n if (snapPage && dest !== from) {\n dest = toIndex(toPage(from) + (dest < from ? -1 : 1));\n }\n }\n } else {\n dest = -1;\n }\n\n return dest;\n }\n\n function computeMovableDestIndex(dest) {\n if (isSlide && options.trimSpace === \"move\" && dest !== currIndex) {\n var position = getPosition();\n\n while (position === toPosition(dest, true) && between(dest, 0, Splide2.length - 1, !options.rewind)) {\n dest < currIndex ? --dest : ++dest;\n }\n }\n\n return dest;\n }\n\n function loop(index) {\n return isLoop ? (index + slideCount) % slideCount || 0 : index;\n }\n\n function getEnd() {\n var end = slideCount - (hasFocus() || isLoop && perMove ? 1 : perPage);\n\n while (omitEnd && end-- > 0) {\n if (toPosition(slideCount - 1, true) !== toPosition(end, true)) {\n end++;\n break;\n }\n }\n\n return clamp(end, 0, slideCount - 1);\n }\n\n function toIndex(page) {\n return clamp(hasFocus() ? page : perPage * page, 0, endIndex);\n }\n\n function toPage(index) {\n return hasFocus() ? min(index, endIndex) : floor((index >= endIndex ? slideCount - 1 : index) / perPage);\n }\n\n function toDest(destination) {\n var closest = Move.toIndex(destination);\n return isSlide ? clamp(closest, 0, endIndex) : closest;\n }\n\n function setIndex(index) {\n if (index !== currIndex) {\n prevIndex = currIndex;\n currIndex = index;\n }\n }\n\n function getIndex(prev) {\n return prev ? prevIndex : currIndex;\n }\n\n function hasFocus() {\n return !isUndefined(options.focus) || options.isNavigation;\n }\n\n function isBusy() {\n return Splide2.state.is([MOVING, SCROLLING]) && !!options.waitForTransition;\n }\n\n return {\n mount: mount,\n go: go,\n scroll: scroll,\n getNext: getNext,\n getPrev: getPrev,\n getAdjacent: getAdjacent,\n getEnd: getEnd,\n setIndex: setIndex,\n getIndex: getIndex,\n toIndex: toIndex,\n toPage: toPage,\n toDest: toDest,\n hasFocus: hasFocus,\n isBusy: isBusy\n };\n}\n\nvar XML_NAME_SPACE = \"http://www.w3.org/2000/svg\";\nvar PATH = \"m15.5 0.932-4.3 4.38 14.5 14.6-14.5 14.5 4.3 4.4 14.6-14.6 4.4-4.3-4.4-4.4-14.6-14.6z\";\nvar SIZE = 40;\n\nfunction Arrows(Splide2, Components2, options) {\n var event = EventInterface(Splide2);\n var on = event.on,\n bind = event.bind,\n emit = event.emit;\n var classes = options.classes,\n i18n = options.i18n;\n var Elements = Components2.Elements,\n Controller = Components2.Controller;\n var placeholder = Elements.arrows,\n track = Elements.track;\n var wrapper = placeholder;\n var prev = Elements.prev;\n var next = Elements.next;\n var created;\n var wrapperClasses;\n var arrows = {};\n\n function mount() {\n init();\n on(EVENT_UPDATED, remount);\n }\n\n function remount() {\n destroy();\n mount();\n }\n\n function init() {\n var enabled = options.arrows;\n\n if (enabled && !(prev && next)) {\n createArrows();\n }\n\n if (prev && next) {\n assign(arrows, {\n prev: prev,\n next: next\n });\n display(wrapper, enabled ? \"\" : \"none\");\n addClass(wrapper, wrapperClasses = CLASS_ARROWS + \"--\" + options.direction);\n\n if (enabled) {\n listen();\n update();\n setAttribute([prev, next], ARIA_CONTROLS, track.id);\n emit(EVENT_ARROWS_MOUNTED, prev, next);\n }\n }\n }\n\n function destroy() {\n event.destroy();\n removeClass(wrapper, wrapperClasses);\n\n if (created) {\n remove(placeholder ? [prev, next] : wrapper);\n prev = next = null;\n } else {\n removeAttribute([prev, next], ALL_ATTRIBUTES);\n }\n }\n\n function listen() {\n on([EVENT_MOUNTED, EVENT_MOVED, EVENT_REFRESH, EVENT_SCROLLED, EVENT_END_INDEX_CHANGED], update);\n bind(next, \"click\", apply(go, \">\"));\n bind(prev, \"click\", apply(go, \"<\"));\n }\n\n function go(control) {\n Controller.go(control, true);\n }\n\n function createArrows() {\n wrapper = placeholder || create(\"div\", classes.arrows);\n prev = createArrow(true);\n next = createArrow(false);\n created = true;\n append(wrapper, [prev, next]);\n !placeholder && before(wrapper, track);\n }\n\n function createArrow(prev2) {\n var arrow = \"\";\n };\n\n _proto3.html = function html() {\n var _this$config = this.config,\n rootClass = _this$config.rootClass,\n listTag = _this$config.listTag,\n arrows = _this$config.arrows,\n beforeTrack = _this$config.beforeTrack,\n afterTrack = _this$config.afterTrack,\n slider = _this$config.slider,\n beforeSlider = _this$config.beforeSlider,\n afterSlider = _this$config.afterSlider;\n var html = \"\";\n html += \"
\";\n html += \"\";\n\n if (slider) {\n html += beforeSlider || \"\";\n html += \"
\";\n }\n\n html += beforeTrack || \"\";\n\n if (arrows) {\n html += this.renderArrows();\n }\n\n html += \"
\";\n html += \"<\" + listTag + \" class=\\\"splide__list\\\">\";\n html += this.renderSlides();\n html += \"\";\n html += \"
\";\n html += afterTrack || \"\";\n\n if (slider) {\n html += \"
\";\n html += afterSlider || \"\";\n }\n\n html += \"
\";\n return html;\n };\n\n return SplideRenderer;\n}();\n\nexport { CLASSES, CLASS_ACTIVE, CLASS_ARROW, CLASS_ARROWS, CLASS_ARROW_NEXT, CLASS_ARROW_PREV, CLASS_CLONE, CLASS_CONTAINER, CLASS_FOCUS_IN, CLASS_INITIALIZED, CLASS_LIST, CLASS_LOADING, CLASS_NEXT, CLASS_OVERFLOW, CLASS_PAGINATION, CLASS_PAGINATION_PAGE, CLASS_PREV, CLASS_PROGRESS, CLASS_PROGRESS_BAR, CLASS_ROOT, CLASS_SLIDE, CLASS_SPINNER, CLASS_SR, CLASS_TOGGLE, CLASS_TOGGLE_PAUSE, CLASS_TOGGLE_PLAY, CLASS_TRACK, CLASS_VISIBLE, DEFAULTS, EVENT_ACTIVE, EVENT_ARROWS_MOUNTED, EVENT_ARROWS_UPDATED, EVENT_AUTOPLAY_PAUSE, EVENT_AUTOPLAY_PLAY, EVENT_AUTOPLAY_PLAYING, EVENT_CLICK, EVENT_DESTROY, EVENT_DRAG, EVENT_DRAGGED, EVENT_DRAGGING, EVENT_END_INDEX_CHANGED, EVENT_HIDDEN, EVENT_INACTIVE, EVENT_LAZYLOAD_LOADED, EVENT_MOUNTED, EVENT_MOVE, EVENT_MOVED, EVENT_NAVIGATION_MOUNTED, EVENT_OVERFLOW, EVENT_PAGINATION_MOUNTED, EVENT_PAGINATION_UPDATED, EVENT_READY, EVENT_REFRESH, EVENT_RESIZE, EVENT_RESIZED, EVENT_SCROLL, EVENT_SCROLLED, EVENT_SHIFTED, EVENT_SLIDE_KEYDOWN, EVENT_UPDATED, EVENT_VISIBLE, EventBinder, EventInterface, FADE, LOOP, LTR, RTL, RequestInterval, SLIDE, STATUS_CLASSES, Splide, SplideRenderer, State, TTB, Throttle, Splide as default };\n","import TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\nimport { RectangleItem, isOutsideShapes } from '@tk/utilities/tk.shape.detector';\r\n\r\nexport default class TKContextMenu extends TKCustomElementFactory {\r\n buttons: NodeListOf;\r\n items?: HTMLElement;\r\n copiedItems?: HTMLElement;\r\n openClassName: string;\r\n responsiveClassName: string;\r\n dropDownClassName: string;\r\n offset: number;\r\n disableScrolldownBreakpoint?: Breakpoint;\r\n minWidthBreakpoint: number;\r\n showAlways: boolean;\r\n resizeObserver: ResizeObserver;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.buttons = this.querySelectorAll('[data-tk-context-button]');\r\n this.items = this.querySelector('[data-tk-context-items]') || undefined;\r\n this.openClassName = this.getAttribute('data-tk-open-class-name') || 'tk-context-menu--open';\r\n this.responsiveClassName = this.getAttribute('data-tk-responsive-class-name') || 'tk-context-menu--responsive';\r\n this.dropDownClassName = this.getAttribute('data-tk-dropdown-class-name') || 'tk-context-menu__dropdown';\r\n this.showAlways = this.hasAttribute('data-tk-show-always');\r\n this.disableScrolldownBreakpoint = (\r\n this.getAttribute('data-tk-disable-scrolldown-breakpoint') as Breakpoint\r\n ) || 's';\r\n this.minWidthBreakpoint = window.viewport.breakpoints.get(this.disableScrolldownBreakpoint) || 0;\r\n this.offset = Number(this.getAttribute('data-tk-context-offset')) || 4;\r\n this.resizeObserver = new ResizeObserver(this.handleResize.bind(this));\r\n }\r\n\r\n connectedCallback(): void {\r\n if (this.buttons.length === 0 || !this.items) throw new Error('Context Menu: Elements are missing!');\r\n\r\n this.registerViewportListener();\r\n (window.viewport.clientWidth < this.minWidthBreakpoint || this.showAlways)\r\n && this.switchToMobile();\r\n this.registerClickListener();\r\n }\r\n\r\n disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n this.resizeObserver.unobserve(this);\r\n }\r\n\r\n registerClickListener(): void {\r\n const onClick = this.open.bind(this);\r\n this.buttons.forEach((button) => {\r\n this.pushListener({ event: 'click', element: button, action: onClick });\r\n });\r\n }\r\n\r\n registerCloseListener() {\r\n const handleClose = this.close.bind(this);\r\n this.pushListener({ event: 'click', element: window, action: handleClose });\r\n }\r\n\r\n registerViewportListener(): void {\r\n const onViewportResize = this.handleViewportResize.bind(this);\r\n this.pushListener({\r\n event: 'tk-viewport-resize',\r\n element: window.viewport,\r\n action: onViewportResize,\r\n });\r\n }\r\n\r\n handleResize(entries: ResizeObserverEntry[]) {\r\n entries.forEach(() => {\r\n if (!this.copiedItems) return;\r\n this.setPosition(this.copiedItems);\r\n });\r\n }\r\n\r\n handleViewportResize(event: CustomEvent): void {\r\n (event.detail.width < this.minWidthBreakpoint || this.showAlways)\r\n ? this.switchToMobile()\r\n : this.switchToDesktop();\r\n }\r\n\r\n getVisibleButton() {\r\n const buttonList = Array.from(this.buttons);\r\n return buttonList.find((button) => button.checkVisibility());\r\n }\r\n\r\n switchToDesktop() {\r\n const button = this.getVisibleButton();\r\n if (!button) return;\r\n button.hidden = true;\r\n this.classList.remove(this.responsiveClassName);\r\n }\r\n\r\n switchToMobile() {\r\n const button = this.getVisibleButton();\r\n if (!button) return;\r\n button.hidden = false;\r\n this.classList.add(this.responsiveClassName);\r\n }\r\n\r\n copyItemsIfNotExists() {\r\n const copiedItems = this.items!.cloneNode(true) as HTMLElement;\r\n copiedItems.classList.add(this.dropDownClassName);\r\n this.copiedItems = copiedItems;\r\n document.body.insertAdjacentElement('beforeend', copiedItems);\r\n }\r\n\r\n open() {\r\n !this.copiedItems && this.copyItemsIfNotExists();\r\n if (!this.copiedItems) return;\r\n this.setPosition(this.copiedItems);\r\n this.resizeObserver.observe(document.body);\r\n setTimeout(() => {\r\n this.registerCloseListener();\r\n }, 0);\r\n }\r\n\r\n setPosition(element: HTMLElement) {\r\n const button = this.getVisibleButton();\r\n if (!button) return;\r\n element.classList.add(this.openClassName);\r\n const {\r\n top, height, left, right,\r\n } = button.getBoundingClientRect();\r\n const leftPosition = left + window.scrollX;\r\n const rightPosition = right + window.scrollX;\r\n\r\n element.style.top = `${top + height + window.scrollY + this.offset}px`;\r\n\r\n if (window.innerWidth <= element.clientWidth + leftPosition) {\r\n element.style.left = `${rightPosition - element.clientWidth}px`;\r\n } else {\r\n element.style.left = `${leftPosition}px`;\r\n }\r\n }\r\n\r\n close(event: MouseEvent) {\r\n const button = this.getVisibleButton();\r\n if (!this.copiedItems || !button) return;\r\n const buttonRect = button.getBoundingClientRect();\r\n const dropdownRect = this.copiedItems.getBoundingClientRect();\r\n const rectangles = [\r\n { rectangle: buttonRect },\r\n { rectangle: dropdownRect },\r\n ] as RectangleItem[];\r\n if (isOutsideShapes(event, rectangles)) {\r\n this.copiedItems.classList.remove(this.openClassName);\r\n this.removeListener(window);\r\n this.resizeObserver.unobserve(document.body);\r\n }\r\n }\r\n}\r\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}\n","import TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\n\r\ninterface FlagItem {\r\n icon?: string;\r\n label?: string;\r\n showIcon: boolean;\r\n showLabel: boolean;\r\n}\r\n\r\nexport default class TKFlag extends TKCustomElementFactory {\r\n selectorFlagItem: string = '[data-tk-flag-item]';\r\n selectorFlagIcon: string = '[data-tk-flag-icon]';\r\n selectorFlagLabel: string = '[data-tk-flag-label]';\r\n flagItems: FlagItem[] = [];\r\n removedFlagElements: HTMLDivElement[] = [];\r\n\r\n // eslint-disable-next-line no-useless-constructor\r\n constructor() {\r\n super();\r\n }\r\n\r\n connectedCallback(): void {\r\n this.getAllFlags();\r\n\r\n if (this.flagItems.length < 1) {\r\n return;\r\n }\r\n\r\n this.appendSummarizedFlag();\r\n }\r\n\r\n getAllFlags(): void {\r\n const allFlagElements: NodeListOf = this.querySelectorAll(this.selectorFlagItem) || undefined;\r\n // convert NodeList to Array\r\n const allFlags: HTMLDivElement[] = Array.from(allFlagElements);\r\n // remove last Element (not needed for Tooltip-Flag)\r\n allFlags.pop();\r\n\r\n if (allFlags.length < 1) {\r\n return;\r\n }\r\n\r\n allFlags.forEach((item: HTMLDivElement) => {\r\n const iconElem: HTMLElement | null = item.querySelector(this.selectorFlagIcon);\r\n const labelElem: HTMLElement | null = item.querySelector(this.selectorFlagLabel);\r\n const singleFlagItem: FlagItem = {\r\n icon: iconElem?.outerHTML,\r\n label:\r\n labelElem?.getAttribute(this.selectorFlagLabel.slice(1, -1)) === 'true' ? labelElem.innerHTML : '',\r\n showIcon: iconElem?.getAttribute(this.selectorFlagIcon.slice(1, -1)) === 'true',\r\n showLabel: labelElem?.getAttribute(this.selectorFlagLabel.slice(1, -1)) === 'true',\r\n };\r\n this.flagItems.push(singleFlagItem);\r\n this.removedFlagElements.push(item);\r\n item.remove();\r\n });\r\n }\r\n\r\n getFlagDetails(): string {\r\n const returnVal: string[] = [];\r\n this.flagItems.forEach((elem) => {\r\n let tooltipString: string;\r\n if (elem.showLabel) {\r\n tooltipString = elem.showIcon ? `${elem.icon} ${elem.label}` : `${elem.label}`;\r\n } else {\r\n const removedElement = this.removedFlagElements.shift();\r\n const removedElementLabel = removedElement?.querySelector('[data-tk-flag-label]')?.innerHTML;\r\n const tmpTooltipString = removedElementLabel || '';\r\n tooltipString = elem.showIcon ? `${elem.icon}` : tmpTooltipString;\r\n }\r\n returnVal.push(tooltipString);\r\n });\r\n\r\n return returnVal.join(', ').trim();\r\n }\r\n\r\n appendSummarizedFlag(): void {\r\n const tooltipTemplate: HTMLTemplateElement | null = this.querySelector('[data-tk-flag-merged]');\r\n\r\n if (!tooltipTemplate) {\r\n return;\r\n }\r\n\r\n const clone: HTMLElement = tooltipTemplate.content.cloneNode(true) as HTMLElement;\r\n const tooltipElement: HTMLElement | null = clone.querySelector('[data-tk-tooltip-content]');\r\n\r\n if (!tooltipElement) {\r\n return;\r\n }\r\n\r\n tooltipElement.innerHTML = `+${this.flagItems.length}`;\r\n tooltipElement.setAttribute('data-tk-tooltip-content', this.getFlagDetails());\r\n\r\n this.prepend(clone);\r\n }\r\n}\r\n","import { fetchRequest } from '@tk/utilities/tk.fetch';\r\nimport TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\n\r\nexport default class TKProductTile extends TKCustomElementFactory {\r\n productVariants?: HTMLSelectElement;\r\n url?: string;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.url = this.getAttribute('data-tk-url') || undefined;\r\n this.productVariants = this.querySelector('[data-tk-product-variants]') || undefined;\r\n }\r\n\r\n connectedCallback(): void {\r\n if (!this.url) throw new Error('Product-Tile: No URL defined!');\r\n this.registerListener();\r\n }\r\n\r\n private registerListener(): void {\r\n if (!this.productVariants) return;\r\n const switchProductVariantHandler = this.changeVariant.bind(this);\r\n this.pushListener({\r\n event: 'change',\r\n element: this.productVariants,\r\n action: switchProductVariantHandler,\r\n });\r\n }\r\n\r\n private changeVariant() {\r\n this.getProductVariant(this.productVariants!.value);\r\n }\r\n\r\n private getProductVariant(id: string): void {\r\n const data: Record = {\r\n article: id,\r\n };\r\n\r\n fetchRequest({\r\n requestURL: this.url!,\r\n resolveHandler: this.switchProductVariant.bind(this),\r\n payload: data,\r\n });\r\n }\r\n\r\n private switchProductVariant(response: TKResponse): void {\r\n if (!response || !response.success) return;\r\n this.insertAdjacentHTML('afterend', response.dataAsHtml);\r\n this.remove();\r\n }\r\n}\r\n","/* eslint-disable arrow-body-style */\r\nimport TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\nimport { filterMessages } from '@tk/utilities/tk.messages';\r\n\r\ninterface ProductVariant {\r\n id: string;\r\n element: HTMLElement;\r\n spec: Record;\r\n}\r\n\r\ninterface FilterOption {\r\n element?: HTMLSelectElement;\r\n attr: string;\r\n options: Set\r\n}\r\n\r\nexport default class TKProductVariants extends TKCustomElementFactory {\r\n selectorProductVariant: string = '[data-tk-product-variant]';\r\n selectorproductVariantFilters: string = '[data-tk-product-variant-filter]';\r\n selectorProductVariantList: string = '[data-tk-product-variant-list]';\r\n selectorProductVariantAttribute: string = '[data-tk-product-variant-attribute]';\r\n selectorProductVariantValue: string = '[data-tk-product-variant-value]';\r\n productVariantList?: HTMLElement;\r\n productVariants?: HTMLCollection;\r\n productVariantsCollection: ProductVariant[];\r\n filteredCollection: ProductVariant[];\r\n selectedVariant?: string;\r\n noVariantFound: string;\r\n productVariantFilters: NodeListOf;\r\n disableSelectingFirst: boolean;\r\n filteredOptions: FilterOption[] = [];\r\n resetButton?: HTMLButtonElement;\r\n enableFilterInURL: boolean;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.productVariantList = this.querySelector(this.selectorProductVariantList) || undefined;\r\n this.productVariantFilters = this.querySelectorAll(this.selectorproductVariantFilters) || undefined;\r\n this.productVariantsCollection = [];\r\n this.filteredCollection = [];\r\n this.noVariantFound = this.getAttribute('data-tk-product-variant-none') || 'NONE';\r\n this.disableSelectingFirst = this.hasAttribute('data-tk-disable-selecting-first');\r\n this.resetButton = this.querySelector('[data-tk-product-variants-reset]') || undefined;\r\n this.enableFilterInURL = this.hasAttribute('data-tk-enable-filter-in-url');\r\n }\r\n\r\n connectedCallback(): void {\r\n this.collectProductVariants();\r\n this.prepareVariantFilters();\r\n !this.disableSelectingFirst && this.selectFirstVariantInCollection(this.productVariantsCollection);\r\n this.registerListener();\r\n }\r\n\r\n private registerListener(): void {\r\n if (this.productVariantFilters) {\r\n this.productVariantFilters.forEach((filter) => {\r\n const filterListEventHandler = this.filterList.bind(this);\r\n this.pushListener({ event: 'change', element: filter, action: filterListEventHandler });\r\n });\r\n }\r\n\r\n if (this.productVariantsCollection.length > 0) {\r\n this.productVariantsCollection.forEach((variant) => {\r\n const getSelectedVariantValueHandler = this.getSelectedVariantValue.bind(this, variant.element);\r\n this.pushListener({\r\n event: 'change',\r\n element: variant.element,\r\n action: getSelectedVariantValueHandler,\r\n });\r\n });\r\n }\r\n\r\n const handleReset = this.handleReset.bind(this);\r\n this.resetButton && this.pushListener({\r\n event: 'click',\r\n element: this.resetButton,\r\n action: handleReset,\r\n });\r\n }\r\n\r\n private getSelectedVariantValue(variant: HTMLElement): void {\r\n this.setSelectedVariant(variant.getAttribute('data-tk-product-variant') || '');\r\n }\r\n\r\n private filterList(event?: Event): void {\r\n const selectedValues = this.getSelectedFilterValues();\r\n this.filteredCollection = this.productVariantsCollection.filter((element) => {\r\n return Object.keys(selectedValues).every((key: string) => {\r\n return selectedValues[key] === element.spec[key];\r\n });\r\n }) || [];\r\n\r\n this.updateProductVariantList();\r\n this.enableFilterInURL && this.setFilterInURL();\r\n event && this.filterOptions(event.currentTarget as HTMLSelectElement);\r\n }\r\n\r\n setFilterInURL() {\r\n const url = new URL(window.location.href);\r\n const selectedValues = this.getSelectedFilterValues();\r\n Object.keys(selectedValues).forEach((key) => {\r\n url.searchParams.set(key, selectedValues[key]);\r\n });\r\n window.history.pushState(null, '', url.href);\r\n }\r\n\r\n private handleReset() {\r\n this.productVariantsCollection\r\n .filter((item) => item.id !== 'NONE')\r\n .forEach((item) => { item.element.hidden = false; });\r\n this.filteredOptions.forEach((item) => {\r\n const { element } = item;\r\n if (!element) return;\r\n const optionList = Array.from(element.options);\r\n optionList.forEach((option) => {\r\n option.hidden = false;\r\n option.selected = false;\r\n });\r\n element.disabled = item.options.size < 2;\r\n const firstOption = element.options.item(0);\r\n if (!firstOption) return;\r\n firstOption.selected = true;\r\n });\r\n\r\n if (!this.enableFilterInURL) return;\r\n const url = new URL(window.location.href);\r\n const { searchParams } = url;\r\n this.filteredOptions.forEach((option) => {\r\n const { attr } = option;\r\n searchParams.has(attr) && searchParams.delete(attr);\r\n });\r\n window.history.pushState(null, '', url.href);\r\n }\r\n\r\n private filterOptions(target: HTMLSelectElement) {\r\n const currentDisabledElements = this.filteredOptions\r\n .filter((item) => item.element?.disabled)\r\n .map((item) => item.element);\r\n const filteredList = this.filteredOptions\r\n .filter((item) => (\r\n item.element !== target && !currentDisabledElements.includes(item.element)\r\n ));\r\n const currentValues = filteredList.map((filterOption) => {\r\n const values: Set = new Set();\r\n this.filteredCollection.forEach((item) => {\r\n values.add(item.spec[filterOption.attr]);\r\n });\r\n\r\n return { attr: filterOption.attr, values };\r\n });\r\n filteredList.forEach((filterOption) => {\r\n if (!filterOption.element) return;\r\n const { options } = filterOption.element;\r\n const optionList = Array.from(options);\r\n const values = currentValues.find((item) => item.attr === filterOption.attr)?.values;\r\n if (!values) return;\r\n optionList.forEach((option) => { option.hidden = false; });\r\n optionList.filter((option) => option.value !== '').forEach((option) => {\r\n option.hidden = !values.has(option.value);\r\n });\r\n filterOption.element.disabled = optionList.filter((item) => !item.hidden && item.value !== '').length < 2;\r\n });\r\n }\r\n\r\n private updateProductVariantList(): void {\r\n this.productVariantsCollection.forEach((variant) => {\r\n variant.element.hidden = true;\r\n });\r\n\r\n this.filteredCollection.forEach((variant) => {\r\n variant.element.hidden = false;\r\n if (variant.id === this.noVariantFound) variant.element.hidden = true;\r\n });\r\n\r\n if (this.filteredCollection.length > 0) {\r\n !this.disableSelectingFirst && this.selectFirstVariantInCollection(this.filteredCollection);\r\n } else {\r\n this.showNoVariantsFoundMessage();\r\n }\r\n }\r\n\r\n private selectFirstVariantInCollection(collection: ProductVariant[]): void {\r\n const hasSelectedElement = collection.some(TKProductVariants.findFirstSelectedElement);\r\n if (hasSelectedElement) return;\r\n\r\n const input = collection.at(0)?.element.querySelector('input[type=\"radio\"]');\r\n if (!input) return;\r\n input.checked = true;\r\n this.setSelectedVariant(input.value);\r\n }\r\n\r\n private static findFirstSelectedElement(variant: ProductVariant): boolean {\r\n const input = variant.element.querySelector('input');\r\n if (!input) return false;\r\n return !input.hidden && input.checked;\r\n }\r\n\r\n private setSelectedVariant(selectedValue: string): void {\r\n this.selectedVariant = selectedValue;\r\n }\r\n\r\n private showNoVariantsFoundMessage(): void {\r\n const noVariantFound = this.productVariantsCollection.filter((variant) => variant.id === this.noVariantFound);\r\n if (noVariantFound) noVariantFound[0].element.hidden = false;\r\n\r\n this.setSelectedVariant('');\r\n }\r\n\r\n private getSelectedFilterValues(): Record {\r\n const selectedValues: Record = {};\r\n this.productVariantFilters.forEach((filter) => {\r\n if (filter.value !== '') {\r\n const selected = {\r\n attr: filter.getAttribute('data-tk-product-variant-filter') || '',\r\n value: filter.value,\r\n };\r\n selectedValues[selected.attr] = selected.value;\r\n }\r\n });\r\n\r\n return selectedValues;\r\n }\r\n\r\n private collectProductVariants(): void {\r\n const variants = this.productVariantList?.querySelectorAll(this.selectorProductVariant);\r\n\r\n variants?.forEach((element) => {\r\n const variant = {\r\n id: element.getAttribute('data-tk-product-variant') || '',\r\n element,\r\n spec: this.getVariantSpecs(element),\r\n };\r\n\r\n this.productVariantsCollection.push(variant);\r\n });\r\n }\r\n\r\n private prepareVariantFilters(): void {\r\n const filterAttribute = new Set();\r\n\r\n this.productVariantsCollection.forEach((variant) => {\r\n Object.keys(variant.spec).forEach((key) => filterAttribute.add(key));\r\n });\r\n\r\n filterAttribute.forEach((attr: string) => {\r\n // filter undefined or null values\r\n const distinctOptions = new Set(\r\n this.productVariantsCollection.map((variant) => variant.spec[attr]).filter(Boolean),\r\n );\r\n const sortedOptions = new Set([...distinctOptions].sort());\r\n const selectElement = (\r\n this.querySelector(`[data-tk-product-variant-filter=\"${attr}\"]`) || undefined\r\n );\r\n\r\n this.filteredOptions.push({\r\n element: selectElement,\r\n attr,\r\n options: sortedOptions,\r\n });\r\n });\r\n\r\n this.filteredOptions.forEach((item) => {\r\n if (!item.element) return;\r\n item.element.disabled = item.options.size < 2;\r\n\r\n const optionsHTML = [...item.options].map(\r\n (option) => {\r\n const urlParams = new URLSearchParams(window.location.search);\r\n const isSelected = urlParams.get(item.attr) === option;\r\n return ``;\r\n },\r\n ).join('');\r\n let resultHTML = '';\r\n\r\n item.options.size > 1\r\n ? resultHTML = `${optionsHTML}`\r\n : resultHTML = optionsHTML;\r\n item.element.insertAdjacentHTML('beforeend', resultHTML);\r\n });\r\n\r\n this.enableFilterInURL && this.filterList();\r\n }\r\n\r\n private getVariantSpecs(variant: Element): Record {\r\n const specs = variant.querySelectorAll(this.selectorProductVariantAttribute);\r\n const specCollection: Record = {};\r\n\r\n specs.forEach((elem: Element) => {\r\n const spec = {\r\n attr: elem.getAttribute('data-tk-product-variant-attribute') || '',\r\n value: elem.getAttribute('data-tk-product-variant-value') || '',\r\n };\r\n\r\n specCollection[spec.attr] = spec.value;\r\n });\r\n\r\n return specCollection;\r\n }\r\n}\r\n","import { fetchRequest, setAsyncUrl } from '@tk/utilities/tk.fetch';\r\nimport TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\nimport TKArticleList, {\r\n PriceData, PriceRequest, ResponseData, ResponseItem,\r\n} from '@tk/components/tk.article.list';\r\nimport isBase64 from '@tk/utilities/tk.base64';\r\n\r\nexport default class TKPrice extends TKCustomElementFactory {\r\n isAsyncTile?: boolean;\r\n articleList?: TKArticleList;\r\n asyncURL: string;\r\n source: string;\r\n service: string;\r\n catItemId: string;\r\n articleId: string;\r\n loadingType: string;\r\n sort: string;\r\n key: string;\r\n asyncTemplate: string;\r\n isServiceClassName: string;\r\n isPromotionClassName: string;\r\n hasStartedSync: boolean = false;\r\n item?: PriceData;\r\n\r\n constructor() {\r\n super();\r\n this.isAsyncTile = Boolean(this.closest('tk-product-tile[data-tk-url]'));\r\n this.articleList = this.closest('tk-article-list') || undefined;\r\n this.asyncURL = this.getAttribute('data-tk-async-url') || setAsyncUrl(true);\r\n this.source = this.getAttribute('data-tk-source') || '';\r\n this.service = this.getAttribute('data-tk-service') || '';\r\n this.catItemId = this.getAttribute('data-tk-cat-item-id') || '';\r\n this.articleId = this.getAttribute('data-tk-article-id') || '';\r\n this.loadingType = this.getAttribute('data-tk-loading-type') || '';\r\n this.sort = this.getAttribute('data-tk-sort') || '';\r\n this.key = this.getAttribute('data-tk-key') || '';\r\n this.asyncTemplate = this.getAttribute('data-tk-async-template') || '';\r\n this.isServiceClassName = this.getAttribute('data-tk-is-service-class-name') || 'tk-price--has-service';\r\n this.isPromotionClassName = this.getAttribute('data-tk-is-promotion-class-name') || 'tk-price--has-promotion';\r\n }\r\n\r\n connectedCallback(): void {\r\n this.item = {\r\n source: this.source,\r\n service: this.service,\r\n catItemId: this.catItemId,\r\n articleId: this.articleId,\r\n loadingType: this.loadingType,\r\n sort: this.sort,\r\n key: this.key,\r\n asyncTemplate: this.asyncTemplate,\r\n element: this,\r\n };\r\n\r\n if (\r\n this.articleList\r\n && customElements.get('tk-article-list')\r\n && this.loadingType !== '2'\r\n && !this.isAsyncTile\r\n ) {\r\n this.sendDataToArticleList();\r\n } else {\r\n this.loadingType === '2'\r\n ? this.registerHoverListener()\r\n : this.handlePrice();\r\n }\r\n }\r\n\r\n registerHoverListener() {\r\n const onHover = this.handlePrice.bind(this);\r\n this.pushListener({ event: 'mouseover', element: this, action: onHover });\r\n }\r\n\r\n hover() {\r\n this.hasStartedSync = true;\r\n this.handlePrice();\r\n }\r\n\r\n sendDataToArticleList() {\r\n this.item && this.articleList!.addPrice(this.item);\r\n }\r\n\r\n handlePrice() {\r\n if (!this.item) return;\r\n const items = this.asyncURL === setAsyncUrl(true)\r\n ? TKPrice.getItemsAsJSONString([this.item])\r\n : TKPrice.getItemsAsEntrypoint([this.item]);\r\n\r\n const data = {\r\n type: 'price',\r\n ...items,\r\n };\r\n\r\n fetchRequest({\r\n requestURL: this.asyncURL,\r\n resolveHandler: this.handleResponse.bind(this),\r\n payload: data,\r\n });\r\n }\r\n\r\n static getItemsAsEntrypoint(data: PriceData[]) {\r\n const articles: string[] = [];\r\n data.forEach((item) => {\r\n articles.push(item.articleId);\r\n });\r\n return { articles: articles.join(',') };\r\n }\r\n\r\n static getItemsAsJSONString(data: PriceData[]) {\r\n const items: PriceRequest[] = [];\r\n data.forEach((item) => {\r\n items.push({\r\n source: item.source,\r\n service: item.service,\r\n catitemboid: item.catItemId,\r\n catitemartinternalno: item.articleId,\r\n loadingtype: item.loadingType,\r\n sort: item.sort,\r\n key: item.key,\r\n template: item.asyncTemplate,\r\n });\r\n });\r\n\r\n return { catitems: JSON.stringify({ items }) };\r\n }\r\n\r\n handleResponse(response: TKResponse) {\r\n if (!response || !response.success) return;\r\n if (response.dataAsJson.items?.length !== 1) return;\r\n const list = response.dataAsJson.items;\r\n const responseItem = list[0];\r\n const item = {\r\n source: this.source,\r\n service: this.service,\r\n catItemId: this.catItemId,\r\n articleId: this.articleId,\r\n loadingType: this.loadingType,\r\n sort: this.sort,\r\n key: this.key,\r\n asyncTemplate: this.asyncTemplate,\r\n element: undefined,\r\n } as PriceData;\r\n this.refreshPrice(item, responseItem);\r\n }\r\n\r\n handleError(error: string) {\r\n this.hasStartedSync = false;\r\n throw new Error(error);\r\n }\r\n\r\n refreshPrice(item: PriceData, responseItem: ResponseItem) {\r\n const conditions = [\r\n {\r\n condition: responseItem.basispriceisset,\r\n selector: '[data-tk-price-basic]',\r\n className: undefined,\r\n },\r\n {\r\n condition: responseItem.servicepriceisset,\r\n selector: '[data-tk-price-service]',\r\n className: this.isServiceClassName,\r\n },\r\n {\r\n condition: responseItem.promopriceisset,\r\n selector: '[data-tk-price-promotion]',\r\n className: this.isPromotionClassName,\r\n },\r\n ];\r\n const { selector, className } = conditions.find(({ condition }) => condition) || {};\r\n if (!selector) return;\r\n const element = this.querySelector(selector);\r\n const { html } = responseItem;\r\n if (!html) return;\r\n const htmlString = isBase64(html) ? atob(html) : html;\r\n if (element) {\r\n element.innerHTML = htmlString;\r\n } else {\r\n this.innerHTML = htmlString;\r\n }\r\n className && this.classList.add(className);\r\n }\r\n}\r\n","const isBase64 = (value: string) => {\n try {\n return btoa(atob(value)) === value;\n } catch (error) {\n return false;\n }\n};\n\nexport default isBase64;\n","import { fetchRequest, setAsyncUrl } from '@tk/utilities/tk.fetch';\r\nimport TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\nimport TKArticleList, {\r\n ResponseData, ResponseItem, StockData, StockRequest,\r\n} from '@tk/components/tk.article.list';\r\nimport isBase64 from '@tk/utilities/tk.base64';\r\n\r\nexport default class TKStock extends TKCustomElementFactory {\r\n articleList?: TKArticleList;\r\n asyncURL: string;\r\n source: string;\r\n catItemId: string;\r\n articleId: string;\r\n stockType: string;\r\n stockLocation: string;\r\n dispo: string;\r\n dispoDate: string;\r\n loadingType: string;\r\n asyncTemplate: string;\r\n stockPeriodType: string;\r\n artUnitType: string;\r\n\r\n constructor() {\r\n super();\r\n this.articleList = this.closest('tk-article-list') || undefined;\r\n this.asyncURL = this.getAttribute('data-tk-async-url') || setAsyncUrl(true);\r\n this.source = this.getAttribute('data-tk-source') || '';\r\n this.catItemId = this.getAttribute('data-tk-cat-item-id') || '';\r\n this.articleId = this.getAttribute('data-tk-article-id') || '';\r\n this.stockType = this.getAttribute('data-tk-stock-type') || '';\r\n this.stockLocation = this.getAttribute('data-tk-stock-location') || '';\r\n this.dispo = this.getAttribute('data-tk-dispo') || '';\r\n this.dispoDate = this.getAttribute('data-tk-dispo-date') || '';\r\n this.loadingType = this.getAttribute('data-tk-loading-type') || '';\r\n this.asyncTemplate = this.getAttribute('data-tk-async-template') || '';\r\n this.stockPeriodType = this.getAttribute('data-tk-stock-period-type') || '1';\r\n this.artUnitType = this.getAttribute('data-tk-art-unit-type') || '3';\r\n }\r\n\r\n connectedCallback(): void {\r\n const item: StockData = {\r\n source: this.source,\r\n catItemId: this.catItemId,\r\n articleId: this.articleId,\r\n stockType: this.stockType,\r\n stockLocation: this.stockLocation,\r\n dispo: this.dispo,\r\n dispoDate: this.dispoDate,\r\n loadingType: this.loadingType,\r\n asyncTemplate: this.asyncTemplate,\r\n stockPeriodType: this.stockPeriodType,\r\n artUnitType: this.artUnitType,\r\n element: this,\r\n };\r\n if (this.articleList && customElements.get('tk-article-list')) this.sendDataToArticleList(item);\r\n else this.handleStock(item);\r\n }\r\n\r\n sendDataToArticleList(item: StockData) {\r\n this.articleList!.addStock(item);\r\n }\r\n\r\n handleStock(item: StockData) {\r\n const items = this.asyncURL === setAsyncUrl(true)\r\n ? TKStock.getItemsAsJSONString([item])\r\n : TKStock.getItemsAsEntrypoint([item]);\r\n\r\n const data = {\r\n type: 'stock',\r\n ...items,\r\n };\r\n\r\n fetchRequest({\r\n requestURL: this.asyncURL,\r\n payload: data,\r\n resolveHandler: this.handleResponse.bind(this),\r\n });\r\n }\r\n\r\n static getItemsAsEntrypoint(data: StockData[]) {\r\n const items: string[] = [];\r\n const articles: string[] = [];\r\n data.forEach((item) => {\r\n items.push([\r\n item.articleId,\r\n item.stockType,\r\n item.stockLocation,\r\n item.stockPeriodType,\r\n item.dispoDate,\r\n item.artUnitType,\r\n ].join(','));\r\n articles.push(item.articleId);\r\n });\r\n return {\r\n items: items.join(','),\r\n articles: articles.join(','),\r\n };\r\n }\r\n\r\n static getItemsAsJSONString(data: StockData[]) {\r\n const items: StockRequest[] = [];\r\n data.forEach((item) => {\r\n items.push({\r\n source: item.source,\r\n catitemboid: item.catItemId,\r\n catitemartinternalno: item.articleId,\r\n stocktype: item.stockType,\r\n stockloc: item.stockLocation,\r\n dispo: item.dispo,\r\n dispodate: item.dispoDate,\r\n loadingtype: item.loadingType,\r\n template: item.asyncTemplate,\r\n });\r\n });\r\n\r\n return { catitems: JSON.stringify({ items }) };\r\n }\r\n\r\n handleResponse(response: TKResponse) {\r\n if (!response || !response.success) return;\r\n if (response.dataAsJson.items?.length !== 1) return;\r\n const list = response.dataAsJson.items;\r\n const responseItem = list[0];\r\n const item = {\r\n source: this.source,\r\n catItemId: this.catItemId,\r\n articleId: this.articleId,\r\n stockType: this.stockType,\r\n stockLocation: this.stockLocation,\r\n dispo: this.dispo,\r\n dispoDate: this.dispoDate,\r\n loadingType: this.loadingType,\r\n asyncTemplate: this.asyncTemplate,\r\n element: undefined,\r\n } as StockData;\r\n this.refreshStock(item, responseItem);\r\n }\r\n\r\n refreshStock(item: StockData, responseItem: ResponseItem) {\r\n const { html } = responseItem;\r\n if (!html) return;\r\n const htmlString = isBase64(html) ? atob(html) : html;\r\n const tooltip = this.querySelector('tk-tooltip');\r\n tooltip && tooltip.remove();\r\n this.insertAdjacentHTML('beforeend', htmlString);\r\n }\r\n}\r\n","import { fetchRequest, setAsyncUrl } from '@tk/utilities/tk.fetch';\r\nimport TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\nimport TKDialog from '@tk/components/tk.dialog';\r\nimport { Editor, RawEditorOptions } from 'tinymce';\r\n\r\ninterface RequestData extends Record {\r\n type: string;\r\n boid?: string;\r\n bonumber?: string;\r\n arttextno?: string;\r\n per?: string;\r\n template?: string;\r\n modalid?: string;\r\n html?: string;\r\n bo?: string;\r\n attr?: string;\r\n id?: string;\r\n}\r\n\r\ninterface ResponseJsonData {\r\n title: string;\r\n description: string;\r\n url: string;\r\n}\r\n\r\ninterface TemplateEntry {\r\n title: string;\r\n description: string;\r\n content: string;\r\n}\r\n\r\nexport default class TKStaticContent extends TKCustomElementFactory {\r\n button?: HTMLButtonElement;\r\n requestData?: RequestData;\r\n dialog?: HTMLDivElement;\r\n urlTemplate: Array;\r\n templateContentPromiseArray: Array>;\r\n templatesLoaded: boolean;\r\n fileUploadIFrameURL: string;\r\n\r\n private target: string;\r\n private boId?: string;\r\n private boNumber?: string;\r\n private artTextNumber?: string;\r\n private langNumber?: string;\r\n private dataPer?: string;\r\n private asyncTemplate?: string;\r\n private bo?: string;\r\n private attr?: string;\r\n private itemId?: string;\r\n\r\n constructor() {\r\n super();\r\n this.button = this.querySelector('[data-tk-static-content-edit]') || undefined;\r\n\r\n this.target = this.getAttribute('data-tk-target') || '#tk-static-content-editor';\r\n this.boId = this.getAttribute('data-tk-bo-id') || undefined;\r\n this.boNumber = this.getAttribute('data-tk-bo-number') || undefined;\r\n this.artTextNumber = this.getAttribute('data-tk-art-text-number') || undefined;\r\n this.bo = this.getAttribute('data-tk-bo') || undefined;\r\n this.attr = this.getAttribute('data-tk-attr') || undefined;\r\n this.itemId = this.getAttribute('data-tk-id') || undefined;\r\n this.langNumber = this.getAttribute('data-tk-lang-number') || undefined;\r\n this.dataPer = this.getAttribute('data-tk-data-per') || undefined;\r\n this.asyncTemplate = this.getAttribute('data-tk-async-template') || undefined;\r\n this.urlTemplate = [];\r\n this.templateContentPromiseArray = [];\r\n this.templatesLoaded = false;\r\n this.fileUploadIFrameURL = this.getAttribute('data-tk-file-upload-iframe-url') || '';\r\n }\r\n\r\n async connectedCallback() {\r\n if (\r\n !this.button\r\n || !this.boId\r\n || !this.dataPer\r\n || !this.asyncTemplate\r\n ) return;\r\n // @ts-ignore Import module\r\n // eslint-disable-next-line import/extensions, import/no-absolute-path\r\n await import('/webportal/config/layout/themes/tk/vendor/tinymce/tinymce.min.js');\r\n this.registerClickListener();\r\n }\r\n\r\n registerClickListener() {\r\n const onClick = this.sendAjaxRequest.bind(this);\r\n this.pushListener({ event: 'click', element: this.button!, action: onClick });\r\n }\r\n\r\n registerModalListener(modal: HTMLElement) {\r\n const saveButton = modal.querySelector('[data-tk-static-content-save]') || undefined;\r\n const onSave = this.save.bind(this, saveButton);\r\n saveButton && this.pushListener({ event: 'click', element: saveButton, action: onSave });\r\n\r\n const cancelButton = modal.querySelector('[data-tk-static-content-cancel]');\r\n const onCancel = this.cancel.bind(this);\r\n cancelButton && this.pushListener({ event: 'click', element: cancelButton, action: onCancel });\r\n }\r\n\r\n sendAjaxRequest() {\r\n this.requestData = {\r\n type: 'staticcontent',\r\n boid: this.boId,\r\n bonumber: this.boNumber,\r\n arttextno: this.artTextNumber,\r\n per: this.dataPer!,\r\n template: this.asyncTemplate!,\r\n modalid: this.target,\r\n bo: this.bo,\r\n id: this.itemId,\r\n attr: this.attr,\r\n };\r\n const url = setAsyncUrl(true);\r\n fetchRequest({\r\n requestURL: url,\r\n resolveHandler: this.showContentInEditMode.bind(this),\r\n payload: this.requestData,\r\n });\r\n }\r\n\r\n save(button?: HTMLButtonElement) {\r\n if (!button) return;\r\n const htmlEncoded = TKStaticContent.htmlEncode(TKStaticContent.getContentFromEditMode());\r\n this.requestData = {\r\n type: 'staticcontent',\r\n boid: this.boId,\r\n bonumber: this.boNumber,\r\n arttextno: this.artTextNumber,\r\n bo: this.bo,\r\n id: this.itemId,\r\n attr: this.attr,\r\n html: htmlEncoded,\r\n };\r\n\r\n const url = setAsyncUrl();\r\n fetchRequest({\r\n requestURL: url,\r\n resolveHandler: this.refreshContent.bind(this),\r\n payload: this.requestData,\r\n });\r\n this.cancel();\r\n }\r\n\r\n cancel() {\r\n TKDialog.close(this.dialog!);\r\n }\r\n\r\n showContentInEditMode(response: TKResponse) {\r\n if (!response.success || !this.requestData) return;\r\n\r\n this.dialog = TKDialog.renderDialog({\r\n content: response.dataAsHtml,\r\n className: 'tk-dialog tk-dialog--fullscreen',\r\n tag: 'div',\r\n });\r\n TKDialog.open(this.dialog);\r\n this.pushListener({ event: 'close', element: this.dialog, action: () => this.dialog?.remove() });\r\n\r\n this.initEditor();\r\n\r\n const modal = document.querySelector(this.target);\r\n if (!modal) return;\r\n this.registerModalListener(modal);\r\n }\r\n\r\n static getContentFromEditMode() {\r\n return window.tinymce.activeEditor?.getContent({ format: 'raw' }) || '';\r\n }\r\n\r\n refreshContent(response: TKResponse) {\r\n if (!response.success || !this.requestData) return;\r\n let contentContainer = document.getElementById(\r\n `staticcontent-${this.requestData.boid}-${this.requestData.arttextno}`,\r\n );\r\n if (!contentContainer) {\r\n this.requestData.id !== undefined && (\r\n contentContainer = document.getElementById(this.requestData.id)\r\n );\r\n } else {\r\n contentContainer.innerHTML = response.dataAsHtml;\r\n }\r\n }\r\n\r\n initEditor() {\r\n if (!this.requestData) return;\r\n const selector = `${this.requestData.modalid} [data-tk-static-content-textarea]`;\r\n // Editor must be removed before initialisation\r\n window.tinymce.remove(selector);\r\n const options = {\r\n selector,\r\n language: TKStaticContent.getLanguage(),\r\n plugins: [\r\n 'advlist', 'autolink', 'lists', 'link', 'image',\r\n 'charmap', 'preview', 'anchor', 'pagebreak', 'searchreplace',\r\n 'wordcount', 'visualblocks', 'visualchars', 'code', 'fullscreen', 'insertdatetime',\r\n 'media', 'nonbreaking', 'save', 'table', 'directionality',\r\n 'emoticons', 'template', 'quickbars',\r\n ],\r\n insertdatetime_formats: ['%d.%m.%Y', '%H:%M'],\r\n contextmenu: 'link image table',\r\n tools: 'inserttable',\r\n toolbar:\r\n 'undo redo | styleselect | bold italic | forecolor backcolor | alignleft aligncenter'\r\n + 'alignright alignjustify | bullist numlist outdent indent | image media link | '\r\n + 'preview print | filemanager',\r\n width: '100%',\r\n base_url: '/webportal/config/layout/themes/tk/vendor/tinymce/',\r\n language_url: `/webportal/config/layout/themes/tk/translations/tinymce/${TKStaticContent.getLanguage()}.js`,\r\n promotion: false,\r\n content_css: [\r\n 'default',\r\n `/webportal/config/layout/themes/project/generated/css/staticcontent.css?${new Date().getTime()}`,\r\n ],\r\n templates: this.urlTemplate,\r\n extended_valid_elements: 'tk-tabs-accordion,tk-tabs-accordion[class],i[data-tk-accordion-icon]',\r\n custom_elements: 'tk-tabs-accordion,tk-tabs-accordion',\r\n setup: (editor) => {\r\n editor.on('SaveContent', (event) => {\r\n event.content = TKStaticContent.htmlEncode(TKStaticContent.htmlDecode(event.content));\r\n });\r\n\r\n const openmanager = () => {\r\n editor.windowManager.openUrl({\r\n title: 'File Manager',\r\n url: TKStaticContent.getFileManagerURL(editor),\r\n width: 900,\r\n height: 440,\r\n });\r\n };\r\n\r\n editor.ui.registry.addButton('filemanager', {\r\n icon: 'browse',\r\n tooltip: 'Insert file',\r\n onAction: openmanager,\r\n });\r\n\r\n editor.ui.registry.addMenuItem('filemanager', {\r\n icon: 'browse',\r\n text: 'Insert file',\r\n onAction: openmanager,\r\n });\r\n\r\n const templateURLElement = document.querySelector('[data-tk-staticcontent-templates-url]');\r\n const templateURL = templateURLElement && templateURLElement.getAttribute('data-op-url');\r\n\r\n if (templateURL) {\r\n this.getTemplates(templateURL);\r\n }\r\n },\r\n } as RawEditorOptions;\r\n\r\n if (this.fileUploadIFrameURL) options.file_picker_callback = this.handleFilePicker.bind(this);\r\n\r\n window.tinymce.init(options);\r\n }\r\n\r\n handleFilePicker(\r\n callback: (value: string, meta?: Record) => void,\r\n ) {\r\n window.tinymce.activeEditor?.windowManager.openUrl({\r\n title: 'Fileupload Area',\r\n url: this.fileUploadIFrameURL,\r\n width: 800,\r\n height: 600,\r\n });\r\n\r\n window.addEventListener('message', (event) => {\r\n const { data } = event;\r\n if (window.location.origin !== event.origin) return;\r\n callback(data.content);\r\n });\r\n }\r\n\r\n static getFileManagerURL(editor: Editor) {\r\n return `/webportal/tinymcefilemanager.aspx?editor=${editor.id}&lang=${TKStaticContent.getLanguage()}`;\r\n }\r\n\r\n static htmlEncode(content: string) {\r\n return content.toString().replace(/&/g, '&').replace(/\"/g, '"').replace(//g, '>');\r\n }\r\n\r\n static htmlDecode(content: string) {\r\n return content.toString().replace(/>/g, '>').replace(/</g, '<').replace(/"/g, '\"')\r\n .replace(/&/g, '&');\r\n }\r\n\r\n static getLanguage() {\r\n if (window.location.href.indexOf('/en/') !== -1) {\r\n return 'en_GB';\r\n } if (window.location.href.indexOf('/fr/') !== -1) {\r\n return 'fr_FR';\r\n } if (window.location.href.indexOf('/it/') !== -1) {\r\n return 'it';\r\n }\r\n return 'de';\r\n }\r\n\r\n async getTemplates(templateURL: string) {\r\n if (this.templatesLoaded) return;\r\n // get url content\r\n return new Promise((resolve) => {\r\n fetchRequest({\r\n requestURL: templateURL,\r\n resolveHandler: (response: TKResponse) => {\r\n this.getTemplateContent(response, resolve);\r\n },\r\n });\r\n });\r\n }\r\n\r\n getTemplateContent(response: TKResponse, resolveFunction: (data: void) => void) {\r\n (response.dataAsJson as Array).forEach((element) => {\r\n this.templateContentPromiseArray = [];\r\n this.templateContentPromiseArray.push(\r\n new Promise((resolve) => {\r\n fetchRequest({\r\n requestURL: element.url,\r\n resolveHandler: (response: TKResponse) => {\r\n this.saveTemplateContent(response, element, resolveFunction, resolve);\r\n },\r\n });\r\n }),\r\n );\r\n });\r\n }\r\n\r\n saveTemplateContent(\r\n response: TKResponse,\r\n element: ResponseJsonData,\r\n resolvedAllFunction: (data: void) => void,\r\n resolveArrayElementFunction: (data: void) => void,\r\n ) {\r\n const templateContent = response.dataAsHtml;\r\n\r\n const newTemplateEntry = {\r\n title: element.title,\r\n description: element.description,\r\n content: templateContent,\r\n };\r\n\r\n this.urlTemplate.push(newTemplateEntry);\r\n resolveArrayElementFunction();\r\n\r\n Promise.allSettled(this.templateContentPromiseArray).then(() => {\r\n resolvedAllFunction();\r\n this.templatesLoaded = true;\r\n });\r\n }\r\n}\r\n","import { fetchRequest } from '@tk/utilities/tk.fetch';\r\nimport TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\nimport render from '@tk/utilities/tk.render';\r\n\r\n/**\r\n * data-tk-dialog-jump-forward\r\n * data-tk-dialog-jump-backward\r\n * data-tk-dialog-jump-to\r\n * data-tk-dialog-close\r\n * data-tk-dialog-close-and-reset\r\n * data-tk-close-on-backdrop-click\r\n */\r\n\r\nenum DialogActions {\r\n JUMP_FORWARD = 'jump_forward',\r\n JUMP_BACKWARD = 'jump_backward',\r\n JUMP_TO = 'jump_to',\r\n RESET_FORM = 'reset_form',\r\n}\r\n\r\ninterface DialogItem {\r\n url: string;\r\n dialog: HTMLDialogElement;\r\n}\r\n\r\ninterface RenderedDialog {\r\n className?: string;\r\n closeClassName?: string;\r\n innerClassName?: string;\r\n content?: string;\r\n isConfirm?: boolean;\r\n confirmURL?: string;\r\n confirmTitle?: string;\r\n confirmDescription?: string;\r\n confirmCancelIcon?: string;\r\n confirmCancelLabel?: string;\r\n confirmSubmitIcon?: string;\r\n confirmSubmitLabel?: string;\r\n}\r\n\r\nexport default class TKDialog extends TKCustomElementFactory {\r\n protected dialogs: DialogItem[] = [];\r\n protected currentDialog: number = 0;\r\n\r\n url?: string;\r\n button?: HTMLButtonElement;\r\n shouldOpen: boolean = false;\r\n closeOnBackdropClick: boolean = true;\r\n dialogClassName: string;\r\n dialogInnerClassName: string;\r\n dialogCloseClassName: string;\r\n shouldMaxWidth: boolean;\r\n maxWidthClassName: string;\r\n formDataString?: string;\r\n isPopup: boolean;\r\n isConfirm: boolean;\r\n confirmTitle?: string;\r\n confirmDescription?: string;\r\n confirmCancelIcon?: string;\r\n confirmCancelLabel?: string;\r\n confirmSubmitIcon?: string;\r\n confirmSubmitLabel?: string;\r\n forceReloadContent:boolean;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.url = this.getAttribute('data-tk-url') || undefined;\r\n this.button = this.querySelector('button') || undefined;\r\n this.shouldOpen = this.hasAttribute('data-tk-open');\r\n this.closeOnBackdropClick = this.hasAttribute('data-tk-close-on-backdrop-click')\r\n ? JSON.parse(this.getAttribute('data-tk-close-on-backdrop-click')!) : true;\r\n this.shouldMaxWidth = this.hasAttribute('data-tk-should-max-width');\r\n this.dialogClassName = this.getAttribute('data-tk-dialog-class-name') || 'tk-dialog';\r\n this.dialogInnerClassName = this.getAttribute('data-tk-dialog-inner-class-name') || 'tk-dialog__inner';\r\n this.dialogCloseClassName = this.getAttribute('data-tk-dialog-close-class-name')\r\n || 'tk-button tk-button--tertiary tk-button--only-icon tk-dialog__close';\r\n this.maxWidthClassName = this.getAttribute('data-tk-max-width-class-name') || 'tk-dialog--max-width';\r\n this.formDataString = this.getAttribute('data-tk-form-data') || undefined;\r\n this.isPopup = this.hasAttribute('data-tk-is-popup');\r\n this.isConfirm = this.hasAttribute('data-tk-is-confirm');\r\n this.confirmTitle = this.getAttribute('data-tk-confirm-title') || undefined;\r\n this.confirmDescription = this.getAttribute('data-tk-confirm-description') || undefined;\r\n this.confirmCancelIcon = this.getAttribute('data-tk-confirm-cancel-icon') || 'cross';\r\n this.confirmCancelLabel = this.getAttribute('data-tk-confirm-cancel-label') || undefined;\r\n this.confirmSubmitIcon = this.getAttribute('data-tk-confirm-submit-icon') || 'check';\r\n this.confirmSubmitLabel = this.getAttribute('data-tk-confirm-submit-label') || undefined;\r\n this.forceReloadContent = this.hasAttribute('data-tk-force-reload-content');\r\n }\r\n\r\n connectedCallback(): void {\r\n if (!this.url) throw new Error('Dialog: URL is missing!');\r\n this.registerClickListener();\r\n this.checkAutoOpen();\r\n }\r\n\r\n registerClickListener(): void {\r\n if (!this.button) return;\r\n const onClick = this.openDialog.bind(this, this.url!);\r\n this.pushListener({ event: 'click', element: this.button, action: onClick });\r\n }\r\n\r\n registerFormListener(form: HTMLFormElement): void {\r\n const onSubmit = this.handleForm.bind(this, form);\r\n this.pushListener({ event: 'submit', element: form, action: onSubmit });\r\n }\r\n\r\n registerCloseListener(): void {\r\n const onClick = this.closeDialog.bind(this);\r\n this.pushListener({ event: 'click', element: window, action: onClick });\r\n }\r\n\r\n createDialog(url: string): HTMLDialogElement {\r\n const dialog = TKDialog.renderDialog({\r\n className: `${this.dialogClassName} ${this.shouldMaxWidth ? this.maxWidthClassName : ''}`,\r\n closeClassName: this.dialogCloseClassName,\r\n innerClassName: this.dialogInnerClassName,\r\n tag: 'dialog',\r\n isConfirm: this.isConfirm,\r\n confirmURL: url,\r\n confirmTitle: this.confirmTitle,\r\n confirmDescription: this.confirmDescription,\r\n confirmCancelIcon: this.confirmCancelIcon,\r\n confirmCancelLabel: this.confirmCancelLabel,\r\n confirmSubmitIcon: this.confirmSubmitIcon,\r\n confirmSubmitLabel: this.confirmSubmitLabel,\r\n });\r\n const onClosed = this.closedDialog.bind(this);\r\n this.pushListener({ event: 'close', element: dialog, action: onClosed });\r\n this.currentDialog = this.dialogs.push({ url, dialog }) - 1;\r\n return dialog;\r\n }\r\n\r\n getContent(url: string): void {\r\n if (this.isConfirm) {\r\n this.closeCurrentDialog();\r\n const dialog = this.createDialog(url);\r\n this.isPopup ? dialog.show() : dialog.showModal();\r\n this.hookAfterShowModal(dialog);\r\n } else {\r\n fetchRequest({\r\n requestURL: url,\r\n resolveHandler: this.handleResponseSuccess.bind(this, url),\r\n });\r\n }\r\n }\r\n\r\n getContentWithData(url: string, payload: Record): void {\r\n fetchRequest({\r\n requestURL: url,\r\n resolveHandler: this.handleResponseSuccess.bind(this, url),\r\n payload,\r\n });\r\n }\r\n\r\n handleResponseSuccess(url: string, response: TKResponse): void {\r\n if (!response || !response.success) return;\r\n this.closeCurrentDialog();\r\n const dialog = this.createDialog(url);\r\n const content = dialog.querySelector('[data-tk-dialog-content]');\r\n if (!content) return;\r\n content.innerHTML = response.dataAsHtml;\r\n this.isPopup ? dialog.show() : dialog.showModal();\r\n this.hookAfterShowModal(dialog);\r\n const form = content.querySelector('form');\r\n form && this.registerFormListener(form);\r\n }\r\n\r\n openDialog(url: string) {\r\n this.handleUrlAndDialogs(url);\r\n // This method would be used to execute code in a non-blocking way to prevent potential delays.\r\n setTimeout(() => {\r\n this.registerCloseListener();\r\n });\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n closeDialog(event: any): void {\r\n const dialogItem = this.dialogs.at(this.currentDialog);\r\n // Used to check if the event isn't triggered by the enter key\r\n const isRealClickEvent = event.pointerId !== -1;\r\n\r\n if (!dialogItem || !isRealClickEvent) return;\r\n const { dialog } = dialogItem;\r\n if (this.closeOnBackdropClick) {\r\n TKDialog.closeDialogIfOutside(dialog, event);\r\n }\r\n }\r\n\r\n hookAfterShowModal(dialog: HTMLDialogElement): void {\r\n TKDialog.attachButtonClickHandler(\r\n dialog,\r\n '[data-tk-dialog-close]',\r\n () => dialog.close(),\r\n );\r\n TKDialog.attachButtonClickHandler(\r\n dialog,\r\n '[data-tk-dialog-close-and-reset]',\r\n (button) => this.handleActions(DialogActions.RESET_FORM, button),\r\n );\r\n TKDialog.attachButtonClickHandler(\r\n dialog,\r\n '[data-tk-dialog-jump-forward]',\r\n (button) => this.handleActions(DialogActions.JUMP_FORWARD, button),\r\n );\r\n TKDialog.attachButtonClickHandler(\r\n dialog,\r\n '[data-tk-dialog-jump-backward]',\r\n (button) => this.handleActions(DialogActions.JUMP_BACKWARD, button),\r\n );\r\n TKDialog.attachButtonClickHandler(\r\n dialog,\r\n '[data-tk-dialog-jump-to]',\r\n (button) => this.handleActions(DialogActions.JUMP_TO, button),\r\n );\r\n }\r\n\r\n static attachButtonClickHandler(\r\n dialog: T,\r\n selector: string,\r\n callback: (button: HTMLButtonElement) => void,\r\n ): void {\r\n const buttons = dialog.querySelectorAll(selector);\r\n buttons.forEach((button) => {\r\n button.addEventListener('click', () => callback(button));\r\n });\r\n }\r\n\r\n handleActions(action: DialogActions, button: HTMLButtonElement) {\r\n const handler: Record void> = {\r\n jump_forward: () => this.forward(button),\r\n jump_backward: () => this.backward(),\r\n jump_to: () => this.jumpTo(button),\r\n reset_form: () => this.resetForm(button),\r\n };\r\n handler[action]();\r\n }\r\n\r\n closeCurrentDialog() {\r\n const dialogItem = this.dialogs.at(this.currentDialog);\r\n if (!dialogItem) return;\r\n dialogItem.dialog.close();\r\n }\r\n\r\n handleUrlAndDialogs(url: string) {\r\n const existsURL = this.dialogs.some((dialogItem) => dialogItem.url === url);\r\n if (existsURL) {\r\n const nextDialog = this.getDialogByURL(url);\r\n if (!nextDialog) return;\r\n const waitForContent = this.forceReloadContent;\r\n if (this.forceReloadContent) {\r\n this.renewDialogContent(nextDialog, url);\r\n }\r\n if (waitForContent) return;\r\n nextDialog.showModal();\r\n } else {\r\n try {\r\n const payload = JSON.parse(this.formDataString || '{}');\r\n Object.keys(payload).length > 0 ? this.getContentWithData(url, payload) : this.getContent(url);\r\n } catch (error) {\r\n throw new Error(`Dialog: ${error}`);\r\n }\r\n }\r\n }\r\n\r\n forward(button: HTMLButtonElement) {\r\n // Check if already exists\r\n const url = button.getAttribute('data-tk-url');\r\n if (!url) throw new Error('Dialog: URL is missing!');\r\n this.closeCurrentDialog();\r\n this.handleUrlAndDialogs(url);\r\n this.currentDialog += 1;\r\n }\r\n\r\n backward() {\r\n const nextDialogItem = this.dialogs.at(this.currentDialog - 1);\r\n if (!nextDialogItem) return;\r\n this.closeCurrentDialog();\r\n nextDialogItem.dialog.showModal();\r\n this.currentDialog -= 1;\r\n }\r\n\r\n jumpTo(button: HTMLButtonElement) {\r\n const index = Number(button.getAttribute('data-tk-dialog-jump-to'));\r\n const nextDialogItem = this.dialogs.at(index);\r\n if (!nextDialogItem) return;\r\n this.closeCurrentDialog();\r\n nextDialogItem.dialog.showModal();\r\n this.currentDialog = index;\r\n }\r\n\r\n resetForm(button: HTMLButtonElement) {\r\n button.form?.reset();\r\n this.closeCurrentDialog();\r\n }\r\n\r\n handleForm(form: HTMLFormElement, event: SubmitEvent): void {\r\n const shouldSwitchToNext = form.hasAttribute('data-tk-switch-to-next');\r\n if (!shouldSwitchToNext) return;\r\n event.preventDefault();\r\n const formData = new FormData(form);\r\n const url = form.action;\r\n\r\n fetchRequest({\r\n requestURL: url,\r\n resolveHandler: this.handleResponseSuccess.bind(this, url),\r\n payload: formData,\r\n });\r\n }\r\n\r\n getDialogByURL(url: string): HTMLDialogElement | undefined {\r\n const dialogItem = this.dialogs.find((item) => item.url === url);\r\n return dialogItem?.dialog;\r\n }\r\n\r\n closedDialog(): void {\r\n const allDialogClosed = this.dialogs.every((item) => !item.dialog.open);\r\n if (!allDialogClosed) return;\r\n this.currentDialog = 0;\r\n this.removeListener(window);\r\n }\r\n\r\n static renderDialog(\r\n options: RenderedDialog & { tag: keyof HTMLElementTagNameMap },\r\n ): T {\r\n const {\r\n tag,\r\n className = 'tk-dialog',\r\n closeClassName = 'tk-button tk-button--tertiary tk-button--only-icon tk-dialog__close',\r\n innerClassName = 'tk-dialog__inner',\r\n content,\r\n isConfirm = false,\r\n confirmURL,\r\n confirmTitle,\r\n confirmDescription,\r\n confirmCancelIcon,\r\n confirmCancelLabel,\r\n confirmSubmitIcon,\r\n confirmSubmitLabel,\r\n } = options;\r\n\r\n const dialog = render(`\r\n ${isConfirm ? `\r\n <${tag} class=\"${className}\">\r\n \r\n
\r\n
\r\n

${confirmTitle}

\r\n

${confirmDescription}

\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n ` : `\r\n <${tag} class=\"${className}\">\r\n \r\n
\r\n ${content}\r\n
\r\n \r\n `}\r\n `);\r\n document.body.insertAdjacentElement('beforeend', dialog);\r\n TKDialog.attachButtonClickHandler(\r\n dialog,\r\n '[data-tk-dialog-close]',\r\n () => TKDialog.close(dialog),\r\n );\r\n return dialog;\r\n }\r\n\r\n static open(element: T, isPopup = false) {\r\n if (element instanceof HTMLDialogElement) {\r\n isPopup ? element.show() : element.showModal();\r\n } else {\r\n element.classList.add('tk-dialog--open');\r\n }\r\n }\r\n\r\n static close(element: T) {\r\n if (element instanceof HTMLDialogElement) {\r\n element.close();\r\n } else {\r\n element.classList.remove('tk-dialog--open');\r\n element.dispatchEvent(new Event('close'));\r\n }\r\n }\r\n\r\n static closeDialogIfOutside(element: HTMLDialogElement, event: MouseEvent) {\r\n /**\r\n * Checking the coordinates of the client for the value 0 and the\r\n * HTMLSelectElement or HTMLOptionElement element ensures that the\r\n * dialogue does not close in Mozilla. This is a bug in Firefox\r\n * that has not yet been fixed.\r\n */\r\n if (\r\n event.clientX === 0\r\n && event.clientY === 0\r\n && (event.target instanceof HTMLSelectElement || event.target instanceof HTMLOptionElement)\r\n ) return;\r\n const dialogDimensions = element.getBoundingClientRect();\r\n if (\r\n event.clientX < dialogDimensions.left\r\n || event.clientX > dialogDimensions.right\r\n || event.clientY < dialogDimensions.top\r\n || event.clientY > dialogDimensions.bottom\r\n ) {\r\n element.close();\r\n }\r\n }\r\n\r\n checkAutoOpen() : void {\r\n if (this.shouldOpen) {\r\n this.openDialog(this.url!);\r\n }\r\n }\r\n\r\n renewDialogContent(dialog: HTMLDialogElement, url: string) {\r\n fetchRequest({\r\n requestURL: url,\r\n resolveHandler: this.getRenewDialogContent.bind(this, dialog),\r\n });\r\n }\r\n\r\n getRenewDialogContent(openDialog: HTMLDialogElement, response: TKResponse) {\r\n const dialogInner = openDialog.querySelector('[data-tk-dialog-content]');\r\n dialogInner!.innerHTML = response.dataAsHtml;\r\n openDialog.showModal();\r\n this.hookAfterShowModal(openDialog);\r\n }\r\n}\r\n","module.exports = (require(\"./helpers/browser/js-loader\")(require('./helpers/bundle-url').getBundleURL('kSCYj') + \"../account/tinymce.min.d04a45ea.js\").catch(err => {delete module.bundle.cache[module.id]; throw err;})).then(() => module.bundle.root('j1cRl'));","\"use strict\";\n\nvar cacheLoader = require('../cacheLoader');\nmodule.exports = cacheLoader(function (bundle) {\n return new Promise(function (resolve, reject) {\n // Don't insert the same script twice (e.g. if it was already in the HTML)\n var existingScripts = document.getElementsByTagName('script');\n if ([].concat(existingScripts).some(function isCurrentBundle(script) {\n return script.src === bundle;\n })) {\n resolve();\n return;\n }\n var preloadLink = document.createElement('link');\n preloadLink.href = bundle;\n preloadLink.rel = 'preload';\n preloadLink.as = 'script';\n document.head.appendChild(preloadLink);\n var script = document.createElement('script');\n script.async = true;\n script.type = 'text/javascript';\n script.src = bundle;\n script.onerror = function (e) {\n var error = new TypeError(\"Failed to fetch dynamically imported module: \".concat(bundle, \". Error: \").concat(e.message));\n script.onerror = script.onload = null;\n script.remove();\n reject(error);\n };\n script.onload = function () {\n script.onerror = script.onload = null;\n resolve();\n };\n document.getElementsByTagName('head')[0].appendChild(script);\n });\n});","\"use strict\";\n\nvar cachedBundles = {};\nvar cachedPreloads = {};\nvar cachedPrefetches = {};\nfunction getCache(type) {\n switch (type) {\n case 'preload':\n return cachedPreloads;\n case 'prefetch':\n return cachedPrefetches;\n default:\n return cachedBundles;\n }\n}\nmodule.exports = function (loader, type) {\n return function (bundle) {\n var cache = getCache(type);\n if (cache[bundle]) {\n return cache[bundle];\n }\n return cache[bundle] = loader.apply(null, arguments).catch(function (e) {\n delete cache[bundle];\n throw e;\n });\n };\n};","\"use strict\";\n\nvar bundleURL = {};\nfunction getBundleURLCached(id) {\n var value = bundleURL[id];\n if (!value) {\n value = getBundleURL();\n bundleURL[id] = value;\n }\n return value;\n}\nfunction getBundleURL() {\n try {\n throw new Error();\n } catch (err) {\n var matches = ('' + err.stack).match(/(https?|file|ftp|(chrome|moz|safari-web)-extension):\\/\\/[^)\\n]+/g);\n if (matches) {\n // The first two stack frames will be this function and getBundleURLCached.\n // Use the 3rd one, which will be a runtime in the original bundle.\n return getBaseURL(matches[2]);\n }\n }\n return '/';\n}\nfunction getBaseURL(url) {\n return ('' + url).replace(/^((?:https?|file|ftp|(chrome|moz|safari-web)-extension):\\/\\/.+)\\/[^/]+$/, '$1') + '/';\n}\n\n// TODO: Replace uses with `new URL(url).origin` when ie11 is no longer supported.\nfunction getOrigin(url) {\n var matches = ('' + url).match(/(https?|file|ftp|(chrome|moz|safari-web)-extension):\\/\\/[^/]+/);\n if (!matches) {\n throw new Error('Origin not found');\n }\n return matches[0];\n}\nexports.getBundleURL = getBundleURLCached;\nexports.getBaseURL = getBaseURL;\nexports.getOrigin = getOrigin;","import { fetchRequest, setAsyncUrl } from '@tk/utilities/tk.fetch';\r\nimport TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\nimport TKPrice from '@tk/components/tk.price';\r\nimport TKStock from '@tk/components/tk.stock';\r\n\r\nenum ArticleDataType {\r\n PRICE = 'price',\r\n STOCK = 'stock',\r\n}\r\n\r\nexport interface PriceData {\r\n source: string;\r\n service: string;\r\n catItemId: string;\r\n articleId: string;\r\n loadingType: string;\r\n sort: string;\r\n key: string;\r\n asyncTemplate: string;\r\n element?: TKPrice;\r\n}\r\n\r\nexport interface StockData {\r\n source: string;\r\n catItemId: string;\r\n articleId: string;\r\n stockType: string;\r\n stockLocation: string;\r\n dispo: string;\r\n dispoDate: string;\r\n loadingType: string;\r\n asyncTemplate: string;\r\n stockPeriodType: string;\r\n artUnitType: string;\r\n element?: TKStock;\r\n}\r\n\r\nexport interface PriceRequest {\r\n source: string;\r\n service: string;\r\n catitemboid: string;\r\n catitemartinternalno: string;\r\n loadingtype: string;\r\n sort: string;\r\n key: string;\r\n template: string;\r\n}\r\n\r\nexport interface StockRequest {\r\n source: string;\r\n catitemboid: string;\r\n catitemartinternalno: string;\r\n stocktype: string;\r\n stockloc: string;\r\n dispo: string;\r\n dispodate: string;\r\n loadingtype: string;\r\n template: string;\r\n}\r\n\r\nexport type LoadingType = '1' | '2' | '3';\r\n\r\nexport interface ResponseItem {\r\n catitemboid: string;\r\n catitemartinternalno: string;\r\n sort: string;\r\n template: string;\r\n basispriceisset: boolean;\r\n promopriceisset: boolean;\r\n servicepriceisset: boolean;\r\n loadingtype: LoadingType;\r\n html?: string;\r\n}\r\n\r\nexport interface ResponseData {\r\n items?: ResponseItem[];\r\n}\r\n\r\nexport default class TKArticleList extends TKCustomElementFactory {\r\n prices: PriceData[] = [];\r\n stocks: StockData[] = [];\r\n isCustomPriceURL: boolean = false;\r\n isCustomStockURL: boolean = false;\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n addPrice(item: PriceData) {\r\n this.prices.push(item);\r\n this.handlePrice();\r\n }\r\n\r\n addStock(item: StockData) {\r\n this.stocks.push(item);\r\n this.handleStock();\r\n }\r\n\r\n handlePrice() {\r\n const elements = this.querySelectorAll('tk-price');\r\n if (elements.length !== this.prices.length) return;\r\n const url = elements.item(0).getAttribute('data-tk-async-url') || setAsyncUrl(true);\r\n this.isCustomPriceURL = url !== setAsyncUrl(true);\r\n fetchRequest({\r\n requestURL: url,\r\n resolveHandler: this.refreshPriceData.bind(this),\r\n payload: this.getPreparedData(ArticleDataType.PRICE),\r\n });\r\n }\r\n\r\n handleStock() {\r\n const elements = this.querySelectorAll('tk-stock');\r\n if (elements.length !== this.stocks.length) return;\r\n const url = elements.item(0).getAttribute('data-tk-async-url') || setAsyncUrl(true);\r\n this.isCustomStockURL = url !== setAsyncUrl(true);\r\n fetchRequest({\r\n requestURL: url,\r\n resolveHandler: this.refreshStockData.bind(this),\r\n payload: this.getPreparedData(ArticleDataType.STOCK),\r\n });\r\n }\r\n\r\n getPreparedData(type: ArticleDataType) {\r\n return {\r\n type,\r\n ...this.getListByType(type),\r\n };\r\n }\r\n\r\n getListByType(type: ArticleDataType) {\r\n const handler = {\r\n price: () => this.getPriceData(),\r\n stock: () => this.getStockData(),\r\n };\r\n return handler[type]();\r\n }\r\n\r\n getPriceData() {\r\n const items = this.isCustomStockURL\r\n ? TKPrice.getItemsAsEntrypoint(this.prices)\r\n : TKPrice.getItemsAsJSONString(this.prices);\r\n return items;\r\n }\r\n\r\n getStockData() {\r\n const items = this.isCustomStockURL\r\n ? TKStock.getItemsAsEntrypoint(this.stocks)\r\n : TKStock.getItemsAsJSONString(this.stocks);\r\n return items;\r\n }\r\n\r\n refreshPriceData(response: TKResponse) {\r\n if (!response || !response.success) return;\r\n if (response.dataAsJson.items?.length !== this.prices.length) return;\r\n const list = response.dataAsJson.items;\r\n this.prices.forEach((item, index) => {\r\n const responseItem = list[index];\r\n const { element } = item;\r\n element && element.refreshPrice(item, responseItem);\r\n });\r\n }\r\n\r\n refreshStockData(response: TKResponse) {\r\n if (!response || !response.success) return;\r\n if (response.dataAsJson.items?.length !== this.stocks.length) return;\r\n const list = response.dataAsJson.items;\r\n this.stocks.forEach((item, index) => {\r\n const responseItem = list[index];\r\n const { element } = item;\r\n element && element.refreshStock(item, responseItem);\r\n });\r\n }\r\n}\r\n","import TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\nimport { fetchRequest, setAsyncUrl } from '@tk/utilities/tk.fetch';\r\nimport TKDialog from '@tk/components/tk.dialog';\r\nimport TKFormValidator from '@tk/controls/tk.form.validator';\r\nimport { NotificationType, sendNotification, sendNotificationByItem } from '@tk/utilities/tk.notification';\r\nimport TKFavoriteInfo from './tk.favorite.info';\r\n\r\nenum Actions {\r\n ADD = 'add',\r\n ADDED = 'added',\r\n DELETED = 'deleted',\r\n MOVED = 'moved',\r\n MOVE = 'move',\r\n}\r\n\r\ninterface FavoriteData {\r\n action: Actions;\r\n additionalAttributes: string;\r\n artBoId: string;\r\n artNo: string;\r\n favoriteCount: number;\r\n isGuest: boolean;\r\n isMulti: boolean;\r\n maxType: string;\r\n message: string;\r\n onList: string;\r\n salDocBoIdSource: string;\r\n salDocBoIdTarget: string;\r\n salDocName: string;\r\n success: boolean;\r\n titleAdd: string;\r\n titleDelete: string;\r\n tooHigh: boolean;\r\n}\r\n\r\nexport default class TKFavoriteButton extends TKCustomElementFactory {\r\n button?: HTMLButtonElement;\r\n artBoId: string;\r\n type: string;\r\n artNumber: string;\r\n asyncCountId: string;\r\n multiFavoritesAction: string;\r\n onList: string;\r\n saldocBoIdTarget: string;\r\n saldocBoIdSource: string;\r\n maxList: number;\r\n maxPosition: number;\r\n activeClassName: string;\r\n listName: string;\r\n selectedOption: number;\r\n // eslint-disable-next-line no-use-before-define\r\n addButton?: TKFavoriteButton;\r\n isGuestUser: boolean;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.button = this.querySelector('button') || undefined;\r\n this.artBoId = this.getAttribute('data-tk-art-bo-id') || '';\r\n this.type = this.getAttribute('data-tk-type') || '';\r\n this.artNumber = this.getAttribute('data-tk-art-number') || '';\r\n this.asyncCountId = this.getAttribute('data-tk-async-count-id') || '';\r\n this.multiFavoritesAction = this.getAttribute('data-tk-multi-favorites-action') || '';\r\n this.onList = this.getAttribute('data-tk-on-list') || '';\r\n this.saldocBoIdTarget = this.getAttribute('data-tk-saldoc-bo-id-target') || '';\r\n this.saldocBoIdSource = this.getAttribute('data-tk-saldoc-bo-id-source') || '';\r\n this.maxList = Number(this.getAttribute('data-tk-max-list'));\r\n this.maxPosition = Number(this.getAttribute('data-tk-max-position'));\r\n this.activeClassName = this.getAttribute('data-tk-active-class-name') || 'tk-button--selected';\r\n this.listName = this.getAttribute('data-tk-list-name') || '';\r\n this.selectedOption = Number(this.getAttribute('data-tk-selected-option')) || 1;\r\n this.isGuestUser = this.hasAttribute('data-tk-guest-user');\r\n }\r\n\r\n connectedCallback(): void {\r\n if (!this.button) throw new Error('Favorite: Button is missing!');\r\n this.registerClickListener();\r\n }\r\n\r\n registerClickListener() {\r\n const onClick = this.send.bind(this);\r\n this.pushListener({ event: 'click', element: this.button!, action: onClick });\r\n }\r\n\r\n async send(event: Event) {\r\n // If user is not logged in and article is already on list return\r\n if (this.getAttribute('data-tk-multi-favorites-action') === Actions.ADDED && this.isGuestUser) return;\r\n\r\n const formValidator = this.closest('tk-form-validator');\r\n const formElement = formValidator?.form;\r\n if (formElement) {\r\n const formData = new FormData(formElement);\r\n const optionElements = formElement.querySelectorAll('input[name=\"favorite-option\"]');\r\n const optionElementList = Array.from(optionElements);\r\n const selectedOptionIndex = optionElementList.findIndex((element) => element.checked);\r\n\r\n // if the selected option is `existing`, then take the `saldocBoIdTarget`\r\n if (selectedOptionIndex === this.selectedOption) {\r\n const selectElement = formElement.querySelector('select');\r\n const selectedOption = selectElement?.selectedOptions.item(0);\r\n this.saldocBoIdTarget = selectedOption?.getAttribute('data-tk-saldoc-bo-id-target') || '';\r\n }\r\n if (this.listName === '') {\r\n const { length } = formData.getAll('field-name');\r\n this.listName = length > 1\r\n ? formData.getAll('field-name')?.at(selectedOptionIndex)?.toString() || ''\r\n : formData.get('field-name')?.toString() || '';\r\n } else {\r\n this.listName = formData.get('field-name')?.toString() || '';\r\n }\r\n if (\r\n this.multiFavoritesAction === Actions.ADDED\r\n || this.multiFavoritesAction === Actions.MOVED\r\n ) this.checkMaximum(formElement, selectedOptionIndex);\r\n }\r\n\r\n const isFormValid = await formValidator?.isFormValid();\r\n if (formValidator && !isFormValid) return;\r\n\r\n const data: Record = {\r\n Type: 'favorite',\r\n ArtFavorite_ArtNo: this.artNumber,\r\n ArtFavorite_ArtBoId: this.artBoId,\r\n ArtFavorite_ListName: this.listName,\r\n ArtFavorite_MultiAction: this.multiFavoritesAction,\r\n ArtFavorite_OnList: this.onList,\r\n ArtFavorite_SalDocBoIdSource: this.saldocBoIdSource,\r\n ArtFavorite_SalDocBoIdTarget: this.saldocBoIdTarget,\r\n maxLists: String(this.maxList),\r\n maxPositions: String(this.maxPosition),\r\n };\r\n Object.keys(this.dataset)\r\n .filter((key) => key.startsWith('opSaldocitem.'))\r\n .forEach((key) => {\r\n data[key.substring(2).toLowerCase()] = this.dataset[key];\r\n });\r\n const url = setAsyncUrl();\r\n fetchRequest({\r\n requestURL: url,\r\n resolveHandler: this.refreshContent.bind(this, event),\r\n payload: data,\r\n showMessages: false,\r\n });\r\n }\r\n\r\n refreshContent(event: Event, response: TKResponse) {\r\n if (!response) return;\r\n if (\r\n response.success\r\n && response.messages?.length === 0\r\n && (\r\n response.dataAsJson.action === Actions.ADD\r\n || response.dataAsJson.action === Actions.MOVE\r\n )\r\n ) {\r\n if (\r\n response.dataAsJson.isGuest\r\n && this.listName !== ''\r\n ) {\r\n const html = document.createElement('div');\r\n html.innerHTML = response.dataAsJson.message;\r\n const favoriteButton = html.querySelector('[data-tk-saldoc-bo-id-target]');\r\n const saldocBoIdTarget = favoriteButton?.getAttribute('data-tk-saldoc-bo-id-target');\r\n const saldocBoId = favoriteButton?.getAttribute('data-tk-saldoc-bo-id');\r\n saldocBoIdTarget && (this.saldocBoIdTarget = saldocBoIdTarget);\r\n this.multiFavoritesAction = Actions.ADDED;\r\n this.setAttribute('data-tk-on-list', `#${saldocBoId}#`);\r\n this.send(event);\r\n } else {\r\n const { message } = response.dataAsJson;\r\n const dialog = TKDialog.renderDialog({\r\n content: message,\r\n className: 'tk-dialog tk-dialog--max-width',\r\n tag: 'dialog',\r\n });\r\n const favoriteButton = dialog.querySelector('tk-favorite-button');\r\n if (favoriteButton) {\r\n favoriteButton.addButton = this;\r\n }\r\n dialog.showModal();\r\n this.pushListener({ event: 'close', element: dialog, action: () => dialog.remove() });\r\n }\r\n } else {\r\n const dialog = this.closest('dialog');\r\n const { action, artBoId, favoriteCount } = response.dataAsJson;\r\n\r\n action !== Actions.ADDED && dialog?.close();\r\n\r\n const actionHandler: Record void> = {\r\n added: () => this.addedItem(response),\r\n deleted: () => this.deleteArticle(artBoId, response),\r\n moved: () => this.deleteArticle(artBoId, response),\r\n [Actions.ADD](): void {\r\n throw new Error('Function not implemented.');\r\n },\r\n [Actions.MOVE](): void {\r\n throw new Error('Function not implemented.');\r\n },\r\n };\r\n actionHandler[action]();\r\n if (response.dataAsJson.isGuest) return;\r\n TKFavoriteButton.syncInfo(favoriteCount);\r\n }\r\n }\r\n\r\n addedItem(response: TKResponse) {\r\n const { messages } = response;\r\n const dialog = this.closest('dialog');\r\n // check for empty value\r\n if (!response.dataAsJson.salDocName) return;\r\n dialog?.close();\r\n messages?.forEach((message) => {\r\n sendNotificationByItem(message);\r\n });\r\n if (this.addButton) {\r\n this.addButton.setAttribute('data-tk-on-list', response.dataAsJson.onList);\r\n this.addButton.button!.classList.add(this.activeClassName);\r\n this.addButton.onList = response.dataAsJson.onList;\r\n }\r\n this.button!.setAttribute('data-tk-on-list', response.dataAsJson.onList);\r\n this.button!.classList.add(this.activeClassName);\r\n this.onList = response.dataAsJson.onList;\r\n this.setAttribute('data-tk-multi-favorites-action', 'added');\r\n TKFavoriteButton.updateItemsCount();\r\n }\r\n\r\n deleteArticle(id: string, response: TKResponse) {\r\n const article = document.querySelector(`[data-tk-article-id=\"${id}\"]`);\r\n if (!article) return;\r\n article.remove();\r\n TKFavoriteButton.syncCounter();\r\n\r\n const { messages } = response;\r\n messages?.forEach((message) => {\r\n sendNotificationByItem(message);\r\n });\r\n\r\n const contextMenu = this.closest('[data-tk-context-items]');\r\n if (!contextMenu) return;\r\n contextMenu.remove();\r\n }\r\n\r\n checkMaximum(formElement: HTMLFormElement, selectedOptionIndex: number) {\r\n // if the selected option is `existing`, check positions\r\n const selectElement = formElement.querySelector('select');\r\n const selectedOption = selectElement?.selectedOptions.item(0);\r\n const countPositions = Number(selectedOption?.getAttribute('data-tk-saldoc-count-positions'));\r\n if (selectedOptionIndex === 0 && countPositions > this.maxPosition) {\r\n sendNotification(NotificationType.ERROR, 'Maximum erreicht an Positionen.');\r\n throw new Error('Rechead maximum of positions in this list');\r\n } else if ((selectElement?.options.length || 0) > this.maxList) {\r\n sendNotification(NotificationType.ERROR, 'Maximum erreicht an Listen.');\r\n throw new Error('Rechead maximum of lists');\r\n }\r\n }\r\n\r\n static syncCounter() {\r\n const counterElement = document.querySelector('[data-tk-favorite-counter]');\r\n const listElement = document.querySelector('[data-tk-article-list-grid]');\r\n if (!counterElement || !listElement) return;\r\n counterElement.textContent = String(listElement.childElementCount);\r\n }\r\n\r\n static syncInfo(quantity: number) {\r\n const infoElement = document.querySelector('tk-favorite-info');\r\n if (!infoElement) return;\r\n infoElement.setAttribute('data-tk-quantity', String(quantity));\r\n }\r\n\r\n static updateItemsCount() {\r\n // TODO: After the next WAS update, the item count should be included in the response when not logged in. Until then workaround with + 1\r\n const favoriteInfoElement = document.querySelector('tk-favorite-info');\r\n if (!favoriteInfoElement) return;\r\n\r\n const previousItemscount = favoriteInfoElement.getAttribute('data-tk-quantity')\r\n ? parseInt(favoriteInfoElement.getAttribute('data-tk-quantity')!, 10) : 0;\r\n favoriteInfoElement.setAttribute('data-tk-quantity', (previousItemscount + 1).toString());\r\n }\r\n}\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\nimport TKFormZipCity from '@tk/controls/tk.form.zipcity';\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.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 window.addEventListener('fields-added', this.reConnectedCallback.bind(this));\r\n this.validationList = [];\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 reConnectedCallback(): void {\r\n console.log('reConnectedCallback');\r\n this.validationList.forEach((validationItem) => {\r\n this.removeMessage(validationItem);\r\n });\r\n this.removeListener(window);\r\n this.validationList = [];\r\n this.searchFieldElements();\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 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 validateZipCity(): Promise {\r\n const validationList: boolean[] = [];\r\n const fieldElements = this.querySelectorAll('[data-tk-field-check-zip-city]');\r\n if (fieldElements.length === 0) return true;\r\n\r\n const apiPromises = Array.from(fieldElements).map(async (element) => {\r\n const input = element.querySelector('input');\r\n if (!input) return true;\r\n\r\n const isValid = await TKFormZipCity.isValidZipCity(this.form!);\r\n const validationItem = this.validationList.find((item) => item.wrapper === element);\r\n if (!isValid && validationItem) {\r\n this.removeMessage(validationItem);\r\n this.createElementMessage(\r\n validationItem,\r\n formErrorMessages.typeMismatch,\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 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\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 || input.value === '') return true;\r\n\r\n const response = await TKFormValidator.fetchExistAPI(apiURL, input.value);\r\n const { isValid } = response.dataAsJson;\r\n const validationItem = this.validationList.find((item) => item.wrapper === element);\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() && await this.validateZipCity();\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 protected 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', block: 'center' });\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}\r\n","import { fetchRequest } from '@tk/utilities/tk.fetch';\r\nimport TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\nimport { zipCityMessages } from '@tk/utilities/tk.messages';\r\n\r\ninterface ZipCityData {\r\n zip: string;\r\n city: string;\r\n country: string;\r\n}\r\n\r\ninterface ZipCityField {\r\n inputField?: HTMLInputElement;\r\n dropdown?: HTMLElement;\r\n listItemSelected?: HTMLElement;\r\n data?: ZipCityData[];\r\n}\r\n\r\nexport default class TKFormZipCity extends TKCustomElementFactory {\r\n fieldCountry?: HTMLInputElement | HTMLSelectElement;\r\n fieldZip?: HTMLInputElement;\r\n fieldCity?: HTMLInputElement;\r\n inputObject: ZipCityField;\r\n selectedField?: HTMLInputElement;\r\n listWrapper: HTMLElement;\r\n timer?: ReturnType;\r\n lastSearchTerm: string;\r\n listWrapperClassName: string;\r\n loadingSpinnerTimeout: number | null;\r\n clearDataTimeout: number | null;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.listWrapperClassName = this.getAttribute('data-tk-zip-list-class') || 'tk-form-zipcity__list';\r\n this.fieldCountry = this.querySelector('[data-tk-zip-country]') || undefined;\r\n this.fieldZip = this.querySelector('[data-tk-zip-zip]') || undefined;\r\n this.fieldCity = this.querySelector('[data-tk-zip-city]') || undefined;\r\n this.lastSearchTerm = '';\r\n this.selectedField = undefined;\r\n this.listWrapper = document.createElement('div');\r\n this.listWrapper.classList.add(this.listWrapperClassName);\r\n this.listWrapper.hidden = true;\r\n this.loadingSpinnerTimeout = null;\r\n this.clearDataTimeout = null;\r\n\r\n this.inputObject = {\r\n inputField: undefined,\r\n dropdown: this.listWrapper,\r\n listItemSelected: undefined,\r\n data: [],\r\n };\r\n }\r\n\r\n connectedCallback(): void {\r\n this.registerListener();\r\n }\r\n\r\n registerListener() {\r\n if (!this.fieldZip && !this.fieldCity) return;\r\n\r\n const onInputHandler = this.searchZipCity.bind(this);\r\n const onClickHandler = this.toggleDropdown.bind(this);\r\n const onSelectHandler = this.selectItem.bind(this);\r\n const onChangeHandler = this.clearFormFields.bind(this);\r\n const onInputKeyNavigationHandler = this.inputKeyNavigation.bind(this);\r\n const onDropdownKeyNavigationHandler = this.dropdownKeyNavigation.bind(this);\r\n\r\n this.pushListener({ event: 'click', element: this.fieldZip!, action: onClickHandler });\r\n this.pushListener({ event: 'click', element: this.fieldCity!, action: onClickHandler });\r\n this.pushListener({ event: 'click', element: this.inputObject.dropdown!, action: onSelectHandler });\r\n this.pushListener({ event: 'input', element: this.fieldZip!, action: onInputHandler });\r\n this.pushListener({ event: 'input', element: this.fieldCity!, action: onInputHandler });\r\n this.pushListener({ event: 'keydown', element: this.fieldZip!, action: onInputKeyNavigationHandler });\r\n this.pushListener({ event: 'keydown', element: this.fieldCity!, action: onInputKeyNavigationHandler });\r\n this.pushListener({\r\n event: 'keydown',\r\n element: this.inputObject.dropdown!,\r\n action: onDropdownKeyNavigationHandler,\r\n });\r\n\r\n if (this.fieldCountry) {\r\n this.pushListener({ event: 'change', element: this.fieldCountry, action: onChangeHandler });\r\n }\r\n }\r\n\r\n inputKeyNavigation(event: KeyboardEvent): void {\r\n if (!(event.code === 'Tab' || event.code === 'Enter' || event.code === 'ArrowDown')) return;\r\n\r\n this.inputObject.listItemSelected = this.inputObject.dropdown?.firstElementChild as HTMLElement;\r\n\r\n if (!this.inputObject.listItemSelected) return;\r\n\r\n this.inputObject.dropdown?.classList.remove('hide');\r\n this.inputObject.listItemSelected.focus();\r\n event.preventDefault();\r\n }\r\n\r\n dropdownKeyNavigation(event: KeyboardEvent): void {\r\n const keyActions: Record void> = {\r\n ArrowDown: () => this.handleArrowKey(true),\r\n ArrowUp: () => this.handleArrowKey(false),\r\n Enter: () => this.selectItem(event),\r\n Space: () => this.selectItem(event),\r\n Tab: () => this.hideDropdown(true),\r\n Escape: () => this.hideDropdown(true),\r\n };\r\n\r\n const action = keyActions[event.code];\r\n if (!action) return;\r\n\r\n action();\r\n event.preventDefault();\r\n }\r\n\r\n handleArrowKey(isDown: boolean): void {\r\n if (this.inputObject.listItemSelected) {\r\n const nextElement = isDown\r\n ? this.inputObject.listItemSelected.nextElementSibling\r\n : this.inputObject.listItemSelected.previousElementSibling;\r\n\r\n if (nextElement instanceof HTMLElement) {\r\n this.inputObject.listItemSelected = nextElement;\r\n }\r\n } else {\r\n this.inputObject.listItemSelected = this.inputObject.dropdown?.firstElementChild as HTMLElement;\r\n }\r\n\r\n if (!this.inputObject.listItemSelected) {\r\n return;\r\n }\r\n\r\n this.inputObject.listItemSelected.focus();\r\n this.setScroller();\r\n }\r\n\r\n hideDropdown(isHidden: boolean = false): void {\r\n if (this.inputObject.dropdown) {\r\n if (!isHidden) {\r\n this.showLoadingAnimation();\r\n this.listWrapper.style.border = 'unset';\r\n }\r\n this.inputObject.dropdown.hidden = isHidden;\r\n }\r\n }\r\n\r\n toggleDropdown() {\r\n if (this.inputObject.dropdown && this.inputObject.dropdown.hasChildNodes()) {\r\n this.inputObject.dropdown.hidden = !this.inputObject.dropdown.hidden;\r\n }\r\n }\r\n\r\n setScroller(): void {\r\n const { dropdown, listItemSelected } = this.inputObject;\r\n\r\n if (!dropdown || !listItemSelected) return;\r\n\r\n const index = Array.from(dropdown.children).indexOf(listItemSelected);\r\n const elHeight = listItemSelected.offsetHeight;\r\n const { scrollTop } = dropdown;\r\n const viewport = scrollTop + dropdown.offsetHeight;\r\n const elOffset = elHeight * index;\r\n\r\n if (elOffset >= scrollTop && (elOffset + elHeight) <= viewport) return;\r\n\r\n dropdown.scrollTop = elOffset;\r\n }\r\n\r\n setInputObject(): void {\r\n if (!this.selectedField?.parentElement?.querySelector(`.${this.listWrapperClassName}`)) {\r\n this.selectedField?.insertAdjacentElement('afterend', this.listWrapper);\r\n }\r\n\r\n this.inputObject.inputField = this.selectedField;\r\n }\r\n\r\n searchZipCity(event: Event): void {\r\n this.selectedField = event.target as HTMLInputElement;\r\n const value = this.selectedField!.value.trim();\r\n\r\n if (value.length < 2) {\r\n this.clearDataTimeout && clearTimeout(this.clearDataTimeout);\r\n this.clearDataTimeout = setTimeout(() => {\r\n this.clearData();\r\n }, 300);\r\n return;\r\n }\r\n\r\n this.lastSearchTerm = value;\r\n\r\n this.setInputObject();\r\n this.timer && clearTimeout(this.timer);\r\n this.timer = setTimeout(() => {\r\n this.callApi(value);\r\n }, 300);\r\n }\r\n\r\n callApi(value: string) {\r\n if (!this.inputObject.dropdown) return;\r\n this.hideDropdown(false);\r\n\r\n if (this.lastSearchTerm !== value) return;\r\n\r\n const zipCity = this.parseZipCity(value);\r\n const apiUrl = `${window.location.origin}/api/portal/v1/zipsearch`;\r\n\r\n const urlObject = new URL(apiUrl);\r\n const { searchParams } = urlObject;\r\n\r\n Object.entries(zipCity).forEach(([key, value]) => {\r\n searchParams.set(key, value);\r\n });\r\n\r\n fetchRequest({\r\n requestURL: urlObject.toString(),\r\n resolveHandler: this.refreshResultList.bind(this),\r\n decodeJSONResponse: false,\r\n });\r\n }\r\n\r\n parseZipCity(value: string) {\r\n let zip: string | number;\r\n let city: string;\r\n\r\n const country: string = this.fieldCountry?.value?.toLowerCase() || 'ch';\r\n\r\n const arr = value.split(' ');\r\n const numberRegex = /^[0-9]+$/;\r\n const regexTest = arr.find((elem) => numberRegex.test(elem));\r\n if (regexTest === undefined) {\r\n zip = '';\r\n } else {\r\n zip = regexTest;\r\n }\r\n\r\n if (!zip) {\r\n if (arr.length > 1) {\r\n zip = +arr[1] || '';\r\n }\r\n }\r\n\r\n zip = zip.toString();\r\n city = value.replace(zip, '').trim();\r\n if (city === 'undefined') {\r\n city = '';\r\n }\r\n\r\n return {\r\n zip,\r\n city,\r\n country,\r\n };\r\n }\r\n\r\n refreshResultList(response: TKResponse): void {\r\n if (!response) return;\r\n this.clearData();\r\n if (Array.isArray(response)) {\r\n response.forEach((element: ZipCityData) => {\r\n const listItemTpl: string = `\r\n `;\r\n\r\n this.inputObject.dropdown!.insertAdjacentHTML('beforeend', listItemTpl);\r\n this.inputObject.data?.push({ zip: element.zip, city: element.city, country: element.country });\r\n });\r\n }\r\n\r\n if (this.inputObject.data!.length === 0) {\r\n const listItemTpl: string = `\r\n
\r\n
\r\n \r\n \r\n \r\n ${zipCityMessages.noMatchFound}\r\n
\r\n
`;\r\n\r\n this.inputObject.dropdown!.insertAdjacentHTML('beforeend', listItemTpl);\r\n }\r\n this.listWrapper.style.border = '';\r\n this.loadingSpinnerTimeout && clearTimeout(this.loadingSpinnerTimeout);\r\n this.inputObject.dropdown!.hidden = false;\r\n }\r\n\r\n selectItem(event: Event): void {\r\n let selectedItem: HTMLElement = event.target as HTMLElement;\r\n selectedItem = selectedItem.closest('[data-tk-zip]') as HTMLElement;\r\n\r\n if (!selectedItem) return;\r\n const zip = selectedItem.getAttribute('data-tk-zip') as string;\r\n const city = selectedItem.getAttribute('data-tk-city') as string;\r\n const country = selectedItem.getAttribute('data-tk-country') as string;\r\n\r\n if (this.fieldZip) {\r\n this.fieldZip.value = zip;\r\n }\r\n if (this.fieldCity) {\r\n this.fieldCity.value = city;\r\n }\r\n if (this.fieldCountry) {\r\n this.fieldCountry.value = country;\r\n }\r\n\r\n this.inputObject.inputField!.focus();\r\n this.clearData();\r\n }\r\n\r\n clearFormFields(): void {\r\n this.clearData();\r\n this.fieldCity!.value = '';\r\n this.fieldZip!.value = '';\r\n }\r\n\r\n clearData(): void {\r\n if (this.inputObject.dropdown) {\r\n this.hideDropdown(true);\r\n this.inputObject.dropdown.replaceChildren();\r\n }\r\n this.inputObject.data = [];\r\n }\r\n\r\n showLoadingAnimation() {\r\n this.loadingSpinnerTimeout && clearTimeout(this.loadingSpinnerTimeout);\r\n this.loadingSpinnerTimeout = setTimeout(() => {\r\n this.listWrapper.innerHTML = `\r\n
\r\n
\r\n
`;\r\n }, 300);\r\n }\r\n}\r\n","import TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\nimport render from '@tk/utilities/tk.render';\r\n\r\ntype MaxShowingThumbnails = 'auto' | number;\r\n\r\nexport default class TKAssetGallery extends TKCustomElementFactory {\r\n preview?: HTMLElement;\r\n thumbnails?: HTMLElement;\r\n overlayClassName: string;\r\n overlay: HTMLElement;\r\n maxShowingThumbnails: MaxShowingThumbnails;\r\n moreButtonClassName: string;\r\n selectedItemClassName: string;\r\n currentPosition: number = 0;\r\n thumbnailCount: number = 0;\r\n thumbnailShowingCount: number = 0;\r\n\r\n private fullscreenPreview?: HTMLElement;\r\n private fullscreenThumbnails?: HTMLElement;\r\n private closeButton?: HTMLElement;\r\n private isFullscreen: boolean = false;\r\n private moreButton?: HTMLElement;\r\n private shortCutHandler: Record void>;\r\n private resizeObserver: ResizeObserver;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.preview = this.querySelector('[data-tk-asset-preview]') || undefined;\r\n this.thumbnails = this.querySelector('[data-tk-asset-thumbnails]') || undefined;\r\n this.overlayClassName = (\r\n this.getAttribute('data-tk-overlay-class-name') || 'tk-asset-gallery tk-asset-gallery--fullscreen'\r\n );\r\n this.overlay = render(``);\r\n this.maxShowingThumbnails = Number(this.getAttribute('data-tk-max-showing-thumbnails')) || 'auto';\r\n this.moreButtonClassName = (\r\n this.getAttribute('data-tk-more-button-class-name') || 'tk-asset-gallery-item tk-asset-gallery-item--more'\r\n );\r\n this.selectedItemClassName = (\r\n this.getAttribute('data-tk-selected-item-class-name') || 'tk-asset-gallery-item--selected'\r\n );\r\n this.shortCutHandler = {\r\n ArrowRight: () => this.jumpToPosition(this.currentPosition + 1),\r\n ArrowLeft: () => this.jumpToPosition(this.currentPosition - 1),\r\n Escape: () => this.toggleFullscreen(),\r\n };\r\n this.resizeObserver = new ResizeObserver(this.checkResize.bind(this));\r\n }\r\n\r\n connectedCallback(): void {\r\n if (!this.preview || !this.thumbnails) throw new Error('Asset Gallery: Elements are missing!');\r\n this.thumbnailCount = this.thumbnails.childElementCount;\r\n\r\n this.initFullscreen();\r\n this.resizeObserver.observe(this.thumbnails);\r\n this.registerClickListener();\r\n this.registerKeydownListener();\r\n }\r\n\r\n checkResize(entries: ResizeObserverEntry[]) {\r\n entries.forEach(() => {\r\n this.checkThumbnailLength();\r\n });\r\n }\r\n\r\n getFilteredThumbnails() : HTMLElement[] {\r\n if (!this.thumbnails) return [];\r\n return Array.from(this.thumbnails.children).filter((element) => element !== this.moreButton) as HTMLElement[];\r\n }\r\n\r\n checkThumbnailLength() {\r\n const childrenList = this.getFilteredThumbnails();\r\n childrenList.forEach((element) => {\r\n element.hidden = false;\r\n });\r\n if (this.maxShowingThumbnails === 'auto') this.optimizeThumbnails();\r\n else {\r\n if (this.thumbnailCount <= this.maxShowingThumbnails) return;\r\n this.trimThumbnailsToMaxCount(childrenList, this.maxShowingThumbnails);\r\n }\r\n }\r\n\r\n trimThumbnailsToMaxCount(childrenList: HTMLElement[], maxShowingThumbnails: number) {\r\n const difference = this.thumbnailCount - maxShowingThumbnails;\r\n const lastChildren = childrenList.slice(difference * (-1));\r\n lastChildren.forEach((element) => {\r\n element.hidden = true;\r\n });\r\n if (!this.moreButton) this.createMoreButton(difference);\r\n else this.moreButton.setAttribute('data-count', `+${difference}`);\r\n }\r\n\r\n createMoreButton(difference: number) {\r\n this.moreButton = render(`
`);\r\n this.thumbnails!.insertAdjacentElement('beforeend', this.moreButton);\r\n const handleExpandClick = this.expandGallery.bind(this);\r\n this.pushListener({ event: 'click', element: this.moreButton, action: handleExpandClick });\r\n }\r\n\r\n optimizeThumbnails() {\r\n this.moreButton && (this.moreButton.hidden = true);\r\n const { scrollWidth } = this.thumbnails!;\r\n const { width, right } = this.thumbnails!.getBoundingClientRect();\r\n if (width >= scrollWidth) return;\r\n const childrenList = this.getFilteredThumbnails();\r\n const closestHiddenChild = childrenList.find((child) => {\r\n const childRect = child.getBoundingClientRect();\r\n const childRight = childRect.right;\r\n return right < childRight;\r\n });\r\n if (!closestHiddenChild) return;\r\n const index = childrenList.indexOf(closestHiddenChild);\r\n this.thumbnailShowingCount = index - 1;\r\n this.trimThumbnailsToMaxCount(childrenList, this.thumbnailShowingCount);\r\n this.moreButton && (this.moreButton.hidden = false);\r\n }\r\n\r\n registerClickListener(): void {\r\n const handleThumbnailClick = this.jumpTo.bind(this);\r\n this.pushListener({ event: 'click', element: this.thumbnails!, action: handleThumbnailClick });\r\n this.fullscreenThumbnails && this.pushListener({\r\n event: 'click',\r\n element: this.fullscreenThumbnails,\r\n action: handleThumbnailClick,\r\n });\r\n\r\n const handlePreviewClick = this.toggleFullscreen.bind(this);\r\n this.pushListener({ event: 'click', element: this.preview!, action: handlePreviewClick });\r\n this.closeButton && this.pushListener({\r\n event: 'click',\r\n element: this.closeButton,\r\n action: handlePreviewClick,\r\n });\r\n }\r\n\r\n registerKeydownListener() {\r\n const handleShortcuts = this.initShortcuts.bind(this);\r\n this.pushListener({ event: 'keydown', element: document, action: handleShortcuts });\r\n }\r\n\r\n expandGallery() {\r\n this.currentPosition = this.thumbnailShowingCount;\r\n this.toggleFullscreen();\r\n }\r\n\r\n initShortcuts(event: KeyboardEvent) {\r\n if (!this.isFullscreen) return;\r\n if (Object.keys(this.shortCutHandler).every((key) => key !== event.key)) return;\r\n this.shortCutHandler[event.key]();\r\n }\r\n\r\n jumpTo(event: Event) {\r\n const target = event.target as HTMLElement;\r\n if (target === this.moreButton) return;\r\n const { parentElement } = target;\r\n if (!target || !parentElement) return;\r\n this.isFullscreen\r\n ? this.setCurrentPosition(parentElement, this.fullscreenThumbnails!)\r\n : this.setCurrentPosition(parentElement, this.thumbnails!);\r\n this.selectItem(this.thumbnails!, this.preview!);\r\n this.selectItem(this.fullscreenThumbnails!, this.fullscreenPreview!);\r\n }\r\n\r\n jumpToPosition(position: number) {\r\n this.currentPosition = this.getValidPosition(position);\r\n this.selectItem(this.thumbnails!, this.preview!);\r\n this.selectItem(this.fullscreenThumbnails!, this.fullscreenPreview!);\r\n }\r\n\r\n getValidPosition(position: number) {\r\n if (this.thumbnailCount <= 0) return 0;\r\n return ((position % this.thumbnailCount) + this.thumbnailCount) % this.thumbnailCount;\r\n }\r\n\r\n setCurrentPosition(parentElement: Element, thumbnails: HTMLElement) {\r\n const childList = Array.from(thumbnails.children);\r\n const index = childList.indexOf(parentElement);\r\n this.currentPosition = index;\r\n }\r\n\r\n selectItem(thumbnails: HTMLElement, preview: HTMLElement) {\r\n this.resetSelectedClassName(thumbnails);\r\n const child = thumbnails.children.item(this.currentPosition);\r\n child?.classList.add(this.selectedItemClassName);\r\n const previewImage = preview.children.item(this.currentPosition);\r\n previewImage?.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'nearest' });\r\n const videoURL = previewImage?.getAttribute('data-tk-video-url');\r\n if (this.isFullscreen && videoURL && this.fullscreenPreview) {\r\n const videoChild = this.fullscreenPreview.children.item(this.currentPosition);\r\n const hasIframe = videoChild?.querySelector('iframe');\r\n if (hasIframe) return;\r\n if (!videoChild) return;\r\n const iframe = this.createIframe(videoURL);\r\n videoChild.innerHTML = '';\r\n videoChild.insertAdjacentElement('beforeend', iframe);\r\n }\r\n }\r\n\r\n resetSelectedClassName(element: Element) {\r\n const childList = Array.from(element.children);\r\n childList.forEach((child) => {\r\n child.classList.remove(this.selectedItemClassName);\r\n });\r\n }\r\n\r\n initFullscreen() {\r\n this.overlay.insertAdjacentHTML('afterbegin', this.innerHTML);\r\n document.body.insertAdjacentElement('beforeend', this.overlay);\r\n this.fullscreenThumbnails = this.overlay.querySelector('[data-tk-asset-thumbnails]') || undefined;\r\n this.fullscreenPreview = this.overlay.querySelector('[data-tk-asset-preview]') || undefined;\r\n this.closeButton = this.overlay.querySelector('[data-tk-close-fullscreen]') || undefined;\r\n }\r\n\r\n toggleFullscreen() {\r\n this.isFullscreen = !this.isFullscreen;\r\n this.overlay.hidden = !this.isFullscreen;\r\n if (this.closeButton) this.closeButton.hidden = !this.isFullscreen;\r\n\r\n if (this.isFullscreen) {\r\n this.selectItem(this.fullscreenThumbnails!, this.fullscreenPreview!);\r\n } else {\r\n this.selectItem(this.thumbnails!, this.preview!);\r\n this.stopAllVideos();\r\n }\r\n }\r\n\r\n stopAllVideos() {\r\n const iframe = this.overlay.querySelectorAll('iframe');\r\n iframe.forEach((video) => {\r\n video.contentWindow?.postMessage(\r\n JSON.stringify({ event: 'command', func: 'pauseVideo', args: '' }),\r\n '*',\r\n );\r\n });\r\n }\r\n\r\n createIframe(videoURL: string): HTMLIFrameElement {\r\n const iframeTemplate = this.querySelector('[data-tk-iframe-template]');\r\n const clone = iframeTemplate?.content.cloneNode(true) as HTMLElement;\r\n const iframe = clone.querySelector('iframe');\r\n if (!iframe) throw new Error('Asset Gallery: iFrame Template is missing!');\r\n const enabledApiURL = new URL(videoURL);\r\n enabledApiURL.searchParams.set('enablejsapi', '1');\r\n iframe.src = enabledApiURL.href;\r\n return iframe;\r\n }\r\n}\r\n","import TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\n\r\nexport default class TKSelection extends TKCustomElementFactory {\r\n targetElement?: HTMLInputElement;\r\n toggleWrapper?: HTMLElement;\r\n selectWrapper?: HTMLElement;\r\n maxVisible: number;\r\n loadedClassName: string;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.targetElement = this.querySelector('input[type=\"hidden\"]') || undefined;\r\n this.toggleWrapper = this.querySelector('[data-tk-selection-toggles]') || undefined;\r\n this.selectWrapper = this.querySelector('[data-tk-selection-select]') || undefined;\r\n this.maxVisible = Number(this.getAttribute('data-tk-max-visible')) || 3;\r\n this.loadedClassName = this.getAttribute('data-tk-loaded-class-name') || 'tk-selection--loaded';\r\n }\r\n\r\n connectedCallback(): void {\r\n if (\r\n !this.targetElement\r\n || !this.toggleWrapper\r\n || !this.selectWrapper\r\n ) throw new Error('Selection: Elements are missing!');\r\n this.registerInputListener();\r\n this.switchView();\r\n this.classList.add(this.loadedClassName);\r\n }\r\n\r\n registerInputListener() {\r\n const fieldElements = this.toggleWrapper!.querySelectorAll('input');\r\n const selectElement = this.selectWrapper!.querySelector('select');\r\n const onInput = this.syncTargetElement.bind(this);\r\n fieldElements.forEach((fieldElement) => {\r\n this.pushListener({ event: 'input', element: fieldElement, action: onInput });\r\n });\r\n selectElement && this.pushListener({ event: 'input', element: selectElement, action: onInput });\r\n }\r\n\r\n syncTargetElement(event: KeyboardEvent) {\r\n const target = event.target as HTMLInputElement | HTMLSelectElement;\r\n const selectedTarget = target instanceof HTMLInputElement\r\n ? target\r\n : target.options[target.selectedIndex];\r\n const { dataset } = selectedTarget;\r\n\r\n this.targetElement!.value = selectedTarget.value;\r\n\r\n Object.keys(this.targetElement!.dataset).forEach((key) => {\r\n delete this.targetElement!.dataset[key];\r\n });\r\n\r\n Object.keys(dataset).forEach((key) => {\r\n this.targetElement!.dataset[key] = dataset[key];\r\n });\r\n\r\n this.targetElement?.dispatchEvent(new Event('change'));\r\n }\r\n\r\n switchView() {\r\n if (this.toggleWrapper!.childElementCount > this.maxVisible) {\r\n this.toggleWrapper!.hidden = true;\r\n this.selectWrapper!.hidden = false;\r\n } else {\r\n this.toggleWrapper!.hidden = false;\r\n this.selectWrapper!.hidden = true;\r\n }\r\n }\r\n}\r\n","import group from '@tk/utilities/tk.array.group';\r\nimport TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\nimport { fetchRequest } from '@tk/utilities/tk.fetch';\r\n\r\ninterface ArtSpecRow {\r\n groupId: number;\r\n groupName: string;\r\n label: string;\r\n value: string;\r\n}\r\n\r\ninterface ArtSpecData {\r\n data: ArtSpecRow[];\r\n}\r\n\r\nexport default class TKArtSpecTable extends TKCustomElementFactory {\r\n url?: string;\r\n groupTemplateElement?: HTMLTemplateElement;\r\n rowTemplateElement?: HTMLTemplateElement;\r\n listWrapper?: HTMLElement;\r\n loadedClassName: string;\r\n colorClassName: string;\r\n colorHexRegex: RegExp;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.url = this.getAttribute('data-tk-url') || undefined;\r\n this.groupTemplateElement = this.querySelector('[data-tk-template-list-group]') || undefined;\r\n this.rowTemplateElement = this.querySelector('[data-tk-template-list-row]') || undefined;\r\n this.listWrapper = this.querySelector('[data-tk-list-wrapper]') || undefined;\r\n this.loadedClassName = this.getAttribute('[data-tk-loaded-class-name]') || 'tk-list-description--loaded';\r\n this.colorClassName = this.getAttribute('[data-tk-color-class-name]') || 'tk-list-description__color';\r\n this.colorHexRegex = /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/;\r\n }\r\n\r\n connectedCallback(): void {\r\n if (\r\n !this.url\r\n || !this.groupTemplateElement\r\n || !this.rowTemplateElement\r\n || !this.listWrapper\r\n ) throw new Error('ArtSpecTable: Elements or URL are missing!');\r\n this.fetch();\r\n }\r\n\r\n fetch() {\r\n fetchRequest({\r\n requestURL: this.url!,\r\n resolveHandler: this.refreshContent.bind(this),\r\n });\r\n }\r\n\r\n refreshContent(response: TKResponse) {\r\n if (!response || !response.success) return;\r\n const { data } = response.dataAsJson;\r\n const groupedList = Object.values(group(data, 'groupId'));\r\n const groups = groupedList.map((rows) => ({\r\n groupName: rows.at(0)?.groupName,\r\n rows: rows\r\n .filter((row) => row.value !== '')\r\n .map((row) => ({\r\n label: row.label,\r\n value: row.value,\r\n })),\r\n }));\r\n groups.forEach((group) => {\r\n if (group.rows.length === 0) return;\r\n const groupElement = (this.groupTemplateElement!.content.cloneNode(true) as HTMLElement).children[0];\r\n const groupTitleElement = groupElement.querySelector('[data-tk-title]');\r\n if (!groupTitleElement) return;\r\n groupTitleElement.textContent = group.groupName || '';\r\n\r\n group.rows.forEach((row) => {\r\n const rowElement = (this.rowTemplateElement!.content.cloneNode(true) as HTMLElement).children[0];\r\n const labelElement = rowElement.querySelector('[data-tk-label]');\r\n if (!labelElement) return;\r\n const valueElement = rowElement.querySelector('[data-tk-value]');\r\n if (!valueElement) return;\r\n labelElement.textContent = row.label;\r\n if (row.value.match(this.colorHexRegex)) {\r\n valueElement.insertAdjacentElement(\r\n 'beforeend',\r\n this.createColorElement(row.value),\r\n );\r\n } else {\r\n valueElement.textContent = row.value;\r\n }\r\n groupElement.insertAdjacentElement('beforeend', rowElement);\r\n });\r\n\r\n this.listWrapper?.insertAdjacentElement('beforeend', groupElement);\r\n });\r\n this.classList.add(this.loadedClassName);\r\n const showMoreComponent = this.closest('tk-show-more');\r\n showMoreComponent && showMoreComponent.dispatchEvent(new Event('tk-show-more-recalc'));\r\n }\r\n\r\n createColorElement(colorHexString: string) {\r\n const colorElement = document.createElement('div');\r\n colorElement.classList.add(this.colorClassName);\r\n colorElement.style.backgroundColor = colorHexString;\r\n colorElement.title = colorHexString;\r\n return colorElement;\r\n }\r\n}\r\n","interface GroupedData {\n [key: string]: T[]\n}\n\nconst group = (array: T[], property: K): GroupedData => array.reduce(\n (result: GroupedData, object: T) => {\n const key = object[property] as string;\n\n if (!result[key]) {\n result[key] = [];\n }\n\n result[key].push(object);\n\n return result;\n },\n {},\n);\n\nexport default group;\n","import TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\nimport TKCompareListLink from '@tk/components/tk.compare.list.link';\r\nimport { fetchRequest, setAsyncUrl } from '@tk/utilities/tk.fetch';\r\nimport render from '@tk/utilities/tk.render';\r\nimport { NotificationType, sendNotification } from '@tk/utilities/tk.notification';\r\nimport { compareMessages } from '@tk/utilities/tk.messages';\r\n\r\nexport enum CompareState {\r\n ADDED = 'a',\r\n REMOVED = 'p',\r\n}\r\n\r\nexport interface ResponseData {\r\n success: boolean;\r\n htmlcode: string;\r\n comparestatus: CompareState;\r\n}\r\n\r\nexport default class TKCompareButton extends TKCustomElementFactory {\r\n asyncURL: string;\r\n type: string;\r\n button?: HTMLButtonElement;\r\n compareType: string;\r\n item: string;\r\n itemList: NodeListOf;\r\n activeClass: string;\r\n compareListLink?: TKCompareListLink;\r\n shouldRemoveAll: boolean;\r\n wrapper?: HTMLElement;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.type = 'Compare';\r\n this.button = this.querySelector('button') || undefined;\r\n this.item = this.getAttribute('data-tk-compare-item') || '';\r\n this.compareType = this.getAttribute('data-tk-compare-type') || 'Art';\r\n this.asyncURL = this.getAttribute('data-tk-async-url') || setAsyncUrl();\r\n this.activeClass = this.getAttribute('data-tk-compare-active-class') || 'tk-compare-button--active';\r\n this.itemList = document.querySelectorAll(`[data-tk-compare-item=\"${this.item}\"]`);\r\n this.compareListLink = document.querySelector('tk-compare-list-link') || undefined;\r\n this.shouldRemoveAll = this.hasAttribute('data-tk-should-remove-all');\r\n this.wrapper = document.querySelector('tk-compare-wrapper') || undefined;\r\n }\r\n\r\n connectedCallback(): void {\r\n if (!this.button) throw new Error('Compare: Button is missing!');\r\n this.registerClickListener();\r\n }\r\n\r\n registerClickListener() {\r\n const handleCompare = this.shouldRemoveAll\r\n ? this.removeAllItems.bind(this)\r\n : this.addOrRemoveFromCompare.bind(this);\r\n this.pushListener({ event: 'click', element: this, action: handleCompare });\r\n }\r\n\r\n addOrRemoveFromCompare() {\r\n const data = {\r\n Id: this.item,\r\n Type: this.type,\r\n CompareType: this.compareType,\r\n };\r\n\r\n fetchRequest({\r\n requestURL: this.asyncURL,\r\n payload: data,\r\n resolveHandler: this.handleResponse.bind(this),\r\n });\r\n }\r\n\r\n async removeAllItems() {\r\n this.button!.disabled = true;\r\n const itemList = document.querySelectorAll('[data-tk-compare-item]');\r\n const itemSet = new Set();\r\n itemList.forEach((item) => {\r\n const id = item.getAttribute('data-tk-compare-item') || '';\r\n itemSet.add(id);\r\n });\r\n const promises: Promise[] = [];\r\n itemSet.forEach((id) => {\r\n promises.push(this.fetch(id));\r\n });\r\n try {\r\n await Promise.all(promises);\r\n sendNotification(\r\n NotificationType.SUCCESS,\r\n compareMessages.allRemoved.text,\r\n );\r\n this.resetPage();\r\n this.updateItemsCount(true);\r\n } catch (error) {\r\n throw new Error(`${error}`);\r\n }\r\n }\r\n\r\n resetPage() {\r\n if (!this.wrapper) return;\r\n this.wrapper.innerHTML = '';\r\n\r\n const headerElement = document.querySelector('[data-tk-compare-header]');\r\n headerElement?.classList.add('tk-compare__header--empty');\r\n\r\n this.wrapper.insertAdjacentElement(\r\n 'beforeend',\r\n render(`\r\n
\r\n \r\n ${compareMessages.empty.text}\r\n \r\n
\r\n `),\r\n );\r\n\r\n // remove remove all button\r\n const removeAllButton = document.querySelector('[data-tk-should-remove-all]');\r\n if (removeAllButton) removeAllButton.parentElement?.removeChild(removeAllButton);\r\n }\r\n\r\n fetch(id: string): Promise {\r\n const data = {\r\n Id: id,\r\n Type: this.type,\r\n CompareType: this.compareType,\r\n };\r\n return new Promise((resolve) => {\r\n fetchRequest({\r\n requestURL: this.asyncURL,\r\n payload: data,\r\n resolveHandler: (success) => resolve(success),\r\n showMessages: false,\r\n });\r\n });\r\n }\r\n\r\n handleResponse(response: TKResponse) {\r\n if (!response || !response.success) return;\r\n const json = response.dataAsJson;\r\n if (!json.success) return;\r\n const handler: Record void> = {\r\n a: () => this.addActiveClass(),\r\n p: () => this.remove(),\r\n };\r\n handler[json.comparestatus]();\r\n this.compareListLink?.updateCounter(response.dataAsJson.comparestatus);\r\n }\r\n\r\n showErrorMessage(error: string) {\r\n const errorMessage = this.getMessage(error);\r\n if (errorMessage !== '') sendNotification(NotificationType.ERROR, errorMessage);\r\n }\r\n\r\n // eslint-disable-next-line class-methods-use-this\r\n getMessage(error: string) {\r\n const tmpMessage = document.createElement('div');\r\n tmpMessage.innerHTML = error;\r\n const errorMessage = tmpMessage.querySelector('[data-tk-compare-failed-text]') || undefined;\r\n return errorMessage ? errorMessage.innerText : '';\r\n }\r\n\r\n addActiveClass() {\r\n this.itemList.forEach((item) => {\r\n item.classList.add(this.activeClass);\r\n });\r\n }\r\n\r\n remove() {\r\n this.removeActiveClass();\r\n this.removeItem();\r\n // update items count\r\n this.updateItemsCount();\r\n }\r\n\r\n removeActiveClass() {\r\n this.itemList.forEach((item) => {\r\n item.classList.remove(this.activeClass);\r\n });\r\n }\r\n\r\n removeItem() {\r\n const column = this.closest('[data-tk-column]');\r\n if (!column) return;\r\n const columnNumber = column.getAttribute('data-tk-column');\r\n const rows = document.querySelectorAll('[data-tk-row]');\r\n rows.forEach((row) => {\r\n const col = row.querySelector(`[data-tk-column=\"${columnNumber}\"]`);\r\n col?.remove();\r\n });\r\n }\r\n\r\n updateItemsCount(preventPageReset = false) {\r\n const itemsCountContainer = document.querySelector('[data-compare-items-count]');\r\n\r\n if (!itemsCountContainer) return;\r\n\r\n const itemsCountString = itemsCountContainer.getAttribute('data-compare-items-count');\r\n const itemsCount = itemsCountString ? parseInt(itemsCountString, 10) : 0;\r\n\r\n if ((itemsCount <= 1) && !preventPageReset) this.resetPage();\r\n }\r\n}\r\n","import TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\n\r\nexport default class TKShowMore extends TKCustomElementFactory {\r\n content?: HTMLElement;\r\n showingElements: number;\r\n openClassName: string;\r\n disableClassName: string;\r\n expandButton?: HTMLButtonElement;\r\n foldButton?: HTMLButtonElement;\r\n minHeight: number;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.content = this.querySelector('[data-tk-content]') || undefined;\r\n this.showingElements = Number(this.getAttribute('data-tk-showing-elements')) || 1;\r\n this.openClassName = this.getAttribute('data-tk-open-class-name') || 'tk-show-more--open';\r\n this.disableClassName = this.getAttribute('data-tk-disable-class-name') || 'tk-show-more--disable';\r\n this.expandButton = this.querySelector('[data-tk-expand-button]') || undefined;\r\n this.foldButton = this.querySelector('[data-tk-fold-button]') || undefined;\r\n this.minHeight = this.getMinHeight();\r\n }\r\n\r\n connectedCallback(): void {\r\n if (\r\n !this.content\r\n || !this.expandButton\r\n || !this.foldButton\r\n ) throw new Error('Show more: Button is missing!');\r\n if (this.content.scrollHeight === this.minHeight) {\r\n this.classList.add(this.disableClassName);\r\n } else {\r\n this.fold();\r\n this.registerClickListener();\r\n }\r\n }\r\n\r\n registerClickListener() {\r\n const onExpand = this.expand.bind(this);\r\n this.pushListener({ event: 'click', element: this.expandButton!, action: onExpand });\r\n const onFold = this.fold.bind(this);\r\n this.pushListener({ event: 'click', element: this.foldButton!, action: onFold });\r\n const onRecalc = this.recalc.bind(this);\r\n this.pushListener({ event: 'tk-show-more-recalc', element: this, action: onRecalc });\r\n }\r\n\r\n getMinHeight(): number {\r\n if (!this.content || this.content.childElementCount === 0) return 0;\r\n const rectContent = this.content.getBoundingClientRect();\r\n const childElement = this.content.children.item(this.showingElements - 1) as HTMLElement;\r\n if (!childElement) return 0;\r\n const childRect = childElement.getBoundingClientRect();\r\n const { marginBottom } = window.getComputedStyle(childElement);\r\n const { top } = rectContent;\r\n const { bottom } = childRect;\r\n return bottom - top + (parseInt(marginBottom, 10) || 0);\r\n }\r\n\r\n expand() {\r\n this.content!.style.maxHeight = '100%';\r\n this.classList.add(this.openClassName);\r\n this.removeListener(this.content!);\r\n }\r\n\r\n fold() {\r\n this.content!.style.maxHeight = `${this.minHeight}px`;\r\n this.classList.remove(this.openClassName);\r\n const onTransitionEnd = this.scrollToExpandButton.bind(this);\r\n this.pushListener({ event: 'transitionend', element: this.content!, action: onTransitionEnd });\r\n }\r\n\r\n scrollToExpandButton() {\r\n if (!this.expandButton) return;\r\n this.expandButton.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n }\r\n\r\n recalc() {\r\n this.minHeight = this.getMinHeight();\r\n this.fold();\r\n }\r\n}\r\n","import TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\n\r\nexport default class TKSelectRedirect extends TKCustomElementFactory {\r\n selectElement?: HTMLSelectElement;\r\n queryName: string;\r\n form?: HTMLFormElement;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.selectElement = this.querySelector('select') || undefined;\r\n this.queryName = this.getAttribute('data-tk-query-name') || 'query';\r\n this.form = this.querySelector('form') || undefined;\r\n }\r\n\r\n connectedCallback(): void {\r\n if (this.form) this.registerInputListener();\r\n else {\r\n if (!this.selectElement) throw new Error('TKSelectRedirect: Select element is missing!');\r\n this.registerSelectListener();\r\n }\r\n }\r\n\r\n registerInputListener() {\r\n const fieldElements = this.form!.querySelectorAll('input');\r\n const onInputByField = this.handleInput.bind(this);\r\n fieldElements.forEach((fieldElements) => {\r\n this.pushListener({ event: 'input', element: fieldElements, action: onInputByField });\r\n });\r\n }\r\n\r\n registerSelectListener() {\r\n const onInputBySelect = this.handleSelect.bind(this);\r\n this.pushListener({ event: 'input', element: this.selectElement!, action: onInputBySelect });\r\n }\r\n\r\n handleSelect() {\r\n const selectedOption = this.selectElement?.options.item(this.selectElement.selectedIndex);\r\n if (!selectedOption) return;\r\n this.redirectByValue(selectedOption.value);\r\n }\r\n\r\n handleInput(event: KeyboardEvent) {\r\n const { value } = event.target as HTMLInputElement;\r\n this.redirectByValue(value);\r\n }\r\n\r\n redirectByValue(value: string) {\r\n const url = new URL(window.location.href);\r\n url.searchParams.set(this.queryName, value);\r\n window.location.href = url.href;\r\n }\r\n}\r\n","import { fetchRequest } from '@tk/utilities/tk.fetch';\r\nimport TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\nimport render from '@tk/utilities/tk.render';\r\n\r\nexport default class TKPopup extends TKCustomElementFactory {\r\n url?: string;\r\n button?: HTMLButtonElement;\r\n popup?: HTMLDialogElement;\r\n offset: number;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.url = this.getAttribute('data-tk-url') || undefined;\r\n this.button = this.querySelector('button') || undefined;\r\n this.offset = Number(this.getAttribute('data-tk-offset')) || 4;\r\n }\r\n\r\n connectedCallback(): void {\r\n if (!this.url) throw new Error('Dialog: URL is missing!');\r\n this.registerClickListener();\r\n }\r\n\r\n registerClickListener(): void {\r\n if (!this.button) return;\r\n const onClick = this.openDialog.bind(this, this.url!);\r\n this.pushListener({ event: 'click', element: this.button, action: onClick });\r\n }\r\n\r\n registerCloseListener(): void {\r\n const onClick = this.closeDialogIfOutside.bind(this);\r\n this.pushListener({ event: 'click', element: window, action: onClick });\r\n }\r\n\r\n createDialog() {\r\n this.popup = this.render();\r\n const onClosed = this.closedDialog.bind(this);\r\n this.pushListener({ event: 'close', element: this.popup, action: onClosed });\r\n }\r\n\r\n openDialog(url: string) {\r\n this.getContent(url);\r\n // This method would be used to execute code in a non-blocking way to prevent potential delays.\r\n setTimeout(() => {\r\n this.registerCloseListener();\r\n });\r\n }\r\n\r\n getContent(url: string): void {\r\n fetchRequest({\r\n requestURL: url,\r\n resolveHandler: this.handleResponseSuccess.bind(this, url),\r\n });\r\n }\r\n\r\n getContentWithData(url: string, payload: Record): void {\r\n fetchRequest({\r\n requestURL: url,\r\n resolveHandler: this.handleResponseSuccess.bind(this, url),\r\n payload,\r\n });\r\n }\r\n\r\n handleResponseSuccess(url: string, response: TKResponse): void {\r\n if (response && response.success) {\r\n this.createDialog();\r\n const content = this.popup?.querySelector('[data-tk-dialog-content]');\r\n if (!content) return;\r\n content.innerHTML = response.dataAsHtml;\r\n this.open();\r\n }\r\n }\r\n\r\n open() {\r\n if (!this.popup) return;\r\n this.setPosition(this.popup);\r\n this.popup.show();\r\n }\r\n\r\n static attachButtonClickHandler(\r\n dialog: HTMLDialogElement,\r\n selector: string,\r\n callback: (button: HTMLButtonElement) => void,\r\n ): void {\r\n const buttons = dialog.querySelectorAll(selector);\r\n buttons.forEach((button) => {\r\n button.addEventListener('click', () => callback(button));\r\n });\r\n }\r\n\r\n closedDialog(): void {\r\n this.removeListener(window);\r\n this.popup?.remove();\r\n }\r\n\r\n render() {\r\n const dialog = render(`\r\n \r\n \r\n
\r\n
\r\n `);\r\n document.body.insertAdjacentElement('beforeend', dialog);\r\n TKPopup.attachButtonClickHandler(\r\n dialog,\r\n '[data-tk-dialog-close]',\r\n () => dialog.close(),\r\n );\r\n return dialog;\r\n }\r\n\r\n setPosition(element: HTMLElement) {\r\n const {\r\n top, height, left, right,\r\n } = this.button!.getBoundingClientRect();\r\n const leftPosition = left + window.scrollX;\r\n const rightPosition = right + window.scrollX;\r\n\r\n element.style.top = `${top + height + window.scrollY + this.offset}px`;\r\n\r\n if (window.innerWidth <= element.clientWidth + leftPosition) {\r\n element.style.left = `${rightPosition - element.clientWidth}px`;\r\n } else {\r\n element.style.left = `${leftPosition}px`;\r\n }\r\n }\r\n\r\n closeDialogIfOutside(event: MouseEvent) {\r\n /**\r\n * Checking the coordinates of the client for the value 0 and the\r\n * HTMLSelectElement or HTMLOptionElement element ensures that the\r\n * dialogue does not close in Mozilla. This is a bug in Firefox\r\n * that has not yet been fixed.\r\n */\r\n if (!this.popup) return;\r\n if (\r\n event.clientX === 0\r\n && event.clientY === 0\r\n && (event.target instanceof HTMLSelectElement || event.target instanceof HTMLOptionElement)\r\n ) return;\r\n const dialogDimensions = this.popup.getBoundingClientRect();\r\n if (\r\n event.clientX < dialogDimensions.left\r\n || event.clientX > dialogDimensions.right\r\n || event.clientY < dialogDimensions.top\r\n || event.clientY > dialogDimensions.bottom\r\n ) {\r\n this.popup.close();\r\n }\r\n }\r\n}\r\n","import TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\nimport { fetchRequest } from '@tk/utilities/tk.fetch';\r\nimport TKArticleList from '@tk/components/tk.article.list';\r\nimport showDimmer from '@tk/utilities/tk.dimmer';\r\nimport render from '@tk/utilities/tk.render';\r\nimport { getCurrentURI, removePersistentView } from '@tk/utilities/tk.storage';\r\n\r\nexport default class TKArticleListSort extends TKCustomElementFactory {\r\n buttons: NodeListOf;\r\n action: string;\r\n sortFieldName: string;\r\n articleList?: TKArticleList;\r\n headerElement?: HTMLElement;\r\n gridElement?: HTMLElement;\r\n pagingElement?: HTMLElement;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.buttons = this.querySelectorAll('button');\r\n this.action = this.getAttribute('data-tk-action') || window.location.href;\r\n this.sortFieldName = this.getAttribute('data-tk-article-list-sort-name') || 'field-sort';\r\n this.articleList = document.querySelector('[data-tk-article-list-to-sort]') || undefined;\r\n this.headerElement = this.articleList?.querySelector('[data-tk-article-list-header]') || undefined;\r\n this.gridElement = this.articleList?.querySelector('[data-tk-article-list-grid]') || undefined;\r\n this.pagingElement = this.articleList?.querySelector('[data-tk-article-list-paging]') || undefined;\r\n }\r\n\r\n connectedCallback(): void {\r\n if (!this.articleList) throw new Error('TKArticleListSort: Article list is missing!');\r\n this.registerClickListener();\r\n }\r\n\r\n registerClickListener() {\r\n const onClick = this.sortList.bind(this);\r\n this.buttons.forEach((button) => {\r\n this.pushListener({ event: 'click', element: button, action: onClick });\r\n });\r\n }\r\n\r\n sortList(event: Event) {\r\n if (!event.target) return;\r\n const { value } = event.currentTarget as HTMLButtonElement;\r\n const data = {\r\n [this.sortFieldName]: value,\r\n originalUrl: window.location.href,\r\n };\r\n const dimmer = showDimmer();\r\n fetchRequest({\r\n requestURL: this.action,\r\n resolveHandler: this.refreshResultList.bind(this),\r\n payload: data,\r\n }).finally(() => {\r\n this.remove();\r\n dimmer.remove();\r\n });\r\n }\r\n\r\n refreshResultList(response: TKResponse) {\r\n if (!response || !response.success) return;\r\n const html = render(response.dataAsHtml);\r\n const headerElement = html.querySelector('[data-tk-article-list-header]');\r\n const gridElement = html.querySelector('[data-tk-article-list-grid]');\r\n const pagingElement = html.querySelector('[data-tk-article-list-paging]');\r\n if (headerElement) this.headerElement!.innerHTML = headerElement.innerHTML;\r\n if (gridElement) this.gridElement!.innerHTML = gridElement.innerHTML;\r\n if (this.pagingElement && pagingElement) {\r\n this.pagingElement.innerHTML = pagingElement.innerHTML;\r\n }\r\n removePersistentView(getCurrentURI());\r\n }\r\n}\r\n","import render from '@tk/utilities/tk.render';\n\nconst showDimmer = () => {\n const dimmer = render('
');\n const dialog = Array.from(document.querySelectorAll('dialog[open]'));\n dialog.length > 0\n ? dialog.at(-1)?.insertAdjacentElement('beforeend', dimmer)\n : document.body.insertAdjacentElement('beforeend', dimmer);\n return dimmer;\n};\n\nexport default showDimmer;\n","import sanitize from './tk.sanitize';\n\nexport const getCurrentURI = () => `${window.location.pathname}${window.location.search}`;\n\nexport const removeSessionStorage = (key: string) => {\n window.sessionStorage.removeItem(key);\n return true;\n};\n\nexport const removePersistentView = (url: string) => removeSessionStorage(url);\n\nexport const setSessionStorage = (key: string, value: string) => {\n window.sessionStorage.setItem(key, value);\n return true;\n};\n\nexport const getSessionStorage = (key: string) => window.sessionStorage.getItem(key);\n\nexport const getPersistentView = (url: string, replaceSelectors = true) => {\n const data: PersistentViewItem[] = JSON.parse(getSessionStorage(url) || '[]');\n if (!replaceSelectors) return data;\n data.forEach((item) => {\n const wrapper = document.querySelector(item.selector);\n if (!wrapper) return;\n wrapper.outerHTML = sanitize(item.element);\n });\n};\n\nexport const setPersistentView = (url: string, ...selectors: string[]) => {\n const data: PersistentViewItem[] = [];\n selectors.forEach((selector) => {\n data.push({\n selector: '',\n element: document.querySelector(selector)?.outerHTML || '',\n });\n });\n return setSessionStorage(url, JSON.stringify(data));\n};\n\nexport const removeAllPersistentViews = (url: string) => {\n Object.keys(window.sessionStorage).forEach((item) => {\n if (!(item === url || item.includes('take=async'))) return;\n removeSessionStorage(item);\n });\n};\n","import DOMPurify from 'dompurify';\n\nconst sanitize = (content: string) => DOMPurify.sanitize(content, {\n RETURN_DOM_FRAGMENT: false,\n RETURN_DOM: false,\n USE_PROFILES: {\n html: true,\n svg: true,\n svgFilters: true,\n },\n ADD_TAGS: ['use'],\n});\n\nexport default sanitize;\n",null,"const {\n entries,\n setPrototypeOf,\n isFrozen,\n getPrototypeOf,\n getOwnPropertyDescriptor,\n} = Object;\n\nlet { freeze, seal, create } = Object; // eslint-disable-line import/no-mutable-exports\nlet { apply, construct } = typeof Reflect !== 'undefined' && Reflect;\n\nif (!freeze) {\n freeze = function (x) {\n return x;\n };\n}\n\nif (!seal) {\n seal = function (x) {\n return x;\n };\n}\n\nif (!apply) {\n apply = function (fun, thisValue, args) {\n return fun.apply(thisValue, args);\n };\n}\n\nif (!construct) {\n construct = function (Func, args) {\n return new Func(...args);\n };\n}\n\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayIndexOf = unapply(Array.prototype.indexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySlice = unapply(Array.prototype.slice);\n\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\n\nconst objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\n\nconst regExpTest = unapply(RegExp.prototype.test);\n\nconst typeErrorCreate = unconstruct(TypeError);\n\n/**\n * Creates a new function that calls the given function with a specified thisArg and arguments.\n *\n * @param {Function} func - The function to be wrapped and called.\n * @returns {Function} A new function that calls the given function with a specified thisArg and arguments.\n */\nfunction unapply(func) {\n return (thisArg, ...args) => apply(func, thisArg, args);\n}\n\n/**\n * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n *\n * @param {Function} func - The constructor function to be wrapped and called.\n * @returns {Function} A new function that constructs an instance of the given constructor function with the provided arguments.\n */\nfunction unconstruct(func) {\n return (...args) => construct(func, args);\n}\n\n/**\n * Add properties to a lookup table\n *\n * @param {Object} set - The set to which elements will be added.\n * @param {Array} array - The array containing elements to be added to the set.\n * @param {Function} transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n * @returns {Object} The modified set with added elements.\n */\nfunction addToSet(set, array, transformCaseFunc = stringToLowerCase) {\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n\n let l = array.length;\n while (l--) {\n let element = array[l];\n if (typeof element === 'string') {\n const lcElement = transformCaseFunc(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n\n element = lcElement;\n }\n }\n\n set[element] = true;\n }\n\n return set;\n}\n\n/**\n * Clean up an array to harden against CSPP\n *\n * @param {Array} array - The array to be cleaned.\n * @returns {Array} The cleaned version of the array\n */\nfunction cleanArray(array) {\n for (let index = 0; index < array.length; index++) {\n const isPropertyExist = objectHasOwnProperty(array, index);\n\n if (!isPropertyExist) {\n array[index] = null;\n }\n }\n\n return array;\n}\n\n/**\n * Shallow clone an object\n *\n * @param {Object} object - The object to be cloned.\n * @returns {Object} A new object that copies the original.\n */\nfunction clone(object) {\n const newObject = create(null);\n\n for (const [property, value] of entries(object)) {\n const isPropertyExist = objectHasOwnProperty(object, property);\n\n if (isPropertyExist) {\n if (Array.isArray(value)) {\n newObject[property] = cleanArray(value);\n } else if (\n value &&\n typeof value === 'object' &&\n value.constructor === Object\n ) {\n newObject[property] = clone(value);\n } else {\n newObject[property] = value;\n }\n }\n }\n\n return newObject;\n}\n\n/**\n * This method automatically checks if the prop is function or getter and behaves accordingly.\n *\n * @param {Object} object - The object to look up the getter function in its prototype chain.\n * @param {String} prop - The property name for which to find the getter function.\n * @returns {Function} The getter function found in the prototype chain or a fallback function.\n */\nfunction lookupGetter(object, prop) {\n while (object !== null) {\n const desc = getOwnPropertyDescriptor(object, prop);\n\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n\n object = getPrototypeOf(object);\n }\n\n function fallbackValue() {\n return null;\n }\n\n return fallbackValue;\n}\n\nexport {\n // Array\n arrayForEach,\n arrayIndexOf,\n arrayPop,\n arrayPush,\n arraySlice,\n // Object\n entries,\n freeze,\n getPrototypeOf,\n getOwnPropertyDescriptor,\n isFrozen,\n setPrototypeOf,\n seal,\n clone,\n create,\n objectHasOwnProperty,\n // RegExp\n regExpTest,\n // String\n stringIndexOf,\n stringMatch,\n stringReplace,\n stringToLowerCase,\n stringToString,\n stringTrim,\n // Errors\n typeErrorCreate,\n // Other\n lookupGetter,\n addToSet,\n // Reflect\n unapply,\n unconstruct,\n};\n","import { freeze } from './utils.js';\n\nexport const html = freeze([\n 'a',\n 'abbr',\n 'acronym',\n 'address',\n 'area',\n 'article',\n 'aside',\n 'audio',\n 'b',\n 'bdi',\n 'bdo',\n 'big',\n 'blink',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'center',\n 'cite',\n 'code',\n 'col',\n 'colgroup',\n 'content',\n 'data',\n 'datalist',\n 'dd',\n 'decorator',\n 'del',\n 'details',\n 'dfn',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'element',\n 'em',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'font',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hgroup',\n 'hr',\n 'html',\n 'i',\n 'img',\n 'input',\n 'ins',\n 'kbd',\n 'label',\n 'legend',\n 'li',\n 'main',\n 'map',\n 'mark',\n 'marquee',\n 'menu',\n 'menuitem',\n 'meter',\n 'nav',\n 'nobr',\n 'ol',\n 'optgroup',\n 'option',\n 'output',\n 'p',\n 'picture',\n 'pre',\n 'progress',\n 'q',\n 'rp',\n 'rt',\n 'ruby',\n 's',\n 'samp',\n 'section',\n 'select',\n 'shadow',\n 'small',\n 'source',\n 'spacer',\n 'span',\n 'strike',\n 'strong',\n 'style',\n 'sub',\n 'summary',\n 'sup',\n 'table',\n 'tbody',\n 'td',\n 'template',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'time',\n 'tr',\n 'track',\n 'tt',\n 'u',\n 'ul',\n 'var',\n 'video',\n 'wbr',\n]);\n\n// SVG\nexport const svg = freeze([\n 'svg',\n 'a',\n 'altglyph',\n 'altglyphdef',\n 'altglyphitem',\n 'animatecolor',\n 'animatemotion',\n 'animatetransform',\n 'circle',\n 'clippath',\n 'defs',\n 'desc',\n 'ellipse',\n 'filter',\n 'font',\n 'g',\n 'glyph',\n 'glyphref',\n 'hkern',\n 'image',\n 'line',\n 'lineargradient',\n 'marker',\n 'mask',\n 'metadata',\n 'mpath',\n 'path',\n 'pattern',\n 'polygon',\n 'polyline',\n 'radialgradient',\n 'rect',\n 'stop',\n 'style',\n 'switch',\n 'symbol',\n 'text',\n 'textpath',\n 'title',\n 'tref',\n 'tspan',\n 'view',\n 'vkern',\n]);\n\nexport const svgFilters = freeze([\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feDistantLight',\n 'feDropShadow',\n 'feFlood',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMergeNode',\n 'feMorphology',\n 'feOffset',\n 'fePointLight',\n 'feSpecularLighting',\n 'feSpotLight',\n 'feTile',\n 'feTurbulence',\n]);\n\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nexport const svgDisallowed = freeze([\n 'animate',\n 'color-profile',\n 'cursor',\n 'discard',\n 'font-face',\n 'font-face-format',\n 'font-face-name',\n 'font-face-src',\n 'font-face-uri',\n 'foreignobject',\n 'hatch',\n 'hatchpath',\n 'mesh',\n 'meshgradient',\n 'meshpatch',\n 'meshrow',\n 'missing-glyph',\n 'script',\n 'set',\n 'solidcolor',\n 'unknown',\n 'use',\n]);\n\nexport const mathMl = freeze([\n 'math',\n 'menclose',\n 'merror',\n 'mfenced',\n 'mfrac',\n 'mglyph',\n 'mi',\n 'mlabeledtr',\n 'mmultiscripts',\n 'mn',\n 'mo',\n 'mover',\n 'mpadded',\n 'mphantom',\n 'mroot',\n 'mrow',\n 'ms',\n 'mspace',\n 'msqrt',\n 'mstyle',\n 'msub',\n 'msup',\n 'msubsup',\n 'mtable',\n 'mtd',\n 'mtext',\n 'mtr',\n 'munder',\n 'munderover',\n 'mprescripts',\n]);\n\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nexport const mathMlDisallowed = freeze([\n 'maction',\n 'maligngroup',\n 'malignmark',\n 'mlongdiv',\n 'mscarries',\n 'mscarry',\n 'msgroup',\n 'mstack',\n 'msline',\n 'msrow',\n 'semantics',\n 'annotation',\n 'annotation-xml',\n 'mprescripts',\n 'none',\n]);\n\nexport const text = freeze(['#text']);\n","import { freeze } from './utils.js';\n\nexport const html = freeze([\n 'accept',\n 'action',\n 'align',\n 'alt',\n 'autocapitalize',\n 'autocomplete',\n 'autopictureinpicture',\n 'autoplay',\n 'background',\n 'bgcolor',\n 'border',\n 'capture',\n 'cellpadding',\n 'cellspacing',\n 'checked',\n 'cite',\n 'class',\n 'clear',\n 'color',\n 'cols',\n 'colspan',\n 'controls',\n 'controlslist',\n 'coords',\n 'crossorigin',\n 'datetime',\n 'decoding',\n 'default',\n 'dir',\n 'disabled',\n 'disablepictureinpicture',\n 'disableremoteplayback',\n 'download',\n 'draggable',\n 'enctype',\n 'enterkeyhint',\n 'face',\n 'for',\n 'headers',\n 'height',\n 'hidden',\n 'high',\n 'href',\n 'hreflang',\n 'id',\n 'inputmode',\n 'integrity',\n 'ismap',\n 'kind',\n 'label',\n 'lang',\n 'list',\n 'loading',\n 'loop',\n 'low',\n 'max',\n 'maxlength',\n 'media',\n 'method',\n 'min',\n 'minlength',\n 'multiple',\n 'muted',\n 'name',\n 'nonce',\n 'noshade',\n 'novalidate',\n 'nowrap',\n 'open',\n 'optimum',\n 'pattern',\n 'placeholder',\n 'playsinline',\n 'poster',\n 'preload',\n 'pubdate',\n 'radiogroup',\n 'readonly',\n 'rel',\n 'required',\n 'rev',\n 'reversed',\n 'role',\n 'rows',\n 'rowspan',\n 'spellcheck',\n 'scope',\n 'selected',\n 'shape',\n 'size',\n 'sizes',\n 'span',\n 'srclang',\n 'start',\n 'src',\n 'srcset',\n 'step',\n 'style',\n 'summary',\n 'tabindex',\n 'title',\n 'translate',\n 'type',\n 'usemap',\n 'valign',\n 'value',\n 'width',\n 'wrap',\n 'xmlns',\n 'slot',\n]);\n\nexport const svg = freeze([\n 'accent-height',\n 'accumulate',\n 'additive',\n 'alignment-baseline',\n 'ascent',\n 'attributename',\n 'attributetype',\n 'azimuth',\n 'basefrequency',\n 'baseline-shift',\n 'begin',\n 'bias',\n 'by',\n 'class',\n 'clip',\n 'clippathunits',\n 'clip-path',\n 'clip-rule',\n 'color',\n 'color-interpolation',\n 'color-interpolation-filters',\n 'color-profile',\n 'color-rendering',\n 'cx',\n 'cy',\n 'd',\n 'dx',\n 'dy',\n 'diffuseconstant',\n 'direction',\n 'display',\n 'divisor',\n 'dur',\n 'edgemode',\n 'elevation',\n 'end',\n 'fill',\n 'fill-opacity',\n 'fill-rule',\n 'filter',\n 'filterunits',\n 'flood-color',\n 'flood-opacity',\n 'font-family',\n 'font-size',\n 'font-size-adjust',\n 'font-stretch',\n 'font-style',\n 'font-variant',\n 'font-weight',\n 'fx',\n 'fy',\n 'g1',\n 'g2',\n 'glyph-name',\n 'glyphref',\n 'gradientunits',\n 'gradienttransform',\n 'height',\n 'href',\n 'id',\n 'image-rendering',\n 'in',\n 'in2',\n 'k',\n 'k1',\n 'k2',\n 'k3',\n 'k4',\n 'kerning',\n 'keypoints',\n 'keysplines',\n 'keytimes',\n 'lang',\n 'lengthadjust',\n 'letter-spacing',\n 'kernelmatrix',\n 'kernelunitlength',\n 'lighting-color',\n 'local',\n 'marker-end',\n 'marker-mid',\n 'marker-start',\n 'markerheight',\n 'markerunits',\n 'markerwidth',\n 'maskcontentunits',\n 'maskunits',\n 'max',\n 'mask',\n 'media',\n 'method',\n 'mode',\n 'min',\n 'name',\n 'numoctaves',\n 'offset',\n 'operator',\n 'opacity',\n 'order',\n 'orient',\n 'orientation',\n 'origin',\n 'overflow',\n 'paint-order',\n 'path',\n 'pathlength',\n 'patterncontentunits',\n 'patterntransform',\n 'patternunits',\n 'points',\n 'preservealpha',\n 'preserveaspectratio',\n 'primitiveunits',\n 'r',\n 'rx',\n 'ry',\n 'radius',\n 'refx',\n 'refy',\n 'repeatcount',\n 'repeatdur',\n 'restart',\n 'result',\n 'rotate',\n 'scale',\n 'seed',\n 'shape-rendering',\n 'specularconstant',\n 'specularexponent',\n 'spreadmethod',\n 'startoffset',\n 'stddeviation',\n 'stitchtiles',\n 'stop-color',\n 'stop-opacity',\n 'stroke-dasharray',\n 'stroke-dashoffset',\n 'stroke-linecap',\n 'stroke-linejoin',\n 'stroke-miterlimit',\n 'stroke-opacity',\n 'stroke',\n 'stroke-width',\n 'style',\n 'surfacescale',\n 'systemlanguage',\n 'tabindex',\n 'targetx',\n 'targety',\n 'transform',\n 'transform-origin',\n 'text-anchor',\n 'text-decoration',\n 'text-rendering',\n 'textlength',\n 'type',\n 'u1',\n 'u2',\n 'unicode',\n 'values',\n 'viewbox',\n 'visibility',\n 'version',\n 'vert-adv-y',\n 'vert-origin-x',\n 'vert-origin-y',\n 'width',\n 'word-spacing',\n 'wrap',\n 'writing-mode',\n 'xchannelselector',\n 'ychannelselector',\n 'x',\n 'x1',\n 'x2',\n 'xmlns',\n 'y',\n 'y1',\n 'y2',\n 'z',\n 'zoomandpan',\n]);\n\nexport const mathMl = freeze([\n 'accent',\n 'accentunder',\n 'align',\n 'bevelled',\n 'close',\n 'columnsalign',\n 'columnlines',\n 'columnspan',\n 'denomalign',\n 'depth',\n 'dir',\n 'display',\n 'displaystyle',\n 'encoding',\n 'fence',\n 'frame',\n 'height',\n 'href',\n 'id',\n 'largeop',\n 'length',\n 'linethickness',\n 'lspace',\n 'lquote',\n 'mathbackground',\n 'mathcolor',\n 'mathsize',\n 'mathvariant',\n 'maxsize',\n 'minsize',\n 'movablelimits',\n 'notation',\n 'numalign',\n 'open',\n 'rowalign',\n 'rowlines',\n 'rowspacing',\n 'rowspan',\n 'rspace',\n 'rquote',\n 'scriptlevel',\n 'scriptminsize',\n 'scriptsizemultiplier',\n 'selection',\n 'separator',\n 'separators',\n 'stretchy',\n 'subscriptshift',\n 'supscriptshift',\n 'symmetric',\n 'voffset',\n 'width',\n 'xmlns',\n]);\n\nexport const xml = freeze([\n 'xlink:href',\n 'xml:id',\n 'xlink:title',\n 'xml:space',\n 'xmlns:xlink',\n]);\n","import { seal } from './utils.js';\n\n// eslint-disable-next-line unicorn/better-regex\nexport const MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\nexport const ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\nexport const TMPLIT_EXPR = seal(/\\${[\\w\\W]*}/gm);\nexport const DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]/); // eslint-disable-line no-useless-escape\nexport const ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nexport const IS_ALLOWED_URI = seal(\n /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nexport const IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nexport const ATTR_WHITESPACE = seal(\n /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\nexport const DOCTYPE_NAME = seal(/^html$/i);\nexport const CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n","import * as TAGS from './tags.js';\nimport * as ATTRS from './attrs.js';\nimport * as EXPRESSIONS from './regexp.js';\nimport {\n addToSet,\n clone,\n entries,\n freeze,\n arrayForEach,\n arrayPop,\n arrayPush,\n stringMatch,\n stringReplace,\n stringToLowerCase,\n stringToString,\n stringIndexOf,\n stringTrim,\n regExpTest,\n typeErrorCreate,\n lookupGetter,\n create,\n objectHasOwnProperty,\n} from './utils.js';\n\nconst getGlobal = function () {\n return typeof window === 'undefined' ? null : window;\n};\n\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param {TrustedTypePolicyFactory} trustedTypes The policy factory.\n * @param {HTMLScriptElement} purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return {TrustedTypePolicy} The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\nconst _createTrustedTypesPolicy = function (trustedTypes, purifyHostElement) {\n if (\n typeof trustedTypes !== 'object' ||\n typeof trustedTypes.createPolicy !== 'function'\n ) {\n return null;\n }\n\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n let suffix = null;\n const ATTR_NAME = 'data-tt-policy-suffix';\n if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n suffix = purifyHostElement.getAttribute(ATTR_NAME);\n }\n\n const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML(html) {\n return html;\n },\n createScriptURL(scriptUrl) {\n return scriptUrl;\n },\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn(\n 'TrustedTypes policy ' + policyName + ' could not be created.'\n );\n return null;\n }\n};\n\nfunction createDOMPurify(window = getGlobal()) {\n const DOMPurify = (root) => createDOMPurify(root);\n\n /**\n * Version label, exposed for easier checks\n * if DOMPurify is up to date or not\n */\n DOMPurify.version = VERSION;\n\n /**\n * Array of elements that DOMPurify removed during sanitation.\n * Empty if nothing was removed.\n */\n DOMPurify.removed = [];\n\n if (!window || !window.document || window.document.nodeType !== 9) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n\n return DOMPurify;\n }\n\n let { document } = window;\n\n const originalDocument = document;\n const currentScript = originalDocument.currentScript;\n const {\n DocumentFragment,\n HTMLTemplateElement,\n Node,\n Element,\n NodeFilter,\n NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n HTMLFormElement,\n DOMParser,\n trustedTypes,\n } = window;\n\n const ElementPrototype = Element.prototype;\n\n const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n const template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n\n let trustedTypesPolicy;\n let emptyHTML = '';\n\n const {\n implementation,\n createNodeIterator,\n createDocumentFragment,\n getElementsByTagName,\n } = document;\n const { importNode } = originalDocument;\n\n let hooks = {};\n\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported =\n typeof entries === 'function' &&\n typeof getParentNode === 'function' &&\n implementation &&\n implementation.createHTMLDocument !== undefined;\n\n const {\n MUSTACHE_EXPR,\n ERB_EXPR,\n TMPLIT_EXPR,\n DATA_ATTR,\n ARIA_ATTR,\n IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE,\n CUSTOM_ELEMENT,\n } = EXPRESSIONS;\n\n let { IS_ALLOWED_URI } = EXPRESSIONS;\n\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n\n /* allowed element names */\n let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [\n ...TAGS.html,\n ...TAGS.svg,\n ...TAGS.svgFilters,\n ...TAGS.mathMl,\n ...TAGS.text,\n ]);\n\n /* Allowed attribute names */\n let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [\n ...ATTRS.html,\n ...ATTRS.svg,\n ...ATTRS.mathMl,\n ...ATTRS.xml,\n ]);\n\n /*\n * Configure how DOMPUrify should handle custom elements and their attributes as well as customized built-in elements.\n * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n */\n let CUSTOM_ELEMENT_HANDLING = Object.seal(\n create(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null,\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null,\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false,\n },\n })\n );\n\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n let FORBID_TAGS = null;\n\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n let FORBID_ATTR = null;\n\n /* Decide if ARIA attributes are okay */\n let ALLOW_ARIA_ATTR = true;\n\n /* Decide if custom data attributes are okay */\n let ALLOW_DATA_ATTR = true;\n\n /* Decide if unknown protocols are okay */\n let ALLOW_UNKNOWN_PROTOCOLS = false;\n\n /* Decide if self-closing tags in attributes are allowed.\n * Usually removed due to a mXSS issue in jQuery 3.0 */\n let ALLOW_SELF_CLOSE_IN_ATTR = true;\n\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n let SAFE_FOR_TEMPLATES = false;\n\n /* Output should be safe even for XML used within HTML and alike.\n * This means, DOMPurify removes comments when containing risky content.\n */\n let SAFE_FOR_XML = true;\n\n /* Decide if document with ... should be returned */\n let WHOLE_DOCUMENT = false;\n\n /* Track whether config is already set on this instance of DOMPurify. */\n let SET_CONFIG = false;\n\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n let FORCE_BODY = false;\n\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n let RETURN_DOM = false;\n\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n let RETURN_DOM_FRAGMENT = false;\n\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n let RETURN_TRUSTED_TYPE = false;\n\n /* Output should be free from DOM clobbering attacks?\n * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n */\n let SANITIZE_DOM = true;\n\n /* Achieve full DOM Clobbering protection by isolating the namespace of named\n * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n *\n * HTML/DOM spec rules that enable DOM Clobbering:\n * - Named Access on Window (§7.3.3)\n * - DOM Tree Accessors (§3.1.5)\n * - Form Element Parent-Child Relations (§4.10.3)\n * - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n * - HTMLCollection (§4.2.10.2)\n *\n * Namespace isolation is implemented by prefixing `id` and `name` attributes\n * with a constant string, i.e., `user-content-`\n */\n let SANITIZE_NAMED_PROPS = false;\n const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n\n /* Keep element content when removing element? */\n let KEEP_CONTENT = true;\n\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n let IN_PLACE = false;\n\n /* Allow usage of profiles like html, svg and mathMl */\n let USE_PROFILES = {};\n\n /* Tags to ignore content of when KEEP_CONTENT is true */\n let FORBID_CONTENTS = null;\n const DEFAULT_FORBID_CONTENTS = addToSet({}, [\n 'annotation-xml',\n 'audio',\n 'colgroup',\n 'desc',\n 'foreignobject',\n 'head',\n 'iframe',\n 'math',\n 'mi',\n 'mn',\n 'mo',\n 'ms',\n 'mtext',\n 'noembed',\n 'noframes',\n 'noscript',\n 'plaintext',\n 'script',\n 'style',\n 'svg',\n 'template',\n 'thead',\n 'title',\n 'video',\n 'xmp',\n ]);\n\n /* Tags that are safe for data: URIs */\n let DATA_URI_TAGS = null;\n const DEFAULT_DATA_URI_TAGS = addToSet({}, [\n 'audio',\n 'video',\n 'img',\n 'source',\n 'image',\n 'track',\n ]);\n\n /* Attributes safe for values like \"javascript:\" */\n let URI_SAFE_ATTRIBUTES = null;\n const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, [\n 'alt',\n 'class',\n 'for',\n 'id',\n 'label',\n 'name',\n 'pattern',\n 'placeholder',\n 'role',\n 'summary',\n 'title',\n 'value',\n 'style',\n 'xmlns',\n ]);\n\n const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */\n let NAMESPACE = HTML_NAMESPACE;\n let IS_EMPTY_INPUT = false;\n\n /* Allowed XHTML+XML namespaces */\n let ALLOWED_NAMESPACES = null;\n const DEFAULT_ALLOWED_NAMESPACES = addToSet(\n {},\n [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE],\n stringToString\n );\n\n /* Parsing of strict XHTML documents */\n let PARSER_MEDIA_TYPE = null;\n const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n let transformCaseFunc = null;\n\n /* Keep a reference to config to pass to hooks */\n let CONFIG = null;\n\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n\n const formElement = document.createElement('form');\n\n const isRegexOrFunction = function (testValue) {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n\n /**\n * _parseConfig\n *\n * @param {Object} cfg optional config literal\n */\n // eslint-disable-next-line complexity\n const _parseConfig = function (cfg = {}) {\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n\n /* Shield configuration object from tampering */\n if (!cfg || typeof cfg !== 'object') {\n cfg = {};\n }\n\n /* Shield configuration object from prototype pollution */\n cfg = clone(cfg);\n\n PARSER_MEDIA_TYPE =\n // eslint-disable-next-line unicorn/prefer-includes\n SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1\n ? DEFAULT_PARSER_MEDIA_TYPE\n : cfg.PARSER_MEDIA_TYPE;\n\n // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n transformCaseFunc =\n PARSER_MEDIA_TYPE === 'application/xhtml+xml'\n ? stringToString\n : stringToLowerCase;\n\n /* Set configuration parameters */\n ALLOWED_TAGS = objectHasOwnProperty(cfg, 'ALLOWED_TAGS')\n ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc)\n : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR = objectHasOwnProperty(cfg, 'ALLOWED_ATTR')\n ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc)\n : DEFAULT_ALLOWED_ATTR;\n ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES')\n ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString)\n : DEFAULT_ALLOWED_NAMESPACES;\n URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR')\n ? addToSet(\n clone(DEFAULT_URI_SAFE_ATTRIBUTES), // eslint-disable-line indent\n cfg.ADD_URI_SAFE_ATTR, // eslint-disable-line indent\n transformCaseFunc // eslint-disable-line indent\n ) // eslint-disable-line indent\n : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS')\n ? addToSet(\n clone(DEFAULT_DATA_URI_TAGS), // eslint-disable-line indent\n cfg.ADD_DATA_URI_TAGS, // eslint-disable-line indent\n transformCaseFunc // eslint-disable-line indent\n ) // eslint-disable-line indent\n : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS = objectHasOwnProperty(cfg, 'FORBID_CONTENTS')\n ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc)\n : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS = objectHasOwnProperty(cfg, 'FORBID_TAGS')\n ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc)\n : {};\n FORBID_ATTR = objectHasOwnProperty(cfg, 'FORBID_ATTR')\n ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc)\n : {};\n USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES')\n ? cfg.USE_PROFILES\n : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI = cfg.ALLOWED_URI_REGEXP || EXPRESSIONS.IS_ALLOWED_URI;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n if (\n cfg.CUSTOM_ELEMENT_HANDLING &&\n isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)\n ) {\n CUSTOM_ELEMENT_HANDLING.tagNameCheck =\n cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n }\n\n if (\n cfg.CUSTOM_ELEMENT_HANDLING &&\n isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)\n ) {\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck =\n cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n }\n\n if (\n cfg.CUSTOM_ELEMENT_HANDLING &&\n typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements ===\n 'boolean'\n ) {\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements =\n cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n }\n\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, TAGS.text);\n ALLOWED_ATTR = [];\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, TAGS.html);\n addToSet(ALLOWED_ATTR, ATTRS.html);\n }\n\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, TAGS.svg);\n addToSet(ALLOWED_ATTR, ATTRS.svg);\n addToSet(ALLOWED_ATTR, ATTRS.xml);\n }\n\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, TAGS.svgFilters);\n addToSet(ALLOWED_ATTR, ATTRS.svg);\n addToSet(ALLOWED_ATTR, ATTRS.xml);\n }\n\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, TAGS.mathMl);\n addToSet(ALLOWED_ATTR, ATTRS.mathMl);\n addToSet(ALLOWED_ATTR, ATTRS.xml);\n }\n }\n\n /* Merge configuration parameters */\n if (cfg.ADD_TAGS) {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n }\n\n if (cfg.ADD_ATTR) {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n }\n\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n }\n\n if (cfg.FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n\n addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n }\n\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n\n if (cfg.TRUSTED_TYPES_POLICY) {\n if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n throw typeErrorCreate(\n 'TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.'\n );\n }\n\n if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n throw typeErrorCreate(\n 'TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.'\n );\n }\n\n // Overwrite existing TrustedTypes policy.\n trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n\n // Sign local variables required by `sanitize`.\n emptyHTML = trustedTypesPolicy.createHTML('');\n } else {\n // Uninitialized policy, attempt to initialize the internal dompurify policy.\n if (trustedTypesPolicy === undefined) {\n trustedTypesPolicy = _createTrustedTypesPolicy(\n trustedTypes,\n currentScript\n );\n }\n\n // If creating the internal policy succeeded sign internal variables.\n if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n emptyHTML = trustedTypesPolicy.createHTML('');\n }\n }\n\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n\n CONFIG = cfg;\n };\n\n const MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, [\n 'mi',\n 'mo',\n 'mn',\n 'ms',\n 'mtext',\n ]);\n\n const HTML_INTEGRATION_POINTS = addToSet({}, [\n 'foreignobject',\n 'desc',\n 'title',\n 'annotation-xml',\n ]);\n\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erroneously deleted from\n // HTML namespace.\n const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, [\n 'title',\n 'style',\n 'font',\n 'a',\n 'script',\n ]);\n\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n const ALL_SVG_TAGS = addToSet({}, [\n ...TAGS.svg,\n ...TAGS.svgFilters,\n ...TAGS.svgDisallowed,\n ]);\n const ALL_MATHML_TAGS = addToSet({}, [\n ...TAGS.mathMl,\n ...TAGS.mathMlDisallowed,\n ]);\n\n /**\n * @param {Element} element a DOM element whose namespace is being checked\n * @returns {boolean} Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n const _checkValidNamespace = function (element) {\n let parent = getParentNode(element);\n\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: NAMESPACE,\n tagName: 'template',\n };\n }\n\n const tagName = stringToLowerCase(element.tagName);\n const parentTagName = stringToLowerCase(parent.tagName);\n\n if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n return false;\n }\n\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n\n // The only way to switch from MathML to SVG is via`\n // svg if parent is either or MathML\n // text integration points.\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return (\n tagName === 'svg' &&\n (parentTagName === 'annotation-xml' ||\n MATHML_TEXT_INTEGRATION_POINTS[parentTagName])\n );\n }\n\n // We only allow elements that are defined in SVG\n // spec. All others are disallowed in SVG namespace.\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n\n if (element.namespaceURI === MATHML_NAMESPACE) {\n // The only way to switch from HTML namespace to MathML\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n\n // The only way to switch from SVG to MathML is via\n // and HTML integration points\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n\n // We only allow elements that are defined in MathML\n // spec. All others are disallowed in MathML namespace.\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n\n if (element.namespaceURI === HTML_NAMESPACE) {\n // The only way to switch from SVG to HTML is via\n // HTML integration points, and from MathML to HTML\n // is via MathML text integration points\n if (\n parent.namespaceURI === SVG_NAMESPACE &&\n !HTML_INTEGRATION_POINTS[parentTagName]\n ) {\n return false;\n }\n\n if (\n parent.namespaceURI === MATHML_NAMESPACE &&\n !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]\n ) {\n return false;\n }\n\n // We disallow tags that are specific for MathML\n // or SVG and should never appear in HTML namespace\n return (\n !ALL_MATHML_TAGS[tagName] &&\n (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName])\n );\n }\n\n // For XHTML and XML documents that support custom namespaces\n if (\n PARSER_MEDIA_TYPE === 'application/xhtml+xml' &&\n ALLOWED_NAMESPACES[element.namespaceURI]\n ) {\n return true;\n }\n\n // The code should never reach this place (this means\n // that the element somehow got namespace that is not\n // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n // Return false just in case.\n return false;\n };\n\n /**\n * _forceRemove\n *\n * @param {Node} node a DOM node\n */\n const _forceRemove = function (node) {\n arrayPush(DOMPurify.removed, { element: node });\n\n try {\n // eslint-disable-next-line unicorn/prefer-dom-node-remove\n node.parentNode.removeChild(node);\n } catch (_) {\n node.remove();\n }\n };\n\n /**\n * _removeAttribute\n *\n * @param {String} name an Attribute name\n * @param {Node} node a DOM node\n */\n const _removeAttribute = function (name, node) {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: node.getAttributeNode(name),\n from: node,\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: node,\n });\n }\n\n node.removeAttribute(name);\n\n // We void attribute values for unremovable \"is\"\" attributes\n if (name === 'is' && !ALLOWED_ATTR[name]) {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(node);\n } catch (_) {}\n } else {\n try {\n node.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n\n /**\n * _initDocument\n *\n * @param {String} dirty a string of dirty markup\n * @return {Document} a DOM, filled with the dirty markup\n */\n const _initDocument = function (dirty) {\n /* Create a HTML document */\n let doc = null;\n let leadingWhitespace = null;\n\n if (FORCE_BODY) {\n dirty = '' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n\n if (\n PARSER_MEDIA_TYPE === 'application/xhtml+xml' &&\n NAMESPACE === HTML_NAMESPACE\n ) {\n // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n dirty =\n '' +\n dirty +\n '';\n }\n\n const dirtyPayload = trustedTypesPolicy\n ? trustedTypesPolicy.createHTML(dirty)\n : dirty;\n /*\n * Use the DOMParser API by default, fallback later if needs be\n * DOMParser not work for svg when has multiple root element.\n */\n if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n } catch (_) {}\n }\n\n /* Use createHTMLDocument in case DOMParser is not available */\n if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT\n ? emptyHTML\n : dirtyPayload;\n } catch (_) {\n // Syntax error if dirtyPayload is invalid xml\n }\n }\n\n const body = doc.body || doc.documentElement;\n\n if (dirty && leadingWhitespace) {\n body.insertBefore(\n document.createTextNode(leadingWhitespace),\n body.childNodes[0] || null\n );\n }\n\n /* Work on whole document or just its body */\n if (NAMESPACE === HTML_NAMESPACE) {\n return getElementsByTagName.call(\n doc,\n WHOLE_DOCUMENT ? 'html' : 'body'\n )[0];\n }\n\n return WHOLE_DOCUMENT ? doc.documentElement : body;\n };\n\n /**\n * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n *\n * @param {Node} root The root element or node to start traversing on.\n * @return {NodeIterator} The created NodeIterator\n */\n const _createNodeIterator = function (root) {\n return createNodeIterator.call(\n root.ownerDocument || root,\n root,\n // eslint-disable-next-line no-bitwise\n NodeFilter.SHOW_ELEMENT |\n NodeFilter.SHOW_COMMENT |\n NodeFilter.SHOW_TEXT |\n NodeFilter.SHOW_PROCESSING_INSTRUCTION |\n NodeFilter.SHOW_CDATA_SECTION,\n null\n );\n };\n\n /**\n * _isClobbered\n *\n * @param {Node} elm element to check for clobbering attacks\n * @return {Boolean} true if clobbered, false if safe\n */\n const _isClobbered = function (elm) {\n return (\n elm instanceof HTMLFormElement &&\n (typeof elm.nodeName !== 'string' ||\n typeof elm.textContent !== 'string' ||\n typeof elm.removeChild !== 'function' ||\n !(elm.attributes instanceof NamedNodeMap) ||\n typeof elm.removeAttribute !== 'function' ||\n typeof elm.setAttribute !== 'function' ||\n typeof elm.namespaceURI !== 'string' ||\n typeof elm.insertBefore !== 'function' ||\n typeof elm.hasChildNodes !== 'function')\n );\n };\n\n /**\n * Checks whether the given object is a DOM node.\n *\n * @param {Node} object object to check whether it's a DOM node\n * @return {Boolean} true is object is a DOM node\n */\n const _isNode = function (object) {\n return typeof Node === 'function' && object instanceof Node;\n };\n\n /**\n * _executeHook\n * Execute user configurable hooks\n *\n * @param {String} entryPoint Name of the hook's entry point\n * @param {Node} currentNode node to work on with the hook\n * @param {Object} data additional hook parameters\n */\n const _executeHook = function (entryPoint, currentNode, data) {\n if (!hooks[entryPoint]) {\n return;\n }\n\n arrayForEach(hooks[entryPoint], (hook) => {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n };\n\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n *\n * @param {Node} currentNode to check for permission to exist\n * @return {Boolean} true if node was killed, false if left alive\n */\n const _sanitizeElements = function (currentNode) {\n let content = null;\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeElements', currentNode, null);\n\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Now let's check the element's type and name */\n const tagName = transformCaseFunc(currentNode.nodeName);\n\n /* Execute a hook if present */\n _executeHook('uponSanitizeElement', currentNode, {\n tagName,\n allowedTags: ALLOWED_TAGS,\n });\n\n /* Detect mXSS attempts abusing namespace confusion */\n if (\n currentNode.hasChildNodes() &&\n !_isNode(currentNode.firstElementChild) &&\n regExpTest(/<[/\\w]/g, currentNode.innerHTML) &&\n regExpTest(/<[/\\w]/g, currentNode.textContent)\n ) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove any ocurrence of processing instructions */\n if (currentNode.nodeType === 7) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove any kind of possibly harmful comments */\n if (\n SAFE_FOR_XML &&\n currentNode.nodeType === 8 &&\n regExpTest(/<[/\\w]/g, currentNode.data)\n ) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove element if anything forbids its presence */\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n /* Check if we have a custom element to handle */\n if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {\n if (\n CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp &&\n regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)\n ) {\n return false;\n }\n\n if (\n CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function &&\n CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)\n ) {\n return false;\n }\n }\n\n /* Keep content except for bad-listed elements */\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n\n if (childNodes && parentNode) {\n const childCount = childNodes.length;\n\n for (let i = childCount - 1; i >= 0; --i) {\n parentNode.insertBefore(\n cloneNode(childNodes[i], true),\n getNextSibling(currentNode)\n );\n }\n }\n }\n\n _forceRemove(currentNode);\n return true;\n }\n\n /* Check whether element has a valid namespace */\n if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Make sure that older browsers don't get fallback-tag mXSS */\n if (\n (tagName === 'noscript' ||\n tagName === 'noembed' ||\n tagName === 'noframes') &&\n regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)\n ) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Sanitize element content to be template-safe */\n if (SAFE_FOR_TEMPLATES && currentNode.nodeType === 3) {\n /* Get the element's text content */\n content = currentNode.textContent;\n\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], (expr) => {\n content = stringReplace(content, expr, ' ');\n });\n\n if (currentNode.textContent !== content) {\n arrayPush(DOMPurify.removed, { element: currentNode.cloneNode() });\n currentNode.textContent = content;\n }\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeElements', currentNode, null);\n\n return false;\n };\n\n /**\n * _isValidAttribute\n *\n * @param {string} lcTag Lowercase tag name of containing element.\n * @param {string} lcName Lowercase attribute name.\n * @param {string} value Attribute value.\n * @return {Boolean} Returns true if `value` is valid, otherwise false.\n */\n // eslint-disable-next-line complexity\n const _isValidAttribute = function (lcTag, lcName, value) {\n /* Make sure attribute cannot clobber */\n if (\n SANITIZE_DOM &&\n (lcName === 'id' || lcName === 'name') &&\n (value in document || value in formElement)\n ) {\n return false;\n }\n\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n if (\n ALLOW_DATA_ATTR &&\n !FORBID_ATTR[lcName] &&\n regExpTest(DATA_ATTR, lcName)\n ) {\n // This attribute is safe\n } else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) {\n // This attribute is safe\n /* Otherwise, check the name is permitted */\n } else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n if (\n // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n (_isBasicCustomElement(lcTag) &&\n ((CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp &&\n regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag)) ||\n (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function &&\n CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag))) &&\n ((CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp &&\n regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName)) ||\n (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function &&\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)))) ||\n // Alternative, second condition checks if it's an `is`-attribute, AND\n // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n (lcName === 'is' &&\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements &&\n ((CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp &&\n regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value)) ||\n (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function &&\n CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))))\n ) {\n // If user has supplied a regexp or function in CUSTOM_ELEMENT_HANDLING.tagNameCheck, we need to also allow derived custom elements using the same tagName test.\n // Additionally, we need to allow attributes passing the CUSTOM_ELEMENT_HANDLING.attributeNameCheck user has configured, as custom elements can define these at their own discretion.\n } else {\n return false;\n }\n /* Check value is safe. First, is attr inert? If so, is safe */\n } else if (URI_SAFE_ATTRIBUTES[lcName]) {\n // This attribute is safe\n /* Check no script, data or unknown possibly unsafe URI\n unless we know URI values are safe for that attribute */\n } else if (\n regExpTest(IS_ALLOWED_URI, stringReplace(value, ATTR_WHITESPACE, ''))\n ) {\n // This attribute is safe\n /* Keep image data URIs alive if src/xlink:href is allowed */\n /* Further prevent gadget XSS for dynamically built script tags */\n } else if (\n (lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') &&\n lcTag !== 'script' &&\n stringIndexOf(value, 'data:') === 0 &&\n DATA_URI_TAGS[lcTag]\n ) {\n // This attribute is safe\n /* Allow unknown protocols: This provides support for links that\n are handled by protocol handlers which may be unknown ahead of\n time, e.g. fb:, spotify: */\n } else if (\n ALLOW_UNKNOWN_PROTOCOLS &&\n !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))\n ) {\n // This attribute is safe\n /* Check for binary attributes */\n } else if (value) {\n return false;\n } else {\n // Binary attributes are safe at this point\n /* Anything else, presume unsafe, do not add it back */\n }\n\n return true;\n };\n\n /**\n * _isBasicCustomElement\n * checks if at least one dash is included in tagName, and it's not the first char\n * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n *\n * @param {string} tagName name of the tag of the node to sanitize\n * @returns {boolean} Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n */\n const _isBasicCustomElement = function (tagName) {\n return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT);\n };\n\n /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param {Node} currentNode to sanitize\n */\n const _sanitizeAttributes = function (currentNode) {\n /* Execute a hook if present */\n _executeHook('beforeSanitizeAttributes', currentNode, null);\n\n const { attributes } = currentNode;\n\n /* Check if we have attributes; if not we might have a text node */\n if (!attributes) {\n return;\n }\n\n const hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR,\n };\n let l = attributes.length;\n\n /* Go backwards over all attributes; safely remove bad ones */\n while (l--) {\n const attr = attributes[l];\n const { name, namespaceURI, value: attrValue } = attr;\n const lcName = transformCaseFunc(name);\n\n let value = name === 'value' ? attrValue : stringTrim(attrValue);\n\n /* Execute a hook if present */\n hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n _executeHook('uponSanitizeAttribute', currentNode, hookEvent);\n value = hookEvent.attrValue;\n /* Did the hooks approve of the attribute? */\n if (hookEvent.forceKeepAttr) {\n continue;\n }\n\n /* Remove attribute */\n _removeAttribute(name, currentNode);\n\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n continue;\n }\n\n /* Work around a security issue in jQuery 3.0 */\n if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Sanitize attribute content to be template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], (expr) => {\n value = stringReplace(value, expr, ' ');\n });\n }\n\n /* Is `value` valid for this attribute? */\n const lcTag = transformCaseFunc(currentNode.nodeName);\n if (!_isValidAttribute(lcTag, lcName, value)) {\n continue;\n }\n\n /* Full DOM Clobbering protection via namespace isolation,\n * Prefix id and name attributes with `user-content-`\n */\n if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n // Remove the attribute with this value\n _removeAttribute(name, currentNode);\n\n // Prefix the value and later re-create the attribute with the sanitized value\n value = SANITIZE_NAMED_PROPS_PREFIX + value;\n }\n\n /* Handle attributes that require Trusted Types */\n if (\n trustedTypesPolicy &&\n typeof trustedTypes === 'object' &&\n typeof trustedTypes.getAttributeType === 'function'\n ) {\n if (namespaceURI) {\n /* Namespaces are not yet supported, see https://bugs.chromium.org/p/chromium/issues/detail?id=1305293 */\n } else {\n switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n case 'TrustedHTML': {\n value = trustedTypesPolicy.createHTML(value);\n break;\n }\n\n case 'TrustedScriptURL': {\n value = trustedTypesPolicy.createScriptURL(value);\n break;\n }\n\n default: {\n break;\n }\n }\n }\n }\n\n /* Handle invalid data-* attribute set by try-catching it */\n try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n currentNode.setAttribute(name, value);\n }\n\n arrayPop(DOMPurify.removed);\n } catch (_) {}\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeAttributes', currentNode, null);\n };\n\n /**\n * _sanitizeShadowDOM\n *\n * @param {DocumentFragment} fragment to iterate over recursively\n */\n const _sanitizeShadowDOM = function (fragment) {\n let shadowNode = null;\n const shadowIterator = _createNodeIterator(fragment);\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeShadowDOM', fragment, null);\n\n while ((shadowNode = shadowIterator.nextNode())) {\n /* Execute a hook if present */\n _executeHook('uponSanitizeShadowNode', shadowNode, null);\n\n /* Sanitize tags and elements */\n if (_sanitizeElements(shadowNode)) {\n continue;\n }\n\n /* Deep shadow DOM detected */\n if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(shadowNode);\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeShadowDOM', fragment, null);\n };\n\n /**\n * Sanitize\n * Public method providing core sanitation functionality\n *\n * @param {String|Node} dirty string or DOM node\n * @param {Object} cfg object\n */\n // eslint-disable-next-line complexity\n DOMPurify.sanitize = function (dirty, cfg = {}) {\n let body = null;\n let importedNode = null;\n let currentNode = null;\n let returnNode = null;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n IS_EMPTY_INPUT = !dirty;\n if (IS_EMPTY_INPUT) {\n dirty = '';\n }\n\n /* Stringify, in case dirty is an object */\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n if (typeof dirty.toString === 'function') {\n dirty = dirty.toString();\n if (typeof dirty !== 'string') {\n throw typeErrorCreate('dirty is not a string, aborting');\n }\n } else {\n throw typeErrorCreate('toString is not a function');\n }\n }\n\n /* Return dirty HTML if DOMPurify cannot run */\n if (!DOMPurify.isSupported) {\n return dirty;\n }\n\n /* Assign config vars */\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n\n /* Clean up removed elements */\n DOMPurify.removed = [];\n\n /* Check if dirty is correctly typed for IN_PLACE */\n if (typeof dirty === 'string') {\n IN_PLACE = false;\n }\n\n if (IN_PLACE) {\n /* Do some early pre-sanitization to avoid unsafe root nodes */\n if (dirty.nodeName) {\n const tagName = transformCaseFunc(dirty.nodeName);\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n throw typeErrorCreate(\n 'root node is forbidden and cannot be sanitized in-place'\n );\n }\n }\n } else if (dirty instanceof Node) {\n /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (importedNode.nodeType === 1 && importedNode.nodeName === 'BODY') {\n /* Node is already a body, use as is */\n body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n body.appendChild(importedNode);\n }\n } else {\n /* Exit directly if we have nothing to do */\n if (\n !RETURN_DOM &&\n !SAFE_FOR_TEMPLATES &&\n !WHOLE_DOCUMENT &&\n // eslint-disable-next-line unicorn/prefer-includes\n dirty.indexOf('<') === -1\n ) {\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE\n ? trustedTypesPolicy.createHTML(dirty)\n : dirty;\n }\n\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n\n /* Check we have a DOM node from the data */\n if (!body) {\n return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n }\n }\n\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n\n /* Get node iterator */\n const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);\n\n /* Now start iterating over the created document */\n while ((currentNode = nodeIterator.nextNode())) {\n /* Sanitize tags and elements */\n if (_sanitizeElements(currentNode)) {\n continue;\n }\n\n /* Shadow DOM detected, sanitize it */\n if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(currentNode);\n }\n\n /* If we sanitized `dirty` in-place, return it. */\n if (IN_PLACE) {\n return dirty;\n }\n\n /* Return sanitized string or DOM */\n if (RETURN_DOM) {\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n\n while (body.firstChild) {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n\n if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n /*\n AdoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs.\n */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n\n return returnNode;\n }\n\n let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n\n /* Serialize doctype if allowed */\n if (\n WHOLE_DOCUMENT &&\n ALLOWED_TAGS['!doctype'] &&\n body.ownerDocument &&\n body.ownerDocument.doctype &&\n body.ownerDocument.doctype.name &&\n regExpTest(EXPRESSIONS.DOCTYPE_NAME, body.ownerDocument.doctype.name)\n ) {\n serializedHTML =\n '\\n' + serializedHTML;\n }\n\n /* Sanitize final string template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], (expr) => {\n serializedHTML = stringReplace(serializedHTML, expr, ' ');\n });\n }\n\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE\n ? trustedTypesPolicy.createHTML(serializedHTML)\n : serializedHTML;\n };\n\n /**\n * Public method to set the configuration once\n * setConfig\n *\n * @param {Object} cfg configuration object\n */\n DOMPurify.setConfig = function (cfg = {}) {\n _parseConfig(cfg);\n SET_CONFIG = true;\n };\n\n /**\n * Public method to remove the configuration\n * clearConfig\n *\n */\n DOMPurify.clearConfig = function () {\n CONFIG = null;\n SET_CONFIG = false;\n };\n\n /**\n * Public method to check if an attribute value is valid.\n * Uses last set config, if any. Otherwise, uses config defaults.\n * isValidAttribute\n *\n * @param {String} tag Tag name of containing element.\n * @param {String} attr Attribute name.\n * @param {String} value Attribute value.\n * @return {Boolean} Returns true if `value` is valid. Otherwise, returns false.\n */\n DOMPurify.isValidAttribute = function (tag, attr, value) {\n /* Initialize shared config vars if necessary. */\n if (!CONFIG) {\n _parseConfig({});\n }\n\n const lcTag = transformCaseFunc(tag);\n const lcName = transformCaseFunc(attr);\n return _isValidAttribute(lcTag, lcName, value);\n };\n\n /**\n * AddHook\n * Public method to add DOMPurify hooks\n *\n * @param {String} entryPoint entry point for the hook to add\n * @param {Function} hookFunction function to execute\n */\n DOMPurify.addHook = function (entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n\n hooks[entryPoint] = hooks[entryPoint] || [];\n arrayPush(hooks[entryPoint], hookFunction);\n };\n\n /**\n * RemoveHook\n * Public method to remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if more are present)\n *\n * @param {String} entryPoint entry point for the hook to remove\n * @return {Function} removed(popped) hook\n */\n DOMPurify.removeHook = function (entryPoint) {\n if (hooks[entryPoint]) {\n return arrayPop(hooks[entryPoint]);\n }\n };\n\n /**\n * RemoveHooks\n * Public method to remove all DOMPurify hooks at a given entryPoint\n *\n * @param {String} entryPoint entry point for the hooks to remove\n */\n DOMPurify.removeHooks = function (entryPoint) {\n if (hooks[entryPoint]) {\n hooks[entryPoint] = [];\n }\n };\n\n /**\n * RemoveAllHooks\n * Public method to remove all DOMPurify hooks\n */\n DOMPurify.removeAllHooks = function () {\n hooks = {};\n };\n\n return DOMPurify;\n}\n\nexport default createDOMPurify();\n","import TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\nimport TKArticleList from '@tk/components/tk.article.list';\r\nimport { getCurrentURI, setPersistentView } from '@tk/utilities/tk.storage';\r\nimport { fetchRequest } from '@tk/utilities/tk.fetch';\r\n\r\ninterface LayoutItem {\r\n id: string;\r\n className?: string;\r\n}\r\n\r\nexport default class TKArticleListLayoutSwitch extends TKCustomElementFactory {\r\n articleList?: TKArticleList;\r\n layouts: LayoutItem[] = [];\r\n url?: string;\r\n\r\n constructor() {\r\n super();\r\n this.articleList = document.querySelector('[data-tk-article-list-to-switch-layout]') || undefined;\r\n this.url = this.getAttribute('data-tk-url') || undefined;\r\n }\r\n\r\n connectedCallback(): void {\r\n if (!this.articleList || !this.url) throw new Error('TKArticleListLayoutSwitch: Elements are missing!');\r\n this.initLayouts();\r\n this.registerLayoutListener();\r\n }\r\n\r\n initLayouts() {\r\n const fieldElements = this.querySelectorAll('input');\r\n fieldElements.forEach((element) => {\r\n this.layouts.push({\r\n id: element.value,\r\n className: element.getAttribute('data-tk-layout-class-name') || undefined,\r\n });\r\n });\r\n }\r\n\r\n registerLayoutListener() {\r\n const radioElements = this.querySelectorAll('input');\r\n const onInput = this.handleInput.bind(this);\r\n radioElements.forEach((element) => {\r\n this.pushListener({ event: 'input', element, action: onInput });\r\n });\r\n }\r\n\r\n handleInput(event: Event) {\r\n if (!event.target) return;\r\n const { value } = event.target as HTMLInputElement;\r\n this.switchLayout(value);\r\n this.saveSelectedLayout(value);\r\n setPersistentView(getCurrentURI(), 'tk-article-list');\r\n }\r\n\r\n switchLayout(id: string) {\r\n this.layouts.forEach((item) => {\r\n const className = item.className || '';\r\n this.articleList!.classList.contains(className) && this.articleList!.classList.remove(className);\r\n });\r\n const layoutItem = this.layouts.find((item) => item.id === id);\r\n layoutItem?.className && this.articleList!.classList.add(layoutItem.className);\r\n }\r\n\r\n saveSelectedLayout(value: string) {\r\n const data = {\r\n value,\r\n };\r\n fetchRequest({\r\n requestURL: this.url!,\r\n resolveHandler: () => {},\r\n payload: data,\r\n });\r\n }\r\n}\r\n","import TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\n\r\nexport default class TKBreadcrumb extends TKCustomElementFactory {\r\n scrollingWrapper?: HTMLElement;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.scrollingWrapper = this.querySelector('[data-tk-scrolling-wrapper]') || undefined;\r\n }\r\n\r\n connectedCallback(): void {\r\n if (!this.scrollingWrapper) return;\r\n this.scrollEnd();\r\n }\r\n\r\n scrollEnd() {\r\n const { scrollWidth } = this.scrollingWrapper!;\r\n const { width } = this.scrollingWrapper!.getBoundingClientRect();\r\n this.scrollingWrapper?.scrollTo({ behavior: 'smooth', left: scrollWidth - width });\r\n }\r\n}\r\n","import TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\nimport { CompareState } from '@tk/components/tk.compare.button';\r\n\r\nexport default class TKCompareListLink extends TKCustomElementFactory {\r\n counter: number;\r\n link?: HTMLElement;\r\n emptyClass: string;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.counter = 0;\r\n this.link = this.querySelector('a') || undefined;\r\n this.emptyClass = this.getAttribute('data-tk-compare-list-link-empty-class') || 'tk-button__header--empty';\r\n }\r\n\r\n connectedCallback(): void {\r\n if (\r\n !this.hasAttribute('data-tk-compare-list-link-count')\r\n || !this.link\r\n ) return;\r\n this.initCounter();\r\n }\r\n\r\n initCounter() {\r\n const countString = this.getAttribute('data-tk-compare-list-link-count')!;\r\n this.counter = Number(countString);\r\n this.setCounter();\r\n }\r\n\r\n updateCounter(compareState: CompareState) {\r\n if (compareState === 'a') this.counter += 1;\r\n if (compareState === 'p') this.counter -= 1;\r\n this.setCounter();\r\n }\r\n\r\n setCounter() {\r\n this.link!.setAttribute('data-count', `${this.counter}`);\r\n this.updateCounterVisibility();\r\n }\r\n\r\n updateCounterVisibility() {\r\n this.link!.classList.toggle(this.emptyClass, this.counter === 0);\r\n }\r\n}\r\n","import TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\nimport render from '@tk/utilities/tk.render';\r\nimport {\r\n SortDirection,\r\n SortDirectionEnum,\r\n compareBooleans,\r\n compareDates,\r\n compareNumbers,\r\n compareStrings,\r\n compareTimes,\r\n compareTimestamps,\r\n} from '@tk/utilities/tk.sort';\r\nimport { fetchRequest } from '@tk/utilities/tk.fetch';\r\n\r\nenum DataMaster {\r\n CLIENT = 'client',\r\n}\r\n\r\ntype DataType = 'A' | 'N' | 'D' | 'H' | 'S' | 'B';\r\n\r\nexport interface TableHeadItem {\r\n element: HTMLTableCellElement;\r\n type: DataType;\r\n sortDirection: SortDirection;\r\n column: number;\r\n}\r\n\r\nexport interface TableRow {\r\n element: HTMLTableRowElement;\r\n value: string;\r\n}\r\n\r\nexport default class TKTable extends TKCustomElementFactory {\r\n headElement?: HTMLElement;\r\n rowHeadElement?: HTMLElement;\r\n headShadowClassName: string;\r\n isStickyLeft: boolean;\r\n isStickyHead: boolean;\r\n colAlignStart: boolean;\r\n colAlignStartClassName: string;\r\n colItemAlignCenter: boolean;\r\n colItemAlignCenterClassName: string;\r\n colItemAlignStart: boolean;\r\n colItemAlignStartClassName: string;\r\n colItemAlignEnd: boolean;\r\n colItemAlignEndClassName: string;\r\n gridTemplateMobile: string;\r\n loadedClassName: string;\r\n stickyLeftClassname: string;\r\n rightShadowClassName: string;\r\n stickyHeadClassName: string;\r\n customCols: string;\r\n observer: ResizeObserver;\r\n gridTemplateColList?: string[] = [];\r\n desktopMinWidth: number;\r\n isSortTable: boolean;\r\n ascSortClassName: string;\r\n descSortClassName: string;\r\n rowLinkSelector: string;\r\n\r\n private table?: HTMLTableElement;\r\n private boxShadowElement?: HTMLElement;\r\n private horizontalScrollShadowElement?: HTMLElement;\r\n private isHorizontalScrollable: boolean = false;\r\n\r\n private tableSelector: string;\r\n private sortDirectionSelector: string;\r\n private tkSortDirectionSelector: string;\r\n private tkSortAttrSelector: string;\r\n private tkSortDatatypeSelector: string;\r\n private dataMasterSelector: string;\r\n private dataSortAttrSelector: string;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.headElement = this.querySelector('[data-tk-table-head]') || undefined;\r\n if (!this.headElement) throw new Error('Table: Head is missing!');\r\n this.rowHeadElement = this.headElement.querySelector('[data-tk-table-row]') || undefined;\r\n this.headShadowClassName = this.getAttribute('data-tk-head-shadow-class-name') || 'tk-table__head-shadow';\r\n\r\n this.isStickyLeft = this.hasAttribute('data-tk-is-sticky-left');\r\n this.isStickyHead = this.hasAttribute('data-tk-is-sticky-head');\r\n this.gridTemplateMobile = this.getAttribute('data-tk-grid-template-mobile') || '1fr';\r\n\r\n this.loadedClassName = this.getAttribute('data-tk-loaded-class-name') || 'tk-table--loaded';\r\n this.stickyLeftClassname = this.getAttribute('data-tk-sticky-left-class-name') || 'tk-table--sticky-left';\r\n this.rightShadowClassName = this.getAttribute('data-tk-right-shadow-class-name') || 'tk-table__right-shadow';\r\n this.stickyHeadClassName = this.getAttribute('data-tk-sticky-head-class-name') || 'tk-table--sticky-head';\r\n\r\n this.customCols = this.getAttribute('data-tk-col-width') || 'auto';\r\n this.observer = new ResizeObserver(this.handleResize.bind(this));\r\n this.desktopMinWidth = Number(this.getAttribute('data-tk-desktop-min-width')) || 992;\r\n\r\n this.rowLinkSelector = 'data-tk-table-row-link';\r\n this.table = this.querySelector('table') || undefined;\r\n this.ascSortClassName = this.getAttribute('data-tk-asc-sort-class-name') || 'tk-table--sort-asc';\r\n this.descSortClassName = this.getAttribute('data-tk-desc-sort-class-name') || 'tk-table--sort-desc';\r\n this.isSortTable = Boolean(this.table?.hasAttribute('data-tk-table-sort'));\r\n\r\n this.colAlignStart = this.hasAttribute('data-tk-col-align-start');\r\n this.colAlignStartClassName = this.getAttribute('data-tk-col-align-start-class-name')\r\n || 'tk-table__col--align-left';\r\n\r\n this.colItemAlignCenter = this.hasAttribute('data-tk-col-item-align-center');\r\n this.colItemAlignCenterClassName = this.getAttribute('data-tk-col-item-align-center-class-name')\r\n || 'tk-table__col--item-align-center';\r\n this.colItemAlignStart = this.hasAttribute('data-tk-col-item-align-start');\r\n this.colItemAlignStartClassName = this.getAttribute('data-tk-col-item-align-start-class-name')\r\n || 'tk-table__col--item-align-start';\r\n this.colItemAlignEnd = this.hasAttribute('data-tk-col-item-align-end');\r\n this.colItemAlignEndClassName = this.getAttribute('data-tk-col-item-align-end-class-name')\r\n || 'tk-table__col--item-align-end';\r\n\r\n this.tableSelector = '[data-tk-table-sort]';\r\n this.sortDirectionSelector = '[data-tk-sort-direction]';\r\n this.tkSortDirectionSelector = 'tkSortDirection';\r\n this.tkSortAttrSelector = 'tkSortAttr';\r\n this.tkSortDatatypeSelector = 'tkSortDatatype';\r\n this.dataMasterSelector = 'data-tk-datamaster';\r\n this.dataSortAttrSelector = 'data-tk-sort-attr';\r\n }\r\n\r\n connectedCallback() {\r\n this.classList.add(this.loadedClassName);\r\n window.viewport.clientWidth < this.desktopMinWidth ? this.setGridMobile() : this.setGrid();\r\n this.registerViewportListener();\r\n this.registerScrollListener();\r\n this.registerRowLinkListener();\r\n this.observer.observe(this);\r\n this.isStickyHead && this.setStickyHead();\r\n this.isSortTable && this.registerTableHeadListener();\r\n this.colAlignStart && this.setColAlignStart();\r\n this.colItemAlignCenter && this.setColItemAlign(this.colItemAlignCenterClassName);\r\n this.colItemAlignStart && this.setColItemAlign(this.colItemAlignStartClassName);\r\n this.colItemAlignEnd && this.setColItemAlign(this.colItemAlignEndClassName);\r\n }\r\n\r\n disconnectedCallback() {\r\n super.disconnectedCallback();\r\n this.observer.unobserve(this);\r\n }\r\n\r\n registerViewportListener(): void {\r\n const onViewportResize = this.handleViewportResize.bind(this);\r\n this.pushListener({\r\n event: 'tk-viewport-resize',\r\n element: window.viewport,\r\n action: onViewportResize,\r\n });\r\n }\r\n\r\n handleViewportResize(event: Event): void {\r\n const customEvent = event as CustomEvent;\r\n if (customEvent.detail.width < this.desktopMinWidth) {\r\n this.setGridMobile();\r\n } else {\r\n this.setGrid();\r\n }\r\n }\r\n\r\n registerScrollListener() {\r\n const handleHorizontalScrollListener = this.toggleScrollHorizontalBehavior.bind(this);\r\n this.pushListener({\r\n event: 'scroll',\r\n element: this,\r\n action: handleHorizontalScrollListener,\r\n });\r\n\r\n if (this.isStickyLeft) {\r\n const handleStickyLeftListener = this.toggleScrollLeftBehavior.bind(this);\r\n this.pushListener({\r\n event: 'scroll',\r\n element: this,\r\n action: handleStickyLeftListener,\r\n });\r\n }\r\n\r\n if (this.isStickyHead) {\r\n const handleStickyHeadListener = this.toggleScrollTopBehavior.bind(this);\r\n this.pushListener({\r\n event: 'scroll',\r\n element: this,\r\n action: handleStickyHeadListener,\r\n });\r\n }\r\n }\r\n\r\n registerTableHeadListener() {\r\n const handleSortTable = this.handleSortTable.bind(this);\r\n this.pushListener({\r\n event: 'click',\r\n element: this,\r\n action: handleSortTable,\r\n });\r\n }\r\n\r\n registerRowLinkListener() {\r\n const handleRowLink = this.handleRowLink.bind(this);\r\n this.pushListener({\r\n event: 'click',\r\n element: this,\r\n action: handleRowLink,\r\n });\r\n }\r\n\r\n handleRowLink(event: Event) {\r\n const target = event.target as HTMLElement;\r\n if (target.closest('a')) return;\r\n const row = target.closest(`[${this.rowLinkSelector}]`);\r\n if (!row) return;\r\n const link = row.getAttribute(this.rowLinkSelector);\r\n if (!link) return;\r\n window.location.href = link;\r\n }\r\n\r\n handleSortTable(event: Event) {\r\n if (!event) return;\r\n const target = event.target as HTMLElement;\r\n const column = target.closest('th');\r\n column && column.hasAttribute('data-tk-sort-direction') && this.sortTable(column);\r\n }\r\n\r\n handleResize(entries: ResizeObserverEntry[]) {\r\n entries.forEach(() => {\r\n this.isHorizontalScrollable = this.scrollWidth > this.clientWidth;\r\n if (this.isHorizontalScrollable && !this.horizontalScrollShadowElement) {\r\n this.setHorizontalScrollShadow();\r\n }\r\n if (!this.horizontalScrollShadowElement) return;\r\n this.horizontalScrollShadowElement.hidden = !this.isHorizontalScrollable;\r\n this.boxShadowElement && (this.boxShadowElement.style.width = `${this.scrollWidth}px`);\r\n });\r\n }\r\n\r\n setGrid() {\r\n if (!this.rowHeadElement) return;\r\n const cols = this.rowHeadElement.childElementCount;\r\n this.gridTemplateColList = this.customCols?.split(/(?!, ),/g);\r\n this.style.gridTemplateColumns = this.customCols?.includes(',')\r\n ? this.gridTemplateColList?.join(' ')\r\n : `repeat(${cols}, ${this.customCols})`;\r\n if (this.headElement) {\r\n this.headElement.classList.remove('tk-table__head--force-mobile');\r\n }\r\n\r\n const titleElements = this.table?.querySelectorAll('[data-tk-table-body] .tk-table__title');\r\n if (!titleElements) return;\r\n titleElements.forEach((titleElement) => {\r\n (titleElement as HTMLSpanElement).classList.remove('tk-table__title--force-mobile');\r\n });\r\n }\r\n\r\n setGridMobile() {\r\n this.style.gridTemplateColumns = this.gridTemplateMobile;\r\n if (this.headElement) {\r\n this.headElement.classList.add('tk-table__head--force-mobile');\r\n }\r\n\r\n const titleElements = this.table?.querySelectorAll('[data-tk-table-body] .tk-table__title');\r\n if (!titleElements) return;\r\n titleElements.forEach((titleElement) => {\r\n (titleElement as HTMLSpanElement).classList.add('tk-table__title--force-mobile');\r\n });\r\n }\r\n\r\n toggleScrollLeftBehavior(event: Event) {\r\n const element = event.target as HTMLElement;\r\n this.classList.toggle(this.stickyLeftClassname, element.scrollLeft > 0);\r\n }\r\n\r\n toggleScrollHorizontalBehavior(event: Event) {\r\n if (!this.horizontalScrollShadowElement) return;\r\n const { scrollLeft, scrollWidth, clientWidth } = event.target as HTMLElement;\r\n this.horizontalScrollShadowElement.hidden = scrollLeft >= scrollWidth - clientWidth;\r\n this.horizontalScrollShadowElement.style.right = `-${scrollLeft}px`;\r\n }\r\n\r\n toggleScrollTopBehavior(event: Event) {\r\n if (!this.boxShadowElement) return;\r\n const element = event.target as HTMLElement;\r\n this.boxShadowElement.hidden = element.scrollTop === 0;\r\n this.classList.toggle(this.stickyHeadClassName, element.scrollTop > 0);\r\n this.boxShadowElement.style.top = element.scrollTop.toFixed();\r\n }\r\n\r\n setStickyHead() {\r\n if (!this.headElement) return;\r\n this.boxShadowElement = render(``);\r\n if (!this.boxShadowElement) return;\r\n const column = this.rowHeadElement?.firstElementChild;\r\n const height = column?.getBoundingClientRect().height || 0;\r\n this.boxShadowElement.style.width = `${this.scrollWidth}px`;\r\n this.boxShadowElement.style.height = `${height}px`;\r\n this.headElement.insertAdjacentElement('afterbegin', this.boxShadowElement);\r\n }\r\n\r\n setHorizontalScrollShadow() {\r\n this.horizontalScrollShadowElement = render(`
`);\r\n if (!this.horizontalScrollShadowElement) return;\r\n this.insertAdjacentElement('beforeend', this.horizontalScrollShadowElement);\r\n }\r\n\r\n sortTable(column: HTMLTableCellElement) {\r\n const dataMaster = this.table?.getAttribute(this.dataMasterSelector);\r\n if (dataMaster === DataMaster.CLIENT) {\r\n this.setOrToggleSortDirection(column);\r\n this.clearHeadElementClassList(column);\r\n this.clientSortTable({\r\n element: column,\r\n type: column.dataset[this.tkSortDatatypeSelector] as DataType,\r\n sortDirection: column.dataset[this.tkSortDirectionSelector] as SortDirection,\r\n column: column.cellIndex,\r\n });\r\n this.postAsynClientSortState(column);\r\n } else {\r\n this.serverAsynTableSortRequest(column);\r\n }\r\n }\r\n\r\n clientSortTable(headItem: TableHeadItem) {\r\n const tableBody = this.table?.querySelector('[data-tk-table-body]');\r\n if (!tableBody) return;\r\n const rows = tableBody.querySelectorAll('[data-tk-table-row]');\r\n if (!rows) return;\r\n\r\n const rowList = Array.from(rows).map((element) => {\r\n const value = (\r\n Array.from(element.querySelectorAll('[data-tk-table-value]')).at(headItem.column)?.textContent || ''\r\n );\r\n return { element, value } as TableRow;\r\n });\r\n\r\n const sortTypes: Record number> = {\r\n A: (a: string, b: string) => compareStrings(a, b, headItem.sortDirection),\r\n N: (a: string, b: string) => compareNumbers(a, b, headItem.sortDirection),\r\n D: (a: string, b: string) => compareDates(a, b, headItem.sortDirection),\r\n H: (a: string, b: string) => compareTimes(a, b, headItem.sortDirection),\r\n S: (a: string, b: string) => compareTimestamps(a, b, headItem.sortDirection),\r\n B: (a: string, b: string) => compareBooleans(a, b, headItem.sortDirection),\r\n };\r\n\r\n const sortedList = rowList.sort((a, b) => sortTypes[headItem.type](a.value, b.value));\r\n tableBody.innerHTML = '';\r\n sortedList.forEach((item) => {\r\n tableBody.appendChild(item.element);\r\n });\r\n\r\n if (\r\n headItem.element.classList.contains(this.ascSortClassName)\r\n || headItem.element.classList.contains(this.descSortClassName)\r\n ) {\r\n headItem.sortDirection.toUpperCase() === SortDirectionEnum.DESC\r\n ? headItem.element.classList.replace(this.ascSortClassName, this.descSortClassName)\r\n : headItem.element.classList.replace(this.descSortClassName, this.ascSortClassName);\r\n } else {\r\n headItem.sortDirection.toUpperCase() === SortDirectionEnum.DESC\r\n ? headItem.element.classList.add(this.descSortClassName)\r\n : headItem.element.classList.add(this.ascSortClassName);\r\n }\r\n }\r\n\r\n clearHeadElementClassList(column: HTMLTableCellElement) {\r\n if (!this.rowHeadElement) return;\r\n const head = Array.from(this.rowHeadElement.children);\r\n const filteredHead = head.filter((item) => item !== column);\r\n filteredHead.forEach((child) => {\r\n const element = child as HTMLElement;\r\n element.classList.remove(this.ascSortClassName);\r\n element.classList.remove(this.descSortClassName);\r\n });\r\n }\r\n\r\n setOrToggleSortDirection(thElement: HTMLTableCellElement) {\r\n this.removeUnseletectedSortDir(thElement);\r\n // toggelt direction auf geklickten header spalte\r\n thElement.dataset[this.tkSortDirectionSelector] = (\r\n thElement.dataset[this.tkSortDirectionSelector] === SortDirectionEnum.ASC\r\n ? SortDirectionEnum.DESC\r\n : SortDirectionEnum.ASC\r\n );\r\n }\r\n\r\n serverAsynTableSortRequest(thElement: HTMLTableCellElement) {\r\n this.setOrToggleSortDirection(thElement);\r\n const url = window.location.href;\r\n const options = this.getAsynPostOptions(thElement);\r\n fetchRequest({\r\n requestURL: url,\r\n resolveHandler: this.asyncTableSortHandler.bind(this),\r\n payload: options,\r\n });\r\n }\r\n\r\n postAsynClientSortState(thElement: HTMLTableCellElement) {\r\n const url = window.location.href;\r\n const options = this.getAsynPostOptions(thElement);\r\n fetchRequest({\r\n requestURL: url,\r\n resolveHandler: () => {},\r\n payload: options,\r\n });\r\n }\r\n\r\n asyncTableSortHandler(response: TKResponse) {\r\n if (!response.success || !response.dataAsHtml) return;\r\n\r\n const html = render(response.dataAsHtml);\r\n this.replaceAllResponseTable(html);\r\n }\r\n\r\n replaceAllResponseTable(element: HTMLElement) {\r\n const oldTables = document.querySelectorAll(this.tableSelector);\r\n const newTables = element.querySelectorAll(this.tableSelector);\r\n\r\n oldTables.forEach((oldTable) => {\r\n const correspondingNewTable = Array.from(newTables).find((newTable) => oldTable.id === newTable.id);\r\n if (correspondingNewTable) {\r\n oldTable?.parentNode?.replaceChild(correspondingNewTable, oldTable);\r\n }\r\n });\r\n }\r\n\r\n getAsynPostOptions(thElement: HTMLTableCellElement) {\r\n const table = thElement.closest(this.tableSelector);\r\n if (!table) return {};\r\n const client = table.getAttribute(this.dataMasterSelector);\r\n const sortAttribut = thElement.dataset[this.tkSortAttrSelector];\r\n const sortDirection = thElement.dataset[this.tkSortDirectionSelector];\r\n\r\n const options: Record = {\r\n type: 'tablesort',\r\n clientSort: String(!!client),\r\n tableid: table.id,\r\n sorting: `{\"${sortAttribut}\":\"${sortDirection}\"}`,\r\n };\r\n\r\n return options;\r\n }\r\n\r\n removeUnseletectedSortDir(thElement: HTMLTableCellElement) {\r\n const sortAttribut = thElement.dataset[this.tkSortAttrSelector];\r\n const table = thElement.closest(this.tableSelector);\r\n if (!table) return;\r\n const headers = table.querySelectorAll(this.sortDirectionSelector);\r\n headers.forEach((header) => {\r\n const headerSortAttr = header.dataset[this.tkSortAttrSelector];\r\n if (headerSortAttr !== sortAttribut) return;\r\n header.dataset[this.tkSortDirectionSelector] = '';\r\n });\r\n }\r\n\r\n setColAlignStart() {\r\n const tableBody = this.table?.querySelector('[data-tk-table-body]');\r\n if (!tableBody) return;\r\n const cols = tableBody.querySelectorAll('[data-tk-table-row] td');\r\n if (!cols) return;\r\n\r\n cols.forEach((col) => {\r\n col.classList.add(this.colAlignStartClassName);\r\n });\r\n }\r\n\r\n setColItemAlign(className: string) {\r\n const tableBody = this.table?.querySelector('[data-tk-table-body]');\r\n if (!tableBody) return;\r\n const cols = tableBody.querySelectorAll('[data-tk-table-row] td');\r\n if (!cols) return;\r\n\r\n cols.forEach((col) => {\r\n col.classList.add(className);\r\n });\r\n }\r\n}\r\n","export type SortDirection = 'ASC' | 'DESC';\nexport enum SortDirectionEnum {\n ASC = 'ASC',\n DESC = 'DESC',\n}\n\nexport const compareStrings = (a: string, b: string, direction: SortDirection) => (\n direction.toUpperCase() === SortDirectionEnum.DESC ? b.localeCompare(a) : a.localeCompare(b)\n);\n\nexport const compareNumbers = (a: string, b: string, direction: SortDirection) => {\n const numberA = Number(a);\n const numberB = Number(b);\n return direction.toUpperCase() === SortDirectionEnum.DESC ? numberB - numberA : numberA - numberB;\n};\n\nexport const compareDates = (a: string, b: string, direction: SortDirection) => {\n const dateFormattedA = a.split('.').reverse().join('-');\n const dateFormattedB = b.split('.').reverse().join('-');\n const dateA = Date.parse(dateFormattedA);\n const dateB = Date.parse(dateFormattedB);\n\n return direction.toUpperCase() === SortDirectionEnum.DESC ? dateB - dateA : dateA - dateB;\n};\n\nexport const compareTimes = (a: string, b: string, direction: SortDirection) => {\n const dateA = new Date();\n const dateB = new Date();\n const splittedA: number[] = a.split(':').map((item) => Number(item));\n const splittedB: number[] = b.split(':').map((item) => Number(item));\n dateA.setHours(splittedA.at(0) || 0, splittedA.at(1), splittedA.at(2));\n dateB.setHours(splittedB.at(0) || 0, splittedB.at(1), splittedB.at(2));\n const timeA = dateA.getTime();\n const timeB = dateB.getTime();\n\n return direction.toUpperCase() === SortDirectionEnum.DESC ? timeB - timeA : timeA - timeB;\n};\n\nexport const compareTimestamps = (a: string, b: string, direction: SortDirection) => {\n const timeStampListA = a.split(' ');\n const timeStampListB = b.split(' ');\n const dateA = timeStampListA.at(0)?.split('.').reverse().join('-');\n const dateB = timeStampListB.at(0)?.split('.').reverse().join('-');\n const timeA = timeStampListA.at(1);\n const timeB = timeStampListB.at(1);\n const timestampA = Date.parse(`${dateA}T${timeA}`);\n const timestampB = Date.parse(`${dateB}T${timeB}`);\n\n return direction.toUpperCase() === SortDirectionEnum.DESC ? timestampB - timestampA : timestampA - timestampB;\n};\n\nexport const compareBooleans = (a: string, b: string, direction: SortDirection) => {\n const booleanA = Boolean(a);\n const booleanB = Boolean(b);\n const numberA = Number(booleanA);\n const numberB = Number(booleanB);\n return direction === SortDirectionEnum.DESC ? numberB - numberA : numberA - numberB;\n};\n","/* eslint-disable max-len */\r\n/* eslint-disable class-methods-use-this */\r\nimport TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\nimport { fetchRequest } from '@tk/utilities/tk.fetch';\r\nimport render from '@tk/utilities/tk.render';\r\nimport { isOutsideShapes } from '@tk/utilities/tk.shape.detector';\r\n\r\ninterface FocusHistoryItem {\r\n element: HTMLElement;\r\n index: number;\r\n}\r\n\r\ninterface KeybindItem {\r\n keybind: string;\r\n action: () => void;\r\n}\r\n\r\nexport default class TKQuickOrder extends TKCustomElementFactory {\r\n url?: string;\r\n fieldElement?: HTMLInputElement;\r\n resetButton?: HTMLButtonElement;\r\n submitButton?: HTMLButtonElement;\r\n resultElement?: HTMLElement;\r\n backButton?: HTMLButtonElement;\r\n activeClassName: string;\r\n hasDataClassName: string;\r\n loadingClassName: string;\r\n chooseKeybind: string;\r\n navigateUpKeybind: string;\r\n navigateDownKeybind: string;\r\n chooseQuantityKeybind: string;\r\n closeKeybind: string;\r\n timerId?: number;\r\n focusHistory: FocusHistoryItem[] = [];\r\n keybinds: KeybindItem[];\r\n allowedToClickBasketButton = true;\r\n activateBasketButton = false;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.url = this.getAttribute('data-tk-url') || undefined;\r\n this.fieldElement = this.querySelector('input') || undefined;\r\n this.resetButton = this.querySelector('[data-tk-quick-order-reset]') || undefined;\r\n this.submitButton = this.querySelector('[data-tk-quick-order-submit]') || undefined;\r\n this.resultElement = this.querySelector('[data-tk-quick-order-result]') || undefined;\r\n this.backButton = this.querySelector('[data-tk-quick-order-back]') || undefined;\r\n this.activeClassName = this.getAttribute('data-tk-active-class-name') || 'tk-search--active';\r\n this.hasDataClassName = this.getAttribute('data-tk-has-data-class-name') || 'tk-search--has-data';\r\n this.loadingClassName = this.getAttribute('data-tk-loading-class-name') || 'tk-search--loading';\r\n this.chooseKeybind = this.getAttribute('data-tk-choose-keybind') || 'Enter';\r\n this.navigateUpKeybind = this.getAttribute('data-tk-navigate-up-keybind') || 'ArrowUp';\r\n this.navigateDownKeybind = this.getAttribute('data-tk-navigate-down-keybind') || 'ArrowDown';\r\n this.chooseQuantityKeybind = this.getAttribute('data-tk-choose-quantity-keybind') || 'Enter';\r\n this.closeKeybind = this.getAttribute('data-tk-close-keybind') || 'Escape';\r\n this.keybinds = [\r\n { keybind: this.closeKeybind, action: () => this.hideDropdown() },\r\n ];\r\n }\r\n\r\n connectedCallback(): void {\r\n if (\r\n !this.url\r\n || !this.fieldElement\r\n || !this.resetButton\r\n || !this.submitButton\r\n || !this.resultElement\r\n || !this.backButton\r\n ) throw new Error('TKQuickOrder: Elements are missing!');\r\n\r\n this.registerInputListener();\r\n this.registerKeydownListener();\r\n this.registerSubmitListener();\r\n }\r\n\r\n registerInputListener() {\r\n const onInput = this.search.bind(this);\r\n this.pushListener({ event: 'input', element: this.fieldElement!, action: onInput });\r\n }\r\n\r\n registerKeydownListener() {\r\n this.pushListener({ event: 'keydown', element: this, action: this.handleKeydown.bind(this) });\r\n }\r\n\r\n registerSubmitListener() {\r\n this.pushListener({ event: 'submit', element: this, action: this.handleSubmit.bind(this) });\r\n }\r\n\r\n handleKeydown(event: KeyboardEvent) {\r\n if (event.key === 'Enter') {\r\n event.preventDefault();\r\n\r\n if (event.target.parentElement.classList.contains('tk-search__input')) {\r\n // Focus bzw. Select in das Quantity Feld setzen\r\n const qty = this.resultElement?.querySelector('.tk-article #input_dim1') as HTMLInputElement || undefined;\r\n if (qty) {\r\n qty.select();\r\n }\r\n }\r\n\r\n if (event.target.closest('input') && event.target.closest('input').id === 'input_dim1') {\r\n // focus auf den WK Button setzen\r\n const btn = this.resultElement?.querySelector('.tk-article button[type=\"submit\"]') as HTMLButtonElement || undefined;\r\n if (btn) {\r\n btn.focus();\r\n }\r\n }\r\n\r\n if (event.target.closest('.tk-article button[type=\"submit\"]')) {\r\n // WK Button klicken und Focus ins Suchfeld setzen\r\n const searchField = this.querySelector('input[type=\"search\"]') as HTMLInputElement || undefined;\r\n const btn = event.target.closest('.tk-article button[type=\"submit\"]') as HTMLButtonElement;\r\n btn.focus();\r\n btn.click();\r\n if (searchField) {\r\n searchField.value = '';\r\n searchField.focus();\r\n }\r\n this.classList.remove('tk-search--has-data');\r\n }\r\n }\r\n }\r\n\r\n handleSubmit(event: SubmitEvent) {\r\n event.preventDefault();\r\n }\r\n\r\n showDropdown() {\r\n this.classList.add(this.activeClassName);\r\n }\r\n\r\n hideDropdown() {\r\n this.classList.remove(this.activeClassName);\r\n }\r\n\r\n search() {\r\n const { value } = this.fieldElement!;\r\n if (value.length < 3) {\r\n this.classList.remove(this.hasDataClassName);\r\n this.timerId && clearTimeout(this.timerId);\r\n return;\r\n }\r\n this.classList.add(this.loadingClassName);\r\n this.timerId && clearTimeout(this.timerId);\r\n this.timerId = setTimeout(() => {\r\n const data = {\r\n value,\r\n };\r\n\r\n fetchRequest({\r\n requestURL: this.url!,\r\n resolveHandler: this.renderResult.bind(this),\r\n payload: data,\r\n });\r\n }, 500);\r\n }\r\n\r\n renderResult(response: TKResponse) {\r\n if (!response || !response.success) return;\r\n this.classList.remove(this.loadingClassName);\r\n const html = render(response.dataAsHtml);\r\n this.resultElement!.innerHTML = '';\r\n this.resultElement!.insertAdjacentHTML('afterbegin', html.innerHTML);\r\n html.childElementCount > 0 && this.classList.add(this.hasDataClassName);\r\n }\r\n}\r\n","/* eslint-disable max-len */\r\n/* eslint-disable class-methods-use-this */\r\nimport TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\nimport { fetchRequest } from '@tk/utilities/tk.fetch';\r\n\r\nexport default class KDMZFreitext extends TKCustomElementFactory {\r\n url?: string;\r\n fieldElement?: HTMLTextAreaElement;\r\n quantity?: HTMLInputElement;\r\n submitButton?: HTMLButtonElement;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.url = this.getAttribute('data-tk-url') || undefined;\r\n this.fieldElement = this.querySelector('textarea[name=\"textarea-freitext\"]') || undefined;\r\n this.quantity = this.querySelector('input[name=\"input_dim1\"]') || undefined;\r\n this.submitButton = this.querySelector('[data-tk-freitext-submit]') || undefined;\r\n }\r\n\r\n connectedCallback(): void {\r\n if (\r\n !this.url\r\n || !this.fieldElement\r\n || !this.submitButton\r\n || !this.quantity\r\n ) throw new Error('KDMZFreitext: Elements are missing!');\r\n\r\n this.registerSubmitListener();\r\n }\r\n\r\n registerSubmitListener() {\r\n const onSave = this.saveOrder.bind(this);\r\n this.pushListener({ event: 'click', element: this.submitButton!, action: onSave });\r\n }\r\n\r\n saveOrder() {\r\n const data = {\r\n value: this.fieldElement!.value,\r\n quantity: this.quantity!.value,\r\n };\r\n\r\n fetchRequest({\r\n requestURL: this.url!,\r\n resolveHandler: this.renderResult.bind(this),\r\n payload: data,\r\n });\r\n }\r\n\r\n renderResult(response: TKResponse) {\r\n if (!response) return;\r\n const tabBasket = this.closest('.tk-minibasket__content')?.querySelector('[data-minibasket-tab-basket]') as HTMLButtonElement;\r\n if (!tabBasket || !response.success) return;\r\n tabBasket.click();\r\n }\r\n}\r\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 this.setAttribute('data-tk-current-tab', String(index + 1));\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[required]');\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}\r\n","import TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\n\r\nexport default class TKFavoriteInfo extends TKCustomElementFactory {\r\n anchor?: HTMLAnchorElement;\r\n href: string;\r\n quantity: number;\r\n isMulti: boolean;\r\n emptyClassName: string;\r\n disabledClassName: string;\r\n\r\n static observedAttributes = ['data-tk-quantity'];\r\n\r\n constructor() {\r\n super();\r\n this.anchor = this.querySelector('a') || undefined;\r\n this.quantity = Number(this.getAttribute('data-tk-quantity'));\r\n this.isMulti = this.hasAttribute('data-tk-is-multi');\r\n this.href = this.getAttribute('data-tk-href') || '';\r\n this.emptyClassName = this.getAttribute('data-tk-empty-class-name') || 'tk-button__header--empty';\r\n this.disabledClassName = this.getAttribute('data-tk-disabled-class-name') || 'tk-button__header--disabled';\r\n }\r\n\r\n attributeChangedCallback(name: string, oldValue: string, newValue: string) {\r\n if (name === 'data-tk-quantity') {\r\n if (!this.anchor) return;\r\n this.anchor.setAttribute('data-count', newValue);\r\n this.anchor.classList.toggle(this.emptyClassName, Number(newValue) === 0);\r\n this.anchor.classList.toggle(this.disabledClassName, Number(newValue) === 0);\r\n // eslint-disable-next-line no-script-url\r\n // this.anchor.href = Number(newValue) === 0 ? 'javascript:void(0)' : this.href;\r\n }\r\n }\r\n}\r\n","import { fetchRequest } from '@tk/utilities/tk.fetch';\r\nimport TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\n\r\ninterface CustomElementAccordionIcon {\r\n iconAdd: string;\r\n iconRemove: string;\r\n}\r\n\r\nexport default class TKTabsAccordion extends TKCustomElementFactory {\r\n activeClassName: string;\r\n accordionHead?: HTMLDivElement;\r\n accordionBody?: HTMLDivElement;\r\n accordionContent?: HTMLDivElement;\r\n accordionIcon?: HTMLElement;\r\n triggerArea?: Element;\r\n accordionIcons: CustomElementAccordionIcon;\r\n isActive: boolean;\r\n isHeaderLink?: boolean;\r\n asyncUrl?: string;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.accordionHead = this.querySelector('[data-tk-accordion-head]') || undefined;\r\n this.accordionBody = this.querySelector('[data-tk-accordion-body]') || undefined;\r\n this.accordionContent = this.querySelector('[data-tk-accordion-content]') || undefined;\r\n this.accordionIcon = this.querySelector('[data-tk-accordion-icon]') || undefined;\r\n this.accordionIcons = {\r\n iconAdd: this.getAttribute('data-tk-icon-open') || 'tk-icon-add',\r\n iconRemove: this.getAttribute('data-tk-icon-collapse') || 'tk-icon-remove',\r\n };\r\n this.isActive = this.hasAttribute('data-tk-accordion-is-active');\r\n this.isHeaderLink = this.accordionHead && this.accordionHead.hasAttribute('data-tk-accordion-link');\r\n this.activeClassName = this.getAttribute('data-tk-active-class-name') || 'tk-tabs-accordion--active';\r\n this.asyncUrl = this.getAttribute('data-content-url') || undefined;\r\n }\r\n\r\n connectedCallback(): void {\r\n if (\r\n (!this.accordionHead\r\n || !this.accordionBody\r\n || !this.accordionIcon)\r\n && !this.isHeaderLink\r\n ) throw new Error('Accordion: Elements are missing!');\r\n\r\n this.setAccordionState(this.isActive);\r\n this.registerListener();\r\n }\r\n\r\n registerListener(): void {\r\n const eventHandler = this.toggleEvent.bind(this);\r\n this.pushListener({ event: 'click', element: this.accordionHead!, action: eventHandler });\r\n }\r\n\r\n toggleEvent(): void {\r\n this.toggleMarkupElements();\r\n if (this.asyncUrl && this.accordionContent?.innerHTML === '') {\r\n const htmlString = '
';\r\n const loadingElement = document.createElement('div');\r\n loadingElement.innerHTML = htmlString;\r\n loadingElement.classList.add('flex', 'flex--justify-center', 'spacer-mb-4', 'spacer-mt-4');\r\n this.accordionContent.append(loadingElement);\r\n fetchRequest({\r\n requestURL: this.asyncUrl!,\r\n resolveHandler: this.handleResponseSuccess.bind(this, this.asyncUrl!),\r\n });\r\n }\r\n }\r\n\r\n handleResponseSuccess(url: string, response: TKResponse): void {\r\n if (!response || !response.success) return;\r\n const content = this.accordionContent;\r\n if (!content) return;\r\n content.innerHTML = response.dataAsHtml;\r\n }\r\n\r\n toggleMarkupElements(): void {\r\n if (this.closest('.tk-tabs-accordion__group')) {\r\n const currentState = this.classList.contains(this.activeClassName) as boolean;\r\n this.closeAllAccordions();\r\n if (currentState) {\r\n this.classList.remove(this.activeClassName);\r\n this.accordionIcon?.classList.add(this.accordionIcons.iconAdd);\r\n this.accordionIcon?.classList.remove(this.accordionIcons.iconRemove);\r\n } else {\r\n this.classList.add(this.activeClassName);\r\n this.accordionIcon?.classList.remove(this.accordionIcons.iconAdd);\r\n this.accordionIcon?.classList.add(this.accordionIcons.iconRemove);\r\n }\r\n } else {\r\n this.classList.toggle(this.activeClassName);\r\n this.accordionIcon?.classList.toggle(this.accordionIcons.iconAdd);\r\n this.accordionIcon?.classList.toggle(this.accordionIcons.iconRemove);\r\n }\r\n }\r\n\r\n setAccordionState(isActive: boolean): void {\r\n if (isActive) {\r\n this.classList.toggle(this.activeClassName);\r\n this.accordionIcon?.classList.add(this.accordionIcons.iconRemove);\r\n } else {\r\n this.accordionIcon?.classList.add(this.accordionIcons.iconAdd);\r\n }\r\n }\r\n\r\n closeAllAccordions() {\r\n const group = this.closest('.tk-tabs-accordion__group') as HTMLElement;\r\n const allAccordions = group.querySelectorAll('.tk-tabs-accordion--active') as NodeListOf;\r\n allAccordions.forEach((accordion) => {\r\n accordion.classList.remove('tk-tabs-accordion--active');\r\n accordion.querySelector('[data-tk-accordion-icon]')?.classList.toggle(this.accordionIcons.iconAdd);\r\n accordion.querySelector('[data-tk-accordion-icon]')?.classList.toggle(this.accordionIcons.iconRemove);\r\n });\r\n }\r\n}\r\n","import { RectangleItem, isOutsideShapes } from '@tk/utilities/tk.shape.detector';\r\n\r\nexport default class TKButtonDropdown extends HTMLElement {\r\n dialog?: HTMLDialogElement;\r\n button?: HTMLButtonElement;\r\n selectedClassName: string;\r\n openingType: string;\r\n alignedRightClassName: string;\r\n onShowEvent: () => void;\r\n onCloseEvent: (event: MouseEvent) => void;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.dialog = this.querySelector('dialog') || undefined;\r\n this.button = this.querySelector('button') || undefined;\r\n this.selectedClassName = this.getAttribute('data-selected-class-name') || 'tk-button__account--selected';\r\n this.openingType = this.getAttribute('data-opening-type') || 'hover';\r\n this.alignedRightClassName = this.getAttribute('data-aligned-right-class-name') || 'tk-button__account--right';\r\n this.onShowEvent = () => {};\r\n this.onCloseEvent = () => {};\r\n }\r\n\r\n disconnectedCallback() {\r\n this.removeEventListener('mouseenter', this.onShowEvent);\r\n this.dialog?.removeEventListener('mouseleave', this.onCloseEvent);\r\n }\r\n\r\n connectedCallback() {\r\n this.registerOpenListener();\r\n }\r\n\r\n registerOpenListener() {\r\n this.onShowEvent = this.show.bind(this);\r\n if (this.openingType === 'click') {\r\n this.addEventListener('click', this.onShowEvent);\r\n } else {\r\n this.addEventListener('mouseenter', this.onShowEvent);\r\n }\r\n }\r\n\r\n registerCloseListener() {\r\n this.onCloseEvent = this.close.bind(this);\r\n\r\n if (this.openingType === 'click') {\r\n window.addEventListener('click', this.onCloseEvent);\r\n } else {\r\n this.addEventListener('mouseleave', this.onCloseEvent);\r\n this.dialog?.addEventListener('mouseleave', this.onCloseEvent);\r\n }\r\n }\r\n\r\n show() {\r\n if (!this.dialog || !this.button) return;\r\n this.dialog.show();\r\n this.button.classList.add(this.selectedClassName);\r\n const { left } = this.button.getBoundingClientRect();\r\n const leftPosition = left + window.scrollX;\r\n if (window.outerWidth <= this.dialog.clientWidth + leftPosition) {\r\n this.dialog.classList.add(this.alignedRightClassName);\r\n }\r\n\r\n setTimeout(() => {\r\n this.registerCloseListener();\r\n }, 0);\r\n }\r\n\r\n close(event: MouseEvent) {\r\n if (!this.dialog || !this.button) return;\r\n const dialogDimensions = this.dialog.getBoundingClientRect();\r\n const buttonDimensions = this.button.getBoundingClientRect();\r\n const rectangles: RectangleItem[] = [\r\n { rectangle: dialogDimensions },\r\n {\r\n rectangle: buttonDimensions,\r\n offset: { bottom: dialogDimensions.top - buttonDimensions.bottom },\r\n },\r\n ];\r\n if (isOutsideShapes(event, rectangles)) {\r\n this.button.classList.remove(this.selectedClassName);\r\n this.dialog.close();\r\n }\r\n }\r\n}\r\n","import TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\nimport { fetchRequest } from '@tk/utilities/tk.fetch';\r\nimport render from '@tk/utilities/tk.render';\r\n\r\ninterface Viewport {\r\n element: HTMLElement | null;\r\n clickClassName: string | null;\r\n hasDataClassName: string | null;\r\n nothingFoundClassName: string | null;\r\n}\r\n\r\ninterface SearchResponse {\r\n success: boolean;\r\n dataAsHtml: string;\r\n}\r\n\r\nexport default class KDMZSearch extends TKCustomElementFactory {\r\n searchTermReplace!: string | null;\r\n viewport!: Viewport;\r\n fieldElement!: HTMLInputElement | null;\r\n resetButton!: HTMLButtonElement | null;\r\n hasValueClassName!: string | null;\r\n hasClickClassName!: string | null;\r\n isLoadingClassName!: string | null;\r\n hasDataClassName!: string | null;\r\n nothingFoundClassName!: string | null;\r\n nothingFoundText!: string | null;\r\n activeClassName!: string | null;\r\n url!: string | null;\r\n initialURL!: string | null;\r\n headerWrapper!: HTMLElement | null;\r\n resultWrapper!: HTMLElement | null;\r\n filterResultWrapper!: HTMLElement | null;\r\n enterClickSelector!: string | null;\r\n hasSuggest!: boolean;\r\n suggestTextField!: HTMLElement | null;\r\n modalOptionModel!: string | null;\r\n timerID: number | null = null;\r\n initial: boolean = false;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.viewport = {\r\n element: document.querySelector('.viewport'),\r\n clickClassName: this.getAttribute('data-viewport-click-class-name'),\r\n hasDataClassName: this.getAttribute('data-viewport-has-data-class-name'),\r\n nothingFoundClassName: this.getAttribute('data-viewport-nothing-found-class-name'),\r\n };\r\n\r\n this.fieldElement = this.querySelector('input');\r\n this.resetButton = this.querySelector('button[type=\"reset\"]');\r\n this.hasValueClassName = this.getAttribute('data-has-value-class-name');\r\n this.hasClickClassName = this.getAttribute('data-click-class-name');\r\n this.isLoadingClassName = this.getAttribute('data-is-loading-class-name');\r\n this.hasDataClassName = this.getAttribute('data-has-data-class-name');\r\n this.nothingFoundClassName = this.getAttribute('data-nothing-found-class-name');\r\n this.nothingFoundText = this.getAttribute('data-nothing-found-text');\r\n this.activeClassName = this.getAttribute('data-active-class-name');\r\n this.url = this.getAttribute('data-url');\r\n this.initialURL = this.getAttribute('data-initial-url');\r\n this.searchTermReplace = this.getAttribute('data-search-term');\r\n\r\n this.headerWrapper = this.closest('[data-header-search]');\r\n this.resultWrapper = this.querySelector('[data-search-result]');\r\n this.filterResultWrapper = this.querySelector('[data-filter-result]');\r\n\r\n this.enterClickSelector = this.getAttribute('data-enter-click-element');\r\n this.hasSuggest = this.hasAttribute('data-has-suggest');\r\n if (this.hasSuggest) {\r\n this.suggestTextField = this.querySelector('[data-search-suggest]');\r\n }\r\n\r\n this.modalOptionModel = this.getAttribute('data-modal-option-model');\r\n }\r\n\r\n static get observedAttributes() {\r\n return ['data-reset-field'];\r\n }\r\n\r\n connectedCallback() {\r\n if (!this.fieldElement || !this.url) {\r\n throw new Error('KDMZSearch: Elements are missing!');\r\n return;\r\n }\r\n if (this.hasValueClassName) {\r\n this.registerInputListener();\r\n this.registerResetListener();\r\n this.checkForValue();\r\n }\r\n if (this.url) {\r\n this.registerSearchListener();\r\n }\r\n if (this.hasClickClassName) {\r\n this.registerClickListener();\r\n this.registerFocusOutListener();\r\n }\r\n\r\n if (this.enterClickSelector) {\r\n this.registerEnterClickEvent();\r\n }\r\n }\r\n\r\n disconnectedCallback() {\r\n super.disconnectedCallback();\r\n this.initial = false;\r\n }\r\n\r\n attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null) {\r\n if (name === 'data-reset-field' && newValue === 'true') {\r\n this.resetField();\r\n }\r\n }\r\n\r\n registerClickListener() {\r\n const listener = this.showField.bind(this);\r\n this.pushListener({\r\n event: 'click',\r\n element: this,\r\n action: listener,\r\n });\r\n }\r\n\r\n registerFocusOutListener() {\r\n if (!this.fieldElement) return;\r\n const listener = this.hideField.bind(this);\r\n this.pushListener({\r\n event: 'focusout',\r\n element: this.fieldElement,\r\n action: listener,\r\n });\r\n }\r\n\r\n registerInputListener() {\r\n if (!this.fieldElement) return;\r\n const listener = this.checkForValue.bind(this);\r\n this.pushListener({\r\n event: 'input',\r\n element: this.fieldElement,\r\n action: listener,\r\n });\r\n }\r\n\r\n registerResetListener() {\r\n if (!this.resetButton) return;\r\n const listener = this.resetField.bind(this);\r\n this.pushListener({\r\n event: 'click',\r\n element: this.resetButton,\r\n action: listener,\r\n });\r\n }\r\n\r\n registerSearchListener() {\r\n if (!this.fieldElement) return;\r\n const listener = this.search.bind(this);\r\n this.pushListener({\r\n event: 'input',\r\n element: this.fieldElement,\r\n action: listener,\r\n });\r\n }\r\n\r\n registerEnterClickEvent() {\r\n if (!this.fieldElement) return;\r\n const listener = this.handleEnterClickListener.bind(this);\r\n this.pushListener({\r\n event: 'keypress',\r\n element: this.fieldElement,\r\n action: listener,\r\n });\r\n }\r\n\r\n checkForValue() {\r\n if (!this.fieldElement) return;\r\n if (this.fieldElement.value) {\r\n this.classList.add(this.hasValueClassName!);\r\n } else {\r\n this.classList.remove(this.hasValueClassName!);\r\n this.classList.remove(this.hasDataClassName!);\r\n this.classList.remove(this.nothingFoundClassName!);\r\n this.viewport.element?.classList.remove(this.viewport.hasDataClassName!);\r\n this.viewport.element?.classList.remove(this.viewport.nothingFoundClassName!);\r\n this.initial ? this.resetResult() : (this.initial = true);\r\n this.hasSuggest && (this.suggestTextField!.textContent = '');\r\n }\r\n }\r\n\r\n resetField() {\r\n if (!this.fieldElement || this.fieldElement.value === '') return;\r\n\r\n this.fieldElement.value = '';\r\n this.checkForValue();\r\n }\r\n\r\n showField() {\r\n this.classList.add(this.hasClickClassName!);\r\n this.viewport.element?.classList.add(this.viewport.clickClassName!);\r\n this.fieldElement?.focus();\r\n }\r\n\r\n hideField() {\r\n if (!this.fieldElement || this.fieldElement.value) return;\r\n this.classList.remove(this.hasClickClassName!);\r\n this.viewport.element?.classList.remove(this.viewport.clickClassName!);\r\n }\r\n\r\n resetResult() {\r\n if (this.initialURL) {\r\n fetchRequest({\r\n requestURL: this.initialURL,\r\n resolveHandler: this.searchResponse.bind(this),\r\n rejectHandler: this.errorResponse.bind(this),\r\n });\r\n } else {\r\n this.resultWrapper && (this.resultWrapper.innerHTML = '');\r\n }\r\n }\r\n\r\n search() {\r\n const value = this.fieldElement?.value || '';\r\n const formURL = this.url;\r\n\r\n if (value.length < 3) {\r\n this.classList.remove(this.hasDataClassName!);\r\n this.classList.remove(this.nothingFoundClassName!);\r\n this.viewport.element?.classList.remove(this.viewport.hasDataClassName!);\r\n this.viewport.element?.classList.remove(this.viewport.nothingFoundClassName!);\r\n this.timerID && clearTimeout(this.timerID);\r\n return;\r\n }\r\n\r\n this.classList.add(this.isLoadingClassName!);\r\n this.timerID && clearTimeout(this.timerID);\r\n this.timerID = window.setTimeout(() => {\r\n const searchUrl = new URL(formURL!);\r\n searchUrl.searchParams.set('query', value);\r\n fetchRequest({\r\n requestURL: searchUrl.toString(),\r\n resolveHandler: this.searchResponse.bind(this),\r\n rejectHandler: this.errorResponse.bind(this),\r\n });\r\n }, 300);\r\n }\r\n\r\n searchResponse(response: SearchResponse) {\r\n if (response && response.success) {\r\n const html = render(response.dataAsHtml);\r\n this.resultWrapper!.innerHTML = html.innerHTML;\r\n this.classList.remove(this.isLoadingClassName!);\r\n this.classList.add(this.hasDataClassName!);\r\n this.classList.remove(this.nothingFoundClassName!);\r\n this.viewport.element?.classList.remove(this.viewport.nothingFoundClassName!);\r\n this.viewport.element?.classList.add(this.viewport.hasDataClassName!);\r\n\r\n if (this.enterClickSelector) {\r\n const formFields = this.resultWrapper!.querySelectorAll('input, textarea');\r\n formFields.forEach((field) => {\r\n this.pushListener({\r\n event: 'keydown',\r\n element: field,\r\n action: this.handleEnterClickListener.bind(this),\r\n });\r\n });\r\n }\r\n\r\n if (this.hasSuggest) {\r\n const suggestElement = html.querySelector('[data-search-result-suggest]');\r\n const suggest = suggestElement?.textContent || '';\r\n this.suggestTextField!.textContent = suggest;\r\n }\r\n }\r\n }\r\n\r\n errorResponse() {\r\n this.classList.remove(this.isLoadingClassName!);\r\n this.classList.add(this.nothingFoundClassName!);\r\n this.viewport.element?.classList.add(this.viewport.nothingFoundClassName!);\r\n\r\n this.resultWrapper!.innerHTML = `
\r\n ${this.nothingFoundText}\r\n
`;\r\n }\r\n\r\n handleEnterClickListener(event: KeyboardEvent) {\r\n if (event.key !== 'Enter') return;\r\n const basketButton = this.querySelector(this.enterClickSelector!);\r\n basketButton && basketButton.click();\r\n this.fieldElement?.focus();\r\n }\r\n}\r\n","import TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\n\r\nexport default class TKHeaderSearch extends TKCustomElementFactory {\r\n toggleButtons?: NodeListOf;\r\n searchWrapper?: HTMLElement;\r\n\r\n activeClass = 'tk-search-overlay--active';\r\n\r\n constructor() {\r\n super();\r\n\r\n this.toggleButtons = this.querySelectorAll('[data-tk-search-toggle]') || undefined;\r\n this.searchWrapper = this.querySelector('[data-tk-search-wrapper]') || undefined;\r\n }\r\n\r\n connectedCallback(): void {\r\n this.registerClickListener();\r\n }\r\n\r\n registerClickListener() {\r\n const toggleSearch = this.toggleSearch.bind(this);\r\n\r\n this.toggleButtons?.forEach((button) => {\r\n this.pushListener({\r\n event: 'click',\r\n element: button,\r\n action: toggleSearch,\r\n });\r\n });\r\n }\r\n\r\n toggleSearch(): void {\r\n if (!this.searchWrapper) return;\r\n this.searchWrapper!.classList.toggle(\r\n this.activeClass,\r\n !this.searchWrapper!.classList.contains(this.activeClass),\r\n );\r\n document.querySelector('body')!.classList.toggle(\r\n 'search-overlay--active',\r\n this.searchWrapper!.classList.contains(this.activeClass),\r\n );\r\n if (this.searchWrapper!.classList.contains(this.activeClass)) {\r\n const fieldElement = this.searchWrapper.querySelector('input[type=\"search\"]');\r\n setTimeout(() => {\r\n fieldElement?.focus();\r\n }, 500);\r\n }\r\n }\r\n}\r\n","/* eslint-disable max-len */\r\n/* eslint-disable class-methods-use-this */\r\nimport TKFormElement from '@tk/controls/tk.form.element';\r\n\r\nexport default class KDMZFormElement extends TKFormElement {\r\n select?: HTMLSelectElement;\r\n checkbox?: HTMLInputElement;\r\n range?: HTMLInputElement;\r\n evt : Event;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.select = this.querySelector('select') as HTMLSelectElement;\r\n this.checkbox = this.querySelector('input[type=\"checkbox\"]') as HTMLInputElement;\r\n this.range = this.querySelector('input[type=\"range\"]') as HTMLInputElement;\r\n this.evt = new Event('change');\r\n }\r\n\r\n connectedCallback() {\r\n super.connectedCallback();\r\n const onSelectChange = this.handleSelectChange.bind(this);\r\n const onCheckboxChange = this.handleCheckboxChange.bind(this);\r\n const onRangeChange = this.handleRangeChange.bind(this);\r\n\r\n if (this.select) {\r\n this.pushListener({ event: 'change', element: this.select, action: onSelectChange });\r\n this.handleSelectChange();\r\n }\r\n\r\n if (this.checkbox) {\r\n this.pushListener({ event: 'change', element: this.checkbox, action: onCheckboxChange });\r\n // this.handleCheckboxChange();\r\n }\r\n\r\n if (this.range) {\r\n this.pushListener({ event: 'change', element: this.range, action: onRangeChange });\r\n }\r\n }\r\n\r\n /**\r\n * Handles changes to the select element.\r\n * Toggles the 'tk-form-select--filled' class based on the select element's value.\r\n */\r\n handleSelectChange(): void {\r\n if (!this.select) return;\r\n this.classList.toggle('tk-form-select--filled', this.select.value !== '');\r\n }\r\n\r\n /**\r\n * Handles changes to the checkbox element.\r\n */\r\n handleCheckboxChange(): void {\r\n if (!this.checkbox) return;\r\n // Checkboxen\r\n if (this.checkbox.hasAttribute('data-checkbox-toggle-master')) {\r\n this.toggleAllCheckboxes(this.checkbox, this.checkbox.checked);\r\n }\r\n if (this.checkbox.hasAttribute('data-checkbox-toggle')) {\r\n this.toggleMasterCheckbox(this.checkbox);\r\n }\r\n }\r\n\r\n /**\r\n * Handles changes to the range element.\r\n */\r\n handleRangeChange(): void {\r\n if (!this.range) return;\r\n // Range Toggler\r\n if (this.range.hasAttribute('data-range-toggle-master')) {\r\n this.toggleAllRanges(this.range, this.range.value);\r\n }\r\n if (this.range.hasAttribute('data-range-toggle')) {\r\n // this.toggleMasterRange(this.range);\r\n }\r\n }\r\n\r\n // Checkboxes\r\n toggleAllCheckboxes(toggler : HTMLInputElement, status : boolean): void {\r\n const allCheckboxes : NodeListOf = document.querySelectorAll('input[data-checkbox-toggle]');\r\n Array.from(allCheckboxes).forEach((box) => {\r\n if (box.checked !== status && !box.disabled) {\r\n box.checked = status;\r\n // box.dispatchEvent(this.evt);\r\n }\r\n });\r\n }\r\n\r\n toggleMasterCheckbox(box : HTMLInputElement): void {\r\n const masterCheckbox : HTMLInputElement = document.querySelector('input[data-checkbox-toggle-master]')!;\r\n const isChecked : boolean = box.checked;\r\n if (!isChecked) {\r\n masterCheckbox.checked = false;\r\n }\r\n }\r\n\r\n // Range Toggler\r\n toggleAllRanges(toggler : HTMLInputElement, val : string): void {\r\n const allRanges: NodeListOf = document.querySelectorAll('input[data-range-toggle]');\r\n Array.from(allRanges).forEach((range) => {\r\n if (range.value !== val && !range.disabled) {\r\n range.value = val;\r\n range.click();\r\n // range.dispatchEvent(this.evt);\r\n }\r\n });\r\n }\r\n\r\n toggleMasterRange(range : HTMLInputElement): void {\r\n const masterRange: HTMLInputElement = document.querySelector('input[data-range-toggle-master]')!;\r\n const val : number = Number(range.value);\r\n if (val) {\r\n masterRange.value = String(val);\r\n }\r\n }\r\n\r\n // #region Required\r\n checkRequiredAttribute() {\r\n if (!this.labelElement || !this.fieldElement || !this.fieldElement.hasAttribute('required') || this.fieldElement.closest('.o-toggle-info') || this.labelElement.textContent.includes('*')) return;\r\n this.labelElement.textContent = `${this.labelElement.textContent} *`;\r\n }\r\n}\r\n","import TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\n\r\ntype FieldElement = HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement | undefined;\r\ntype AddonType = 'prefix' | 'suffix';\r\n\r\nenum HoverState {\r\n ACTIVE = 'active',\r\n INACTIVE = 'inactive',\r\n}\r\n\r\nexport default class TKFormElement extends TKCustomElementFactory {\r\n fieldElement: FieldElement;\r\n labelElement: HTMLLabelElement | undefined;\r\n isMaterial: boolean;\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 addonSuffixDistance: number;\r\n addonPrefixDistance: number;\r\n addonDefaultPadding: number;\r\n isPasswordInput: boolean;\r\n waitForSurroundingContent: HTMLElement | undefined;\r\n disableOnAddonClick: boolean;\r\n onTransitionEnd: () => void;\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.isMaterial = this.hasAttribute('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.isPasswordInput = this.hasAttribute('data-tk-toggle-password');\r\n this.disableOnAddonClick = this.hasAttribute('data-tk-disable-on-addon-click');\r\n this.addonElement = this.querySelector('[data-tk-addon]')\r\n || undefined;\r\n this.waitForSurroundingContent = (this.closest('[data-wait-for-surrounding-content]') as HTMLElement)\r\n || undefined;\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 if (this.isNumberInput() || this.waitForSurroundingContent) {\r\n this.onDomContentLoaded();\r\n return;\r\n }\r\n this.checkRequiredAttribute();\r\n this.registerAddonClickedListener();\r\n this.registerAddonHoverListener();\r\n this.registerShowPasswordClickedListener();\r\n this.initMaterialInput();\r\n this.observeDisabledAttribute();\r\n }\r\n\r\n /**\r\n * For the Material Number Input or forms inside of tables, it is necessary that all surrounding elements have been\r\n * fullyloaded before the Material Number Element itself is displayed.\r\n * This is because the position of the label in the collapsed state\r\n * needs to be calculated for the Material Number Input. This calculation depends on the surrounding elements\r\n */\r\n onDomContentLoaded() {\r\n document.addEventListener('DOMContentLoaded', () => {\r\n this.checkRequiredAttribute();\r\n this.registerAddonClickedListener();\r\n this.registerAddonHoverListener();\r\n this.registerShowPasswordClickedListener();\r\n this.initMaterialInput();\r\n this.observeDisabledAttribute();\r\n });\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.textContent = `${this.labelElement.textContent} *`;\r\n }\r\n // #endregion\r\n\r\n // #region disabled\r\n observeDisabledAttribute() {\r\n if (!this.fieldElement || !this.labelElement) return;\r\n\r\n // inital check\r\n this.checkDisabledAttribute();\r\n\r\n const observerConfig = { attributes: true, attributeFilter: ['disabled'] };\r\n\r\n const onCheckDiabledAttribute = this.checkDisabledAttribute.bind(this);\r\n\r\n const observer = new MutationObserver(onCheckDiabledAttribute);\r\n observer.observe(this.fieldElement, observerConfig);\r\n }\r\n\r\n checkDisabledAttribute() {\r\n const addDisabledClass = this.fieldElement!.hasAttribute('disabled');\r\n this.classList.toggle('tk-form-input--disabled', addDisabledClass);\r\n }\r\n // #endregion\r\n\r\n // #region Addon\r\n registerAddonClickedListener() {\r\n if (!this.addonElement || this.disableOnAddonClick) 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 registerAddonHoverListener() {\r\n if (!this.addonElement) return;\r\n const onHoverStartHandler = this.onAddonHover.bind(this, HoverState.ACTIVE);\r\n this.pushListener({ event: 'mouseenter', element: this.addonElement, action: onHoverStartHandler });\r\n const onHoverEndHandler = this.onAddonHover.bind(this, HoverState.INACTIVE);\r\n this.pushListener({ event: 'mouseleave', element: this.addonElement, action: onHoverEndHandler });\r\n }\r\n\r\n onAddonHover(hoverState: HoverState) {\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 this.classList.toggle(\r\n 'tk-form--addon-hover',\r\n (hoverState === HoverState.ACTIVE) && !this.fieldElement.disabled,\r\n );\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 const lastCharPosition = this.fieldElement.value.length;\r\n const isNumberInput = this.fieldElement.type === 'number';\r\n if (isNumberInput) {\r\n this.fieldElement.setAttribute('type', 'text');\r\n }\r\n this.fieldElement.setSelectionRange(lastCharPosition, lastCharPosition);\r\n if (isNumberInput) {\r\n this.fieldElement.setAttribute('type', 'number');\r\n }\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.isMaterial) 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-tk-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 this.pushListener({ event: 'input', element: this.fieldElement!, action: onValueChanged });\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","/* eslint-disable max-len */\r\nimport TKDialog from '@tk/components/tk.dialog';\r\n\r\nexport default class KDMZDialog extends TKDialog {\r\n shouldFullTop: boolean;\r\n fullTopClassName: string;\r\n breakpointClassName: string;\r\n\r\n constructor() {\r\n super();\r\n this.shouldFullTop = this.hasAttribute('data-tk-should-full-top');\r\n this.fullTopClassName = this.getAttribute('data-tk-full-top-class-name') || 'tk-dialog--full-top';\r\n this.breakpointClassName = this.getAttribute('data-tk-breakpoint-class-name') || '';\r\n }\r\n\r\n createDialog(url: string): HTMLDialogElement {\r\n const dialog = TKDialog.renderDialog({\r\n className: `${this.dialogClassName} ${this.shouldMaxWidth ? this.maxWidthClassName : ''} ${this.shouldFullTop ? this.fullTopClassName : ''} ${this.breakpointClassName ? this.breakpointClassName : ''}`,\r\n closeClassName: this.dialogCloseClassName,\r\n innerClassName: this.dialogInnerClassName,\r\n tag: 'dialog',\r\n isConfirm: this.isConfirm,\r\n confirmURL: url,\r\n confirmTitle: this.confirmTitle,\r\n confirmDescription: this.confirmDescription,\r\n confirmCancelIcon: this.confirmCancelIcon,\r\n confirmCancelLabel: this.confirmCancelLabel,\r\n confirmSubmitIcon: this.confirmSubmitIcon,\r\n confirmSubmitLabel: this.confirmSubmitLabel,\r\n });\r\n const onClosed = this.closedDialog.bind(this);\r\n this.pushListener({ event: 'close', element: dialog, action: onClosed });\r\n this.currentDialog = this.dialogs.push({ url, dialog }) - 1;\r\n return dialog;\r\n }\r\n}\r\n","/* eslint-disable max-len */\r\nimport { fetchRequest } from '@tk/utilities/tk.fetch';\r\nimport { RectangleItem, isOutsideShapes } from '@tk/utilities/tk.shape.detector';\r\nimport TKViewport from '@tk/basiscs/tk.viewport';\r\nimport TKMinibasket from '@tk/components/tk.minibasket';\r\nimport render from '@tk/utilities/tk.render';\r\n\r\nexport default class KDMZMinibasket extends TKMinibasket {\r\n header?: HTMLElement;\r\n subheader?: HTMLElement;\r\n miniBasketHeader?: HTMLElement;\r\n\r\n constructor() {\r\n super();\r\n this.header = this.closest('.viewport')?.querySelector('[data-tk-header]') || undefined;\r\n this.subheader = this.closest('.viewport')?.querySelector('[data-tk-header-subheader]') || undefined;\r\n this.miniBasketHeader = this.querySelector('.tk-minibasket__header') || undefined;\r\n }\r\n\r\n registerCloseListener(): void {\r\n const handleClose = this.close.bind(this);\r\n this.pushListener({ event: 'click', element: window, action: handleClose });\r\n if (this.miniBasketHeader) {\r\n this.pushListener({ event: 'click', element: this.miniBasketHeader, action: handleClose });\r\n }\r\n }\r\n\r\n open() {\r\n document.body.classList.add('body--fixed');\r\n document.body.insertAdjacentElement('beforeend', this.overlay!);\r\n this.overlay!.classList.add(this.openClassName);\r\n this.alignOverlayToButton();\r\n !this.isDataFetched && this.fetchAll();\r\n this.dispatchEvent(this.openedEvent);\r\n this.overlay!.style.height = `${this.overlay!.clientHeight.toString()}px`;\r\n }\r\n\r\n close(event: MouseEvent) {\r\n const targetElement : HTMLElement = event.target as HTMLElement;\r\n if (!this.overlay || targetElement!.closest('[data-tk-action=\"change\"]') || targetElement instanceof HTMLButtonElement) return;\r\n const headerButtonRect = this.headerButton!.getBoundingClientRect();\r\n const overlayRect = this.overlay!.getBoundingClientRect();\r\n const rectangles = [\r\n { rectangle: headerButtonRect },\r\n { rectangle: overlayRect },\r\n ] as RectangleItem[];\r\n if (isOutsideShapes(event, rectangles)) {\r\n this.overlay!.classList.remove(this.openClassName);\r\n this.overlay!.classList.remove('tk-minibasket__overlay--oopen');\r\n this.dispatchEvent(this.closedEvent);\r\n this.removeListener(window);\r\n document.body.classList.remove('body--fixed');\r\n }\r\n }\r\n\r\n alignOverlayToButton() {\r\n const viewport = new TKViewport();\r\n const currentBreakpoint = viewport.getCurrentBreakpoint(window.innerWidth);\r\n\r\n const { bottom, right } = this.subheader ? this.subheader!.getBoundingClientRect() : this.header!.getBoundingClientRect();\r\n const { width } = this.overlay!.getBoundingClientRect();\r\n const distanceToBorder = right - width;\r\n\r\n if (currentBreakpoint === 'l' || currentBreakpoint === 'xl') {\r\n this.overlay!.style.top = `${bottom}px`;\r\n this.overlay!.classList.add('tk-minibasket__overlay--oopen');\r\n } else {\r\n this.overlay!.style.top = '0px';\r\n this.overlay!.classList.add('tk-minibasket__overlay--oopen');\r\n }\r\n }\r\n\r\n // placeContent(response: TKResponse): void {\r\n // if (!response || !response.success) return;\r\n // if (!this.contentWrapper) return;\r\n // const items = render(response.dataAsHtml);\r\n // this.contentWrapper.innerHTML = '';\r\n // this.contentWrapper.insertAdjacentHTML('beforeend', items.innerHTML);\r\n // }\r\n\r\n placeContent(response: TKResponse): void {\r\n if (!response || !response.success) return;\r\n if (!this.contentWrapper) return;\r\n const items = render(response.dataAsHtml);\r\n const currentMiniBasketAccordion = this.contentWrapper.querySelector('[data-tk-basket-list] .tk-tabs-accordion--active');\r\n if (currentMiniBasketAccordion) {\r\n // const currentContentWrapper = currentMiniBasketAccordion.querySelector('.tk-tabs-accordion__body') as HTMLElement;\r\n // if (currentContentWrapper) {\r\n // const currentContentWrapperNumber = currentMiniBasketAccordion.dataset.saldocBoid;\r\n // const divItem = document.createElement('div');\r\n // currentContentWrapper.innerHTML = '';\r\n // divItem.insertAdjacentHTML('beforeend', items.innerHTML);\r\n // const itemsCurrentWrapper = divItem.querySelector(`[data-saldoc-boid=\"${currentContentWrapperNumber}\"]`);\r\n // currentContentWrapper.insertAdjacentHTML('beforeend', itemsCurrentWrapper.innerHTML);\r\n // }\r\n const accContent = currentMiniBasketAccordion.querySelector('[data-tk-accordion-content]');\r\n const asyncUrl = currentMiniBasketAccordion.getAttribute('data-content-url') || undefined;\r\n if (asyncUrl) {\r\n const htmlString = '
';\r\n const loadingElement = document.createElement('div');\r\n loadingElement.innerHTML = htmlString;\r\n loadingElement.classList.add('flex', 'flex--justify-center', 'spacer-mb-4', 'spacer-mt-4');\r\n accContent.append(loadingElement);\r\n fetchRequest({\r\n requestURL: asyncUrl!,\r\n resolveHandler: this.handleResponseSuccess.bind(this, asyncUrl!, accContent),\r\n });\r\n }\r\n } else {\r\n this.contentWrapper.innerHTML = '';\r\n this.contentWrapper.insertAdjacentHTML('beforeend', items.innerHTML);\r\n }\r\n }\r\n\r\n handleResponseSuccess(url: string, accContent: HTMLElement, response: TKResponse): void {\r\n if (!response || !response.success) return;\r\n const content = accContent;\r\n if (!content) return;\r\n content.innerHTML = response.dataAsHtml;\r\n }\r\n}\r\n","import { fetchRequest } from '@tk/utilities/tk.fetch';\r\nimport TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\nimport render from '@tk/utilities/tk.render';\r\nimport { RectangleItem, isOutsideShapes } from '@tk/utilities/tk.shape.detector';\r\n\r\ninterface QuantityResponse {\r\n quantity: number;\r\n}\r\n\r\nexport default class TKMinibasket extends TKCustomElementFactory {\r\n headerButton?: HTMLButtonElement;\r\n overlay?: HTMLElement;\r\n contentWrapper?: HTMLUListElement;\r\n countItemsRequestURL?: string;\r\n getContentRequestURL?: string;\r\n headerButtonEmptyClassName: string;\r\n openClassName: string;\r\n isDataFetched: boolean = false;\r\n offset: number;\r\n minDistanceToBorder: number;\r\n\r\n // Custom Events\r\n openedEventName: TKCustomEventMap;\r\n openedEvent: CustomEvent;\r\n closedEventName: TKCustomEventMap;\r\n closedEvent: CustomEvent;\r\n updateEventName: TKCustomEventMap;\r\n updateEvent: CustomEvent;\r\n\r\n static observedAttributes = ['data-count'];\r\n\r\n constructor() {\r\n super();\r\n\r\n this.headerButton = this.querySelector('[data-tk-header-button]') || undefined;\r\n this.overlay = this.querySelector('[data-tk-minibasket-overlay]') || undefined;\r\n this.contentWrapper = this.querySelector('[data-tk-minibasket-content]') || undefined;\r\n this.countItemsRequestURL = this.getAttribute('data-tk-count-items-request-url') || undefined;\r\n this.getContentRequestURL = this.getAttribute('data-tk-get-content-request-url') || undefined;\r\n this.headerButtonEmptyClassName = this.getAttribute('data-tk-header-button-empty-class-name')\r\n || 'tk-button__header--empty';\r\n this.offset = Number(this.getAttribute('data-tk-minibasket-offset')) || 4;\r\n this.openClassName = this.getAttribute('data-tk-open-class-name') || 'tk-minibasket--open';\r\n this.minDistanceToBorder = Number(this.getAttribute('data-tk-min-distance-to-border')) || 5;\r\n\r\n // Custom Events\r\n this.openedEventName = (\r\n this.getAttribute('data-tk-event-opened-name') || 'tk-minibasket-opened'\r\n ) as TKCustomEventMap;\r\n this.openedEvent = new CustomEvent(this.openedEventName);\r\n this.closedEventName = (\r\n this.getAttribute('data-tk-event-closed-name') || 'tk-minibasket-closed'\r\n ) as TKCustomEventMap;\r\n this.closedEvent = new CustomEvent(this.closedEventName);\r\n this.updateEventName = (\r\n this.getAttribute('data-tk-event-update-name') || 'tk-minibasket-update'\r\n ) as TKCustomEventMap;\r\n this.updateEvent = new CustomEvent(this.updateEventName);\r\n }\r\n\r\n connectedCallback(): void {\r\n if (!this.headerButton) throw new Error('Minibasket: Header Button is missing!');\r\n if (\r\n !this.countItemsRequestURL\r\n || !this.getContentRequestURL\r\n ) {\r\n throw new Error('Minibasket: Request URLs are missing!');\r\n }\r\n this.registerInitializeListener();\r\n this.fetchQuantity();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldValue: string, newValue: string) {\r\n if (name === 'data-count') {\r\n this.setCounter(Number(newValue));\r\n }\r\n }\r\n\r\n registerInitializeListener(): void {\r\n const handleOpen = this.open.bind(this);\r\n this.pushListener({ event: 'click', element: this.headerButton!, action: handleOpen });\r\n\r\n const handleOpened = this.opened.bind(this);\r\n this.pushListener({ event: this.openedEventName, element: this, action: handleOpened });\r\n\r\n const handleUpdate = this.update.bind(this);\r\n this.pushListener({ event: this.updateEventName, element: this, action: handleUpdate });\r\n }\r\n\r\n registerCloseListener(): void {\r\n const handleClose = this.close.bind(this);\r\n this.pushListener({ event: 'click', element: window, action: handleClose });\r\n }\r\n\r\n registerScrollListener(): void {\r\n const handleScroll = this.alignOverlayToButton.bind(this);\r\n this.pushListener({ event: 'scroll', element: window, action: handleScroll });\r\n }\r\n\r\n open() {\r\n document.body.insertAdjacentElement('beforeend', this.overlay!);\r\n this.overlay!.classList.add(this.openClassName);\r\n this.alignOverlayToButton();\r\n !this.isDataFetched && this.fetchAll();\r\n this.dispatchEvent(this.openedEvent);\r\n }\r\n\r\n opened() {\r\n // This method would be used to execute code in a non-blocking way to prevent potential delays.\r\n setTimeout(() => {\r\n this.registerCloseListener();\r\n this.registerScrollListener();\r\n }, 0);\r\n }\r\n\r\n update() {\r\n this.fetchQuantity();\r\n this.fetchAll();\r\n }\r\n\r\n close(event: MouseEvent) {\r\n if (!this.overlay) return;\r\n const headerButtonRect = this.headerButton!.getBoundingClientRect();\r\n const overlayRect = this.overlay!.getBoundingClientRect();\r\n const rectangles = [\r\n { rectangle: headerButtonRect },\r\n { rectangle: overlayRect },\r\n ] as RectangleItem[];\r\n if (isOutsideShapes(event, rectangles)) {\r\n this.overlay!.classList.remove(this.openClassName);\r\n this.dispatchEvent(this.closedEvent);\r\n this.removeListener(window);\r\n }\r\n }\r\n\r\n fetchAll() {\r\n Promise.all([\r\n TKMinibasket.fetchData(this.getContentRequestURL!),\r\n ]).then((responses) => {\r\n this.isDataFetched = true;\r\n this.placeContent(responses[0]);\r\n }).catch(() => {\r\n this.isDataFetched = false;\r\n });\r\n }\r\n\r\n fetchQuantity(): void {\r\n fetchRequest({\r\n requestURL: this.countItemsRequestURL!,\r\n resolveHandler: this.getQuantity.bind(this),\r\n });\r\n }\r\n\r\n static fetchData(url: string): Promise> {\r\n return new Promise((resolve) => {\r\n fetchRequest({\r\n requestURL: url,\r\n resolveHandler: (response: TKResponse) => {\r\n resolve(response);\r\n },\r\n });\r\n });\r\n }\r\n\r\n getQuantity(response: TKResponse): void {\r\n if (!response || !response.success) return;\r\n const { quantity } = response.dataAsJson;\r\n this.setCounter(quantity);\r\n }\r\n\r\n setCounter(quantity: number) {\r\n if (quantity === 0) {\r\n this.headerButton?.classList.add(this.headerButtonEmptyClassName);\r\n } else {\r\n this.headerButton?.setAttribute('data-count', `${quantity || 0}`);\r\n this.headerButton?.classList.remove(this.headerButtonEmptyClassName);\r\n }\r\n }\r\n\r\n placeContent(response: TKResponse): void {\r\n if (!response || !response.success) return;\r\n if (!this.contentWrapper) return;\r\n const items = render(response.dataAsHtml);\r\n this.contentWrapper.innerHTML = '';\r\n this.contentWrapper.insertAdjacentHTML('beforeend', items.innerHTML);\r\n }\r\n\r\n alignOverlayToButton() {\r\n const { bottom, right } = this.headerButton!.getBoundingClientRect();\r\n const { width } = this.overlay!.getBoundingClientRect();\r\n const distanceToBorder = right - width;\r\n\r\n this.overlay!.style.top = `${bottom + this.offset}px`;\r\n\r\n if (distanceToBorder >= this.minDistanceToBorder) {\r\n this.overlay!.style.left = `${right - width}px`;\r\n } else {\r\n this.overlay!.style.left = '50%';\r\n this.overlay!.style.transform = 'translateX(-50%)';\r\n }\r\n }\r\n}\r\n","/* eslint-disable class-methods-use-this */\r\n/* eslint-disable no-console */\r\n/* eslint-disable max-len */\r\nimport TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\nimport { fetchRequest } from '@tk/utilities/tk.fetch';\r\nimport { NotificationType, sendNotification } from '@tk/utilities/tk.notification';\r\n\r\nexport default class KDMZBasketButton extends TKCustomElementFactory {\r\n quantityField?: HTMLInputElement;\r\n submitButton?: HTMLButtonElement;\r\n formular?: HTMLFormElement;\r\n counterWrapper?: HTMLElement;\r\n url: string;\r\n decreaser?: HTMLButtonElement;\r\n increaser?: HTMLButtonElement;\r\n counter?: HTMLInputElement;\r\n\r\n constructor() {\r\n super();\r\n this.quantityField = this.querySelector('[name=\"input_dim1\"]') || undefined;\r\n this.submitButton = this.querySelector('[type=\"submit\"]') || undefined;\r\n this.counterWrapper = this.querySelector('[data-tk-counter]') || undefined;\r\n this.formular = this.querySelector('form') || undefined;\r\n this.url = this.getAttribute('data-url') || '';\r\n if (this.counterWrapper) {\r\n this.decreaser = this.querySelector('[data-tk-counter-decreaser]') || undefined;\r\n this.increaser = this.querySelector('[data-tk-counter-increaser]') || undefined;\r\n this.counter = this.querySelector('[data-tk-input-quantity]') || undefined;\r\n }\r\n }\r\n\r\n connectedCallback(): void {\r\n if (!this.formular) throw new Error('KDMZBasketButton: Formular is missing!');\r\n this.registerEventListener();\r\n this.registerCounter();\r\n }\r\n\r\n registerCounter() {\r\n if (!this.decreaser || !this.increaser) return;\r\n const onDecrease = this.decrease.bind(this);\r\n this.pushListener({ event: 'click', element: this.decreaser, action: onDecrease });\r\n const onIncrease = this.increase.bind(this);\r\n this.pushListener({ event: 'click', element: this.increaser, action: onIncrease });\r\n }\r\n\r\n increase() {\r\n if (!this.counter || !this.increaser) return;\r\n const {\r\n step, max, value,\r\n } = this.counter;\r\n const valueNumber = Number(value);\r\n if (Number(max) !== 0 && valueNumber >= Number(max)) return;\r\n this.counter.value = String(valueNumber + (Number(step) || 1));\r\n }\r\n\r\n decrease() {\r\n if (!this.counter || !this.decreaser) return;\r\n const {\r\n step, min, value,\r\n } = this.counter;\r\n const valueNumber = Number(value);\r\n if (valueNumber <= (Number(min) || 1)) return;\r\n this.counter.value = String(valueNumber - (Number(step) || 1));\r\n }\r\n\r\n registerEventListener() {\r\n this.pushListener({\r\n event: 'submit',\r\n element: this.formular!,\r\n action: this.submitForm.bind(this),\r\n });\r\n }\r\n\r\n submitForm(event : Event): void {\r\n const isQuickAdd = this.closest('.tk-quick-order') || undefined;\r\n if (isQuickAdd) {\r\n event.preventDefault();\r\n this.submitFormQuickAddAsync();\r\n }\r\n console.log('submit');\r\n }\r\n\r\n submitFormQuickAddAsync(): void {\r\n const payload = {\r\n input_dim1: this.quantityField!.value,\r\n };\r\n fetchRequest({\r\n requestURL: this.url!,\r\n payload,\r\n resolveHandler: this.handleSuccessQuickAddResponse.bind(this),\r\n });\r\n }\r\n\r\n handleSuccessQuickAddResponse(response) {\r\n if (response && response.dataAsJson.success) {\r\n sendNotification(\r\n NotificationType.SUCCESS,\r\n response.dataAsJson.message,\r\n );\r\n }\r\n }\r\n\r\n submitFormAsync(): void {\r\n const payload = {\r\n input_dim1: this.quantityField!.value,\r\n };\r\n fetchRequest({\r\n requestURL: this.url!,\r\n payload,\r\n resolveHandler: this.handleSuccessResponse.bind(this),\r\n });\r\n }\r\n\r\n handleSuccessResponse(response) {\r\n if (response && response.success) {\r\n const html = response.dataAsHtml;\r\n this.innerHTML = html;\r\n }\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable class-methods-use-this */\r\n/* eslint-disable no-console */\r\n/* eslint-disable max-len */\r\nimport TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\nimport { fetchRequest } from '@tk/utilities/tk.fetch';\r\n\r\nexport default class KDMZWeb2print extends TKCustomElementFactory {\r\n submitBtn?: HTMLButtonElement;\r\n url?: string;\r\n\r\n constructor() {\r\n super();\r\n this.submitBtn = this.querySelector('[data-web2print-submit]') || undefined;\r\n this.url = this.dataset.url || undefined;\r\n }\r\n\r\n connectedCallback(): void {\r\n if (!this.submitBtn || !this.url) throw new Error('KDMZWeb2print: something is missing!');\r\n this.registerEventListener();\r\n }\r\n\r\n registerEventListener() {\r\n this.pushListener({\r\n event: 'click',\r\n element: this.submitBtn!,\r\n action: this.sendForm.bind(this),\r\n });\r\n }\r\n\r\n sendForm(event : Event) : void {\r\n const payload = {};\r\n\r\n fetchRequest({\r\n requestURL: this.url!,\r\n payload,\r\n resolveHandler: this.setDataAndCloseDialog.bind(this),\r\n });\r\n }\r\n\r\n setDataAndCloseDialog(response: TKResponse) {\r\n // console.log(response.dataAsJson);\r\n if (response.status === 'ok') {\r\n location.reload();\r\n }\r\n }\r\n}\r\n"],"names":["entries","setPrototypeOf","isFrozen","getPrototypeOf","getOwnPropertyDescriptor","Object","freeze","seal","create","apply","construct","Reflect","x","fun","thisValue","args","Func","arrayForEach","unapply","Array","prototype","forEach","arrayPop","pop","arrayPush","push","stringToLowerCase","String","toLowerCase","stringToString","toString","stringMatch","match","stringReplace","replace","stringIndexOf","indexOf","stringTrim","trim","objectHasOwnProperty","hasOwnProperty","regExpTest","RegExp","test","typeErrorCreate","unconstruct","TypeError","func","thisArg","_len","arguments","length","_key","_len2","_key2","addToSet","set","array","transformCaseFunc","undefined","l","element","lcElement","cleanArray","index","isPropertyExist","clone","object","newObject","property","value","isArray","constructor","lookupGetter","prop","desc","get","fallbackValue","html","svg","svgFilters","svgDisallowed","mathMl","mathMlDisallowed","text","xml","MUSTACHE_EXPR","ERB_EXPR","TMPLIT_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","DOCTYPE_NAME","CUSTOM_ELEMENT","getGlobal","window","_createTrustedTypesPolicy","trustedTypes","purifyHostElement","createPolicy","suffix","ATTR_NAME","hasAttribute","getAttribute","policyName","createHTML","createScriptURL","scriptUrl","_","console","warn","createDOMPurify","DOMPurify","root","version","VERSION","removed","document","nodeType","isSupported","originalDocument","currentScript","DocumentFragment","HTMLTemplateElement","Node","Element","NodeFilter","NamedNodeMap","MozNamedAttrMap","HTMLFormElement","DOMParser","ElementPrototype","cloneNode","getNextSibling","getChildNodes","getParentNode","template","createElement","content","ownerDocument","trustedTypesPolicy","emptyHTML","implementation","createNodeIterator","createDocumentFragment","getElementsByTagName","importNode","hooks","createHTMLDocument","EXPRESSIONS","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","TAGS","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","ATTRS","CUSTOM_ELEMENT_HANDLING","tagNameCheck","writable","configurable","enumerable","attributeNameCheck","allowCustomizedBuiltInElements","FORBID_TAGS","FORBID_ATTR","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","ALLOW_SELF_CLOSE_IN_ATTR","SAFE_FOR_TEMPLATES","SAFE_FOR_XML","WHOLE_DOCUMENT","SET_CONFIG","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_TRUSTED_TYPE","SANITIZE_DOM","SANITIZE_NAMED_PROPS","SANITIZE_NAMED_PROPS_PREFIX","KEEP_CONTENT","IN_PLACE","USE_PROFILES","FORBID_CONTENTS","DEFAULT_FORBID_CONTENTS","DATA_URI_TAGS","DEFAULT_DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","DEFAULT_URI_SAFE_ATTRIBUTES","MATHML_NAMESPACE","SVG_NAMESPACE","HTML_NAMESPACE","NAMESPACE","IS_EMPTY_INPUT","ALLOWED_NAMESPACES","DEFAULT_ALLOWED_NAMESPACES","PARSER_MEDIA_TYPE","SUPPORTED_PARSER_MEDIA_TYPES","DEFAULT_PARSER_MEDIA_TYPE","CONFIG","formElement","isRegexOrFunction","testValue","Function","_parseConfig","cfg","ADD_URI_SAFE_ATTR","ADD_DATA_URI_TAGS","ALLOWED_URI_REGEXP","ADD_TAGS","ADD_ATTR","table","tbody","TRUSTED_TYPES_POLICY","MATHML_TEXT_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","COMMON_SVG_AND_HTML_ELEMENTS","ALL_SVG_TAGS","ALL_MATHML_TAGS","_checkValidNamespace","parent","tagName","namespaceURI","parentTagName","Boolean","_forceRemove","node","parentNode","removeChild","remove","_removeAttribute","name","attribute","getAttributeNode","from","removeAttribute","setAttribute","_initDocument","dirty","doc","leadingWhitespace","matches","dirtyPayload","parseFromString","documentElement","createDocument","innerHTML","body","insertBefore","createTextNode","childNodes","call","_createNodeIterator","SHOW_ELEMENT","SHOW_COMMENT","SHOW_TEXT","SHOW_PROCESSING_INSTRUCTION","SHOW_CDATA_SECTION","_isClobbered","elm","nodeName","textContent","attributes","hasChildNodes","_isNode","_executeHook","entryPoint","currentNode","data","hook","_sanitizeElements","allowedTags","firstElementChild","_isBasicCustomElement","childCount","i","expr","_isValidAttribute","lcTag","lcName","_sanitizeAttributes","hookEvent","attrName","attrValue","keepAttr","allowedAttributes","attr","forceKeepAttr","getAttributeType","setAttributeNS","_sanitizeShadowDOM","fragment","shadowNode","shadowIterator","nextNode","sanitize","importedNode","returnNode","appendChild","firstChild","nodeIterator","shadowroot","shadowrootmode","serializedHTML","outerHTML","doctype","setConfig","clearConfig","isValidAttribute","tag","addHook","hookFunction","removeHook","removeHooks","removeAllHooks"],"version":3,"file":"article.js.map","sourceRoot":"../../../../../../../"}