{"version":3,"sources":["embed.js","node_modules/tslib/tslib.es6.js","Client/tools/kb-event.ts","Client/embed/embed.ts","_embed-shim.js"],"names":["embed","exports","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","SuppressedError","KbEvent","this","_listeners","add","callback","tag","push","remove","i","length","splice","removeByTag","trigger","args","_i","_a","apply","__extends","TypeError","String","__","constructor","create","scripts","document","getElementsByTagName","urlArr","src","split","kbmaxUrl","Embed","_this","_messageQueue","_loading","_callbackMap","_correspondenceId","onMessage","onSubmit","elementId","elementSelector","fillLayoutSettings","elem","querySelector","Error","window","getComputedStyle","style","position","_iframe","hasAttribute","_messageHandler","event","msg","data","name","command","toLowerCase","requestId","setAttributeNode","createAttribute","forEach","message","_sendMessage","_onLoaded","readyToLoadConfiguredProduct","location","href","correspondenceId","parseInt","addEventListener","_getIFrameSrc","createElement","setAttribute","width","height","border","insertBefore","firstChild","_logo","target","right","bottom","textAlign","logoImage","alt","maxHeight","maxWidth","bindToFormSelector","formElements","querySelectorAll","n","formElement","watchElementForChange","observer","MutationObserver","mutations","m","type","addedNodes","node","HTMLInputElement","HTMLSelectElement","HTMLTextAreaElement","some","setFieldsFromForm","forms","form","observe","childList","subtree","onLoaded","contentWindow","postMessage","requireWebGL","supportsWebGL","serializeFormToObject","formSelector","o","inputs","getAttribute","input","checked","value","tagName","select","multiple","options","j","option","selected","canvas","WebGLRenderingContext","getContext","e","setFields","render","undefined","snapshot","toString","fields","getFields","runAction","actionName","runSubmitRule","getPrice","layoutSettings","showFields","showConfigHeader","dispose","_onload","removeEventListener","SceneEmbed","_super","sceneId","encodeURIComponent","showHeader","showDrawer","showMove","idTheme","JSON","stringify","parameters","transparentBackground","ConfiguratorEmbed","id","configuratorId","configuredProduct","configuredProductId","currency","autoSsoLogin","cookieToken","kineticCompany","kineticPlant","kineticCustomerId","kineticCustomerNumber","kineticQuoteNumber","kineticQuoteLine","kineticOrderNumber","kineticOrderLine","kineticJobNumber","kineticAssemblySeq","kineticCallContext","kineticUserId","setConfiguredProduct","configProduct","getConfiguredProduct","saveProductAndSubmit","saveProduct","Viewer3D","arguments","KBMaxConfigurator","loadFromHtml","elements","el","Number","sceneGuid","parse","__extends$1","kbmax"],"mappings":"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","file":"embed.min.js","sourcesContent":["var embed = (function (exports) {\n 'use strict';\n\n /******************************************************************************\r\n Copyright (c) Microsoft Corporation.\r\n\r\n Permission to use, copy, modify, and/or distribute this software for any\r\n purpose with or without fee is hereby granted.\r\n\r\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\n AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\n LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\n OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\n PERFORMANCE OF THIS SOFTWARE.\r\n ***************************************************************************** */\r\n /* global Reflect, Promise, SuppressedError, Symbol */\r\n\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\r\n function __extends(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\n var _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n };\n\n var KbEvent = /** @class */ (function () {\n function KbEvent() {\n /** ordered list to hold the listeners sorted by their priority. The lower the number, the higher the priority */\n this._listeners = [];\n }\n KbEvent.prototype.add = function (callback, tag) {\n if (tag === void 0) { tag = null; }\n this._listeners.push({ callback: callback, tag: tag });\n };\n KbEvent.prototype.remove = function (callback) {\n if (typeof callback === \"function\") {\n for (var i = 0; i < this._listeners.length; i++) {\n if (this._listeners[i].callback === callback) {\n this._listeners.splice(i, 1);\n break;\n }\n }\n }\n else {\n this._listeners.length = 0;\n }\n };\n /*\n * removes all listeners with the given tag\n */\n KbEvent.prototype.removeByTag = function (tag) {\n for (var i = 0; i < this._listeners.length; i++) {\n if (this._listeners[i].tag === tag) {\n this._listeners.splice(i, 1);\n }\n }\n };\n KbEvent.prototype.trigger = function (args) {\n for (var _i = 0, _a = this._listeners; _i < _a.length; _i++) {\n var l = _a[_i];\n l.callback.apply(null, [args]);\n }\n };\n return KbEvent;\n }());\n\n //manually import what we use from tslib so it gets tree-shaked\n var __extends$1 = __extends;\n //get the url this script was loaded from\n //can replace this with document.currentScript when support for more browsers is there: https://developer.mozilla.org/en-US/docs/Web/API/document.currentScript\n var scripts = document.getElementsByTagName(\"script\");\n var urlArr = scripts[scripts.length - 1].src.split(\"/\");\n var kbmaxUrl = urlArr[0] + \"//\" + urlArr[2];\n var Embed = /** @class */ (function () {\n function Embed(args) {\n var _this = this;\n this.args = args;\n this._messageQueue = [];\n this._loading = true;\n this._callbackMap = {};\n this._correspondenceId = 1;\n this.onMessage = new KbEvent();\n this.onSubmit = new KbEvent();\n if (!args.kbmaxUrl) {\n args.kbmaxUrl = kbmaxUrl;\n }\n if (args.elementId) {\n args.elementSelector = \"#\" + args.elementId;\n }\n this.fillLayoutSettings();\n var elem = this.elem = document.querySelector(args.elementSelector);\n if (!elem) {\n throw new Error(\"no element was found with the given selector of '\" + args.elementSelector + \"'\");\n }\n //make the main elem relative to size iframe and loading image\n if (window.getComputedStyle(elem, null)[\"position\"] !== \"absolute\") {\n elem.style.position = \"relative\";\n }\n //if the iframe has already been loaded, then the user is just trying to regain the reference\n this._iframe = this.elem.querySelector(\"iframe\");\n if (this._iframe) {\n this._loading = !this._iframe.hasAttribute(\"data-kbmax-loaded\");\n }\n //we wait for the sceneLoaded event to be broadcasted by kbmax\n if (this._loading) {\n if (!this._messageHandler) {\n this._messageHandler = function (event) {\n var msg = event.data;\n if (msg && msg.name) {\n var command = msg.name.toLowerCase();\n if (command == \"configuratorloaded\" || command == \"sceneloaded\") {\n var sceneLoadedArgs = msg.data;\n if (sceneLoadedArgs.requestId == args.elementSelector) { //make sure this message is for the iframe this viewer3d is tied to\n _this._loading = false;\n _this._iframe.setAttributeNode(document.createAttribute(\"data-kbmax-loaded\"));\n //fade away loading image if it's there\n //run all messages in the queue\n _this._messageQueue.forEach(function (message) {\n _this._sendMessage(message);\n });\n if (_this._onLoaded) {\n _this._onLoaded();\n }\n }\n }\n else if (command == \"submit\") {\n _this.onSubmit.trigger(msg);\n }\n else if (command == \"readytoloadconfiguredproduct\") {\n _this.readyToLoadConfiguredProduct();\n }\n else if (command == \"loginsso\") {\n window.location.href = args.kbmaxUrl + \"/ssosignin?RedirectUrl=\" + window.location.href;\n }\n else {\n if (msg.correspondenceId) {\n var callback = _this._callbackMap[parseInt(msg.correspondenceId)];\n if (callback)\n callback(msg.data);\n }\n else {\n _this.onMessage.trigger(msg);\n }\n }\n }\n };\n window.addEventListener(\"message\", this._messageHandler);\n }\n }\n if (!this._iframe) {\n var src = this._getIFrameSrc();\n //add the iframe to the DOM before setting it's src. This stops it from blocking the outer page window.load event(which is bad for SEO)\n this._iframe = document.createElement(\"iframe\");\n //now set attributes\n this._iframe.src = src;\n this._iframe.setAttributeNode(document.createAttribute(\"allowfullscreen\"));\n this._iframe.setAttribute(\"allow\", \"xr-spatial-tracking 'self' \" + this.args.kbmaxUrl + \"; fullscreen *\");\n this._iframe.style.width = \"100%\";\n this._iframe.style.height = \"100%\";\n this._iframe.style.position = \"absolute\";\n this._iframe.style.border = \"none\";\n this.elem.insertBefore(this._iframe, this.elem.firstChild);\n this._logo = this.elem.querySelector(\"a\");\n if (this._logo) {\n this._logo.href = \"https://www.kbmax.com\";\n this._logo.target = \"_blank\";\n this._logo.style.position = \"absolute\";\n this._logo.style.right = \"20px\";\n this._logo.style.bottom = \"20px\";\n this._logo.style.width = \"12%\";\n this._logo.style.textAlign = \"right\";\n var logoImage = this._logo.querySelector(\"img\");\n if (logoImage) {\n logoImage.src = args.kbmaxUrl + \"/images/kbmax_logo_horizontal.png\";\n logoImage.alt = \"3D Configurator by KBMax\";\n logoImage.style.maxHeight = \"108px\";\n logoImage.style.maxWidth = \"160px\";\n logoImage.style.height = \"auto\";\n logoImage.style.width = \"100%\";\n }\n }\n //setup form binding. We do it here so it's only bound once to the event (in case there are multiple calls to initialize the same viewer)\n if (args.bindToFormSelector) {\n var formElements = document.querySelectorAll(args.bindToFormSelector + \" input, \" + args.bindToFormSelector + \" select, \" + args.bindToFormSelector + \" textarea\");\n for (var n = 0; n < formElements.length; n++) {\n var formElement = formElements[n];\n this.watchElementForChange(formElement);\n }\n //observe the form for changes, so we can process newly added inputs to the forms\n if (window[\"MutationObserver\"]) {\n var observer = new MutationObserver(function (mutations) {\n mutations.forEach(function (m) {\n if (m.type == \"childList\") {\n for (var n = 0; n < m.addedNodes.length; n++) {\n var node = m.addedNodes[n];\n if (node instanceof HTMLInputElement || node instanceof HTMLSelectElement || node instanceof HTMLTextAreaElement) {\n _this.watchElementForChange(node);\n }\n }\n }\n });\n if (mutations.some(function (m) { return m.type == \"childList\"; })) {\n _this.setFieldsFromForm(_this.args.bindToFormSelector); //update from the form so there is immediate binding\n }\n });\n //observe all the forms\n var forms = document.querySelectorAll(args.bindToFormSelector);\n for (var n = 0; n < forms.length; n++) {\n var form = forms[n];\n observer.observe(form, { childList: true, subtree: true });\n }\n }\n this.setFieldsFromForm(args.bindToFormSelector);\n }\n }\n }\n Embed.prototype.watchElementForChange = function (elem) {\n var _this = this;\n elem.addEventListener(\"change\", function () {\n _this.setFieldsFromForm(_this.args.bindToFormSelector);\n });\n };\n Embed.prototype.onLoaded = function (callback) {\n this._onLoaded = callback;\n };\n Embed.prototype._sendMessage = function (message) {\n if (this._loading) {\n this._messageQueue.push(message);\n }\n else {\n this._iframe.contentWindow.postMessage(message, \"*\");\n }\n };\n Embed.prototype.requireWebGL = function () {\n //if the browser doesn't support webgl, then add the loading image and bail\n if (!this.supportsWebGL()) {\n return;\n }\n };\n Embed.prototype.readyToLoadConfiguredProduct = function () {\n };\n //serializes a form to an object that can be sent to kbmax embed api\n Embed.prototype.serializeFormToObject = function (formSelector) {\n var o = {};\n var form = document.querySelector(formSelector);\n if (form) {\n var inputs = form.querySelectorAll(\"input, select, textarea\");\n for (var i = 0; i < inputs.length; i++) {\n var elem = inputs[i];\n var name = elem.getAttribute(\"kbmax-name\") || elem.getAttribute(\"data-kbmax-name\") || elem.getAttribute(\"name\");\n if (name && !elem.getAttribute(\"disabled\")) {\n if (elem.getAttribute(\"type\") === \"checkbox\") {\n var input = elem;\n o[name] = input.checked;\n }\n else if (elem.getAttribute(\"type\") === \"radio\") {\n var input = elem;\n if (input.checked) {\n o[name] = input.value;\n }\n }\n else if (elem.tagName === \"select\") {\n var select = elem;\n if (select.multiple) {\n o[name] = [];\n var options = select.getElementsByTagName(\"option\");\n for (var j = 0; j < options.length; j++) {\n var option = options[j];\n if (option.selected) {\n o[name].push(option.value);\n }\n }\n }\n else {\n o[name] = select.value;\n }\n }\n else {\n o[name] = elem.value;\n }\n }\n }\n }\n return o;\n };\n Embed.prototype.supportsWebGL = function () {\n try {\n var canvas = document.createElement('canvas');\n return !!(window.WebGLRenderingContext && (canvas.getContext('webgl') || canvas.getContext('experimental-webgl')));\n }\n catch (e) {\n return false;\n }\n };\n Embed.prototype.setFieldsFromForm = function (formSelector) {\n this.setFields(this.serializeFormToObject(formSelector));\n };\n Embed.prototype.render = function () {\n var msg = {\n name: \"render\",\n data: undefined\n };\n this._sendMessage(msg);\n };\n Embed.prototype.snapshot = function (options, callback) {\n var correspondenceId = this._correspondenceId++;\n this._callbackMap[correspondenceId] = callback;\n this._sendMessage({\n name: \"snapshot\",\n data: options,\n correspondenceId: correspondenceId.toString()\n });\n };\n Embed.prototype.setFields = function (fields, callback) {\n var correspondenceId = this._correspondenceId++;\n this._callbackMap[correspondenceId] = callback;\n var msg = {\n name: \"setFields\",\n data: fields,\n correspondenceId: correspondenceId.toString()\n };\n this._sendMessage(msg);\n };\n Embed.prototype.getFields = function (callback) {\n var correspondenceId = this._correspondenceId++;\n this._callbackMap[correspondenceId] = callback;\n var msg = {\n name: \"getFields\",\n data: {},\n correspondenceId: correspondenceId.toString()\n };\n this._sendMessage(msg);\n };\n Embed.prototype.runAction = function (actionName, callback) {\n var correspondenceId = this._correspondenceId++;\n this._callbackMap[correspondenceId] = callback;\n var msg = {\n name: \"runAction\",\n data: actionName,\n correspondenceId: correspondenceId.toString()\n };\n this._sendMessage(msg);\n };\n Embed.prototype.runSubmitRule = function (callback) {\n var correspondenceId = this._correspondenceId++;\n this._callbackMap[correspondenceId] = callback;\n var msg = {\n name: \"runsubmitrule\",\n data: {},\n correspondenceId: correspondenceId.toString()\n };\n this._sendMessage(msg);\n };\n Embed.prototype.getPrice = function (callback) {\n var correspondenceId = this._correspondenceId++;\n this._callbackMap[correspondenceId] = callback;\n var msg = {\n name: \"getprice\",\n data: {},\n correspondenceId: correspondenceId.toString()\n };\n this._sendMessage(msg);\n };\n /**\n * collates layout settings from previous parameters to ensure backwards compatibility\n */\n Embed.prototype.fillLayoutSettings = function () {\n this.args.layoutSettings = this.args.layoutSettings || {};\n if (!this.args.layoutSettings.hasOwnProperty(\"Show Pages\")) {\n this.args.layoutSettings[\"Show Pages\"] = this.args.showFields;\n }\n if (!this.args.layoutSettings.hasOwnProperty(\"Show Header\")) {\n this.args.layoutSettings[\"Show Header\"] = this.args.showConfigHeader;\n }\n };\n /** disposes of the iframe and any handlers */\n Embed.prototype.dispose = function () {\n if (this._iframe) {\n this._iframe.remove();\n this._iframe = undefined;\n }\n if (this._logo) {\n this._logo.remove();\n this._logo = undefined;\n }\n this._messageQueue = [];\n this._loading = false;\n this._onload = undefined;\n if (this._messageHandler) {\n window.removeEventListener(\"message\", this._messageHandler);\n }\n this._callbackMap = {};\n this.onMessage.remove();\n this.onSubmit.remove();\n };\n return Embed;\n }());\n var SceneEmbed = /** @class */ (function (_super) {\n __extends$1(SceneEmbed, _super);\n function SceneEmbed(args) {\n var _this = _super.call(this, args) || this;\n _this.requireWebGL();\n return _this;\n }\n SceneEmbed.prototype._getIFrameSrc = function () {\n var url = this.args.kbmaxUrl +\n \"/scenes/\" + this.args.sceneId.toString() +\n \"?embedded=true&requestid=\" + encodeURIComponent(this.args.elementSelector) +\n //\"&showfields=\" + (this.args.showFields !== false) +\n \"&showheader=\" + (this.args.showHeader !== false) +\n //\"&showconfigheader=\" + (this.args.showConfigHeader !== false) +\n \"&showdrawer=\" + (this.args.showDrawer !== false) +\n \"&showmove=\" + (this.args.showMove !== false) +\n \"&idtheme=\" + (this.args.idTheme || \"\") +\n \"&fields=\" + (this.args.fields ? encodeURIComponent(JSON.stringify(this.args.fields)) : \"\") +\n \"&layoutsettings=\" + (this.args.layoutSettings ? encodeURIComponent(JSON.stringify(this.args.layoutSettings)) : \"\") +\n \"¶meters=\" + (this.args.parameters ? encodeURIComponent(JSON.stringify(this.args.parameters)) : \"\") +\n \"&transparentbackground=\" + (this.args.transparentBackground === true);\n return url;\n };\n return SceneEmbed;\n }(Embed));\n var ConfiguratorEmbed = /** @class */ (function (_super) {\n __extends$1(ConfiguratorEmbed, _super);\n function ConfiguratorEmbed(args) {\n var _this = this;\n if (args.id)\n args.configuratorId = args.id; //for backwards compatibility\n _this = _super.call(this, args) || this;\n _this.configuredProduct = args.configuredProduct;\n return _this;\n }\n ConfiguratorEmbed.prototype.readyToLoadConfiguredProduct = function () {\n var message = {\n name: \"setconfiguredproduct\",\n data: this.configuredProduct\n };\n this._iframe.contentWindow.postMessage(message, \"*\");\n };\n ConfiguratorEmbed.prototype._getIFrameSrc = function () {\n var src = this.args.kbmaxUrl;\n if (this.args.configuredProductId) {\n src += \"/quoteproducts/\" + this.args.configuredProductId;\n }\n else {\n src += \"/configurators/\" + this.args.configuratorId.toString();\n }\n src += \"?embedded=true&requestid=\" + encodeURIComponent(this.args.elementSelector) +\n //\"&showfields=\" + (this.args.showFields !== false) +\n \"&showheader=\" + (this.args.showHeader !== false) +\n //\"&showconfigheader=\" + (this.args.showConfigHeader !== false) +\n \"&showdrawer=\" + (this.args.showDrawer !== false) +\n \"&showmove=\" + (this.args.showMove !== false) +\n \"¤cy=\" + encodeURIComponent(this.args.currency || \"\") +\n \"&idtheme=\" + (this.args.idTheme || \"\") +\n \"&fields=\" + (this.args.fields ? encodeURIComponent(JSON.stringify(this.args.fields)) : \"\") +\n \"&layoutsettings=\" + (this.args.layoutSettings ? encodeURIComponent(JSON.stringify(this.args.layoutSettings)) : \"\") +\n \"¶meters=\" + (this.args.parameters ? encodeURIComponent(JSON.stringify(this.args.parameters)) : \"\");\n if (this.args.configuredProduct) {\n src += \"&deferLoadedRule=true\";\n }\n if (this.args.autoSsoLogin) {\n src += \"&autoSsoLogin=true\";\n }\n if (this.args.cookieToken) {\n src += \"&cookieToken=\" + encodeURIComponent(this.args.cookieToken);\n }\n if (this.args.kineticCompany) {\n src += \"&kineticCompany=\" + encodeURIComponent(this.args.kineticCompany);\n }\n if (this.args.kineticPlant) {\n src += \"&kineticPlant=\" + encodeURIComponent(this.args.kineticPlant);\n }\n if (this.args.kineticCustomerId) {\n src += \"&kineticCustomerId=\" + encodeURIComponent(this.args.kineticCustomerId);\n }\n if (this.args.kineticCustomerNumber) {\n src += \"&kineticCustomerNumber=\" + encodeURIComponent(this.args.kineticCustomerNumber);\n }\n if (this.args.kineticQuoteNumber) {\n src += \"&kineticQuoteNumber=\" + encodeURIComponent(this.args.kineticQuoteNumber);\n }\n if (this.args.kineticQuoteLine) {\n src += \"&kineticQuoteLine=\" + encodeURIComponent(this.args.kineticQuoteLine);\n }\n if (this.args.kineticOrderNumber) {\n src += \"&kineticOrderNumber=\" + encodeURIComponent(this.args.kineticOrderNumber);\n }\n if (this.args.kineticOrderLine) {\n src += \"&kineticOrderLine=\" + encodeURIComponent(this.args.kineticOrderLine);\n }\n if (this.args.kineticJobNumber) {\n src += \"&kineticJobNumber=\" + encodeURIComponent(this.args.kineticJobNumber);\n }\n if (this.args.kineticAssemblySeq) {\n src += \"&kineticAssemblySeq=\" + encodeURIComponent(this.args.kineticAssemblySeq);\n }\n if (this.args.kineticCallContext) {\n src += \"&kineticCallContext=\" + encodeURIComponent(this.args.kineticCallContext);\n }\n if (this.args.kineticUserId) {\n src += \"&kineticUserId=\" + encodeURIComponent(this.args.kineticUserId);\n }\n return src;\n };\n ConfiguratorEmbed.prototype.setConfiguredProduct = function (configProduct, callback) {\n var correspondenceId = this._correspondenceId++;\n this._callbackMap[correspondenceId] = callback;\n var msg = {\n name: \"setConfiguredProduct\",\n data: configProduct,\n correspondenceId: correspondenceId.toString()\n };\n this._sendMessage(msg);\n };\n ConfiguratorEmbed.prototype.getConfiguredProduct = function (callback) {\n var correspondenceId = this._correspondenceId++;\n this._callbackMap[correspondenceId] = callback;\n var msg = {\n name: \"getConfiguredProduct\",\n data: {},\n correspondenceId: correspondenceId.toString()\n };\n this._sendMessage(msg);\n };\n /**\n * saves the product to the quote and then submits the quote.\n * @param callback\n */\n ConfiguratorEmbed.prototype.saveProductAndSubmit = function (callback) {\n var correspondenceId = this._correspondenceId++;\n this._callbackMap[correspondenceId] = callback;\n var msg = {\n name: \"saveProductAndSubmit\",\n data: {},\n correspondenceId: correspondenceId.toString()\n };\n this._sendMessage(msg);\n };\n /**\n * saves the product to the existing quote if one exists or to a new quote if it does not\n * @param callback\n */\n ConfiguratorEmbed.prototype.saveProduct = function (callback) {\n var correspondenceId = this._correspondenceId++;\n this._callbackMap[correspondenceId] = callback;\n var msg = {\n name: \"saveProduct\",\n data: {},\n correspondenceId: correspondenceId.toString()\n };\n this._sendMessage(msg);\n };\n return ConfiguratorEmbed;\n }(Embed));\n //for backwards compatibility. Can be removed in the future\n var Viewer3D = /** @class */ (function (_super) {\n __extends$1(Viewer3D, _super);\n function Viewer3D() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return Viewer3D;\n }(SceneEmbed));\n var KBMaxConfigurator = /** @class */ (function (_super) {\n __extends$1(KBMaxConfigurator, _super);\n function KBMaxConfigurator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return KBMaxConfigurator;\n }(ConfiguratorEmbed));\n //if an element has the kbmax attributes, then we load a kbmax embed automatically for them\n var loadFromHtml = function () {\n var elements = document.querySelectorAll(\"[data-kbmax]\");\n for (var i = 0; i < elements.length; i++) {\n //start a new viewer for each element that had the attribute\n var el = elements[i];\n //validation\n if (!el.id) {\n el.id = \"viewer\";\n }\n if (!el.hasAttribute(\"data-scene-id\") && !el.hasAttribute(\"data-configurator-id\")) {\n throw new Error(\"kbmax element must have the data-scene-id or data-configurator-id attribute\");\n }\n var sceneId = Number(el.getAttribute(\"data-scene-id\"));\n var sceneGuid = el.getAttribute(\"data-scene-guid\");\n var configuratorId = Number(el.getAttribute(\"data-configurator-id\"));\n var transparentBackground = (el.getAttribute(\"data-transparent-background\") === \"true\");\n var showFields = !(el.getAttribute(\"data-show-fields\") === \"false\");\n var showHeader = !(el.getAttribute(\"data-show-header\") === \"false\");\n var showConfigHeader = !(el.getAttribute(\"data-show-config-header\") === \"false\");\n var showDrawer = (el.getAttribute(\"data-show-drawer\") === \"true\");\n var showMove = !(el.getAttribute(\"data-show-move\") === \"false\");\n var bindToFormSelector = el.getAttribute(\"data-bind-to-form\");\n var currency = el.getAttribute(\"data-currency\");\n var idTheme = el.getAttribute(\"data-id-theme\");\n var fields = el.getAttribute(\"data-fields\");\n var layoutSettings = el.getAttribute(\"data-layout-settings\");\n var parameters = el.getAttribute(\"data-parameters\");\n if (configuratorId) {\n var configEmbed = new ConfiguratorEmbed({\n elementSelector: \"#\" + el.id,\n configuratorId: configuratorId,\n showFields: showFields,\n showHeader: showHeader,\n showConfigHeader: showConfigHeader,\n showDrawer: showDrawer,\n showMove: showMove,\n bindToFormSelector: bindToFormSelector,\n currency: currency,\n idTheme: idTheme && Number(idTheme),\n fields: JSON.parse(fields),\n layoutSettings: JSON.parse(layoutSettings),\n parameters: JSON.parse(parameters)\n });\n }\n else {\n var sceneEmbed = new SceneEmbed({\n elementSelector: \"#\" + el.id,\n sceneId: sceneId,\n sceneGuid: sceneGuid,\n transparentBackground: transparentBackground,\n showFields: showFields,\n showHeader: showHeader,\n showConfigHeader: showConfigHeader,\n showDrawer: showDrawer,\n showMove: showMove,\n bindToFormSelector: bindToFormSelector,\n idTheme: idTheme && Number(idTheme),\n fields: JSON.parse(fields),\n layoutSettings: JSON.parse(layoutSettings),\n parameters: JSON.parse(parameters)\n });\n }\n }\n };\n //for a quick load, we try right away (hopefully the script was referenced after the html)\n loadFromHtml();\n //we check again after load in case the user had the script before the html was there\n document.addEventListener(\"DOMContentLoaded\", function () {\n loadFromHtml();\n });\n\n exports.ConfiguratorEmbed = ConfiguratorEmbed;\n exports.Embed = Embed;\n exports.KBMaxConfigurator = KBMaxConfigurator;\n exports.SceneEmbed = SceneEmbed;\n exports.Viewer3D = Viewer3D;\n exports.__extends = __extends$1;\n\n return exports;\n\n}({}));\n\n\nvar kbmax = embed;\n//# sourceMappingURL=embed.js.map\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol */\r\n\r\nvar 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\r\nexport function __extends(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\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(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)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n function next() {\r\n while (env.stack.length) {\r\n var rec = env.stack.pop();\r\n try {\r\n var result = rec.dispose && rec.dispose.call(rec.value);\r\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n};\r\n","export interface IKbEventListener {\r\n callback: (args?: T) => void;\r\n tag?: string;\r\n}\r\n\r\nexport class KbEvent {\r\n /** ordered list to hold the listeners sorted by their priority. The lower the number, the higher the priority */\r\n protected _listeners = [];\r\n\r\n public add(callback: (args?: T) => void, tag: string = null): void {\r\n this._listeners.push({ callback, tag});\r\n }\r\n\r\n public remove(callback?: (args?: T) => void): void {\r\n if (typeof callback === \"function\") {\r\n for (let i = 0; i < this._listeners.length; i++) {\r\n if (this._listeners[i].callback === callback) {\r\n this._listeners.splice(i, 1);\r\n break;\r\n }\r\n }\r\n } else {\r\n this._listeners.length = 0;\r\n }\r\n }\r\n\r\n /*\r\n * removes all listeners with the given tag\r\n */\r\n public removeByTag(tag: string): void {\r\n for (let i = 0; i < this._listeners.length; i++) {\r\n if (this._listeners[i].tag === tag) {\r\n this._listeners.splice(i, 1);\r\n }\r\n }\r\n }\r\n\r\n public trigger(args?: T): void {\r\n for (let l of this._listeners) {\r\n l.callback.apply(null, [args]);\r\n }\r\n }\r\n}\r\n\r\n","\r\nimport { IConfiguredProduct } from \"@models/entity-models\";\r\nimport { ISceneLoadedData } from \"@models/models\";\r\nimport { __extends as tslib__extends } from \"tslib\";\r\nimport { KbEvent } from \"../tools/kb-event\";\r\nimport { IMessage } from \"../tools/models\";\r\n\r\n//manually import what we use from tslib so it gets tree-shaked\r\nexport const __extends = tslib__extends;\r\n\r\n//get the url this script was loaded from\r\n//can replace this with document.currentScript when support for more browsers is there: https://developer.mozilla.org/en-US/docs/Web/API/document.currentScript\r\nvar scripts = document.getElementsByTagName(\"script\");\r\nvar urlArr = scripts[scripts.length - 1].src.split(\"/\");\r\nvar kbmaxUrl = urlArr[0] + \"//\" + urlArr[2];\r\n\r\nexport interface IEmbedArguments {\r\n /**\r\n * the element to add the 3d viewer to\r\n */\r\n elementSelector: string;\r\n /**\r\n * overrides the element selector and assumes it's an html id\r\n */\r\n elementId?: string;\r\n /**\r\n * the url to kbmax including the protocol, company subdomain and domain... if left empty will be figured out from the url this script was loaded from\r\n */\r\n kbmaxUrl?: string;\r\n /**\r\n * OBSOLETE! Use layoutSettings parameter instead.\r\n * whether or not to show the kbmax page & field ui options\r\n */\r\n showFields?: boolean;\r\n /**\r\n * whether or not to show the portal header\r\n */\r\n showHeader?: boolean;\r\n /**\r\n * OBSOLETE! Use layoutSettings parameter instead.\r\n * whether or not to show the configurator header\r\n */\r\n showConfigHeader?: boolean;\r\n /**\r\n * whether or not to show the configurator drawer\r\n */\r\n showDrawer?: boolean;\r\n /**\r\n * show the move me animation on scene load\r\n */\r\n showMove?: boolean;\r\n /**\r\n * a css selector for a form whose child values will be sent to scene when changed. Assumes input/select names are the same as the field names in the scene\r\n */\r\n bindToFormSelector?: string;\r\n /**\r\n * The 3 letter iso of the currency to show pricing in. Note that the currency specified\r\n * must be an allowed currency as specified in the currency settings of the kbmax company.\r\n * If saveProductAndSubmit() is called, this currency will also be set as the currency of\r\n * the created quote.\r\n */\r\n currency?: string;\r\n /**\r\n * Can be used to override the theme of the company for this embed.\r\n */\r\n idTheme?: number;\r\n /**\r\n * Starting field values. Helps to avoid FOUC from waiting for onLoaded to set field values \r\n */\r\n fields?: {};\r\n\r\n /**\r\n * Override the layout settings set in the configurator.\r\n */\r\n layoutSettings?: {};\r\n\r\n /**\r\n * Custom parameters that will be available in snap rules (as the 'parameters' map variable)\r\n */\r\n parameters?: {};\r\n \r\n /**\r\n * whether to show the kbmax logo or not (required by some license agreements with KBMax)\r\n */\r\n //logo?: boolean;\r\n\r\n /**\r\n * Whether to immediately attempt to login via SSO upon loading the iframe before continuing.\r\n */\r\n autoSsoLogin?: boolean;\r\n\r\n /**\r\n * Pass-thru cookie for advanced authentication scenarios\r\n */\r\n cookieToken?: string;\r\n}\r\n\r\nexport interface ISceneEmbedArguments extends IEmbedArguments {\r\n /**\r\n * the kbmax scene id that should be displayed\r\n */\r\n sceneId?: number;\r\n /**\r\n * the guid of the scene (needed to do default loading image)\r\n */\r\n sceneGuid?: string;\r\n /**\r\n * set to true to have a transparent background behind the scene\r\n */\r\n transparentBackground?: boolean;\r\n\r\n}\r\n\r\nexport interface IConfigEmbedArguments extends IEmbedArguments {\r\n /**\r\n * the product id of the configurator to open\r\n */\r\n configuratorId?: number;\r\n\r\n /**\r\n * to open an existing quote product, you must fill in configuredProductId and quoteId instead of configuratorId\r\n */\r\n configuredProductId?: number;\r\n /**\r\n * to open an existing quote product, you must fill in configuredProductId and quoteId instead of configuratorId\r\n */\r\n quoteId?: number;\r\n /**\r\n * Specifies a configured product to load immediately. This is similar to setConfiguredProduct except by sending\r\n * the configured product as an embed arg, it will defer the loaded rule until *after* the configured product is\r\n * applied, which will better reflect the actual behavior of loading an existing configuration from a quote using\r\n * the portal.\r\n */\r\n configuredProduct?: IConfiguredProduct;\r\n\r\n /**\r\n * DO NOT USE. OBSOLETE. USE configuratorId INSTEAD\r\n */\r\n id?: number; //only for backwards compatibility... use configuratorId instead\r\n\r\n /**\r\n * Kinetic ERP parameters\r\n */\r\n kineticCompany?: string;\r\n\r\n kineticPlant?: string;\r\n\r\n kineticCustomerId?: string;\r\n\r\n kineticCustomerNumber?: string;\r\n\r\n kineticQuoteNumber?: string;\r\n\r\n kineticQuoteLine?: string;\r\n\r\n kineticOrderNumber?: string;\r\n\r\n kineticOrderLine?: string;\r\n\r\n kineticJobNumber?: string;\r\n\r\n kineticAssemblySeq?: string;\r\n\r\n kineticCallContext?: string;\r\n\r\n kineticUserId?: string;\r\n}\r\n\r\n\r\n\r\n\r\nexport abstract class Embed{\r\n protected elem: HTMLElement;\r\n protected _iframe: HTMLIFrameElement;\r\n protected _logo: HTMLAnchorElement;\r\n protected _messageQueue: IMessage[] = [];\r\n protected _loading: boolean = true;\r\n protected _onload: () => void;\r\n protected _messageHandler: (event) => void;\r\n protected _callbackMap: any = {};\r\n protected _correspondenceId: number = 1;\r\n\r\n public onMessage = new KbEvent();\r\n public onSubmit = new KbEvent();\r\n\r\n constructor(protected args: TArgs) {\r\n if (!args.kbmaxUrl) {\r\n args.kbmaxUrl = kbmaxUrl;\r\n }\r\n\r\n if (args.elementId) {\r\n args.elementSelector = \"#\" + args.elementId;\r\n }\r\n\r\n this.fillLayoutSettings();\r\n\r\n var elem = this.elem = document.querySelector(args.elementSelector);\r\n if (!elem) {\r\n throw new Error(\"no element was found with the given selector of '\" + args.elementSelector + \"'\");\r\n }\r\n\r\n //make the main elem relative to size iframe and loading image\r\n if (window.getComputedStyle(elem, null)[\"position\"] !== \"absolute\") {\r\n elem.style.position = \"relative\";\r\n }\r\n\r\n //if the iframe has already been loaded, then the user is just trying to regain the reference\r\n this._iframe = this.elem.querySelector(\"iframe\");\r\n if (this._iframe) {\r\n this._loading = !this._iframe.hasAttribute(\"data-kbmax-loaded\");\r\n }\r\n\r\n //we wait for the sceneLoaded event to be broadcasted by kbmax\r\n if (this._loading) {\r\n if (!this._messageHandler) {\r\n this._messageHandler = (event) => {\r\n var msg: IMessage = event.data;\r\n if (msg && msg.name) {\r\n var command = msg.name.toLowerCase();\r\n if (command == \"configuratorloaded\" || command == \"sceneloaded\") {\r\n var sceneLoadedArgs: ISceneLoadedData = msg.data;\r\n if (sceneLoadedArgs.requestId == args.elementSelector) { //make sure this message is for the iframe this viewer3d is tied to\r\n this._loading = false;\r\n this._iframe.setAttributeNode(document.createAttribute(\"data-kbmax-loaded\"));\r\n\r\n //fade away loading image if it's there\r\n\r\n //run all messages in the queue\r\n this._messageQueue.forEach((message) => {\r\n this._sendMessage(message);\r\n });\r\n if (this._onLoaded) {\r\n this._onLoaded();\r\n }\r\n }\r\n } else if (command == \"submit\") {\r\n this.onSubmit.trigger(msg);\r\n } else if (command == \"readytoloadconfiguredproduct\") {\r\n this.readyToLoadConfiguredProduct();\r\n } else if (command == \"loginsso\") {\r\n window.location.href = args.kbmaxUrl + \"/ssosignin?RedirectUrl=\" + window.location.href;\r\n } else {\r\n if (msg.correspondenceId) {\r\n var callback = this._callbackMap[parseInt(msg.correspondenceId)];\r\n if (callback) callback(msg.data);\r\n } else {\r\n this.onMessage.trigger(msg);\r\n }\r\n }\r\n }\r\n }\r\n window.addEventListener(\"message\", this._messageHandler);\r\n }\r\n }\r\n\r\n if (!this._iframe) {\r\n var src = this._getIFrameSrc();\r\n\r\n //add the iframe to the DOM before setting it's src. This stops it from blocking the outer page window.load event(which is bad for SEO)\r\n this._iframe = document.createElement(\"iframe\");\r\n\r\n //now set attributes\r\n this._iframe.src = src;\r\n this._iframe.setAttributeNode(document.createAttribute(\"allowfullscreen\"));\r\n this._iframe.setAttribute(\"allow\", \"xr-spatial-tracking 'self' \" + this.args.kbmaxUrl + \"; fullscreen *\");\r\n this._iframe.style.width = \"100%\";\r\n this._iframe.style.height = \"100%\";\r\n this._iframe.style.position = \"absolute\";\r\n this._iframe.style.border = \"none\";\r\n\r\n this.elem.insertBefore(this._iframe, this.elem.firstChild);\r\n\r\n this._logo = this.elem.querySelector(\"a\");\r\n if (this._logo) {\r\n this._logo.href = \"https://www.kbmax.com\";\r\n this._logo.target = \"_blank\";\r\n this._logo.style.position = \"absolute\";\r\n this._logo.style.right = \"20px\";\r\n this._logo.style.bottom = \"20px\";\r\n this._logo.style.width = \"12%\";\r\n this._logo.style.textAlign = \"right\";\r\n var logoImage = this._logo.querySelector(\"img\");\r\n if (logoImage) {\r\n logoImage.src = args.kbmaxUrl + \"/images/kbmax_logo_horizontal.png\";\r\n logoImage.alt = \"3D Configurator by KBMax\";\r\n logoImage.style.maxHeight = \"108px\";\r\n logoImage.style.maxWidth = \"160px\";\r\n logoImage.style.height = \"auto\";\r\n logoImage.style.width = \"100%\";\r\n }\r\n }\r\n\r\n\r\n //setup form binding. We do it here so it's only bound once to the event (in case there are multiple calls to initialize the same viewer)\r\n if (args.bindToFormSelector) {\r\n var formElements = document.querySelectorAll(args.bindToFormSelector + \" input, \" + args.bindToFormSelector + \" select, \" + args.bindToFormSelector + \" textarea\");\r\n for (var n = 0; n < formElements.length; n++) {\r\n var formElement: HTMLElement = formElements[n];\r\n this.watchElementForChange(formElement);\r\n }\r\n //observe the form for changes, so we can process newly added inputs to the forms\r\n if (window[\"MutationObserver\"]) {\r\n var observer = new MutationObserver((mutations) => {\r\n mutations.forEach(m => {\r\n if (m.type == \"childList\") {\r\n for (var n = 0; n < m.addedNodes.length; n++) {\r\n var node = m.addedNodes[n];\r\n if (node instanceof HTMLInputElement || node instanceof HTMLSelectElement || node instanceof HTMLTextAreaElement) {\r\n this.watchElementForChange(node);\r\n }\r\n }\r\n }\r\n });\r\n if (mutations.some(m => m.type == \"childList\")) {\r\n this.setFieldsFromForm(this.args.bindToFormSelector); //update from the form so there is immediate binding\r\n }\r\n });\r\n\r\n //observe all the forms\r\n var forms = document.querySelectorAll(args.bindToFormSelector);\r\n for (var n = 0; n < forms.length; n++) {\r\n var form = forms[n];\r\n observer.observe(form, { childList: true, subtree: true });\r\n }\r\n }\r\n\r\n\r\n this.setFieldsFromForm(args.bindToFormSelector);\r\n }\r\n }\r\n }\r\n\r\n protected watchElementForChange(elem: HTMLElement) {\r\n elem.addEventListener(\"change\", () => {\r\n this.setFieldsFromForm(this.args.bindToFormSelector);\r\n });\r\n }\r\n\r\n /**\r\n * gets the src url for the iframe from the derived class\r\n */\r\n protected abstract _getIFrameSrc(): string;\r\n\r\n private _onLoaded: () => void;\r\n public onLoaded(callback: () => void) {\r\n this._onLoaded = callback;\r\n }\r\n\r\n protected _sendMessage(message: IMessage) {\r\n if (this._loading) {\r\n this._messageQueue.push(message);\r\n } else {\r\n this._iframe.contentWindow.postMessage(message, \"*\");\r\n }\r\n }\r\n\r\n protected requireWebGL() {\r\n //if the browser doesn't support webgl, then add the loading image and bail\r\n if (!this.supportsWebGL()) {\r\n return;\r\n }\r\n }\r\n\r\n protected readyToLoadConfiguredProduct() {\r\n }\r\n\r\n //serializes a form to an object that can be sent to kbmax embed api\r\n protected serializeFormToObject(formSelector: string) {\r\n var o = {};\r\n var form: HTMLFormElement = document.querySelector(formSelector);\r\n if (form) {\r\n var inputs = form.querySelectorAll(\"input, select, textarea\");\r\n for (var i = 0; i < inputs.length; i++) {\r\n var elem: HTMLElement = inputs[i];\r\n var name = elem.getAttribute(\"kbmax-name\") || elem.getAttribute(\"data-kbmax-name\") || elem.getAttribute(\"name\");\r\n if (name && !elem.getAttribute(\"disabled\")) {\r\n if (elem.getAttribute(\"type\") === \"checkbox\") {\r\n var input: HTMLInputElement = elem;\r\n o[name] = input.checked;\r\n } else if (elem.getAttribute(\"type\") === \"radio\") {\r\n var input: HTMLInputElement = elem;\r\n if (input.checked) {\r\n o[name] = input.value;\r\n }\r\n } else if (elem.tagName === \"select\") {\r\n var select: HTMLSelectElement = elem;\r\n if (select.multiple) {\r\n o[name] = [];\r\n var options = select.getElementsByTagName(\"option\");\r\n for (var j = 0; j < options.length; j++) {\r\n var option: HTMLOptionElement = options[j];\r\n if (option.selected) {\r\n o[name].push(option.value);\r\n }\r\n }\r\n } else {\r\n o[name] = select.value;\r\n }\r\n }\r\n else {\r\n o[name] = (elem).value;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return o;\r\n }\r\n\r\n public supportsWebGL(): boolean {\r\n try {\r\n var canvas = document.createElement('canvas');\r\n return !!((window).WebGLRenderingContext && (canvas.getContext('webgl') || canvas.getContext('experimental-webgl')));\r\n } catch (e) {\r\n return false;\r\n }\r\n }\r\n\r\n public setFieldsFromForm(formSelector: string) {\r\n this.setFields(this.serializeFormToObject(formSelector));\r\n }\r\n\r\n public render() {\r\n var msg: IMessage = {\r\n name: \"render\",\r\n data: undefined\r\n }\r\n this._sendMessage(msg);\r\n }\r\n\r\n public snapshot(options: clara2.ISnapshotOptions, callback: (result: Blob | string) => void) {\r\n var correspondenceId = this._correspondenceId++;\r\n this._callbackMap[correspondenceId] = callback;\r\n this._sendMessage({\r\n name: \"snapshot\",\r\n data: options,\r\n correspondenceId: correspondenceId.toString()\r\n });\r\n }\r\n\r\n public setFields(fields: {}, callback?: () => void) {\r\n var correspondenceId = this._correspondenceId++;\r\n this._callbackMap[correspondenceId] = callback;\r\n var msg: IMessage = {\r\n name: \"setFields\",\r\n data: fields,\r\n correspondenceId: correspondenceId.toString()\r\n }\r\n this._sendMessage(msg);\r\n }\r\n\r\n public getFields(callback: (fields: {}) => void) {\r\n var correspondenceId = this._correspondenceId++;\r\n this._callbackMap[correspondenceId] = callback;\r\n var msg: IMessage = {\r\n name: \"getFields\",\r\n data: {},\r\n correspondenceId: correspondenceId.toString()\r\n };\r\n this._sendMessage(msg);\r\n }\r\n\r\n public runAction(actionName: string, callback?: () => void) {\r\n var correspondenceId = this._correspondenceId++;\r\n this._callbackMap[correspondenceId] = callback;\r\n var msg: IMessage = {\r\n name: \"runAction\",\r\n data: actionName,\r\n correspondenceId: correspondenceId.toString()\r\n }\r\n this._sendMessage(msg);\r\n }\r\n\r\n public runSubmitRule(callback?: () => void) {\r\n var correspondenceId = this._correspondenceId++;\r\n this._callbackMap[correspondenceId] = callback;\r\n var msg: IMessage = {\r\n name: \"runsubmitrule\",\r\n data: {},\r\n correspondenceId: correspondenceId.toString()\r\n };\r\n this._sendMessage(msg);\r\n }\r\n\r\n public getPrice(callback: (priceObject: {}) => void) {\r\n var correspondenceId = this._correspondenceId++;\r\n this._callbackMap[correspondenceId] = callback;\r\n var msg: IMessage = {\r\n name: \"getprice\",\r\n data: {},\r\n correspondenceId: correspondenceId.toString()\r\n };\r\n this._sendMessage(msg);\r\n }\r\n\r\n /**\r\n * collates layout settings from previous parameters to ensure backwards compatibility\r\n */\r\n private fillLayoutSettings() {\r\n this.args.layoutSettings = this.args.layoutSettings || {};\r\n if (!this.args.layoutSettings.hasOwnProperty(\"Show Pages\")) {\r\n this.args.layoutSettings[\"Show Pages\"] = this.args.showFields;\r\n }\r\n if (!this.args.layoutSettings.hasOwnProperty(\"Show Header\")) {\r\n this.args.layoutSettings[\"Show Header\"] = this.args.showConfigHeader;\r\n }\r\n }\r\n\r\n /** disposes of the iframe and any handlers */\r\n public dispose() {\r\n if (this._iframe) {\r\n this._iframe.remove();\r\n this._iframe = undefined;\r\n }\r\n if (this._logo) {\r\n this._logo.remove();\r\n this._logo = undefined;\r\n }\r\n this._messageQueue = [];\r\n this._loading = false;\r\n this._onload = undefined;\r\n if (this._messageHandler) {\r\n window.removeEventListener(\"message\", this._messageHandler);\r\n }\r\n this._callbackMap = {};\r\n this.onMessage.remove();\r\n this.onSubmit.remove();\r\n }\r\n}\r\n\r\nexport class SceneEmbed extends Embed {\r\n\r\n constructor(args: ISceneEmbedArguments) {\r\n\r\n super(args);\r\n\r\n this.requireWebGL();\r\n }\r\n\r\n protected _getIFrameSrc() {\r\n let url = this.args.kbmaxUrl +\r\n \"/scenes/\" + this.args.sceneId.toString() +\r\n \"?embedded=true&requestid=\" + encodeURIComponent(this.args.elementSelector) +\r\n //\"&showfields=\" + (this.args.showFields !== false) +\r\n \"&showheader=\" + (this.args.showHeader !== false) +\r\n //\"&showconfigheader=\" + (this.args.showConfigHeader !== false) +\r\n \"&showdrawer=\" + (this.args.showDrawer !== false) +\r\n \"&showmove=\" + (this.args.showMove !== false) +\r\n \"&idtheme=\" + (this.args.idTheme || \"\") +\r\n \"&fields=\" + (this.args.fields ? encodeURIComponent(JSON.stringify(this.args.fields)) : \"\") +\r\n \"&layoutsettings=\" + (this.args.layoutSettings ? encodeURIComponent(JSON.stringify(this.args.layoutSettings)) : \"\") + \r\n \"¶meters=\" + (this.args.parameters ? encodeURIComponent(JSON.stringify(this.args.parameters)) : \"\") +\r\n \"&transparentbackground=\" + (this.args.transparentBackground === true);\r\n\r\n return url;\r\n }\r\n}\r\n\r\n\r\nexport class ConfiguratorEmbed extends Embed\r\n{\r\n private configuredProduct;\r\n\r\n constructor(args: IConfigEmbedArguments) {\r\n\r\n if (args.id) args.configuratorId = args.id; //for backwards compatibility\r\n\r\n\r\n super(args);\r\n\r\n this.configuredProduct = args.configuredProduct;\r\n }\r\n\r\n protected readyToLoadConfiguredProduct() {\r\n let message: IMessage = {\r\n name: \"setconfiguredproduct\",\r\n data: this.configuredProduct\r\n };\r\n this._iframe.contentWindow.postMessage(message, \"*\");\r\n }\r\n\r\n protected _getIFrameSrc() {\r\n var src = this.args.kbmaxUrl;\r\n if (this.args.configuredProductId) {\r\n src += \"/quoteproducts/\" + this.args.configuredProductId;\r\n }\r\n else {\r\n src += \"/configurators/\" + this.args.configuratorId.toString();\r\n }\r\n src += \"?embedded=true&requestid=\" + encodeURIComponent(this.args.elementSelector) +\r\n //\"&showfields=\" + (this.args.showFields !== false) +\r\n \"&showheader=\" + (this.args.showHeader !== false) +\r\n //\"&showconfigheader=\" + (this.args.showConfigHeader !== false) +\r\n \"&showdrawer=\" + (this.args.showDrawer !== false) +\r\n \"&showmove=\" + (this.args.showMove !== false) +\r\n \"¤cy=\" + encodeURIComponent(this.args.currency || \"\") +\r\n \"&idtheme=\" + (this.args.idTheme || \"\") +\r\n \"&fields=\" + (this.args.fields ? encodeURIComponent(JSON.stringify(this.args.fields)) : \"\") +\r\n \"&layoutsettings=\" + (this.args.layoutSettings ? encodeURIComponent(JSON.stringify(this.args.layoutSettings)) : \"\") + \r\n \"¶meters=\" + (this.args.parameters ? encodeURIComponent(JSON.stringify(this.args.parameters)) : \"\");\r\n\r\n if (this.args.configuredProduct) {\r\n src += \"&deferLoadedRule=true\";\r\n }\r\n\r\n if (this.args.autoSsoLogin) {\r\n src += \"&autoSsoLogin=true\";\r\n }\r\n\r\n if (this.args.cookieToken) {\r\n src += \"&cookieToken=\" + encodeURIComponent(this.args.cookieToken);\r\n }\r\n\r\n if (this.args.kineticCompany) {\r\n src += \"&kineticCompany=\" + encodeURIComponent(this.args.kineticCompany);\r\n }\r\n\r\n if (this.args.kineticPlant) {\r\n src += \"&kineticPlant=\" + encodeURIComponent(this.args.kineticPlant);\r\n }\r\n\r\n if (this.args.kineticCustomerId) {\r\n src += \"&kineticCustomerId=\" + encodeURIComponent(this.args.kineticCustomerId);\r\n }\r\n\r\n if (this.args.kineticCustomerNumber) {\r\n src += \"&kineticCustomerNumber=\" + encodeURIComponent(this.args.kineticCustomerNumber);\r\n }\r\n\r\n if (this.args.kineticQuoteNumber) {\r\n src += \"&kineticQuoteNumber=\" + encodeURIComponent(this.args.kineticQuoteNumber);\r\n }\r\n\r\n if (this.args.kineticQuoteLine) {\r\n src += \"&kineticQuoteLine=\" + encodeURIComponent(this.args.kineticQuoteLine);\r\n }\r\n\r\n if (this.args.kineticOrderNumber) {\r\n src += \"&kineticOrderNumber=\" + encodeURIComponent(this.args.kineticOrderNumber);\r\n }\r\n\r\n if (this.args.kineticOrderLine) {\r\n src += \"&kineticOrderLine=\" + encodeURIComponent(this.args.kineticOrderLine);\r\n }\r\n\r\n if (this.args.kineticJobNumber) {\r\n src += \"&kineticJobNumber=\" + encodeURIComponent(this.args.kineticJobNumber);\r\n }\r\n\r\n if (this.args.kineticAssemblySeq) {\r\n src += \"&kineticAssemblySeq=\" + encodeURIComponent(this.args.kineticAssemblySeq);\r\n }\r\n\r\n if (this.args.kineticCallContext) {\r\n src += \"&kineticCallContext=\" + encodeURIComponent(this.args.kineticCallContext);\r\n }\r\n\r\n if (this.args.kineticUserId) {\r\n src += \"&kineticUserId=\" + encodeURIComponent(this.args.kineticUserId);\r\n }\r\n\r\n return src;\r\n }\r\n\r\n public setConfiguredProduct(configProduct: IConfiguredProduct, callback: () => void) {\r\n var correspondenceId = this._correspondenceId++;\r\n this._callbackMap[correspondenceId] = callback;\r\n var msg: IMessage = {\r\n name: \"setConfiguredProduct\",\r\n data: configProduct,\r\n correspondenceId: correspondenceId.toString()\r\n }\r\n this._sendMessage(msg);\r\n }\r\n\r\n public getConfiguredProduct(callback: (configProduct: IConfiguredProduct) => void) {\r\n var correspondenceId = this._correspondenceId++;\r\n this._callbackMap[correspondenceId] = callback;\r\n var msg: IMessage = {\r\n name: \"getConfiguredProduct\",\r\n data: {},\r\n correspondenceId: correspondenceId.toString()\r\n };\r\n this._sendMessage(msg);\r\n }\r\n\r\n /**\r\n * saves the product to the quote and then submits the quote.\r\n * @param callback\r\n */\r\n public saveProductAndSubmit(callback?: (quote) => void) {\r\n var correspondenceId = this._correspondenceId++;\r\n this._callbackMap[correspondenceId] = callback;\r\n var msg: IMessage = {\r\n name: \"saveProductAndSubmit\",\r\n data: {},\r\n correspondenceId: correspondenceId.toString()\r\n };\r\n this._sendMessage(msg);\r\n }\r\n\r\n /**\r\n * saves the product to the existing quote if one exists or to a new quote if it does not\r\n * @param callback\r\n */\r\n public saveProduct(callback?: () => void) {\r\n var correspondenceId = this._correspondenceId++;\r\n this._callbackMap[correspondenceId] = callback;\r\n var msg: IMessage = {\r\n name: \"saveProduct\",\r\n data: {},\r\n correspondenceId: correspondenceId.toString()\r\n };\r\n this._sendMessage(msg);\r\n }\r\n}\r\n\r\n//for backwards compatibility. Can be removed in the future\r\nexport class Viewer3D extends SceneEmbed { }\r\nexport class KBMaxConfigurator extends ConfiguratorEmbed { }\r\n\r\n\r\n//if an element has the kbmax attributes, then we load a kbmax embed automatically for them\r\nvar loadFromHtml = () => {\r\n var elements = document.querySelectorAll(\"[data-kbmax]\");\r\n for (var i = 0; i < elements.length; i++) {\r\n //start a new viewer for each element that had the attribute\r\n var el = elements[i];\r\n //validation\r\n if (!el.id) {\r\n el.id = \"viewer\";\r\n }\r\n if (!el.hasAttribute(\"data-scene-id\") && !el.hasAttribute(\"data-configurator-id\")) {\r\n throw new Error(\"kbmax element must have the data-scene-id or data-configurator-id attribute\");\r\n }\r\n var sceneId = Number(el.getAttribute(\"data-scene-id\"));\r\n var sceneGuid = el.getAttribute(\"data-scene-guid\");\r\n var configuratorId = Number(el.getAttribute(\"data-configurator-id\"));\r\n var transparentBackground = (el.getAttribute(\"data-transparent-background\") === \"true\");\r\n var showFields = !(el.getAttribute(\"data-show-fields\") === \"false\");\r\n var showHeader = !(el.getAttribute(\"data-show-header\") === \"false\");\r\n var showConfigHeader = !(el.getAttribute(\"data-show-config-header\") === \"false\");\r\n var showDrawer = (el.getAttribute(\"data-show-drawer\") === \"true\");\r\n var showMove = !(el.getAttribute(\"data-show-move\") === \"false\");\r\n var bindToFormSelector = el.getAttribute(\"data-bind-to-form\");\r\n var currency = el.getAttribute(\"data-currency\");\r\n var idTheme = el.getAttribute(\"data-id-theme\");\r\n var fields = el.getAttribute(\"data-fields\");\r\n var layoutSettings = el.getAttribute(\"data-layout-settings\");\r\n var parameters = el.getAttribute(\"data-parameters\");\r\n\r\n if (configuratorId) {\r\n var configEmbed = new ConfiguratorEmbed({\r\n elementSelector: \"#\" + el.id,\r\n configuratorId: configuratorId,\r\n showFields: showFields,\r\n showHeader: showHeader,\r\n showConfigHeader: showConfigHeader,\r\n showDrawer: showDrawer,\r\n showMove: showMove,\r\n bindToFormSelector: bindToFormSelector,\r\n currency: currency,\r\n idTheme: idTheme && Number(idTheme),\r\n fields: JSON.parse(fields),\r\n layoutSettings: JSON.parse(layoutSettings),\r\n parameters: JSON.parse(parameters)\r\n });\r\n } else {\r\n var sceneEmbed = new SceneEmbed({\r\n elementSelector: \"#\" + el.id,\r\n sceneId: sceneId,\r\n sceneGuid: sceneGuid,\r\n transparentBackground: transparentBackground,\r\n showFields: showFields,\r\n showHeader: showHeader,\r\n showConfigHeader: showConfigHeader,\r\n showDrawer: showDrawer,\r\n showMove: showMove,\r\n bindToFormSelector: bindToFormSelector,\r\n idTheme: idTheme && Number(idTheme),\r\n fields: JSON.parse(fields),\r\n layoutSettings: JSON.parse(layoutSettings),\r\n parameters: JSON.parse(parameters)\r\n });\r\n }\r\n }\r\n};\r\n\r\n//for a quick load, we try right away (hopefully the script was referenced after the html)\r\nloadFromHtml();\r\n\r\n//we check again after load in case the user had the script before the html was there\r\ndocument.addEventListener(\"DOMContentLoaded\", () => {\r\n loadFromHtml();\r\n});\r\n","var kbmax = embed;"]}