{"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})","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\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(`/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(`/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","debounce","form","postalCode","getFields","houseNumber","get","then","res","street","city","validate","readonly","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","document","on","contains","off","label","color","type","name","checked","params","URLSearchParams","location","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","match","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","pathname","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","href","catch","close","class","protocol","host","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":""}