{"version":3,"file":"productDetail.bundle.js","mappings":"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","sources":["webpack://hema-foto-shopping/webpack/runtime/chunk loaded","webpack://hema-foto-shopping/webpack/runtime/load script","webpack://hema-foto-shopping/./node_modules/oj-mithriljs-packages/dist/Dialog/Dialog.js","webpack://hema-foto-shopping/./src/ts/entries/pairingCode/pairingCode.tsx","webpack://hema-foto-shopping/./src/ts/utils.ts","webpack://hema-foto-shopping/./src/ts/svg.tsx","webpack://hema-foto-shopping/./src/ts/mobile.ts","webpack://hema-foto-shopping/./src/ts/components/fields/select.tsx","webpack://hema-foto-shopping/./src/ts/components/fields/radioBox.tsx","webpack://hema-foto-shopping/./src/ts/entries/productDetail/logic.ts","webpack://hema-foto-shopping/./src/ts/components/fields/inputNumber.tsx","webpack://hema-foto-shopping/./src/ts/entries/productDetail/translations.ts","webpack://hema-foto-shopping/./src/ts/entries/pairingCode/translations.ts","webpack://hema-foto-shopping/./src/ts/translation.ts","webpack://hema-foto-shopping/./src/ts/components/forms/inputField.tsx","webpack://hema-foto-shopping/./node_modules/embla-carousel/embla-carousel.esm.js","webpack://hema-foto-shopping/./src/ts/entries/videoBlock/youtube.tsx","webpack://hema-foto-shopping/./src/ts/entries/productDetail/emblaTemplate.tsx","webpack://hema-foto-shopping/./src/ts/components/images/picture.tsx","webpack://hema-foto-shopping/./src/ts/entries/productDetail/emblaMediaGallery.tsx","webpack://hema-foto-shopping/./src/ts/entries/productDetail.tsx","webpack://hema-foto-shopping/./node_modules/oj-mithriljs-packages/dist/Zmdi/Zmdi.js","webpack://hema-foto-shopping/webpack/bootstrap","webpack://hema-foto-shopping/webpack/runtime/compat get default export","webpack://hema-foto-shopping/webpack/runtime/define property getters","webpack://hema-foto-shopping/webpack/runtime/ensure chunk","webpack://hema-foto-shopping/webpack/runtime/get javascript chunk filename","webpack://hema-foto-shopping/webpack/runtime/get mini-css chunk filename","webpack://hema-foto-shopping/webpack/runtime/global","webpack://hema-foto-shopping/webpack/runtime/hasOwnProperty shorthand","webpack://hema-foto-shopping/webpack/runtime/make namespace object","webpack://hema-foto-shopping/webpack/runtime/publicPath","webpack://hema-foto-shopping/webpack/runtime/css loading","webpack://hema-foto-shopping/webpack/runtime/jsonp chunk loading","webpack://hema-foto-shopping/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"hema-foto-shopping:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","var __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nimport m from \"mithril\";\r\nimport { MithrilTsxComponent } from \"mithril-tsx-component\";\r\nimport { cleanString, exec, increment } from \"oj-utils\";\r\nimport { updateIfChanged, animateClassNames, animateCreate, animateRemove, portal, immediate } from \"oj-mithriljs-utils\";\r\nimport { getTransitionDuration } from \"oj-dom-utils\";\r\nimport \"./Dialog.scss\";\r\nvar inc = increment();\r\nvar Dialog = (function (_super) {\r\n __extends(Dialog, _super);\r\n function Dialog() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.id = inc();\r\n _this.open = false;\r\n return _this;\r\n }\r\n Dialog.prototype.oninit = function (v) {\r\n this.open = v.attrs.open;\r\n };\r\n Dialog.prototype.onbeforeupdate = function (v, o) {\r\n var open = this.open;\r\n updateIfChanged(\"open\", this, v, o);\r\n if (open !== this.open) {\r\n this.setFocus();\r\n exec(v.attrs.onopen, this.open);\r\n }\r\n };\r\n Dialog.prototype.view = function (v) {\r\n var _this = this;\r\n return m(\"div\", { id: v.attrs.id, className: cleanString(\"Dialog\", v.attrs.className, this.open && \"active\") }, this.open && [\r\n m(\"div\", { className: cleanString(\"backdrop\", v.attrs.animate && animateClassNames(v, \"animate\")), oncreate: function (e) { return v.attrs.animate ? animateCreate(e) : undefined; }, onbeforeremove: function (e) { return v.attrs.animate ? animateRemove(e) : undefined; }, onclick: v.attrs.dismiss ? function () {\r\n _this.setOpen(v, false);\r\n exec(v.attrs.ondismiss);\r\n } : undefined }),\r\n m(\"div\", { className: cleanString(\"content\", v.attrs.animate && animateClassNames(v, \"animate\")), onclick: function (e) {\r\n e.stopPropagation();\r\n exec(v.attrs.onclick, e);\r\n }, oncreate: function (e) {\r\n var _a;\r\n if (v.attrs.animate)\r\n animateCreate(e);\r\n (_a = e.dom.querySelector(\"input, textarea, button\")) === null || _a === void 0 ? void 0 : _a.focus();\r\n }, onbeforeremove: function (e) { return v.attrs.animate ? animateRemove(e) : undefined; } }, v.children)\r\n ]);\r\n };\r\n Dialog.prototype.oncreate = function (v) {\r\n var _this = this;\r\n var _a;\r\n v.dom[\"setOpen\"] = function (open) {\r\n if (open === void 0) { open = true; }\r\n _this.setOpen(v, open);\r\n m.redraw();\r\n };\r\n this.portal = portal(v.dom, (_a = v.attrs.portal) !== null && _a !== void 0 ? _a : document.body);\r\n window.on(\"keydown.Dialog.\".concat(this.id), function (e) {\r\n if (!_this.open)\r\n return;\r\n if (e.key === \"Escape\") {\r\n _this.setOpen(v, false);\r\n m.redraw();\r\n }\r\n });\r\n };\r\n Dialog.prototype.onremove = function (v) {\r\n this.portal.reset();\r\n window.off(\"keydown.Dialog.\".concat(this.id));\r\n };\r\n Dialog.prototype.setOpen = function (v, open) {\r\n if (this.open === open)\r\n return;\r\n this.open = open;\r\n this.setFocus();\r\n exec(v.attrs.onopen, this.open);\r\n };\r\n Dialog.prototype.setFocus = function () {\r\n if (this.open && !this.prevElement)\r\n this.prevElement = document.activeElement;\r\n else if (!this.open) {\r\n setTimeout(function (e) {\r\n e === null || e === void 0 ? void 0 : e.focus();\r\n }, getTransitionDuration(document.querySelector(\".Dialog.active .backdrop\")), this.prevElement);\r\n this.prevElement = undefined;\r\n }\r\n };\r\n return Dialog;\r\n}(MithrilTsxComponent));\r\nexport { Dialog };\r\nexport var dialog = function (data) {\r\n var open = true;\r\n var imm = immediate({\r\n view: function (v) {\r\n return m(Dialog, __assign({}, data, { open: open, ondismiss: function () {\r\n open = false;\r\n exec(data.ondismiss);\r\n imm.resolve(open);\r\n }, onopen: function (e) {\r\n open = e;\r\n exec(data.onopen, e);\r\n imm.resolve(open);\r\n } }), data.content(function () { return open = false; }));\r\n }\r\n });\r\n exec(data.onopen, open);\r\n return imm.promise;\r\n};\r\n//# sourceMappingURL=Dialog.js.map","import m from \"mithril\"\r\nimport { MithrilTsxComponent } from \"mithril-tsx-component\"\r\nimport { mounter } from \"../../utils\"\r\nimport { Form } from \"oj-form-utils\"\r\nimport { FormRows } from \"../../components/forms/formRow\"\r\nimport { dialog } from \"oj-mithriljs-packages/dist/Dialog/Dialog\"\r\nimport { getJSON, post, postJSON } from \"oj-ajax\"\r\nimport { getTranslation } from \"./translations\"\r\nimport { pause } from \"oj-utils\"\r\nimport { InputField } from \"../../components/forms/inputField\"\r\nimport { Svg } from \"../../svg\"\r\n\r\n\r\ninterface IPairingCode {\r\n Status?: PairingCodeStatus\r\n RedirectUri?: string\r\n onSubmit?: (success: boolean) => void\r\n}\r\n\r\nenum PairingCodeStatus {\r\n \"valid\" = 0,\r\n \"invalid\" = 1,\r\n \"used\" = 2\r\n}\r\n\r\ntype PairingCodeRequestData = {\r\n code: string\r\n isDigital: boolean\r\n}\r\n\r\n// type ProductRequestData = {\r\n// opt_ref_DigitalVariant: string,\r\n// Quantity_Value: number,\r\n// ProductId: string,\r\n// CategoryId: string,\r\n// }\r\n\r\ntype GetPairingCodeResponse = {\r\n Code: string\r\n ItemIsPresent: boolean\r\n}\r\n\r\n\r\nexport class PairingCode extends MithrilTsxComponent {\r\n productOptionsForm: HTMLFormElement\r\n baseUrl = window.location.origin\r\n pathToValidate = window.location.pathname\r\n urlSearchParams: URLSearchParams\r\n paramCode: string\r\n isDigital: boolean\r\n\r\n pairCodeRegExp = [/^[A-Z]{3,3}[0-9]{3,3}[0-9]{1,1}$/, /^[0-9]{3,3}[A-Z]{3,3}[0-9]{1,1}$/]\r\n\r\n form = new Form({\r\n pairingCode: Form.field(\"\", getTranslation('fieldNameLabel'), {\r\n max: {\r\n value: 7,\r\n message: getTranslation('fieldMaxCharacters')\r\n },\r\n required: getTranslation('fieldNameMessage'),\r\n custom: [(v) => {\r\n let value = v;\r\n value = value.toUpperCase();\r\n if (!this.pairCodeRegExp.some(x => x.test(value)))\r\n return getTranslation(\"fieldWrongPairCodeFormat\")\r\n return false\r\n }],\r\n }, \"text\", {\r\n placeholder: getTranslation('fieldPlaceholder'),\r\n className: \"pairingCode\"\r\n }),\r\n })\r\n\r\n code = [\r\n [\"pairingCode\"],\r\n ]\r\n\r\n status: [string, Error?] = [\"idle\"]\r\n\r\n async oninit(v: m.Vnode) {\r\n this.productOptionsForm = document.querySelector('.analog-digital-product #productOptionsForm');\r\n const params = new URLSearchParams(window.location.search);\r\n this.paramCode = params.get(\"c\");\r\n\r\n this.isDigital = window[\"isDigital\"]\r\n\r\n const { Code, ItemIsPresent } = await this.getPairingCode() as GetPairingCodeResponse;\r\n\r\n if (Code) {\r\n this.setPairingCode(Code)\r\n if (this.form.validate()) {\r\n this.status = [\"filled\"]\r\n this.form.get(\"pairingCode\").data.className = \"is-valid\"\r\n this.form.get(\"pairingCode\").validate.readonly = true\r\n m.redraw()\r\n }\r\n this.handleSubmit(v)\r\n }\r\n else if (this.paramCode && this.paramCode !== null) {\r\n this.setPairingCode(this.paramCode)\r\n this.handleSubmit(v)\r\n } else if (params.get(\"hasPairingCode\")) {\r\n window[\"pairingCodeFilled\"] = false;\r\n v.attrs.onSubmit(false)\r\n\r\n this.handleNoPairingCode()\r\n }\r\n\r\n if (Code && this.paramCode !== Code && this.paramCode !== null) {\r\n if (ItemIsPresent === false) {\r\n this.setPairingCode(this.paramCode)\r\n this.handleSubmit(v)\r\n } else {\r\n this.handlePairingCodeDialog()\r\n }\r\n }\r\n }\r\n\r\n view(v: m.Vnode) {\r\n const errorMessage = this.form.getErr(\"pairingCode\");\r\n const field = this.form.getFields().pairingCode;\r\n const id = field.key;\r\n delete field.key;\r\n\r\n return
\r\n {!v.attrs.onSubmit &&

{getTranslation(\"pairingCodeDescription\")}

}\r\n
{\r\n e.preventDefault()\r\n this.handleSubmit(v)\r\n }} method=\"post\">\r\n\r\n
\r\n
\r\n
\r\n {[\"pairingCode\"].map(Form.fieldHelper(this.form, field => ))}\r\n
\r\n
\r\n {this.status[0] === \"busy\"\r\n ? \r\n : this.status[0] === \"success\"\r\n ? \r\n : this.status[0] === \"filled\"\r\n ? \r\n : \r\n }\r\n
\r\n {errorMessage &&
{errorMessage[0]}
}\r\n
\r\n
\r\n
\r\n
\r\n }\r\n\r\n setPairingCode(pairingCode: string) {\r\n this.form.setVal(\"pairingCode\", pairingCode)\r\n m.redraw()\r\n }\r\n\r\n async getPairingCode() {\r\n return await getJSON('/PairingCodeApi/GetPairingCode');\r\n }\r\n\r\n async postPairingCode(v: m.Vnode, requestData: PairingCodeRequestData) {\r\n return await postJSON(\"/PairingCodeApi/AddPairingCode\", { ...requestData }, {})\r\n .then((data: IPairingCode) => {\r\n const { Status, RedirectUri } = data\r\n\r\n if (Status === PairingCodeStatus.invalid) {\r\n this.status = [\"failed\"]\r\n this.form.get(\"pairingCode\").errors = [getTranslation(\"fieldInvalidPairCode\")]\r\n return\r\n }\r\n\r\n if (Status === PairingCodeStatus.used) {\r\n this.status = [\"failed\"]\r\n this.form.get(\"pairingCode\").errors = [getTranslation(\"fieldAlreadyUsedPairCode\")]\r\n return\r\n }\r\n\r\n if (Status === PairingCodeStatus.valid) {\r\n this.status = [\"success\"]\r\n this.form.get(\"pairingCode\").data.className = \"is-valid\"\r\n this.form.get(\"pairingCode\").validate.readonly = true\r\n window[\"pairingCodeFilled\"] = true\r\n\r\n v.attrs.onSubmit(true)\r\n m.redraw()\r\n\r\n pause(2000)\r\n this.status = [\"filled\"]\r\n }\r\n\r\n if (RedirectUri) {\r\n const url = `${this.baseUrl + RedirectUri + '?c=' + requestData.code}`\r\n window.location.href = url\r\n }\r\n })\r\n .catch(err => {\r\n if (err.status === 400)\r\n this.form.get(\"pairingCode\").errors = [getTranslation(\"fieldInvalidPairCodeCheckNumber\")]\r\n })\r\n }\r\n\r\n async handlePairingCodeDialog() {\r\n const { ItemIsPresent } = await this.getPairingCode() as GetPairingCodeResponse;\r\n\r\n if (!ItemIsPresent) {\r\n this.form.get(\"pairingCode\").validate.readonly = false\r\n this.form.get(\"pairingCode\").value = \"\"\r\n this.form.get(\"pairingCode\").data.className = \"\"\r\n this.status = [\"idle\"]\r\n m.redraw()\r\n return\r\n }\r\n\r\n dialog({\r\n dismiss: true,\r\n animate: true,\r\n content: close =>\r\n
\r\n \r\n
\r\n {getTranslation(\"modalTitle\")}\r\n
\r\n

{getTranslation(\"modalText\")}

\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n })\r\n }\r\n\r\n handleNoPairingCode() {\r\n dialog({\r\n dismiss: true,\r\n animate: true,\r\n content: close =>\r\n
\r\n \r\n
\r\n {getTranslation(\"modalTitle\")}\r\n
\r\n

{getTranslation(\"modalNopairingCodeDescription\")} {getTranslation(\"clickHere\")}

\r\n {/*

{getTranslation(\"modalNopairingCodeDescriptionAlt\")}

*/}\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n })\r\n }\r\n\r\n setButtonState(element: HTMLElement, disabled: boolean) {\r\n if (!element)\r\n return\r\n\r\n if (disabled) {\r\n element.classList.add(\"is-disabled\")\r\n element.setAttribute(\"disabled\", \"true\")\r\n } else {\r\n element.classList.remove(\"is-disabled\")\r\n element.removeAttribute(\"disabled\")\r\n }\r\n }\r\n\r\n async handleSubmit(v: m.Vnode) {\r\n if (!this.form.validate()) {\r\n this.form.get(\"pairingCode\").data.className = \"\"\r\n return\r\n }\r\n try {\r\n this.status = [\"busy\"]\r\n const json = this.form.toJSON()\r\n\r\n const params = new URLSearchParams(window.location.search);\r\n const isAdditionalPayment = params.get(\"isAdditionalPayment\")\r\n\r\n const formData = { code: json.pairingCode.toUpperCase(), isDigital: this.isDigital, IsAdditionalPayment: isAdditionalPayment }\r\n\r\n await this.postPairingCode(v, formData)\r\n\r\n if (this.productOptionsForm) {\r\n const productOptionsFormData = new FormData(this.productOptionsForm)\r\n\r\n await post(this.productOptionsForm.getAttribute('action'), productOptionsFormData)\r\n\r\n }\r\n }\r\n catch (err) {\r\n this.status = [\"failed\", err]\r\n }\r\n m.redraw()\r\n }\r\n}\r\n\r\n\r\nmounter(\"[data-m-pairing-code]\", (r, d = {}) => {\r\n m.mount(r, {\r\n view: v => \r\n })\r\n})","import { get } from \"oj-ajax\"\r\nimport { getRootElements } from \"oj-dom-utils\"\r\nimport { debounce } from \"oj-utils\"\r\nimport m from \"mithril\"\r\n\r\nexport const isTouchDevice = () =>\r\n \"ontouchstart\" in window\r\n\r\n\r\nexport const getFileExtensionFromString = (str: string) =>\r\n str.split(\".\")[1]\r\n\r\nexport const mounter = (selector: string, cb: (root: HTMLElement, data: T | null) => void) =>\r\n getRootElements(selector)\r\n .forEach(x => {\r\n const inputs = Array.from(x.querySelectorAll(\"input\"))\r\n let data: any = null\r\n if (inputs.length > 1)\r\n data = inputs.map(x => {\r\n try {\r\n return JSON.parse(x.value)\r\n } catch (err) {\r\n return x.value\r\n }\r\n })\r\n else if (inputs[0] instanceof HTMLInputElement)\r\n try {\r\n data = JSON.parse(inputs[0].value)\r\n } catch (err) {\r\n data = inputs[0].value\r\n }\r\n cb(x, data)\r\n })\r\n\r\nexport const downloadFile = (response: any, name: string) => {\r\n if (navigator.appVersion.toString().indexOf('.NET') > 0)\r\n window.navigator[\"msSaveBlob\"](response, name)\r\n else {\r\n const blob = new Blob([response], { type: response.type })\r\n const objectUrl = URL.createObjectURL(blob)\r\n const a = document.createElement(\"a\")\r\n a.style.display = \"none\"\r\n document.body.appendChild(a)\r\n a.href = objectUrl\r\n a.download = name\r\n a.click()\r\n URL.revokeObjectURL(objectUrl)\r\n }\r\n}\r\n\r\nexport const testMailAddress = (mail: string) =>\r\n /^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,3})+$/.test(mail)\r\n\r\nexport const loadScript = (src: string) =>\r\n new Promise((resolve, reject) => {\r\n const script = document.createElement(\"script\")\r\n script.type = \"text/javascript\"\r\n script.onload = resolve\r\n script.onerror = reject\r\n script.src = src\r\n document.body.appendChild(script)\r\n })\r\n\r\nexport const loadScriptSource = (txt: string) =>\r\n new Promise((resolve, reject) => {\r\n const script = document.createElement(\"script\")\r\n script.type = \"text/javascript\"\r\n script.onload = resolve\r\n script.onerror = reject\r\n script.innerHTML = txt\r\n document.body.appendChild(script)\r\n })\r\n\r\nexport const hideScrollbars = (hide: boolean) => {\r\n document.querySelector(\"body\").classList.toggle(\"hide-scrollbars\", hide);\r\n}\r\n\r\nexport const formatPrice = (price: number, currency = true) => {\r\n const formatedPrice = new Intl.NumberFormat(window.culture, {\r\n style: 'currency',\r\n currency: 'EUR',\r\n }).format(price);\r\n\r\n if (currency)\r\n return formatedPrice.replace(\",\", \".\")\r\n else\r\n return formatedPrice.replace(\",\", \".\").replace(\"€\", \"\").trim()\r\n}\r\n\r\nexport const formatHtmlPrice = (price: number) => {\r\n const formatNumber = new Intl.NumberFormat(window[\"culture\"], { minimumFractionDigits: 2 }).format(\r\n price,\r\n )\r\n const priceParts = formatNumber.toString().replace(\".\", \"\").split(\",\");\r\n\r\n if (priceParts[1] != \"00\") {\r\n return `${priceParts[0]}.${priceParts[1]}`\r\n } else {\r\n return `${priceParts[0]}`\r\n }\r\n}\r\n\r\ninterface ImageDimensions {\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport const getImageDimensions = (imageUrl): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const img = new Image(); // Create a new image object\r\n\r\n img.onload = function () {\r\n // Once the image is loaded, resolve the promise with the width and height\r\n resolve({ width: img.width, height: img.height });\r\n img.onload = null;\r\n img.src = '';\r\n };\r\n\r\n img.onerror = function () {\r\n // Reject the promise if there is an error loading the image\r\n reject(new Error(\"Error loading image.\"));\r\n };\r\n\r\n // Set the image source to the URL, which triggers the loading process\r\n img.src = imageUrl;\r\n });\r\n}\r\n\r\nexport const getAddress = debounce(500, async (form: any) => {\r\n const postalCode = form.getFields().postalCode.value\r\n const houseNumber = form.getFields().houseNumber.value\r\n\r\n if (postalCode && houseNumber) {\r\n await get(`/${window[\"culture\"]}/Checkout/FindAddress/?PostalCode=${postalCode}&HouseNumber=${houseNumber}`)\r\n .then(res => JSON.parse(res))\r\n .then(res => {\r\n if (res.street && res.city) {\r\n form.getFields().street.value = res.street\r\n form.getFields().city.value = res.city\r\n }\r\n form.getFields().street.validate.readonly = false\r\n form.getFields().city.validate.readonly = false\r\n m.redraw()\r\n })\r\n }\r\n})\r\n\r\nexport const decodeUnicode = (str: string) => {\r\n return JSON.parse('\"' + str.replace(/%u/g, '\\\\u') + '\"');\r\n}\r\n\r\nexport const getBaseUrl = () => {\r\n // Create a URL object to easily work with the URL\r\n const urlObj = new URL(document.location.href);\r\n\r\n // Match the language code in the URL, like \"/fr\", \"/en\", etc.\r\n const languageMatch = urlObj.pathname.match(/^\\/([a-z]{2})\\//);\r\n\r\n if (languageMatch) {\r\n // If language is found (e.g., 'fr' or 'en'), return the base URL with language\r\n return `${urlObj.protocol}//${urlObj.host}${languageMatch[0].replace(/\\/$/, '')}`;\r\n } else {\r\n // If no language code is found, return the base URL without language\r\n return `${urlObj.protocol}//${urlObj.host}`;\r\n }\r\n}","import m from \"mithril\"\r\nimport { MithrilTsxComponent } from \"mithril-tsx-component\"\r\n\r\nexport interface ISvg {\r\n src: string\r\n onload?: (svg: SVGElement) => any\r\n}\r\n\r\nexport class Svg extends MithrilTsxComponent {\r\n svg: string\r\n loaded: boolean\r\n\r\n view(v: m.Vnode) {\r\n if (!this.svg)\r\n return\r\n\r\n return m.trust(this.svg)\r\n }\r\n\r\n oninit(v: m.Vnode) {\r\n this.load(v)\r\n }\r\n\r\n onbeforeupdate(v: m.Vnode, o: m.Vnode) {\r\n if (v.attrs.src !== o.attrs.src)\r\n this.load(v)\r\n }\r\n\r\n onupdate(v: m.VnodeDOM) {\r\n if (!this.svg || this.loaded)\r\n return\r\n\r\n if (this.svg) {\r\n this.loaded = true\r\n v.attrs.onload?.(v.dom as SVGElement)\r\n v.dom.setAttribute('aria-hidden', 'true')\r\n v.dom.setAttribute('focusable', 'false')\r\n }\r\n }\r\n\r\n async load(v: m.Vnode) {\r\n if (!v.attrs.src)\r\n return\r\n\r\n this.loaded = false\r\n this.svg = await fetch(v.attrs.src).then(x => x.text())\r\n m.redraw()\r\n }\r\n}\r\n","import m from \"mithril\"\r\nimport { memoize } from \"oj-utils\"\r\n\r\nexport const redrawOnBreakpoint = memoize((width: number = 768) => {\r\n const mediaQueryList = window.matchMedia(`(min-width: ${width}px)`)\r\n let matches = mediaQueryList.matches\r\n\r\n mediaQueryList.onchange = (event) => {\r\n m.redraw()\r\n matches = event.matches\r\n }\r\n return () => !matches\r\n})\r\n","import m, { Vnode, VnodeDOM } from \"mithril\"\r\nimport { MithrilTsxComponent } from \"mithril-tsx-component\"\r\nimport { Svg } from \"../../svg\";\r\nimport { redrawOnBreakpoint } from \"../../mobile\";\r\nimport { cleanString } from \"oj-utils\";\r\nimport { formatPrice } from \"../../utils\"\r\nimport { type IOption } from \"../../types\";\r\n\r\ninterface ICustomSelect {\r\n id: string,\r\n options: IOption[],\r\n selected: IOption,\r\n onChange: (option: IOption) => void\r\n}\r\n\r\nconst isMobile = redrawOnBreakpoint(960)\r\n\r\nexport class CustomSelect extends MithrilTsxComponent {\r\n isOpen = false\r\n selectedIndex = 0\r\n highlightedIndex = 0\r\n\r\n oninit(v: Vnode) {\r\n this.selectedIndex = v.attrs.options.findIndex(x => x.selected)\r\n this.highlightedIndex = this.selectedIndex;\r\n }\r\n\r\n view(v: Vnode) {\r\n const { options, selected, onChange } = v.attrs;\r\n\r\n return isMobile()\r\n ? \r\n :
this.onkeydown(v, e)}>\r\n this.toggleDropdown(v)}\r\n aria-haspopup=\"listbox\"\r\n >\r\n {selected.text}\r\n \r\n
\r\n\r\n {/* Custom dropdown list */}\r\n {this.isOpen && (\r\n
    \r\n {options.map((option, index) => (\r\n this.selectOption(v, index)}\r\n className={cleanString(option.selected && \"selected\", this.highlightedIndex === index && \"hovered\", !option.isAvailable && \"is-disabled\")}\r\n tabindex=\"0\"\r\n >\r\n {option.text}\r\n {option.priceDifference > 0 && {option.priceDifferencePrefix} {formatPrice(option.priceDifference)}}\r\n \r\n ))}\r\n
\r\n )}\r\n \r\n }\r\n\r\n // Handle keydown events for keyboard navigation\r\n onkeydown(v: Vnode, e: KeyboardEvent) {\r\n const { options } = v.attrs;\r\n const min = 0;\r\n const max = options.length - 1;\r\n\r\n const openKeys = ['ArrowDown', 'ArrowUp', 'Enter', ' '];\r\n\r\n if (this.isOpen === false && openKeys.includes(e.key)) {\r\n e.preventDefault();\r\n this.isOpen = true\r\n } else {\r\n if (e.key === \"ArrowDown\") {\r\n e.preventDefault();\r\n this.highlightedIndex = this.highlightedIndex + 1;\r\n if (this.highlightedIndex > max)\r\n this.highlightedIndex = 0;\r\n } else if (e.key === \"ArrowUp\") {\r\n e.preventDefault();\r\n this.highlightedIndex = this.highlightedIndex - 1;\r\n if (this.highlightedIndex < min)\r\n this.highlightedIndex = max;\r\n } else if (e.key === \"Enter\" || e.key === \" \") {\r\n e.preventDefault();\r\n this.selectOption(v, this.highlightedIndex);\r\n } else if (e.key === \"Escape\") {\r\n e.preventDefault();\r\n this.closeDropdown();\r\n }\r\n }\r\n m.redraw()\r\n }\r\n\r\n toggleDropdown(v) {\r\n this.isOpen = !this.isOpen\r\n\r\n this.clickOutside(v)\r\n }\r\n\r\n closeDropdown() {\r\n this.isOpen = false\r\n }\r\n\r\n selectOption(v: Vnode, index: number) {\r\n const { options, onChange } = v.attrs;\r\n\r\n options.forEach((x, i) => {\r\n if (i === index) {\r\n x.selected = true;\r\n this.highlightedIndex = i\r\n onChange(x);\r\n }\r\n else\r\n x.selected = false\r\n })\r\n\r\n this.closeDropdown();\r\n }\r\n\r\n clickOutside(v: VnodeDOM) {\r\n document.on(`click.customSelect-${v.attrs.id}`, (e) => {\r\n const isClickInside = v.dom.contains(e.target)\r\n\r\n if (isClickInside)\r\n return\r\n\r\n document.off(`click.customSelect-${v.attrs.id}`)\r\n this.isOpen = false;\r\n m.redraw()\r\n })\r\n }\r\n\r\n};","import m, { Vnode, VnodeDOM } from \"mithril\"\r\nimport { MithrilTsxComponent } from \"mithril-tsx-component\"\r\nimport { Svg } from \"../../svg\";\r\nimport { redrawOnBreakpoint } from \"../../mobile\";\r\nimport { cleanString } from \"oj-utils\";\r\nimport { type IOption } from \"../../types\";\r\n\r\ninterface IRadioBox {\r\n id: string,\r\n options: IOption[],\r\n label?: boolean\r\n onChange: (option: IOption) => void\r\n}\r\n\r\nexport class RadioBox extends MithrilTsxComponent {\r\n view(v: Vnode) {\r\n const { id, options, label, onChange } = v.attrs;\r\n\r\n return options.map((x, index) => )\r\n }\r\n};","import m from \"mithril\"\r\nimport { type IProductOption, type IPriceInfo, type IProductDetail } from \"../productDetail\"\r\nimport { type IImageItem } from \"./emblaMediaGallery\";\r\nimport { debounce } from \"oj-promise-utils\";\r\nimport { type IPictureElement } from \"../../components/images/picture\";\r\nimport { getBaseUrl } from \"../../utils\";\r\n\r\nconst params = new URLSearchParams(window.location.search);\r\n\r\ninterface IState {\r\n url: string,\r\n options: IProductOption[],\r\n media: IImageItem[],\r\n priceInfo: IPriceInfo,\r\n productIdentifiers: Record\r\n}\r\n\r\nconst state: IState = {\r\n url: null,\r\n options: [],\r\n media: [],\r\n priceInfo: null,\r\n productIdentifiers: null\r\n}\r\n\r\nexport const setUrl = (url: string) =>\r\n state.url = url\r\n\r\nconst getQuantityOption = (options: IProductOption[]) => {\r\n for (const o of options)\r\n for (const x of o.options)\r\n if (o.inputType === \"InputNumber\")\r\n return x\r\n}\r\n\r\nexport const setOptions = async (options: IProductOption[]) => {\r\n const q = getQuantityOption(options)\r\n if (q)\r\n q.value = await getQuantityFromUrl(\"selectedVariantId\") ?? q.value ?? q.min\r\n\r\n const singleOption = options.filter(x => x.options.length === 1);\r\n const other = options.filter(x => x.options.length > 1);\r\n state.options = [...other, ...singleOption];\r\n}\r\n\r\nexport const setMedia = (media: IImageItem[]) => {\r\n if (media.length >= 1) {\r\n for (const m of media)\r\n for (const s of [m.thumbnail, m.default, m.zoom])\r\n s.items.sort((a, b) => +b.minWidth.match(/\\d+/) - +a.minWidth.match(/\\d+/))\r\n return state.media = media ?? []\r\n } else {\r\n const tempImageItemList: IPictureElement = {\r\n items: [\r\n {\r\n altText: \"afbeelding tijdelijk\",\r\n imageUrl: \"/FrontendWebpack/dist/assets/images/notfound/no-image.webp\",\r\n retinaUrl: \"/FrontendWebpack/dist/assets/images/notfound/no-image.webp\",\r\n minWidth: \"0\",\r\n width: 2700,\r\n height: 2700,\r\n }\r\n ]\r\n };\r\n\r\n state.media = [\r\n {\r\n thumbnail: tempImageItemList,\r\n default: tempImageItemList,\r\n zoom: tempImageItemList\r\n\r\n }\r\n ]\r\n }\r\n}\r\n\r\nexport const setPriceInfo = (priceInfo: IPriceInfo) =>\r\n state.priceInfo = priceInfo\r\n\r\nexport const setQuantity = (quantity: number) => {\r\n const q = getQuantityOption(state.options)\r\n q.value = quantity\r\n}\r\n\r\nexport const setProductIdentifiers = (identifiers: Record) =>\r\n state.productIdentifiers = identifiers ?? {}\r\n\r\nexport const getUrl = () =>\r\n state.url\r\n\r\nexport const getOptions = () =>\r\n state.options\r\n\r\nexport const getMedia = () =>\r\n state.media\r\n\r\nexport const getPriceInfo = () =>\r\n state.priceInfo\r\n\r\nexport const getQuantity = () =>\r\n getQuantityOption(state.options)?.value as number\r\n\r\nexport const getProductIdentifiers = () =>\r\n state.productIdentifiers\r\n\r\nexport const getQuantityFromUrl = async (param: string) => {\r\n const variantId = params.get(param)\r\n if (!variantId)\r\n return\r\n\r\n return +await fetch(`${getBaseUrl()}/product/getcartquantity?variantId=${variantId}`)\r\n .then(x => x.text())\r\n}\r\n\r\nconst getSelectedValues = (data: IProductOption[]) =>\r\n data.map(x => {\r\n const selectedOption = x.options.find(option => option.selected);\r\n if (selectedOption) {\r\n return {\r\n \"key\": x.id,\r\n \"value\": selectedOption.value\r\n }\r\n }\r\n }).filter(value => value !== undefined)\r\n\r\nexport const updateVariant = debounce(100, async () => {\r\n const values = getSelectedValues(getOptions());\r\n\r\n try {\r\n const res = await fetch(`${getBaseUrl()}/product/UpdateProductVariantDetail`, {\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"application/json\", \"Accept-Language\": window[\"culture\"] },\r\n body: JSON.stringify({ ...getProductIdentifiers(), quantity: getQuantity() ?? 1, options: values })\r\n })\r\n const data = await res.json()\r\n if (res.status === 400)\r\n throw new Error(\"error with cart quantity update\")\r\n\r\n await setOptions(data.productOptions)\r\n setMedia(data.mediaItems)\r\n setPriceInfo(data.priceInfo)\r\n setProductIdentifiers({\r\n categoryId: data.categoryId,\r\n productId: data.productId,\r\n })\r\n setUrl(data.url)\r\n }\r\n catch (err) {\r\n console.error(err)\r\n }\r\n m.redraw()\r\n})","import m, { Vnode, VnodeDOM } from \"mithril\"\r\nimport { MithrilTsxComponent } from \"mithril-tsx-component\"\r\nimport { Svg } from \"../../svg\";\r\nimport { type IOption } from \"../../types\";\r\nimport { clamp, cleanString } from \"oj-utils\";\r\n\r\ninterface IInputNumber {\r\n id: string,\r\n options: IOption[],\r\n label?: boolean,\r\n trash?: boolean\r\n onChange: (option: IOption) => void\r\n disabled?: boolean\r\n}\r\n\r\nexport class InputNumber extends MithrilTsxComponent {\r\n value: string\r\n\r\n view(v: Vnode) {\r\n const { id, options, trash, onChange, disabled } = v.attrs;\r\n\r\n return options.map(x =>
\r\n \r\n {\r\n const target = e.target as HTMLInputElement;\r\n this.value = target.value;\r\n }}\r\n onchange={() => {\r\n const clampedValue = clamp(+this.value, x.min, x.max)\r\n this.value = clampedValue.toString()\r\n x.value = clampedValue\r\n onChange(x)\r\n }}\r\n disabled={disabled}\r\n />\r\n \r\n
)\r\n }\r\n\r\n};","const NL = {\r\n from: \"vanaf\",\r\n processingCosts: \"excl. {0} verwerkingskosten\",\r\n shippingDescriptionPickUp: \"ophalen na\",\r\n shippingDescriptionFreePickUp: \"gratis af te halen in de winkel\",\r\n edit: \"wijzigen\",\r\n toCart: \"in winkelmandje\",\r\n productTemporarilyUnavailable: \"artikel is tijdelijk niet leverbaar\",\r\n productUnavailable: \"artikel is niet meer leverbaar\",\r\n makeNow: \"maak nu\",\r\n goToMyProjects: `Klik hier om verder te werken aan een bestaand fotoproject.`,\r\n negativeProductNotice: \"Let op! Geef het aantal negatief-afbeeldingen op. En niet het aantal negatief-stroken.\"\r\n};\r\n\r\nconst FR: typeof NL = {\r\n from: \"à partir de\",\r\n processingCosts: \"hors {0} frais de traitement\",\r\n shippingDescriptionPickUp: \"ramasser après\",\r\n shippingDescriptionFreePickUp: \"retiré gratuitement en magasin\",\r\n edit: \"modifier\",\r\n toCart: \"ajouter au panier\",\r\n productTemporarilyUnavailable: \"l'article n'est temporairement pas disponible\",\r\n productUnavailable: \"l'article n'est plus disponible\",\r\n makeNow: \"créer\",\r\n goToMyProjects: `Cliquez ici pour modifier vos projets photo sauvegardés.`,\r\n negativeProductNotice: \"Attention ! Précisez le nombre de négatifs. Et pas le nombre de bandes de négatifs.\"\r\n};\r\n\r\nconst translations: Record = {\r\n NL,\r\n FR\r\n};\r\n\r\nexport const getTranslation = (key: T): typeof NL[T] => {\r\n if (window.culture === \"fr-BE\")\r\n return translations[\"FR\"][key]\r\n\r\n return translations[\"NL\"][key]\r\n}\r\n\r\nexport type LanguageKey = keyof typeof NL","const NL = {\r\n fieldNameLabel: \"Al een envelop in huis? Voer het koppelnummer in\",\r\n fieldNameMessage: \"koppelnummer is niet bekend, probeer opnieuw\",\r\n fieldPlaceholder: \"jouw koppelnummer\",\r\n fieldMaxCharacters: \"koppelnummer mag maximaal 6 karakters lang zijn\",\r\n fieldWrongPairCodeFormat: \"koppelnummer formaat klopt niet\",\r\n fieldAlreadyUsedPairCode: \"koppelnummer is al in gebruik\",\r\n fieldInvalidPairCode: \"koppelnummer is niet bekend, probeer opnieuw\",\r\n fieldInvalidPairCodeCheckNumber: \"invalide koppelnummer\",\r\n addCode: \"voeg toe\",\r\n success: \"gelukt!\",\r\n newCode: \"code wijzigen\",\r\n modalTitle: \"Melding\",\r\n modalText: \"Om een nieuwe code in te voeren moeten eerst alle producten uit de winkelmand verwijdert worden.\",\r\n modalConfirmBtn: \"sluiten\",\r\n modalNopairingCodeDescription: \"Voer eerst het koppelnummer van de verzendverpakking in. Toch een verpakking nodig\",\r\n modalNopairingCodeDescriptionAlt: \"Voer eerst het koppelnummer van de verzendverpakking in.\",\r\n clickHere: \"klik hier.\",\r\n pairingCodeDescription: \"Heb je je verpakking opgehaald bij de HEMA? Voeg hieronder het koppelnummer toe die op je verpakking staat.\"\r\n};\r\n\r\nconst FR: typeof NL = {\r\n fieldNameLabel: \"Vous avez une enveloppe à la maison ? Entrez le numéro de paire\",\r\n fieldNameMessage: \"Le numéro de paire est inconnu, veuillez réessayer\",\r\n fieldPlaceholder: \"votre numéro de paire\",\r\n fieldMaxCharacters: \"Le numéro de paire ne peut pas dépasser 6 caractères\",\r\n fieldWrongPairCodeFormat: \"Le format du numéro de paire est incorrect\",\r\n fieldAlreadyUsedPairCode: \"Le numéro de paire est déjà utilisé\",\r\n fieldInvalidPairCode: \"Le numéro de paire est inconnu, veuillez réessayer\",\r\n fieldInvalidPairCodeCheckNumber: \"Numéro de paire invalide\",\r\n addCode: \"ajouter\",\r\n success: \"réussi !\",\r\n newCode: \"modifier le code\",\r\n modalTitle: \"Notification\",\r\n modalText: \"Pour entrer un nouveau code, tous les produits doivent d'abord être retirés du panier.\",\r\n modalConfirmBtn: \"fermer\",\r\n modalNopairingCodeDescription: \"Aucun numéro de paire n'a encore été saisi, il est nécessaire pour continuer la commande. Ce numéro de paire se trouve sur l'enveloppe d'expédition.\",\r\n modalNopairingCodeDescriptionAlt: \"Entrez d'abord le numéro de paire de l'emballage d'expédition.\",\r\n clickHere: \"cliquez ici.\",\r\n pairingCodeDescription: \"Avez-vous récupéré votre emballage à la HEMA ? Ajoutez ci-dessous le numéro de paire qui figure sur votre emballage.\"\r\n};\r\n\r\nconst translations: Record = {\r\n NL,\r\n FR\r\n};\r\n\r\nexport const getTranslation = (key: T): typeof NL[T] => {\r\n if (window.culture === \"fr-BE\")\r\n return translations[\"FR\"][key]\r\n\r\n return translations[\"NL\"][key]\r\n}\r\n\r\nexport type LanguageKey = keyof typeof NL\r\n","const NL = {\r\n none: '- Geen -',\r\n optional: '(optioneel)',\r\n fileName: 'Bestandsnaam',\r\n add: \"Toevoegen\",\r\n headerYourInfo: 'jouw gegevens',\r\n headerYourQuestion: 'jouw vraag',\r\n send: 'Verzenden',\r\n makeYourChoice: \"maak je keuze\",\r\n fieldSalutationLabel: 'Aanhef',\r\n fieldSalutationMessage: 'Aanhef is verplicht',\r\n fieldNameLabel: 'Naam',\r\n fieldNameMessage: 'Naam is verplicht',\r\n fieldEmailAddressLabel: 'e-mailadres',\r\n fieldEmailMessage: 'E-mail is verplicht',\r\n fieldTelephoneLabel: 'Telefoon',\r\n fieldTelephoneMessage: 'Telefoon is verplicht',\r\n fieldOrderNumberLabel: 'Ordernummer',\r\n fieldOrderNumberMessage: 'Ordernummer is verplicht',\r\n fieldPlatformLabel: 'Mijn vraag gaat over',\r\n fieldPlatformMessage: 'Maak een keuze',\r\n fieldSubjectLabel: 'Onderwerp',\r\n fieldSubjectMessage: 'Onderwerp is verplicht',\r\n fieldDescriptionLabel: 'Vraag, opmerking of suggestie',\r\n fieldDescriptionMessage: 'Dit veld is verplicht',\r\n optionPlatform1: 'HEMA Foto',\r\n optionPlatform2: 'HEMA',\r\n optionSalutation1: 'Neutraal',\r\n optionSalutation2: 'Meneer',\r\n optionSalutation3: 'Mevrouw',\r\n successTitle: 'je bericht is verzonden',\r\n successDescription: 'Wij proberen je bericht zo snel mogelijk te beantwoorden.',\r\n newsletterTitle: \"blijft altijd op de hoogte van onze acties\",\r\n newsletterDescription: \"Schrijf je in voor de HEMA nieuwsbrief en mis nooit meer iets.\",\r\n newsletterSubscribe: \"meld je aan\",\r\n newsletterSignIn: \"schrijf je in\",\r\n newsletterSuccess: \"Gelukt! Je ontvangt vanaf nu onze nieuwsbrief.\",\r\n invalidEmail: \"Dit is geen geldig e-mailadres\",\r\n seeAll: \"bekijk alles\"\r\n}\r\n\r\nconst FR: typeof NL = {\r\n none: '-- Aucun --',\r\n optional: '(optionnel)',\r\n fileName: 'Nom de fichier',\r\n add: \"Ajouter\",\r\n headerYourInfo: 'vos coordonnées',\r\n headerYourQuestion: 'votre question',\r\n send: 'Expédier',\r\n makeYourChoice: \"faites votre choix\",\r\n fieldSalutationLabel: 'Titre',\r\n fieldSalutationMessage: 'Entrez votre titre',\r\n fieldNameLabel: 'Nom',\r\n fieldNameMessage: 'Entrez votre nom',\r\n fieldEmailAddressLabel: 'e-mailadres',\r\n fieldEmailMessage: 'Entrez votre e-mail',\r\n fieldTelephoneLabel: 'Téléphone',\r\n fieldTelephoneMessage: 'Entrez votre téléphone',\r\n fieldOrderNumberLabel: 'Numéro de commande',\r\n fieldOrderNumberMessage: 'Entrez votre numéro de commande',\r\n fieldPlatformLabel: 'Ma question concerne',\r\n fieldPlatformMessage: 'Ma question concerne',\r\n fieldSubjectLabel: 'Sujet',\r\n fieldSubjectMessage: 'Entrez votre sujet',\r\n fieldDescriptionLabel: 'Question, remarque ou suggestion',\r\n fieldDescriptionMessage: 'Entrez votre question, remarque ou suggestion',\r\n optionPlatform1: 'HEMA Photo',\r\n optionPlatform2: 'HEMA',\r\n optionSalutation1: 'Neutre',\r\n optionSalutation2: 'Monsieur',\r\n optionSalutation3: 'Madame',\r\n successTitle: 'votre message a été envoyé',\r\n successDescription: 'Nous essayons de répondre à votre message dès que possible.',\r\n newsletterTitle: \"restez toujours informé de nos promotions\",\r\n newsletterDescription: \"Inscrivez-vous à la newsletter HEMA et ne manquez plus rien.\",\r\n newsletterSubscribe: \"inscris-toi\",\r\n newsletterSignIn: \"inscrivez-vous\",\r\n newsletterSuccess: \"Réussi ! Vous recevrez désormais notre newsletter.\",\r\n invalidEmail: \"Ce n'est pas une adresse e-mail valide\",\r\n seeAll: \"voir tout\"\r\n}\r\n\r\n\r\n\r\nconst translations: Record = {\r\n NL,\r\n FR\r\n}\r\n\r\nexport const getTranslation = (key: T): typeof NL[T] => {\r\n if (window.culture === \"fr-BE\")\r\n return translations[\"FR\"][key]\r\n\r\n return translations[\"NL\"][key]\r\n}\r\n\r\nexport type LanguageKey = keyof typeof NL\r\n","import m from \"mithril\"\r\nimport { MithrilTsxComponent } from \"mithril-tsx-component\"\r\nimport { childOf } from \"oj-dom-utils\"\r\nimport { Zmdi } from \"oj-mithriljs-packages/dist/Zmdi/Zmdi\"\r\nimport type { Dropzone } from \"oj-mithriljs-packages/dist/FileUpload/FileUpload\"\r\nimport { cleanString, fileToB64, increment } from \"oj-utils\"\r\nimport { getTranslation } from \"../../translation\"\r\nimport { IInputField } from \"./inputFieldGroup\"\r\nimport { Svg } from \"../../svg\"\r\n\r\ninterface ISelectOption { value: string, label: string }\r\n\r\ninterface ISelect {\r\n value: string\r\n placeholder?: string\r\n options: (string | ISelectOption)[]\r\n onchange: (value: string) => void\r\n}\r\n\r\nclass Select extends MithrilTsxComponent {\r\n static increment = increment()\r\n id = Select.increment();\r\n open = false;\r\n\r\n view(v: m.Vnode) {\r\n let value = v.attrs.value || v.attrs.placeholder || v.attrs.options[0]\r\n const _value = v.attrs.options.find(x => value === (typeof x === \"string\" ? x : x.value))\r\n value = (_value && typeof _value !== \"string\") ? _value.label : value\r\n\r\n return
\r\n
this.open = !this.open}>\r\n {value}\r\n \r\n
\r\n {this.open &&
    \r\n {v.attrs.options.map((x) =>
  • {\r\n v.attrs.onchange(typeof x === \"string\" ? x : x.value)\r\n this.open = false\r\n }}>{typeof x === \"string\" ? x : x.label}
  • )}\r\n
}\r\n
\r\n }\r\n\r\n oncreate(v: m.VnodeDOM) {\r\n window.on(`click.select${this.id}`, (e) => {\r\n if (!this.open)\r\n return\r\n\r\n if (childOf(v.dom as HTMLElement, e.target))\r\n return\r\n\r\n this.open = false\r\n m.redraw()\r\n })\r\n }\r\n\r\n onremove() {\r\n window.off(`click.select${this.id}`)\r\n }\r\n}\r\n\r\nexport class InputField extends MithrilTsxComponent {\r\n view(v: m.Vnode) {\r\n let { type, errors, value, setVal, data, key, validate, readonly, id, onchange } = v.attrs\r\n readonly = readonly || validate?.readonly\r\n const shouldValidate = Array.isArray(errors) ? errors.length > 0 : false;\r\n let placeholder = null;\r\n\r\n if (data && Object.hasOwn(data, \"placeholder\")) {\r\n placeholder = data.placeholder.toLowerCase();\r\n }\r\n\r\n\r\n if (type === \"select\")\r\n return this.inputRef = dom as HTMLInputElement} />\r\n {!v.attrs.readonly &&\r\n \r\n }\r\n \r\n \r\n }\r\n}","function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction Alignment(params) {\n var viewSize = params.viewSize,\n align = params.align;\n var predefined = {\n start: start,\n center: center,\n end: end\n };\n\n function start() {\n return 0;\n }\n\n function center(n) {\n return end(n) / 2;\n }\n\n function end(n) {\n return viewSize - n;\n }\n\n function percent() {\n return viewSize * Number(align);\n }\n\n function measure(n) {\n if (typeof align === 'number') return percent();\n return predefined[align](n);\n }\n\n var self = {\n measure: measure\n };\n return self;\n}\n\nfunction Animation(callback) {\n var animationFrame = 0;\n\n function ifAnimating(active, cb) {\n return function () {\n if (active === !!animationFrame) cb();\n };\n }\n\n function start() {\n animationFrame = window.requestAnimationFrame(callback);\n }\n\n function stop() {\n window.cancelAnimationFrame(animationFrame);\n animationFrame = 0;\n }\n\n var self = {\n proceed: ifAnimating(true, start),\n start: ifAnimating(false, start),\n stop: ifAnimating(true, stop)\n };\n return self;\n}\n\nfunction Axis(axis) {\n var scroll = axis === 'y' ? 'y' : 'x';\n var cross = axis === 'y' ? 'x' : 'y';\n\n function measure(node) {\n var _a = node.getBoundingClientRect(),\n width = _a.width,\n height = _a.height;\n\n return scroll === 'x' ? width : height;\n }\n\n var self = {\n cross: cross,\n measure: measure,\n scroll: scroll\n };\n return self;\n}\n\nfunction Counter(params) {\n var start = params.start,\n limit = params.limit,\n loop = params.loop;\n var min = limit.min,\n max = limit.max;\n var type = loop ? 'loop' : 'constrain';\n var withinLimit = limit[type];\n var counter = withinLimit(start);\n\n function get() {\n return counter;\n }\n\n function set(n) {\n counter = withinLimit(n);\n return self;\n }\n\n function add(n) {\n if (n !== 0) {\n var sign = n / Math.abs(n);\n set(get() + sign);\n return add(n + sign * -1);\n }\n\n return self;\n }\n\n function clone() {\n return Counter({\n start: get(),\n limit: limit,\n loop: loop\n });\n }\n\n var self = {\n add: add,\n clone: clone,\n get: get,\n max: max,\n min: min,\n set: set\n };\n return self;\n}\n\nfunction Vector1D(value) {\n var vector = value;\n\n function get() {\n return vector;\n }\n\n function set(n) {\n vector = readNumber(n);\n return self;\n }\n\n function add(n) {\n vector += readNumber(n);\n return self;\n }\n\n function subtract(n) {\n vector -= readNumber(n);\n return self;\n }\n\n function multiply(n) {\n vector *= n;\n return self;\n }\n\n function divide(n) {\n vector /= n;\n return self;\n }\n\n function normalize() {\n if (vector !== 0) divide(vector);\n return self;\n }\n\n function readNumber(n) {\n return typeof n === 'number' ? n : n.get();\n }\n\n var self = {\n add: add,\n divide: divide,\n get: get,\n multiply: multiply,\n normalize: normalize,\n set: set,\n subtract: subtract\n };\n return self;\n}\n\nfunction Direction(value) {\n var direction = Vector1D(normalize(value));\n var get = direction.get;\n\n function normalize(n) {\n return n === 0 ? 0 : n / Math.abs(n);\n }\n\n function set(v) {\n var d = normalize(v.get());\n if (d !== 0) direction.set(d);\n return self;\n }\n\n var self = {\n get: get,\n set: set\n };\n return self;\n}\n\nfunction EventStore() {\n var listeners = [];\n\n function add(node, type, handler, options) {\n if (options === void 0) {\n options = false;\n }\n\n node.addEventListener(type, handler, options);\n listeners.push(function () {\n return node.removeEventListener(type, handler, options);\n });\n return self;\n }\n\n function removeAll() {\n listeners = listeners.filter(function (remove) {\n return remove();\n });\n return self;\n }\n\n var self = {\n add: add,\n removeAll: removeAll\n };\n return self;\n}\n\nfunction Limit(params) {\n var min = params.min,\n max = params.max;\n var length = Math.abs(min - max);\n\n function reachedMin(n) {\n return n < min;\n }\n\n function reachedMax(n) {\n return n > max;\n }\n\n function reachedAny(n) {\n return reachedMin(n) || reachedMax(n);\n }\n\n function removeOffset(n) {\n if (min === max) return n;\n\n while (reachedMin(n)) {\n n += length;\n }\n\n while (reachedMax(n)) {\n n -= length;\n }\n\n return n;\n }\n\n function loop(n) {\n if (!reachedAny(n)) return n;\n return reachedMin(n) ? max : min;\n }\n\n function constrain(n) {\n if (!reachedAny(n)) return n;\n return reachedMin(n) ? min : max;\n }\n\n var self = {\n constrain: constrain,\n length: length,\n loop: loop,\n max: max,\n min: min,\n reachedAny: reachedAny,\n reachedMax: reachedMax,\n reachedMin: reachedMin,\n removeOffset: removeOffset\n };\n return self;\n}\n\nfunction DragHandler(params) {\n var target = params.target,\n scrollBody = params.scrollBody,\n dragFree = params.dragFree,\n animation = params.animation,\n axis = params.axis;\n var element = params.element,\n dragTracker = params.dragTracker,\n location = params.location,\n events = params.events,\n limit = params.limit;\n var scrollAxis = axis.scroll,\n crossAxis = axis.cross;\n var focusNodes = ['INPUT', 'SELECT', 'TEXTAREA'];\n var startScroll = Vector1D(0);\n var startCross = Vector1D(0);\n var dragStartPoint = Vector1D(0);\n var activationEvents = EventStore();\n var interactionEvents = EventStore();\n var snapForceBoost = {\n mouse: 2.5,\n touch: 3.5\n };\n var freeForceBoost = {\n mouse: 5,\n touch: 7\n };\n var baseSpeed = dragFree ? 5 : 12;\n var dragThreshold = 4;\n var edgeLimit = Limit({\n min: limit.min - 70,\n max: limit.max + 70\n });\n var pointerIsDown = false;\n var preventScroll = false;\n var preventClick = false;\n var isMouse = false;\n\n function addActivationEvents() {\n var node = element;\n activationEvents.add(node, 'touchmove', function () {\n return undefined;\n }).add(node, 'touchend', function () {\n return undefined;\n }).add(node, 'touchstart', down).add(node, 'mousedown', down).add(node, 'touchcancel', up).add(node, 'contextmenu', up).add(node, 'click', click);\n }\n\n function addInteractionEvents() {\n var node = !isMouse ? element : document;\n interactionEvents.add(node, 'touchmove', move).add(node, 'touchend', up).add(node, 'mousemove', move).add(node, 'mouseup', up);\n }\n\n function removeAllEvents() {\n activationEvents.removeAll();\n interactionEvents.removeAll();\n }\n\n function isFocusNode(node) {\n var name = node.nodeName || '';\n return focusNodes.indexOf(name) > -1;\n }\n\n function forceBoost() {\n var boost = dragFree ? freeForceBoost : snapForceBoost;\n var type = isMouse ? 'mouse' : 'touch';\n return boost[type];\n }\n\n function speedFactor(forceB, forceA) {\n var diff = delta(Math.abs(forceB), Math.abs(forceA));\n if (Math.abs(forceB) <= Math.abs(forceA)) return 0;\n if (forceB === 0 || forceA === 0) return 0;\n return Math.abs(diff / forceB);\n }\n\n function allowedForce(force) {\n var scrollTarget = params.scrollTarget,\n index = params.index;\n var currentLocation = scrollTarget.byDistance(0, false);\n var targetChanged = currentLocation.index !== index.get();\n var seekNext = !targetChanged && Math.abs(force) > dragThreshold;\n var destination = force + location.get();\n\n if (seekNext && !dragFree && !limit.reachedAny(destination)) {\n var next = index.clone().add(Direction(force).get() * -1);\n return scrollTarget.byIndex(next.get(), 0).distance;\n }\n\n if (!params.loop && edgeLimit.reachedAny(destination)) {\n var edge = edgeLimit.reachedMax(destination) ? 'max' : 'min';\n return edgeLimit[edge] - target.get();\n }\n\n return scrollTarget.byDistance(force, !dragFree).distance;\n }\n\n function down(evt) {\n isMouse = evt.type === 'mousedown';\n if (isMouse && evt.button !== 0) return;\n var isMoving = delta(target.get(), location.get()) >= 2;\n var clearPreventClick = isMouse || !isMoving;\n var isNotFocusNode = !isFocusNode(evt.target);\n var preventDefault = isMoving || isMouse && isNotFocusNode;\n pointerIsDown = true;\n dragTracker.pointerDown(evt);\n dragStartPoint.set(target);\n target.set(location);\n scrollBody.useDefaultMass().useSpeed(80);\n addInteractionEvents();\n startScroll.set(dragTracker.readPoint(evt, scrollAxis));\n startCross.set(dragTracker.readPoint(evt, crossAxis));\n events.emit('pointerDown');\n if (clearPreventClick) preventClick = false;\n if (preventDefault) evt.preventDefault();\n }\n\n function move(evt) {\n if (!preventScroll && !isMouse) {\n if (!evt.cancelable) return up();\n var moveScroll = dragTracker.readPoint(evt, scrollAxis).get();\n var moveCross = dragTracker.readPoint(evt, crossAxis).get();\n var diffScroll = delta(moveScroll, startScroll.get());\n var diffCross = delta(moveCross, startCross.get());\n preventScroll = diffScroll > diffCross;\n if (!preventScroll && !preventClick) return up();\n }\n\n var diff = dragTracker.pointerMove(evt);\n var reachedLimit = limit.reachedAny(location.get());\n var resist = !params.loop && reachedLimit ? 2 : 1;\n if (!preventClick && diff) preventClick = true;\n animation.start();\n target.add(diff / resist);\n evt.preventDefault();\n }\n\n function up() {\n var scrollTo = params.scrollTo;\n var rawForce = dragTracker.pointerUp() * forceBoost();\n var force = allowedForce(rawForce);\n var factor = speedFactor(rawForce, force);\n var isMoving = delta(target.get(), dragStartPoint.get()) >= 0.5;\n if (isMoving && !isMouse) preventClick = true;\n preventScroll = false;\n pointerIsDown = false;\n interactionEvents.removeAll();\n scrollBody.useSpeed(baseSpeed + baseSpeed * factor);\n scrollTo.distance(force, !dragFree);\n isMouse = false;\n events.emit('pointerUp');\n }\n\n function delta(pointB, pointA) {\n return Math.abs(pointB - pointA);\n }\n\n function click(evt) {\n if (preventClick) evt.preventDefault();\n }\n\n function clickAllowed() {\n return !preventClick;\n }\n\n function pointerDown() {\n return pointerIsDown;\n }\n\n var self = {\n addActivationEvents: addActivationEvents,\n clickAllowed: clickAllowed,\n pointerDown: pointerDown,\n removeAllEvents: removeAllEvents\n };\n return self;\n}\n\nfunction DragTracker(params) {\n var axis = params.axis,\n pxToPercent = params.pxToPercent;\n var scrollAxis = axis.scroll;\n var coords = {\n x: 'clientX',\n y: 'clientY'\n };\n var startDrag = Vector1D(0);\n var diffDrag = Vector1D(0);\n var lastDrag = Vector1D(0);\n var pointValue = Vector1D(0);\n var trackInterval = 10;\n var trackLength = 5;\n var trackTime = 100;\n var trackPoints = [];\n var lastMoveTime = new Date().getTime();\n var isMouse = false;\n\n function readPoint(evt, type) {\n isMouse = !evt.touches;\n var c = coords[type];\n var value = isMouse ? evt[c] : evt.touches[0][c];\n return pointValue.set(value);\n }\n\n function pointerDown(evt) {\n var point = readPoint(evt, scrollAxis);\n startDrag.set(point);\n lastDrag.set(point);\n return pxToPercent.measure(startDrag.get());\n }\n\n function pointerMove(evt) {\n var point = readPoint(evt, scrollAxis);\n var nowTime = new Date().getTime();\n var diffTime = nowTime - lastMoveTime;\n\n if (diffTime >= trackInterval) {\n if (diffTime >= trackTime) trackPoints = [];\n trackPoints.push(point.get());\n lastMoveTime = nowTime;\n }\n\n diffDrag.set(point).subtract(lastDrag);\n lastDrag.set(point);\n return pxToPercent.measure(diffDrag.get());\n }\n\n function pointerUp() {\n var nowTime = new Date().getTime();\n var diffTime = nowTime - lastMoveTime;\n var currentPoint = lastDrag.get();\n var force = trackPoints.slice(-trackLength).map(function (trackPoint) {\n return currentPoint - trackPoint;\n }).sort(function (p1, p2) {\n return Math.abs(p1) < Math.abs(p2) ? 1 : -1;\n })[0];\n lastDrag.set(diffTime > trackTime || !force ? 0 : force);\n trackPoints = [];\n return pxToPercent.measure(lastDrag.get());\n }\n\n var self = {\n pointerDown: pointerDown,\n pointerMove: pointerMove,\n pointerUp: pointerUp,\n readPoint: readPoint\n };\n return self;\n}\n\nfunction PxToPercent(viewInPx) {\n var totalPercent = 100;\n\n function measure(n) {\n return n / viewInPx * totalPercent;\n }\n\n var self = {\n measure: measure,\n totalPercent: totalPercent\n };\n return self;\n}\n\nfunction map(value, iStart, iStop, oStart, oStop) {\n return oStart + (oStop - oStart) * ((value - iStart) / (iStop - iStart));\n}\nfunction arrayFromCollection(nodeList) {\n return Array.prototype.slice.call(nodeList);\n}\nfunction debounce(callback, time) {\n var timeout = {\n id: 0\n };\n return function () {\n window.clearTimeout(timeout.id);\n timeout.id = window.setTimeout(callback, time) || 0;\n };\n}\nfunction roundToDecimals(decimalPoints) {\n var pow = Math.pow(10, decimalPoints);\n return function (n) {\n return Math.round(n * pow) / pow;\n };\n}\nfunction groupArray(array, size) {\n var groups = [];\n\n for (var i = 0; i < array.length; i += size) {\n groups.push(array.slice(i, i + size));\n }\n\n return groups;\n}\nfunction arrayKeys(array) {\n return Object.keys(array).map(Number);\n}\nfunction removeClass(node, className) {\n var cl = node.classList;\n if (className && cl.contains(className)) cl.remove(className);\n}\nfunction addClass(node, className) {\n var cl = node.classList;\n if (className && !cl.contains(className)) cl.add(className);\n}\n\nfunction ScrollBody(params) {\n var location = params.location,\n speed = params.speed,\n mass = params.mass;\n var roundToTwoDecimals = roundToDecimals(2);\n var velocity = Vector1D(0);\n var acceleration = Vector1D(0);\n var attraction = Vector1D(0);\n var direction = Direction(0);\n var state = {\n speed: speed,\n mass: mass\n };\n\n function update() {\n velocity.add(acceleration);\n location.add(velocity);\n acceleration.multiply(0);\n }\n\n function applyForce(v) {\n v.divide(state.mass);\n acceleration.add(v);\n }\n\n function seek(v) {\n attraction.set(v).subtract(location);\n var magnitude = attraction.get();\n var m = map(magnitude, 0, 100, 0, state.speed);\n direction.set(attraction);\n attraction.normalize().multiply(m).subtract(velocity);\n applyForce(attraction);\n return self;\n }\n\n function settle(v) {\n var diff = v.get() - location.get();\n var diffRounded = roundToTwoDecimals(diff);\n var hasSettled = !diffRounded;\n if (hasSettled) location.set(v);\n return hasSettled;\n }\n\n function useSpeed(n) {\n state.speed = n;\n return self;\n }\n\n function useDefaultSpeed() {\n useSpeed(speed);\n return self;\n }\n\n function useMass(n) {\n state.mass = n;\n return self;\n }\n\n function useDefaultMass() {\n useMass(mass);\n return self;\n }\n\n var self = {\n direction: direction,\n location: location,\n seek: seek,\n settle: settle,\n update: update,\n useDefaultMass: useDefaultMass,\n useDefaultSpeed: useDefaultSpeed,\n useMass: useMass,\n useSpeed: useSpeed\n };\n return self;\n}\n\nfunction ScrollBounds(params) {\n var limit = params.limit,\n location = params.location,\n scrollBody = params.scrollBody,\n animation = params.animation;\n var min = limit.min,\n max = limit.max,\n reachedMin = limit.reachedMin,\n reachedMax = limit.reachedMax;\n var tolerance = 50;\n var disabled = false;\n var timeout = 0;\n\n function shouldConstrain(v) {\n if (disabled || timeout) return false;\n if (reachedMin(location.get())) return v.get() !== min;\n if (reachedMax(location.get())) return v.get() !== max;\n return false;\n }\n\n function constrain(v) {\n if (!shouldConstrain(v)) return;\n timeout = window.setTimeout(function () {\n var constraint = limit.constrain(v.get());\n v.set(constraint);\n scrollBody.useSpeed(10).useMass(3);\n animation.start();\n timeout = 0;\n }, tolerance);\n }\n\n function toggleActive(active) {\n disabled = !active;\n }\n\n var self = {\n constrain: constrain,\n toggleActive: toggleActive\n };\n return self;\n}\n\nfunction ScrollContain(params) {\n var alignment = params.alignment,\n contentSize = params.contentSize,\n viewSize = params.viewSize;\n var scrollBounds = Limit({\n min: -contentSize + viewSize,\n max: 0\n });\n var alignedWithinView = [alignment.measure(contentSize)];\n var contentExceedsView = contentSize > viewSize;\n\n function findDuplicates(scrollSnaps) {\n var startSnap = scrollSnaps[0];\n var endSnap = scrollSnaps[scrollSnaps.length - 1];\n var min = scrollSnaps.lastIndexOf(startSnap) + 1;\n var max = scrollSnaps.indexOf(endSnap);\n return Limit({\n min: min,\n max: max\n });\n }\n\n function measure(scrollSnaps, trim) {\n var containedSnaps = scrollSnaps.map(scrollBounds.constrain);\n\n var _a = findDuplicates(containedSnaps),\n min = _a.min,\n max = _a.max;\n\n if (!contentExceedsView) return alignedWithinView;\n if (!trim) return containedSnaps;\n return containedSnaps.slice(min - 1, max + 1);\n }\n\n var self = {\n measure: measure\n };\n return self;\n}\n\nfunction ScrollLimit(params) {\n var contentSize = params.contentSize,\n loop = params.loop;\n\n function measure(scrollSnaps) {\n var startSnap = scrollSnaps[0];\n var endSnap = scrollSnaps[scrollSnaps.length - 1];\n var min = loop ? startSnap - contentSize : endSnap;\n var max = startSnap;\n return Limit({\n min: min,\n max: max\n });\n }\n\n var self = {\n measure: measure\n };\n return self;\n}\n\nfunction ScrollLooper(params) {\n var contentSize = params.contentSize,\n location = params.location,\n limit = params.limit,\n pxToPercent = params.pxToPercent;\n var min = limit.min + pxToPercent.measure(0.1);\n var max = limit.max + pxToPercent.measure(0.1);\n\n var _a = Limit({\n min: min,\n max: max\n }),\n reachedMin = _a.reachedMin,\n reachedMax = _a.reachedMax;\n\n function shouldLoop(direction) {\n if (direction === 1) return reachedMax(location.get());\n if (direction === -1) return reachedMin(location.get());\n return false;\n }\n\n function loop(vectors, direction) {\n if (!shouldLoop(direction)) return;\n var loopDistance = contentSize * (direction * -1);\n vectors.forEach(function (v) {\n return v.add(loopDistance);\n });\n }\n\n var self = {\n loop: loop\n };\n return self;\n}\n\nfunction ScrollProgress(params) {\n var _a = params.limit,\n max = _a.max,\n scrollLength = _a.length;\n\n function get(n) {\n var currentLocation = n - max;\n return currentLocation / -scrollLength;\n }\n\n var self = {\n get: get\n };\n return self;\n}\n\nfunction ScrollSnap(params) {\n var snapSizes = params.snapSizes,\n alignment = params.alignment,\n loop = params.loop;\n var alignments = snapSizes.map(alignment.measure);\n var distancesBetween = distancesBetweenScrollSnaps();\n\n function distancesBetweenScrollSnaps() {\n var limit = Limit({\n min: 0,\n max: snapSizes.length - 1\n });\n var counter = Counter({\n limit: limit,\n start: 0,\n loop: loop\n });\n return snapSizes.map(function (size, index) {\n var next = counter.set(index + 1).get();\n return size + alignments[index] - alignments[next];\n });\n }\n\n function measure(index) {\n var sizes = distancesBetween.slice(0, index);\n return sizes.reduce(function (a, s) {\n return a - s;\n }, alignments[0]);\n }\n\n var self = {\n measure: measure\n };\n return self;\n}\n\nfunction ScrollTarget(params) {\n var loop = params.loop,\n limit = params.limit,\n scrollSnaps = params.scrollSnaps,\n contentSize = params.contentSize;\n var reachedMax = limit.reachedMax,\n reachedAny = limit.reachedAny,\n removeOffset = limit.removeOffset;\n\n function minDistance(d1, d2) {\n return Math.abs(d1) < Math.abs(d2) ? d1 : d2;\n }\n\n function findTargetSnap(target) {\n var distance = removeOffset(target);\n var ascDiffsToSnaps = scrollSnaps.map(function (scrollSnap) {\n return scrollSnap - distance;\n }).map(function (diffToSnap) {\n return shortcut(diffToSnap, 0);\n }).map(function (diff, i) {\n return {\n diff: diff,\n index: i\n };\n }).sort(function (d1, d2) {\n return Math.abs(d1.diff) - Math.abs(d2.diff);\n });\n var index = ascDiffsToSnaps[0].index;\n return {\n index: index,\n distance: distance\n };\n }\n\n function shortcut(target, direction) {\n var t1 = target;\n var t2 = target + contentSize;\n var t3 = target - contentSize;\n if (!loop) return t1;\n if (!direction) return minDistance(minDistance(t1, t2), t3);\n var shortest = minDistance(t1, direction === 1 ? t2 : t3);\n return Math.abs(shortest) * direction;\n }\n\n function findTargetIndex(target, index) {\n var reachedBound = !loop && reachedAny(target);\n if (!reachedBound) return index;\n var _a = params.index,\n min = _a.min,\n max = _a.max;\n return reachedMax(target) ? min : max;\n }\n\n function byIndex(index, direction) {\n var diffToSnap = scrollSnaps[index] - params.target.get();\n var distance = shortcut(diffToSnap, direction);\n return {\n index: index,\n distance: distance\n };\n }\n\n function byDistance(distance, snap) {\n var target = params.target.get() + distance;\n var targetSnap = findTargetSnap(target);\n var index = findTargetIndex(target, targetSnap.index);\n var reachedBound = !loop && reachedAny(target);\n if (!snap || reachedBound) return {\n index: index,\n distance: distance\n };\n var diffToSnap = scrollSnaps[index] - targetSnap.distance;\n var snapDistance = distance + shortcut(diffToSnap, 0);\n return {\n index: index,\n distance: snapDistance\n };\n }\n\n var self = {\n byDistance: byDistance,\n byIndex: byIndex,\n shortcut: shortcut\n };\n return self;\n}\n\nfunction ScrollTo(params) {\n var indexCurrent = params.index,\n scrollTarget = params.scrollTarget,\n animation = params.animation;\n var indexPrevious = params.indexPrevious,\n events = params.events,\n targetDistance = params.target;\n\n function scrollTo(target) {\n var distanceDiff = target.distance;\n var indexDiff = target.index !== indexCurrent.get();\n\n if (distanceDiff) {\n animation.start();\n targetDistance.add(distanceDiff);\n }\n\n if (indexDiff) {\n indexPrevious.set(indexCurrent.get());\n indexCurrent.set(target.index);\n events.emit('select');\n }\n }\n\n function distance(n, snap) {\n var target = scrollTarget.byDistance(n, snap);\n scrollTo(target);\n }\n\n function index(n, direction) {\n var targetIndex = indexCurrent.clone().set(n);\n var target = scrollTarget.byIndex(targetIndex.get(), direction);\n scrollTo(target);\n }\n\n var self = {\n distance: distance,\n index: index\n };\n return self;\n}\n\nfunction SlideLooper(params) {\n var axis = params.axis,\n scrollLocation = params.location,\n slidesInView = params.slidesInView;\n var contentSize = params.contentSize,\n viewSize = params.viewSize,\n slideSizes = params.slideSizes,\n scrollSnaps = params.scrollSnaps;\n var ascItems = arrayKeys(slideSizes);\n var descItems = arrayKeys(slideSizes).reverse();\n var loopPoints = startPoints().concat(endPoints());\n var loopStyle = axis.scroll === 'x' ? 'left' : 'top';\n\n function removeSlideSizes(indexes, from) {\n return indexes.reduce(function (a, i) {\n return a - slideSizes[i];\n }, from);\n }\n\n function slidesInGap(indexes, gap) {\n return indexes.reduce(function (a, i) {\n var remainingGap = removeSlideSizes(a, gap);\n return remainingGap > 0 ? a.concat([i]) : a;\n }, []);\n }\n\n function findLoopPoints(indexes, edge) {\n var isStartEdge = edge === 'start';\n var offset = isStartEdge ? -contentSize : contentSize;\n var slideBounds = slidesInView.findSlideBounds(offset);\n return indexes.map(function (index) {\n var initial = isStartEdge ? 0 : -contentSize;\n var altered = isStartEdge ? contentSize : 0;\n var bounds = slideBounds.filter(function (b) {\n return b.index === index;\n })[0];\n var point = bounds[isStartEdge ? 'end' : 'start'];\n\n var getTarget = function getTarget() {\n return scrollLocation.get() > point ? initial : altered;\n };\n\n return {\n point: point,\n getTarget: getTarget,\n index: index,\n location: -1\n };\n });\n }\n\n function startPoints() {\n var gap = scrollSnaps[0] - 1;\n var indexes = slidesInGap(descItems, gap);\n return findLoopPoints(indexes, 'end');\n }\n\n function endPoints() {\n var gap = viewSize - scrollSnaps[0] - 1;\n var indexes = slidesInGap(ascItems, gap);\n return findLoopPoints(indexes, 'start');\n }\n\n function canLoop() {\n return loopPoints.every(function (_a) {\n var index = _a.index;\n var otherIndexes = ascItems.filter(function (i) {\n return i !== index;\n });\n return removeSlideSizes(otherIndexes, viewSize) <= 0;\n });\n }\n\n function loop(slides) {\n loopPoints.forEach(function (loopPoint) {\n var getTarget = loopPoint.getTarget,\n location = loopPoint.location,\n index = loopPoint.index;\n var target = getTarget();\n\n if (target !== location) {\n slides[index].style[loopStyle] = target + \"%\";\n loopPoint.location = target;\n }\n });\n }\n\n function clear(slides) {\n loopPoints.forEach(function (_a) {\n var index = _a.index;\n slides[index].style[loopStyle] = '';\n });\n }\n\n var self = {\n canLoop: canLoop,\n clear: clear,\n loop: loop,\n loopPoints: loopPoints\n };\n return self;\n}\n\nfunction SlideFocus(params) {\n var scrollTo = params.scrollTo,\n slidesToScroll = params.slidesToScroll,\n root = params.root;\n var eventStore = EventStore();\n var removeAllEvents = eventStore.removeAll;\n var lastTabPressTime = 0;\n\n function registerTabPress(event) {\n if (event.keyCode !== 9) return;\n lastTabPressTime = new Date().getTime();\n }\n\n function addFocusEvent(slide, index) {\n var focus = function focus() {\n var nowTime = new Date().getTime();\n var diffTime = nowTime - lastTabPressTime;\n if (diffTime > 10) return;\n root.scrollLeft = 0;\n var selectedIndex = Math.floor(index / slidesToScroll);\n scrollTo.index(selectedIndex, 0);\n };\n\n eventStore.add(slide, 'focus', focus, true);\n }\n\n function addActivationEvents(slides) {\n eventStore.add(document, 'keydown', registerTabPress, false);\n slides.forEach(addFocusEvent);\n }\n\n var self = {\n addActivationEvents: addActivationEvents,\n removeAllEvents: removeAllEvents\n };\n return self;\n}\n\nfunction SlidesInView(params) {\n var contentSize = params.contentSize,\n slideSizes = params.slideSizes,\n viewSize = params.viewSize;\n var inViewThreshold = params.inViewThreshold,\n loop = params.loop;\n var threshold = Math.min(Math.max(inViewThreshold, 0.01), 0.99);\n var scrollSnaps = arrayKeys(slideSizes).map(scrollSnap);\n var offsets = loop ? [0, contentSize, -contentSize] : [0];\n var slideBounds = offsets.reduce(function (a, loopOffset) {\n return a.concat(findSlideBounds(loopOffset, threshold));\n }, []);\n\n function scrollSnap(index) {\n var span = slideSizes.slice(0, index);\n return span.reduce(function (a, s) {\n return a - s;\n }, 0);\n }\n\n function findSlideBounds(offset, threshold) {\n var thresholds = slideSizes.map(function (s) {\n return s * (threshold || 0);\n });\n return scrollSnaps.map(function (snap, index) {\n return {\n start: snap - slideSizes[index] + thresholds[index] + offset,\n end: snap + viewSize - thresholds[index] + offset,\n index: index\n };\n });\n }\n\n function check(location) {\n return slideBounds.reduce(function (list, slideBound) {\n var index = slideBound.index,\n start = slideBound.start,\n end = slideBound.end;\n var inList = list.indexOf(index) !== -1;\n var inView = start < location && end > location;\n return !inList && inView ? list.concat([index]) : list;\n }, []);\n }\n\n var self = {\n check: check,\n findSlideBounds: findSlideBounds\n };\n return self;\n}\n\nfunction Translate(params) {\n var axis = params.axis,\n container = params.container;\n var translates = {\n x: x,\n y: y\n };\n var translateAxis = translates[axis.scroll];\n var roundToTwoDecimals = roundToDecimals(2);\n var containerStyle = container.style;\n var disabled = false;\n var location = 0;\n\n function x(n) {\n return \"translate3d(\" + n + \"%,0px,0px)\";\n }\n\n function y(n) {\n return \"translate3d(0px,\" + n + \"%,0px)\";\n }\n\n function to(v) {\n if (disabled) return;\n var target = roundToTwoDecimals(v.get());\n\n if (location !== target) {\n getComputedStyle(container).transform;\n containerStyle.transform = translateAxis(target);\n location = target;\n }\n }\n\n function toggleActive(active) {\n disabled = !active;\n }\n\n function clear() {\n containerStyle.transform = '';\n location = 0;\n }\n\n var self = {\n clear: clear,\n to: to,\n toggleActive: toggleActive\n };\n return self;\n}\n\nfunction Engine(root, container, slides, options, events) {\n // Options\n var align = options.align,\n scrollAxis = options.axis,\n startIndex = options.startIndex,\n inViewThreshold = options.inViewThreshold,\n loop = options.loop,\n speed = options.speed,\n dragFree = options.dragFree,\n slidesToScroll = options.slidesToScroll,\n containScroll = options.containScroll; // Measurements\n\n var axis = Axis(scrollAxis);\n var pxToPercent = PxToPercent(axis.measure(container));\n var viewSize = pxToPercent.totalPercent;\n var slideSizes = slides.map(axis.measure).map(pxToPercent.measure);\n var slideIndexes = arrayKeys(slideSizes);\n var groupedSizes = groupArray(slideSizes, slidesToScroll);\n var snapSizes = groupedSizes.map(function (g) {\n return g.reduce(function (a, s) {\n return a + s;\n });\n });\n var contentSize = slideSizes.reduce(function (a, s) {\n return a + s;\n }, 0);\n var alignment = Alignment({\n align: align,\n viewSize: viewSize\n });\n var scrollSnap = ScrollSnap({\n snapSizes: snapSizes,\n alignment: alignment,\n loop: loop\n });\n var defaultSnaps = arrayKeys(snapSizes).map(scrollSnap.measure);\n var contain = ScrollContain({\n alignment: alignment,\n contentSize: contentSize,\n viewSize: viewSize\n });\n var shouldContain = !loop && containScroll !== '';\n var trimSnaps = containScroll === 'trimSnaps';\n var containedSnaps = contain.measure(defaultSnaps, trimSnaps);\n var scrollSnaps = shouldContain ? containedSnaps : defaultSnaps; // Index\n\n var indexMax = Math.max(0, scrollSnaps.length - 1);\n var indexSpan = Limit({\n min: 0,\n max: indexMax\n });\n var index = Counter({\n limit: indexSpan,\n start: startIndex,\n loop: loop\n });\n var indexPrevious = index.clone(); // ScrollLimit\n\n var scrollLimit = ScrollLimit({\n loop: loop,\n contentSize: contentSize\n });\n var limit = scrollLimit.measure(scrollSnaps); // Draw\n\n var update = function update() {\n engine.scrollBody.seek(target).update();\n var settled = engine.scrollBody.settle(target);\n\n if (!dragHandler.pointerDown()) {\n if (!loop) engine.scrollBounds.constrain(target);\n\n if (settled) {\n engine.animation.stop();\n events.emit('settle');\n }\n }\n\n if (loop) {\n var direction = engine.scrollBody.direction.get();\n engine.scrollLooper.loop(loopVectors, direction);\n engine.slideLooper.loop(slides);\n }\n\n if (!settled) events.emit('scroll');\n engine.translate.to(engine.scrollBody.location);\n engine.animation.proceed();\n }; // Shared\n\n\n var animation = Animation(update);\n var startLocation = scrollSnaps[index.get()];\n var location = Vector1D(startLocation);\n var target = Vector1D(startLocation);\n var loopVectors = [location, target];\n var scrollBody = ScrollBody({\n location: location,\n speed: speed,\n mass: 1\n });\n var scrollTarget = ScrollTarget({\n contentSize: contentSize,\n index: index,\n limit: limit,\n loop: loop,\n scrollSnaps: scrollSnaps,\n target: target\n });\n var scrollTo = ScrollTo({\n animation: animation,\n events: events,\n index: index,\n indexPrevious: indexPrevious,\n scrollTarget: scrollTarget,\n target: target\n });\n var slidesInView = SlidesInView({\n contentSize: contentSize,\n inViewThreshold: inViewThreshold,\n loop: loop,\n slideSizes: slideSizes,\n viewSize: viewSize\n }); // DragHandler\n\n var dragHandler = DragHandler({\n animation: animation,\n axis: axis,\n dragFree: dragFree,\n dragTracker: DragTracker({\n axis: axis,\n pxToPercent: pxToPercent\n }),\n element: root,\n events: events,\n index: index,\n limit: limit,\n location: location,\n loop: loop,\n scrollBody: scrollBody,\n scrollTo: scrollTo,\n scrollTarget: scrollTarget,\n target: target\n }); // Slider\n\n var engine = {\n animation: animation,\n axis: axis,\n dragHandler: dragHandler,\n pxToPercent: pxToPercent,\n index: index,\n indexPrevious: indexPrevious,\n limit: limit,\n location: location,\n options: options,\n scrollBody: scrollBody,\n scrollBounds: ScrollBounds({\n animation: animation,\n limit: limit,\n location: location,\n scrollBody: scrollBody\n }),\n scrollLooper: ScrollLooper({\n contentSize: contentSize,\n limit: limit,\n location: location,\n pxToPercent: pxToPercent\n }),\n scrollProgress: ScrollProgress({\n limit: limit\n }),\n scrollSnaps: scrollSnaps,\n scrollTarget: scrollTarget,\n scrollTo: scrollTo,\n slideFocus: SlideFocus({\n root: root,\n scrollTo: scrollTo,\n slidesToScroll: slidesToScroll\n }),\n slideLooper: SlideLooper({\n axis: axis,\n contentSize: contentSize,\n location: location,\n scrollSnaps: scrollSnaps,\n slideSizes: slideSizes,\n slidesInView: slidesInView,\n viewSize: viewSize\n }),\n slidesInView: slidesInView,\n slideIndexes: slideIndexes,\n target: target,\n translate: Translate({\n axis: axis,\n container: container\n })\n };\n return engine;\n}\n\nfunction EventEmitter() {\n var listeners = {\n destroy: [],\n pointerDown: [],\n pointerUp: [],\n init: [],\n reInit: [],\n resize: [],\n scroll: [],\n select: [],\n settle: []\n };\n\n function emit(evt) {\n listeners[evt].forEach(function (e) {\n return e(evt);\n });\n return self;\n }\n\n function on(evt, cb) {\n listeners[evt] = listeners[evt].concat([cb]);\n return self;\n }\n\n function off(evt, cb) {\n listeners[evt] = listeners[evt].filter(function (e) {\n return e !== cb;\n });\n return self;\n }\n\n var self = {\n emit: emit,\n off: off,\n on: on\n };\n return self;\n}\n\nvar defaultOptions = {\n align: 'center',\n axis: 'x',\n containScroll: '',\n containerSelector: '*',\n dragFree: false,\n draggable: true,\n draggableClass: 'is-draggable',\n draggingClass: 'is-dragging',\n inViewThreshold: 0,\n loop: false,\n selectedClass: 'is-selected',\n slidesToScroll: 1,\n speed: 10,\n startIndex: 0\n};\n\nfunction EmblaCarousel(sliderRoot, userOptions) {\n var events = EventEmitter();\n var eventStore = EventStore();\n var debouncedResize = debounce(resize, 500);\n var reInit = reActivate;\n var on = events.on,\n off = events.off;\n var engine;\n var activated = false;\n\n var options = _extends({}, defaultOptions);\n\n var rootElementSize = 0;\n var container;\n var slides;\n activate(userOptions);\n\n function storeElements() {\n if (!sliderRoot) throw new Error('Missing root node 😢');\n var selector = options.containerSelector;\n var sliderContainer = sliderRoot.querySelector(selector);\n if (!sliderContainer) throw new Error('Missing container node 😢');\n container = sliderContainer;\n slides = arrayFromCollection(container.children);\n }\n\n function activate(partialOptions) {\n storeElements();\n options = _extends(options, partialOptions);\n engine = Engine(sliderRoot, container, slides, options, events);\n rootElementSize = engine.axis.measure(sliderRoot);\n eventStore.add(window, 'resize', debouncedResize);\n engine.translate.to(engine.scrollBody.location);\n\n if (options.loop) {\n if (!engine.slideLooper.canLoop()) {\n deActivate();\n return activate({\n loop: false\n });\n }\n\n engine.slideLooper.loop(slides);\n }\n\n if (options.draggable && slides.length) {\n engine.dragHandler.addActivationEvents();\n\n if (options.draggableClass) {\n addClass(sliderRoot, options.draggableClass);\n }\n\n if (options.draggingClass) {\n events.on('pointerDown', toggleDraggingClass).on('pointerUp', toggleDraggingClass);\n }\n }\n\n if (slides.length) {\n engine.slideFocus.addActivationEvents(slides);\n }\n\n if (options.selectedClass) {\n toggleSelectedClass();\n events.on('select', toggleSelectedClass).on('pointerUp', toggleSelectedClass);\n }\n\n if (!activated) {\n setTimeout(function () {\n return events.emit('init');\n }, 0);\n activated = true;\n }\n }\n\n function toggleDraggingClass(evt) {\n var draggingClass = options.draggingClass;\n if (evt === 'pointerDown') addClass(sliderRoot, draggingClass);else removeClass(sliderRoot, draggingClass);\n }\n\n function toggleSelectedClass() {\n var selectedClass = options.selectedClass;\n var inView = slidesInView(true);\n var notInView = slidesNotInView(true);\n notInView.forEach(function (i) {\n return removeClass(slides[i], selectedClass);\n });\n inView.forEach(function (i) {\n return addClass(slides[i], selectedClass);\n });\n }\n\n function deActivate() {\n engine.dragHandler.removeAllEvents();\n engine.slideFocus.removeAllEvents();\n engine.animation.stop();\n eventStore.removeAll();\n engine.translate.clear();\n engine.slideLooper.clear(slides);\n removeClass(sliderRoot, options.draggableClass);\n slides.forEach(function (s) {\n return removeClass(s, options.selectedClass);\n });\n events.off('select', toggleSelectedClass);\n events.off('pointerUp', toggleSelectedClass);\n events.off('pointerDown', toggleDraggingClass);\n events.off('pointerUp', toggleDraggingClass);\n }\n\n function reActivate(partialOptions) {\n if (!activated) return;\n var startIndex = selectedScrollSnap();\n\n var newOptions = _extends({\n startIndex: startIndex\n }, partialOptions);\n\n deActivate();\n activate(newOptions);\n events.emit('reInit');\n }\n\n function destroy() {\n if (!activated) return;\n deActivate();\n activated = false;\n events.emit('destroy');\n }\n\n function resize() {\n if (!activated) return;\n var newRootElementSize = engine.axis.measure(sliderRoot);\n if (rootElementSize !== newRootElementSize) reActivate();\n events.emit('resize');\n }\n\n function slidesInView(target) {\n var location = engine[target ? 'target' : 'location'].get();\n var type = options.loop ? 'removeOffset' : 'constrain';\n return engine.slidesInView.check(engine.limit[type](location));\n }\n\n function slidesNotInView(target) {\n var inView = slidesInView(target);\n return engine.slideIndexes.filter(function (i) {\n return inView.indexOf(i) === -1;\n });\n }\n\n function scrollTo(index, direction) {\n engine.scrollBody.useDefaultMass().useDefaultSpeed();\n if (activated) engine.scrollTo.index(index, direction || 0);\n }\n\n function scrollNext() {\n var next = engine.index.clone().add(1);\n scrollTo(next.get(), -1);\n }\n\n function scrollPrev() {\n var prev = engine.index.clone().add(-1);\n scrollTo(prev.get(), 1);\n }\n\n function canScrollNext() {\n var next = engine.index.clone().add(1);\n return next.get() !== selectedScrollSnap();\n }\n\n function canScrollPrev() {\n var prev = engine.index.clone().add(-1);\n return prev.get() !== selectedScrollSnap();\n }\n\n function scrollSnapList() {\n return engine.scrollSnaps.map(engine.scrollProgress.get);\n }\n\n function scrollProgress() {\n return engine.scrollProgress.get(engine.location.get());\n }\n\n function selectedScrollSnap() {\n return engine.index.get();\n }\n\n function previousScrollSnap() {\n return engine.indexPrevious.get();\n }\n\n function clickAllowed() {\n return engine.dragHandler.clickAllowed();\n }\n\n function dangerouslyGetEngine() {\n return engine;\n }\n\n function containerNode() {\n return container;\n }\n\n function slideNodes() {\n return slides;\n }\n\n var self = {\n canScrollNext: canScrollNext,\n canScrollPrev: canScrollPrev,\n clickAllowed: clickAllowed,\n containerNode: containerNode,\n dangerouslyGetEngine: dangerouslyGetEngine,\n destroy: destroy,\n off: off,\n on: on,\n previousScrollSnap: previousScrollSnap,\n reInit: reInit,\n scrollNext: scrollNext,\n scrollPrev: scrollPrev,\n scrollProgress: scrollProgress,\n scrollSnapList: scrollSnapList,\n scrollTo: scrollTo,\n selectedScrollSnap: selectedScrollSnap,\n slideNodes: slideNodes,\n slidesInView: slidesInView,\n slidesNotInView: slidesNotInView\n };\n return self;\n}\n\nexport default EmblaCarousel;\n//# sourceMappingURL=embla-carousel.esm.js.map\n","import m from \"mithril\"\r\nimport { MithrilTsxComponent } from \"mithril-tsx-component\"\r\n\r\nexport interface IYoutubeVideo {\r\n code: string,\r\n play?: boolean,\r\n style?: string,\r\n onStop?: () => void\r\n}\r\n\r\nexport class YoutubeVideo extends MithrilTsxComponent {\r\n iframe: HTMLIFrameElement\r\n iframeSrc: string\r\n\r\n view(v: m.Vnode) {\r\n const { code } = v.attrs\r\n\r\n return code && \r\n }\r\n\r\n onbeforeupdate(v: m.VnodeDOM, o: m.VnodeDOM) {\r\n if (v.attrs.play === o.attrs.play)\r\n return\r\n\r\n if (this.iframe) \r\n this.setIframeSrc(v)\r\n }\r\n\r\n setIframeSrc(v: m.Vnode) {\r\n if (v.attrs.play) {\r\n this.iframe.src = this.iframeSrc;\r\n } else {\r\n this.iframe.src = \"\";\r\n }\r\n }\r\n\r\n getIdFromUrl(url) {\r\n const regex = /(?:youtu\\.be\\/|youtube\\.com(?:\\/(?:[^\\/\\n]+\\/\\S+\\/|(?:v|e(?:mbed)?)\\/?)))([a-zA-Z0-9_-]{11})/;\r\n const match = url.match(regex);\r\n return match ? match[1] : null;\r\n }\r\n}","import m, { Vnode } from \"mithril\"\r\nimport { MithrilTsxComponent } from \"mithril-tsx-component\"\r\nimport { cleanString } from \"oj-utils\"\r\nimport { Svg } from \"../../svg\"\r\n\r\n\r\ninterface IEmblaTemplate {\r\n className?: string,\r\n}\r\n\r\nexport class EmblaTemplate extends MithrilTsxComponent {\r\n view(v: Vnode) {\r\n return
\r\n
\r\n {v.children}\r\n
\r\n
\r\n }\r\n}\r\n\r\ninterface IEmblaSlide {\r\n id?: string,\r\n onSelect?: () => void\r\n}\r\n\r\nexport class EmblaSlide extends MithrilTsxComponent {\r\n view(v: Vnode) {\r\n return
v.attrs.onSelect()}>\r\n {v.children}\r\n
\r\n }\r\n}","import m, { Vnode, VnodeDOM } from \"mithril\"\r\nimport { MithrilTsxComponent } from \"mithril-tsx-component\"\r\nimport { type IImage } from \"../../types\"\r\nimport { cleanString } from \"oj-utils\"\r\n\r\nexport interface IPictureElement {\r\n className?: string,\r\n items: IImage[]\r\n}\r\nexport class PictureElement extends MithrilTsxComponent {\r\n \r\n view(v: Vnode) {\r\n return \r\n {v.attrs.items.map((x, i) => {\r\n if (v.attrs.items.length - 1 === i)\r\n return {x.altText}\r\n else\r\n return \r\n })}\r\n \r\n }\r\n}","import m, { Vnode, VnodeDOM } from \"mithril\"\r\nimport { MithrilTsxComponent } from \"mithril-tsx-component\"\r\nimport EmblaCarousel from 'embla-carousel'\r\nimport { cleanString } from \"oj-utils\";\r\nimport { redrawOnBreakpoint } from \"../../mobile\";\r\nimport { Svg } from \"../../svg\";\r\nimport { YoutubeVideo } from \"../videoBlock/youtube\";\r\nimport { EmblaSlide, EmblaTemplate } from \"./emblaTemplate\";\r\nimport { type IPictureElement, PictureElement } from \"../../components/images/picture\";\r\nimport { json } from \"stream/consumers\";\r\n\r\nexport interface IMediaGallery {\r\n mediaItems: IImageItem[]\r\n}\r\n\r\nexport interface IImageItem {\r\n thumbnail: IPictureElement,\r\n default: IPictureElement,\r\n zoom: IPictureElement,\r\n videoId?: string,\r\n videoIsQuare?: boolean\r\n}\r\n\r\nconst isMobile = redrawOnBreakpoint(1099)\r\n\r\nexport class EmblaMediaGallery extends MithrilTsxComponent {\r\n mainSlider;\r\n thumbSlider;\r\n thumbSlides = [];\r\n startVideo: boolean = false;\r\n prevIndex = 0;\r\n activeSlide = 0;\r\n numberOfSlides;\r\n currentDevice: \"mobile\" | \"desktop\";\r\n videoIndex = null;\r\n\r\n oninit(v: VnodeDOM) {\r\n this.videoIndex = v.attrs.mediaItems.findIndex(x => x.videoId != null);\r\n }\r\n\r\n oncreate(v: VnodeDOM) {\r\n this.currentDevice = isMobile() ? \"mobile\" : \"desktop\";\r\n\r\n const thumbNode = document.querySelector('.thumbs-slider .embla') as HTMLDivElement;\r\n this.thumbSlider = EmblaCarousel(thumbNode, {\r\n align: \"start\",\r\n axis: \"y\",\r\n })\r\n\r\n const mainNode = document.querySelector('.main-slider .embla') as HTMLDivElement;\r\n this.mainSlider = EmblaCarousel(mainNode, isMobile()\r\n ? {\r\n align: \"start\",\r\n draggable: true\r\n }\r\n : {\r\n align: \"start\",\r\n draggable: false\r\n }\r\n )\r\n\r\n this.thumbSlides = Array.from(thumbNode.querySelectorAll(\".thumbs-slider .embla-slide\"));\r\n this.numberOfSlides = this.thumbSlides.length;\r\n\r\n this.setActiveThumbSlide(this.activeSlide)\r\n\r\n this.mainSlider.on(\"select\", () => {\r\n const prevIndex = this.activeSlide;\r\n this.activeSlide = this.mainSlider.selectedScrollSnap();\r\n this.setActiveThumbSlide(this.activeSlide)\r\n\r\n if (!this.thumbSlides[this.activeSlide].classList.contains(\"is-selected\"))\r\n this.thumbSlider.scrollTo(this.activeSlide)\r\n\r\n this.videoToggle(v, prevIndex)\r\n \r\n m.redraw()\r\n })\r\n\r\n window.on(\"resize\", () => {\r\n if (isMobile() && this.currentDevice !== \"mobile\") {\r\n this.mainSlider.reInit({ align: \"start\", draggable: true })\r\n this.currentDevice = \"mobile\";\r\n }\r\n else if (!isMobile() && this.currentDevice !== \"desktop\") {\r\n this.mainSlider.reInit({ align: \"start\", draggable: false })\r\n this.currentDevice = \"desktop\";\r\n }\r\n })\r\n }\r\n\r\n view(v: Vnode) {\r\n return
\r\n
\r\n \r\n {v.attrs.mediaItems.map((x, i) => this.mainSlider.scrollTo(i)}>\r\n
\r\n \r\n {x.videoId && \r\n \r\n }\r\n
\r\n
)}\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n {v.attrs.mediaItems.map((x, i) => \r\n
this.zoom(e, !!x.videoId)}\r\n // ontouchmove={(e) => this.zoomTouch(e)}\r\n onmouseout={(e) => this.resetZoom(e, !!x.videoId)}\r\n // ontouchend={(e) => this.resetZoom(e)}\r\n >\r\n {x.videoId\r\n ? \r\n : \r\n }\r\n
\r\n
)}\r\n
\r\n\r\n {isMobile() && this.thumbSlides?.length > 0 &&
    \r\n {this.thumbSlides.map((x, i) =>
  • \r\n \r\n
  • )}\r\n
}\r\n
\r\n
\r\n }\r\n\r\n onbeforeupdate(v: VnodeDOM, o: VnodeDOM) {\r\n if (v.attrs.mediaItems.length != o.attrs.mediaItems.length) {\r\n this.mainSlider.reInit()\r\n this.thumbSlider.reInit()\r\n }\r\n }\r\n\r\n zoom(e, hasVideo) {\r\n if (isMobile() || hasVideo)\r\n return\r\n\r\n const target = e.currentTarget as HTMLElement;\r\n target.style.setProperty('--display', 'block');\r\n let pointer = {\r\n x: (e.offsetX * 100) / target.offsetWidth,\r\n y: (e.offsetY * 100) / target.offsetHeight\r\n }\r\n target.style.setProperty('--zoom-x', pointer.x + '%');\r\n target.style.setProperty('--zoom-y', pointer.y + '%');\r\n }\r\n\r\n zoomTouch(e, hasVideo) {\r\n if (isMobile() || hasVideo)\r\n return\r\n\r\n e.preventDefault();\r\n const target = e.currentTarget as HTMLElement;\r\n target.style.setProperty('--display', 'block');\r\n let touch = e.touches[0];\r\n\r\n let pointer = {\r\n x: (touch.pageX - target.offsetLeft) * 100 / target.offsetWidth,\r\n y: (touch.pageY - target.offsetTop) * 100 / target.offsetHeight\r\n }\r\n\r\n target.style.setProperty('--zoom-x', pointer.x + '%');\r\n target.style.setProperty('--zoom-y', pointer.y + '%');\r\n }\r\n\r\n resetZoom(e, hasVideo) {\r\n if (isMobile() || hasVideo)\r\n return\r\n\r\n const target = e.target as HTMLElement;\r\n target.style.setProperty('--display', 'none');\r\n }\r\n\r\n setActiveThumbSlide = (index) => {\r\n this.thumbSlides.forEach((x, i) => {\r\n if (x.classList.contains(\"is-active\"))\r\n x.classList.remove(\"is-active\")\r\n\r\n if (i === index)\r\n x.classList.add(\"is-active\")\r\n })\r\n }\r\n\r\n onNext(v: Vnode) {\r\n const prevIndex = this.activeSlide;\r\n\r\n if (this.activeSlide >= (this.numberOfSlides - 1))\r\n this.activeSlide = (this.numberOfSlides - 1);\r\n else {\r\n this.activeSlide++\r\n }\r\n\r\n this.setActiveThumbSlide(this.activeSlide)\r\n\r\n if (!this.thumbSlides[this.activeSlide].classList.contains(\"is-selected\"))\r\n this.thumbSlider.scrollTo(this.activeSlide)\r\n\r\n this.mainSlider.scrollTo(this.activeSlide)\r\n\r\n this.videoToggle(v, prevIndex)\r\n }\r\n\r\n onPrev(v: Vnode) {\r\n const prevIndex = this.activeSlide;\r\n\r\n if (this.activeSlide <= 0)\r\n this.activeSlide = 0;\r\n else {\r\n this.activeSlide--\r\n }\r\n\r\n this.setActiveThumbSlide(this.activeSlide)\r\n\r\n if (!this.thumbSlides[this.activeSlide].classList.contains(\"is-selected\"))\r\n this.thumbSlider.scrollTo(this.activeSlide)\r\n\r\n this.mainSlider.scrollTo(this.activeSlide)\r\n\r\n this.videoToggle(v, prevIndex)\r\n }\r\n\r\n videoToggle(v: Vnode, prevIndex: number) {\r\n if (v.attrs.mediaItems[prevIndex].videoId) {\r\n this.startVideo = false;\r\n } else if (v.attrs.mediaItems[this.activeSlide].videoId) {\r\n this.startVideo = true;\r\n }\r\n\r\n m.redraw()\r\n }\r\n}","import m, { Vnode } from \"mithril\"\r\nimport { MithrilTsxComponent } from \"mithril-tsx-component\"\r\nimport { getImageDimensions, mounter } from \"../utils\"\r\nimport { type IImageItem } from \"./productDetail/emblaMediaGallery\"\r\nimport { CustomSelect } from \"../components/fields/select\"\r\nimport { RadioBox } from \"../components/fields/radioBox\"\r\nimport { cleanString } from \"oj-utils\"\r\nimport * as Logic from \"./productDetail/logic\"\r\nimport { InputNumber } from \"../components/fields/inputNumber\"\r\nimport { getTranslation } from \"./productDetail/translations\"\r\nimport { PairingCode } from \"./pairingCode/pairingCode\"\r\nimport { type IOption } from \"../types\"\r\nimport { EmblaMediaGallery } from \"./productDetail/emblaMediaGallery\"\r\n\r\nexport interface IProductDetail {\r\n categoryId: string,\r\n productId: string,\r\n productVariantId: string,\r\n hemaArticleCode: string,\r\n producerType: number,\r\n title: string,\r\n description: string,\r\n actionSigning: IActionSigning[],\r\n productOptions: IProductOption[]\r\n mediaItems: IImageItem[],\r\n priceInfo: IPriceInfo,\r\n availabilityStatus: \"Available\" | \"TemporarilyNotAvailable\",\r\n thisProductIsInShoppingCart: boolean,\r\n isAnalogDigitalProduct: boolean,\r\n isPhotoPrintExpress: boolean,\r\n url: string\r\n}\r\n\r\nexport interface IPriceInfo {\r\n hasActionPrice: boolean,\r\n actionPrice: string,\r\n isStartingPrice: boolean,\r\n regularPrice: string,\r\n hasProcessingPrice: boolean,\r\n formattedProcessingPrice: string,\r\n formattedShippingDays: string,\r\n}\r\n\r\ninterface IActionSigning {\r\n url: string,\r\n altText: string,\r\n width: number,\r\n height: number\r\n}\r\n\r\nexport type IProductOption = {\r\n id: string,\r\n label: string,\r\n} & (\r\n {\r\n options: IOption[],\r\n inputType: \"InputNumber\"\r\n }\r\n |\r\n {\r\n options: IOption[],\r\n inputType: \"RadioColorList\" | \"DropDownList\"\r\n }\r\n )\r\n\r\n\r\n\r\nconst hemaArticleCodes = [\"37202015\", \"37202016\", \"37202017\"] // photo negatives\r\n\r\nclass ProductDetail extends MithrilTsxComponent {\r\n canSubmit: boolean\r\n\r\n\r\n oninit(v: Vnode) {\r\n Logic.setOptions(v.attrs.productOptions)\r\n Logic.setMedia(v.attrs.mediaItems)\r\n Logic.setPriceInfo(v.attrs.priceInfo)\r\n Logic.setProductIdentifiers({\r\n categoryId: v.attrs.categoryId,\r\n productId: v.attrs.productId,\r\n })\r\n Logic.setUrl(v.attrs.url)\r\n\r\n if (v.attrs.actionSigning.length > 0) {\r\n v.attrs.actionSigning.forEach(x => {\r\n if (x.width === 0) {\r\n getImageDimensions(x.url).then(dimensions => {\r\n x.width = dimensions.width\r\n x.height = dimensions.height\r\n });\r\n }\r\n })\r\n }\r\n }\r\n\r\n view(v: Vnode) {\r\n const { actionPrice, formattedProcessingPrice, formattedShippingDays, hasActionPrice, hasProcessingPrice, isStartingPrice, regularPrice } = Logic.getPriceInfo()\r\n const filteredOptions = Logic.getOptions().filter(x => !(x.inputType != \"InputNumber\" && x.options.length === 1)) ?? [];\r\n const visibleOptions = filteredOptions.filter(x => x.inputType != \"RadioColorList\");\r\n\r\n\r\n\r\n return
\r\n
\r\n \r\n
\r\n
\r\n {v.attrs.isAnalogDigitalProduct && this.canSubmit = success} />}\r\n\r\n {v.attrs.actionSigning.length > 0 &&
\r\n {v.attrs.actionSigning.map(x => {x.altText})}\r\n
}\r\n\r\n
\r\n

{v.attrs.title}

\r\n
\r\n\r\n

\r\n {m.trust(v.attrs.description)}\r\n

\r\n\r\n {Logic.getOptions() &&
\r\n {filteredOptions.map(x =>\r\n
\r\n \r\n
\r\n {x.inputType === \"DropDownList\" && x.selected)} onChange={(value) => Logic.updateVariant()} />}\r\n {x.inputType === \"RadioColorList\" && Logic.updateVariant()} />}\r\n {x.inputType === \"InputNumber\" && {\r\n Logic.setQuantity(option.value)\r\n Logic.updateVariant()\r\n }} />}\r\n
\r\n
)}\r\n
}\r\n\r\n
\r\n
\r\n {hasActionPrice && {m.trust(actionPrice.toString())}}\r\n {isStartingPrice && {m.trust(getTranslation(\"from\"))}}\r\n {hasActionPrice\r\n ? {m.trust(regularPrice.toString())}\r\n : {m.trust(regularPrice.toString())}\r\n }\r\n
\r\n

\r\n {hasProcessingPrice && {m.trust(getTranslation(\"processingCosts\").replace(\"{0}\", formattedProcessingPrice))}}\r\n {v.attrs.isPhotoPrintExpress\r\n ? {m.trust(getTranslation(\"shippingDescriptionPickUp\"))} {formattedShippingDays}\r\n : {m.trust(getTranslation(\"shippingDescriptionFreePickUp\"))}\r\n }\r\n

\r\n
\r\n\r\n\r\n {v.attrs.availabilityStatus === \"Available\"\r\n ? \r\n : [
\r\n \r\n
,\r\n

{v.attrs.availabilityStatus === \"TemporarilyNotAvailable\" ? getTranslation(\"productTemporarilyUnavailable\") : getTranslation(\"productUnavailable\")}

\r\n ]\r\n\r\n }\r\n {!v.attrs.isPhotoPrintExpress && !v.attrs.isAnalogDigitalProduct &&

{m.trust(getTranslation(\"goToMyProjects\"))}

}\r\n {hemaArticleCodes.includes(v.attrs.hemaArticleCode) &&

{getTranslation(\"negativeProductNotice\")}

}\r\n
\r\n
\r\n }\r\n}\r\n\r\nmounter(`[data-m-product-detail]`, (r, d) => {\r\n m.mount(r, {\r\n view: v => \r\n })\r\n})","var __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport m from \"mithril\";\r\nimport { MithrilTsxComponent } from \"mithril-tsx-component\";\r\nimport { cleanString } from \"oj-utils\";\r\nvar Zmdi = (function (_super) {\r\n __extends(Zmdi, _super);\r\n function Zmdi() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n Zmdi.prototype.view = function (v) {\r\n if (v.attrs.icon === undefined)\r\n return;\r\n return m(\"i\", { className: cleanString(\"Zmdi\", \"zmdi zmdi-\" + v.attrs.icon, v.attrs.className) });\r\n };\r\n return Zmdi;\r\n}(MithrilTsxComponent));\r\nexport { Zmdi };\r\n//# sourceMappingURL=Zmdi.js.map","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames not based on template\n\tif (chunkId === \"node_modules_oj-mithriljs-packages_dist_FileUpload_FileUpload_js\") return \"oj-mithriljs-packages.dist.FileUpload.FileUpload.js.dist.js\";\n\t// return url for filenames based on template\n\treturn undefined;\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames not based on template\n\tif (chunkId === \"node_modules_oj-mithriljs-packages_dist_FileUpload_FileUpload_js\") return \"oj-mithriljs-packages.dist.FileUpload.FileUpload.js.dist.css\";\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/frontendWebpack/dist/\";","if (typeof document === \"undefined\") return;\nvar createStylesheet = (chunkId, fullhref, oldTag, resolve, reject) => {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tif (__webpack_require__.nc) {\n\t\tlinkTag.nonce = __webpack_require__.nc;\n\t}\n\tvar onLinkComplete = (event) => {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && event.type;\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + errorType + \": \" + realHref + \")\");\n\t\t\terr.name = \"ChunkLoadError\";\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tif (linkTag.parentNode) linkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\n\tif (oldTag) {\n\t\toldTag.parentNode.insertBefore(linkTag, oldTag.nextSibling);\n\t} else {\n\t\tdocument.head.appendChild(linkTag);\n\t}\n\treturn linkTag;\n};\nvar findStylesheet = (href, fullhref) => {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = (chunkId) => {\n\treturn new Promise((resolve, reject) => {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, null, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t\"productDetail\": 0\n};\n\n__webpack_require__.f.miniCss = (chunkId, promises) => {\n\tvar cssChunks = {\"node_modules_oj-mithriljs-packages_dist_FileUpload_FileUpload_js\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(() => {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, (e) => {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr\n\n// no prefetching\n\n// no preloaded","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t\"productDetail\": 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkhema_foto_shopping\"] = self[\"webpackChunkhema_foto_shopping\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [\"vendor\"], () => (__webpack_require__(475)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","extendStatics","PairingCodeStatus","mounter","selector","cb","forEach","x","inputs","Array","from","querySelectorAll","data","length","map","JSON","parse","value","err","HTMLInputElement","formatPrice","price","currency","formatedPrice","Intl","NumberFormat","window","culture","style","format","replace","trim","getBaseUrl","debounce","form","postalCode","getFields","houseNumber","get","then","res","street","city","validate","readonly","urlObj","URL","document","location","href","languageMatch","pathname","match","protocol","host","view","v","this","svg","oninit","load","onbeforeupdate","o","attrs","src","onupdate","loaded","onload","dom","setAttribute","fetch","text","redrawOnBreakpoint","memoize","width","mediaQueryList","matchMedia","matches","onchange","event","isMobile","isOpen","selectedIndex","highlightedIndex","options","findIndex","selected","onChange","className","id","e","target","index","i","option","key","disabled","isAvailable","priceDifference","priceDifferencePrefix","Svg","tabindex","role","onkeydown","onclick","toggleDropdown","onmousedown","selectOption","cleanString","max","includes","preventDefault","closeDropdown","clickOutside","on","contains","off","label","color","type","name","checked","params","URLSearchParams","search","state","url","media","priceInfo","productIdentifiers","setUrl","getQuantityOption","inputType","setOptions","q","getQuantityFromUrl","min","singleOption","filter","other","setMedia","thumbnail","default","zoom","items","sort","a","b","minWidth","tempImageItemList","altText","imageUrl","retinaUrl","height","setPriceInfo","setProductIdentifiers","identifiers","getOptions","getQuantity","param","variantId","updateVariant","values","selectedOption","find","undefined","getSelectedValues","method","headers","body","stringify","quantity","json","status","Error","productOptions","mediaItems","categoryId","productId","console","error","trash","toString","oninput","clampedValue","clamp","translations","NL","processingCosts","shippingDescriptionPickUp","shippingDescriptionFreePickUp","edit","toCart","productTemporarilyUnavailable","productUnavailable","makeNow","goToMyProjects","negativeProductNotice","FR","getTranslation","__extends","d","Object","setPrototypeOf","__proto__","p","prototype","hasOwnProperty","call","TypeError","String","__","constructor","create","__assign","assign","t","s","n","arguments","apply","inc","increment","Dialog","_super","_this","open","setFocus","exec","onopen","animate","oncreate","onbeforeremove","dismiss","setOpen","ondismiss","stopPropagation","_a","querySelector","focus","children","portal","concat","onremove","reset","prevElement","activeElement","setTimeout","dialog","imm","resolve","content","promise","fieldNameLabel","fieldNameMessage","fieldPlaceholder","fieldMaxCharacters","fieldWrongPairCodeFormat","fieldAlreadyUsedPairCode","fieldInvalidPairCode","fieldInvalidPairCodeCheckNumber","addCode","success","newCode","modalTitle","modalText","modalConfirmBtn","modalNopairingCodeDescription","modalNopairingCodeDescriptionAlt","clickHere","pairingCodeDescription","none","optional","fileName","add","headerYourInfo","headerYourQuestion","send","makeYourChoice","fieldSalutationLabel","fieldSalutationMessage","fieldEmailAddressLabel","fieldEmailMessage","fieldTelephoneLabel","fieldTelephoneMessage","fieldOrderNumberLabel","fieldOrderNumberMessage","fieldPlatformLabel","fieldPlatformMessage","fieldSubjectLabel","fieldSubjectMessage","fieldDescriptionLabel","fieldDescriptionMessage","optionPlatform1","optionPlatform2","optionSalutation1","optionSalutation2","optionSalutation3","successTitle","successDescription","newsletterTitle","newsletterDescription","newsletterSubscribe","newsletterSignIn","newsletterSuccess","invalidEmail","seeAll","Select","placeholder","_value","errors","setVal","shouldValidate","isArray","hasOwn","toLowerCase","y","push","for","indexOf","List","ImageUpload","accept","image","FileUpload","autocomplete","loadDropzone","dropzone","prompt","join","file","convertFile","startsWith","Dropzone","fileToB64","substr","Zmdi","icon","slice","inputRef","val","baseUrl","origin","pathToValidate","pairCodeRegExp","Form","pairingCode","field","message","required","custom","toUpperCase","some","test","code","productOptionsForm","paramCode","isDigital","getPairingCode","Code","ItemIsPresent","setPairingCode","handleSubmit","onSubmit","handleNoPairingCode","handlePairingCodeDialog","errorMessage","getErr","onsubmit","fieldHelper","InputField","getJSON","postPairingCode","requestData","postJSON","Status","RedirectUri","invalid","used","valid","pause","catch","close","class","setButtonState","element","classList","remove","removeAttribute","toJSON","isAdditionalPayment","formData","IsAdditionalPayment","productOptionsFormData","FormData","post","getAttribute","_extends","source","Counter","start","limit","loop","withinLimit","counter","set","self","sign","Math","abs","clone","Vector1D","vector","divide","readNumber","multiply","normalize","subtract","Direction","direction","EventStore","listeners","node","handler","addEventListener","removeEventListener","removeAll","Limit","reachedMin","reachedMax","reachedAny","constrain","removeOffset","DragTracker","axis","pxToPercent","scrollAxis","scroll","coords","startDrag","diffDrag","lastDrag","pointValue","trackPoints","lastMoveTime","Date","getTime","isMouse","readPoint","evt","touches","c","pointerDown","point","measure","pointerMove","nowTime","diffTime","pointerUp","currentPoint","force","trackPoint","p1","p2","roundToDecimals","decimalPoints","pow","round","arrayKeys","array","keys","Number","removeClass","cl","addClass","ScrollBounds","scrollBody","animation","timeout","shouldConstrain","constraint","useSpeed","useMass","toggleActive","active","ScrollLooper","contentSize","vectors","shouldLoop","loopDistance","ScrollProgress","scrollLength","SlideLooper","gap","scrollLocation","slidesInView","viewSize","slideSizes","scrollSnaps","ascItems","descItems","reverse","loopPoints","findLoopPoints","slidesInGap","endPoints","loopStyle","removeSlideSizes","indexes","reduce","edge","isStartEdge","offset","slideBounds","findSlideBounds","initial","altered","getTarget","canLoop","every","clear","slides","loopPoint","SlideFocus","scrollTo","slidesToScroll","root","eventStore","removeAllEvents","lastTabPressTime","registerTabPress","keyCode","addFocusEvent","slide","scrollLeft","floor","addActivationEvents","Translate","container","translateAxis","roundToTwoDecimals","containerStyle","transform","to","getComputedStyle","Engine","events","viewInPx","align","startIndex","inViewThreshold","speed","dragFree","containScroll","cross","getBoundingClientRect","Axis","totalPercent","slideIndexes","snapSizes","size","groups","groupArray","g","alignment","predefined","center","end","Alignment","scrollSnap","alignments","distancesBetween","next","ScrollSnap","defaultSnaps","contain","scrollBounds","alignedWithinView","contentExceedsView","containedSnaps","startSnap","endSnap","lastIndexOf","findDuplicates","ScrollContain","shouldContain","trimSnaps","indexPrevious","scrollLimit","ScrollLimit","callback","animationFrame","ifAnimating","requestAnimationFrame","proceed","stop","cancelAnimationFrame","Animation","engine","seek","update","settled","settle","dragHandler","emit","scrollLooper","loopVectors","slideLooper","translate","startLocation","mass","velocity","acceleration","attraction","m","applyForce","diff","hasSettled","useDefaultMass","useDefaultSpeed","ScrollBody","scrollTarget","minDistance","d1","d2","shortcut","t1","t2","t3","shortest","byDistance","distance","snap","targetSnap","diffToSnap","findTargetSnap","findTargetIndex","reachedBound","byIndex","ScrollTarget","indexCurrent","targetDistance","distanceDiff","indexDiff","targetIndex","ScrollTo","threshold","loopOffset","thresholds","check","list","slideBound","SlidesInView","dragTracker","crossAxis","focusNodes","startScroll","startCross","dragStartPoint","activationEvents","interactionEvents","snapForceBoost","mouse","touch","freeForceBoost","baseSpeed","edgeLimit","pointerIsDown","preventScroll","preventClick","down","button","isMoving","delta","clearPreventClick","isNotFocusNode","nodeName","move","up","cancelable","moveScroll","moveCross","diffScroll","diffCross","reachedLimit","resist","forceB","forceA","rawForce","seekNext","destination","allowedForce","factor","pointB","pointA","click","clickAllowed","DragHandler","scrollProgress","slideFocus","r","PairingCode","defaultOptions","containerSelector","draggable","draggableClass","draggingClass","selectedClass","sliderRoot","userOptions","destroy","init","reInit","resize","select","EventEmitter","debouncedResize","activated","newRootElementSize","rootElementSize","reActivate","clearTimeout","activate","partialOptions","nodeList","sliderContainer","storeElements","deActivate","toggleDraggingClass","toggleSelectedClass","inView","slidesNotInView","newOptions","selectedScrollSnap","canScrollNext","canScrollPrev","containerNode","dangerouslyGetEngine","previousScrollSnap","scrollNext","scrollPrev","scrollSnapList","slideNodes","frameborder","scrolling","marginheight","marginwidth","allow","getIdFromUrl","iframe","iframeSrc","play","setIframeSrc","onSelect","srcset","loading","alt","thumbSlides","startVideo","prevIndex","activeSlide","videoIndex","setActiveThumbSlide","videoId","currentDevice","thumbNode","thumbSlider","mainNode","mainSlider","numberOfSlides","videoToggle","EmblaTemplate","showArrows","EmblaSlide","PictureElement","onPrev","onNext","onmousemove","onmouseout","resetZoom","YoutubeVideo","videoIsQuare","hasVideo","currentTarget","setProperty","pointer","offsetX","offsetWidth","offsetY","offsetHeight","zoomTouch","pageX","offsetLeft","pageY","offsetTop","hemaArticleCodes","actionSigning","Promise","reject","img","Image","onerror","dimensions","actionPrice","formattedProcessingPrice","formattedShippingDays","hasActionPrice","hasProcessingPrice","isStartingPrice","regularPrice","filteredOptions","visibleOptions","EmblaMediaGallery","isAnalogDigitalProduct","canSubmit","title","description","CustomSelect","RadioBox","InputNumber","isPhotoPrintExpress","availabilityStatus","productVariantId","thisProductIsInShoppingCart","hemaArticleCode","ProductDetail","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","O","result","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","j","splice","getter","__esModule","definition","defineProperty","enumerable","f","chunkId","all","promises","u","miniCssF","globalThis","Function","obj","prop","l","done","script","needAttach","scripts","getElementsByTagName","createElement","charset","nc","onScriptComplete","prev","doneFns","parentNode","removeChild","bind","head","appendChild","Symbol","toStringTag","installedCssChunks","miniCss","fullhref","existingLinkTags","dataHref","tag","rel","existingStyleTags","findStylesheet","oldTag","linkTag","nonce","errorType","realHref","request","createStylesheet","loadStylesheet","installedChunks","installedChunkData","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}