@colijnit/configurator 1.0.21 → 1.0.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/builder.d.ts +53 -0
- package/app/components/answers/answer/answer.component.d.ts +11 -0
- package/app/components/answers/answers.component.d.ts +8 -0
- package/app/components/answers/answers.module.d.ts +2 -0
- package/app/components/selections/selections.component.d.ts +22 -0
- package/app/components/selections/selections.module.d.ts +2 -0
- package/app/components/shared/loader/loader.component.d.ts +2 -0
- package/app/components/shared/shared.module.d.ts +2 -0
- package/app/directives/visibility-observer-master.directive.d.ts +9 -0
- package/app/directives/visibility-observer.directive.d.ts +13 -0
- package/app/services/configurator.service.d.ts +22 -0
- package/app/services/image-cache.service.d.ts +10 -0
- package/app/services/locator.service.d.ts +4 -0
- package/bundles/colijnit-configurator.umd.js +2745 -0
- package/bundles/colijnit-configurator.umd.js.map +1 -0
- package/bundles/colijnit-configurator.umd.min.js +17 -0
- package/bundles/colijnit-configurator.umd.min.js.map +1 -0
- package/colijnit-configurator.d.ts +10 -0
- package/colijnit-configurator.metadata.json +1 -0
- package/esm2015/app/builder.js +477 -0
- package/esm2015/app/components/answers/answer/answer.component.js +69 -0
- package/esm2015/app/components/answers/answers.component.js +43 -0
- package/esm2015/app/components/answers/answers.module.js +29 -0
- package/esm2015/app/components/selections/selections.component.js +134 -0
- package/esm2015/app/components/selections/selections.module.js +23 -0
- package/esm2015/app/components/shared/loader/loader.component.js +24 -0
- package/esm2015/app/components/shared/shared.module.js +21 -0
- package/esm2015/app/directives/visibility-observer-master.directive.js +51 -0
- package/esm2015/app/directives/visibility-observer.directive.js +57 -0
- package/esm2015/app/services/configurator.service.js +94 -0
- package/esm2015/app/services/image-cache.service.js +66 -0
- package/esm2015/app/services/locator.service.js +10 -0
- package/esm2015/colijnit-configurator.js +11 -0
- package/esm2015/helper/variation-helper.js +216 -0
- package/esm2015/model/material.js +11 -0
- package/esm2015/model/variation-settings.js +6 -0
- package/esm2015/model/variation.js +3 -0
- package/esm2015/public_api.js +7 -0
- package/esm2015/utils/asset.utils.js +74 -0
- package/esm2015/utils/file.utils.js +139 -0
- package/esm2015/utils/image.utils.js +52 -0
- package/esm2015/utils/object.utils.js +49 -0
- package/esm2015/utils/scene-utils.js +94 -0
- package/esm2015/utils/threed.utils.js +222 -0
- package/esm2015/utils/variation-utils.js +224 -0
- package/esm5/app/builder.js +591 -0
- package/esm5/app/components/answers/answer/answer.component.js +64 -0
- package/esm5/app/components/answers/answers.component.js +27 -0
- package/esm5/app/components/answers/answers.module.js +32 -0
- package/esm5/app/components/selections/selections.component.js +104 -0
- package/esm5/app/components/selections/selections.module.js +26 -0
- package/esm5/app/components/shared/loader/loader.component.js +16 -0
- package/esm5/app/components/shared/shared.module.js +24 -0
- package/esm5/app/directives/visibility-observer-master.directive.js +64 -0
- package/esm5/app/directives/visibility-observer.directive.js +59 -0
- package/esm5/app/services/configurator.service.js +160 -0
- package/esm5/app/services/image-cache.service.js +69 -0
- package/esm5/app/services/locator.service.js +13 -0
- package/esm5/colijnit-configurator.js +11 -0
- package/esm5/helper/variation-helper.js +268 -0
- package/esm5/model/material.js +13 -0
- package/esm5/model/variation-settings.js +8 -0
- package/esm5/model/variation.js +7 -0
- package/esm5/public_api.js +7 -0
- package/esm5/utils/asset.utils.js +106 -0
- package/esm5/utils/file.utils.js +151 -0
- package/esm5/utils/image.utils.js +56 -0
- package/esm5/utils/object.utils.js +56 -0
- package/esm5/utils/scene-utils.js +98 -0
- package/esm5/utils/threed.utils.js +279 -0
- package/esm5/utils/variation-utils.js +327 -0
- package/fesm2015/colijnit-configurator.js +2109 -0
- package/fesm2015/colijnit-configurator.js.map +1 -0
- package/fesm5/colijnit-configurator.js +2527 -0
- package/fesm5/colijnit-configurator.js.map +1 -0
- package/helper/variation-helper.d.ts +14 -0
- package/model/material.d.ts +17 -0
- package/model/variation-settings.d.ts +14 -0
- package/model/variation.d.ts +10 -0
- package/package.json +12 -45
- package/{src/public_api.ts → public_api.d.ts} +6 -6
- package/utils/asset.utils.d.ts +13 -0
- package/utils/file.utils.d.ts +27 -0
- package/utils/image.utils.d.ts +8 -0
- package/utils/object.utils.d.ts +7 -0
- package/utils/scene-utils.d.ts +7 -0
- package/utils/threed.utils.d.ts +16 -0
- package/utils/variation-utils.d.ts +12 -0
- package/.idea/Configurator.iml +0 -12
- package/.idea/codeStyles/Project.xml +0 -21
- package/.idea/codeStyles/codeStyleConfig.xml +0 -5
- package/.idea/inspectionProfiles/Project_Default.xml +0 -6
- package/.idea/misc.xml +0 -9
- package/.idea/modules.xml +0 -8
- package/.idea/vcs.xml +0 -6
- package/angular.json +0 -193
- package/configurator.iml +0 -11
- package/dist/configurator/index.html +0 -14
- package/dist/configurator/main-es2015.js +0 -3129
- package/dist/configurator/main-es2015.js.map +0 -1
- package/dist/configurator/main-es5.js +0 -5482
- package/dist/configurator/main-es5.js.map +0 -1
- package/dist/configurator/polyfills-es2015.js +0 -4520
- package/dist/configurator/polyfills-es2015.js.map +0 -1
- package/dist/configurator/polyfills-es5.js +0 -18375
- package/dist/configurator/polyfills-es5.js.map +0 -1
- package/dist/configurator/runtime-es2015.js +0 -155
- package/dist/configurator/runtime-es2015.js.map +0 -1
- package/dist/configurator/runtime-es5.js +0 -155
- package/dist/configurator/runtime-es5.js.map +0 -1
- package/dist/configurator/styles-es2015.js +0 -450
- package/dist/configurator/styles-es2015.js.map +0 -1
- package/dist/configurator/styles-es5.js +0 -432
- package/dist/configurator/styles-es5.js.map +0 -1
- package/dist/configurator/vendor-es2015.js +0 -155551
- package/dist/configurator/vendor-es2015.js.map +0 -1
- package/dist/configurator/vendor-es5.js +0 -183588
- package/dist/configurator/vendor-es5.js.map +0 -1
- package/ng-package.json +0 -9
- package/src/app/app.component.ts +0 -222
- package/src/app/app.module.ts +0 -34
- package/src/app/builder.ts +0 -480
- package/src/app/components/answers/answer/answer.component.ts +0 -61
- package/src/app/components/answers/answers.component.ts +0 -41
- package/src/app/components/answers/answers.module.ts +0 -26
- package/src/app/components/selections/selections.component.ts +0 -131
- package/src/app/components/selections/selections.module.ts +0 -20
- package/src/app/components/shared/loader/loader.component.scss +0 -33
- package/src/app/components/shared/loader/loader.component.ts +0 -20
- package/src/app/components/shared/shared.module.ts +0 -16
- package/src/app/directives/visibility-observer-master.directive.ts +0 -71
- package/src/app/directives/visibility-observer.directive.ts +0 -74
- package/src/app/services/configurator.service.ts +0 -86
- package/src/app/services/image-cache.service.ts +0 -56
- package/src/app/services/locator.service.ts +0 -6
- package/src/environments/environment.prod.ts +0 -3
- package/src/environments/environment.ts +0 -8
- package/src/helper/variation-helper.ts +0 -220
- package/src/index.html +0 -14
- package/src/main.ts +0 -11
- package/src/model/material.ts +0 -22
- package/src/model/variation-settings.ts +0 -14
- package/src/model/variation.ts +0 -11
- package/src/polyfills.ts +0 -73
- package/src/style/shared.scss +0 -173
- package/src/style/styles.scss +0 -45
- package/src/tsconfig.app.json +0 -16
- package/src/tsconfig.spec.json +0 -19
- package/src/utils/asset.utils.ts +0 -88
- package/src/utils/file.utils.ts +0 -156
- package/src/utils/file.utils.unit.test.ts +0 -8
- package/src/utils/image.utils.ts +0 -54
- package/src/utils/object.utils.ts +0 -52
- package/src/utils/scene-utils.ts +0 -119
- package/src/utils/threed.utils.ts +0 -219
- package/src/utils/variation-utils.ts +0 -216
- package/tsconfig.json +0 -23
- package/tslint.json +0 -132
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("three"),require("@colijnit/ioneconnector/build/model/options"),require("@colijnit/configuratorapi/build/model/deco-node"),require("@colijnit/ioneconnector/build/service/business-object-factory"),require("@colijnit/configuratorapi/build/model/selection"),require("@colijnit/configuratorapi/build/enum/deco-node-type.enum"),require("axios"),require("@colijnit/configuratorapi/build/enum/deco-node-kind.enum"),require("jszip"),require("@colijnit/configuratorapi/build/model/article"),require("@angular/core"),require("@colijnit/configuratorapi/build/configurator"),require("@colijnit/configuratorapi/build/utils/function/not-nill.function"),require("@colijnit/configuratorapi/build/enum/node-type.enum"),require("@colijnit/configuratorapi/build/utils/function/is-nill.function"),require("rxjs"),require("@angular/common"),require("@angular/animations")):"function"==typeof define&&define.amd?define("@colijnit/configurator",["exports","three","@colijnit/ioneconnector/build/model/options","@colijnit/configuratorapi/build/model/deco-node","@colijnit/ioneconnector/build/service/business-object-factory","@colijnit/configuratorapi/build/model/selection","@colijnit/configuratorapi/build/enum/deco-node-type.enum","axios","@colijnit/configuratorapi/build/enum/deco-node-kind.enum","jszip","@colijnit/configuratorapi/build/model/article","@angular/core","@colijnit/configuratorapi/build/configurator","@colijnit/configuratorapi/build/utils/function/not-nill.function","@colijnit/configuratorapi/build/enum/node-type.enum","@colijnit/configuratorapi/build/utils/function/is-nill.function","rxjs","@angular/common","@angular/animations"],t):t(((e=e||self).colijnit=e.colijnit||{},e.colijnit.configurator={}),e.three,e.options,e.decoNode,e.businessObjectFactory,e.selection,e.decoNodeType_enum,e.axios,e.decoNodeKind_enum,e.JSZip,e.article,e.ng.core,e.configurator,e.notNill_function,e.nodeType_enum,e.isNill_function,e.rxjs,e.ng.common,e.ng.animations)}(this,(function(e,t,n,i,r,o,a,s,c,l,u,d,p,h,f,g,m,b,w){"use strict";s=s&&Object.prototype.hasOwnProperty.call(s,"default")?s.default:s;
|
|
2
|
+
/*! *****************************************************************************
|
|
3
|
+
Copyright (c) Microsoft Corporation.
|
|
4
|
+
|
|
5
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
6
|
+
purpose with or without fee is hereby granted.
|
|
7
|
+
|
|
8
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
9
|
+
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
10
|
+
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
11
|
+
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
12
|
+
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
13
|
+
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
14
|
+
PERFORMANCE OF THIS SOFTWARE.
|
|
15
|
+
***************************************************************************** */
|
|
16
|
+
var v=function(e,t){return(v=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};function x(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a}function y(e,t,n,i){return new(n||(n=Promise))((function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((i=i.apply(e,t||[])).next())}))}function _(e,t){var n,i,r,o,a={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,i&&(r=2&o[0]?i.return:o[0]?i.throw||((r=i.return)&&r.call(i),0):i.next)&&!(r=r.call(i,o[1])).done)return r;switch(i=0,r&&(o=[2&o[0],r.value]),o[0]){case 0:case 1:r=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,i=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(r=a.trys,(r=r.length>0&&r[r.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!r||o[1]>r[0]&&o[1]<r[3])){a.label=o[1];break}if(6===o[0]&&a.label<r[1]){a.label=r[1],r=o;break}if(r&&a.label<r[2]){a.label=r[2],a.ops.push(o);break}r[2]&&a.ops.pop(),a.trys.pop();continue}o=t.call(e,a)}catch(e){o=[6,e],i=0}finally{n=r=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,s])}}}function j(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],i=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&i>=e.length&&(e=void 0),{value:e&&e[i++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}var C=function(){function e(){}return e.DisposeMaterial=function(e){var t=this;e&&(Array.isArray(e)?e.forEach((function(e){t.materialProps.filter((function(t){return e[t]})).forEach((function(t){return e[t].dispose()})),e.dispose()})):(this.materialProps.filter((function(t){return e[t]&&e[t].dispose})).forEach((function(t){return e[t].dispose()})),e.dispose&&e.dispose()))},e.DisposeObject=function(e){var t=this;e&&(e.children.length&&e.children.forEach((function(e){return t.DisposeObject(e)})),this.DisposeNode(e))},e.DisposeNode=function(e){var n=this;e.traverse((function(e){e instanceof t.Mesh&&(e.geometry&&e.geometry.dispose(),n.DisposeMaterial(e.material)),"function"==typeof e.dispose&&e.dispose()}))},e.materialProps=["map","lightMap","bumpMap","normalMap","specularMap","envMap","aoMap","roughnessMap","metalnessMap"],e}(),F=function(){function e(){}return e.StripMimeStringFromDataUri=function(e){if(!e)return"";var t=this.GetMimeStringFromDataUri(e);return e.substr(t.length+1)},e.GetMimeStringFromDataUri=function(e){return e?e.split(",")[0]:""},e.FileExists=function(e,t){return y(this,void 0,void 0,(function(){return _(this,(function(n){switch(n.label){case 0:return[4,s({method:"get",url:t+"getFiles.php?assetUrl="+e,responseType:"json"})];case 1:return[2,!!n.sent().data]}}))}))},e.FixUrl=function(t){if(!t)return"";var n=t;return n.endsWith("glb")||n.endsWith("obj")||n.endsWith("glb.gz")||n.endsWith("obj.gz")||(n=e.FixUnityUrl(n)),n=n.replace("/content/","/content43/")},e.FixGlbUrl=function(e){if(!e)return"";var t=e;return-1===e.indexOf("_webplayer")&&(t=e.concat("_webplayer")),(t=t.replace("/content/","/content43/")).endsWith(".glb")||(t=t.concat(".glb")),t},e.MimeTypeFromFilename=function(e){switch(/(?:\.([^.]+))?$/.exec(e)[1]){case"jpg":case"jpeg":return"image/jpeg";case"png":return"image/png";case"bmp":return"image/bmp"}},e.DownloadFile=function(e,t,n){void 0===n&&(n="text/plain");var i=document.createElement("a");i.setAttribute("href","data:"+n+";charset=utf-8,"+encodeURIComponent(t)),i.setAttribute("download",e),i.style.display="none",document.body.appendChild(i),i.click(),document.body.removeChild(i)},e.ReadAsText=function(e){return new Promise((function(t){var n=new FileReader;n.readAsText(e),n.onloadend=function(e){2===e.target.readyState&&t(e.target.result)}}))},e.GetExtensionFromDataUri=function(e){return e.replace(/(data:image\/)(.*?)(;base64.*)/gi,"$2")},e.CreateDownloadFileNameFromBase64=function(e){return"preview."+this.GetExtensionFromDataUri(e)},e.DownloadFromDataUri=function(e,t){var n=document.createElement("a");n.download=t,n.href=e,document.body.appendChild(n),n.click(),document.body.removeChild(n)},e.DocumentBodyToDataUri=function(e,t){return e?"data:"+t+";base64,"+e:""},e.FixUnityUrl=function(e){return(e=-1===e.indexOf("_webplayer")?e.concat("_webplayer.ione3d"):e.replace("_webplayer","_webplayer.ione3d")).endsWith(".gz")||(e=e.concat(".gz")),e.replace(".unity3d","")},e._cachedTextureUploads=new Map,e}(),O=function(){function e(){this._objectCache=new Map}return e.prototype.clearCache=function(){Array.from(this._objectCache.values()).forEach((function(e){return C.DisposeObject(e)})),this._objectCache.clear()},e.prototype.download3DSource=function(e){var t=this;return new Promise((function(n,i){return y(t,void 0,void 0,(function(){var t,r=this;return _(this,(function(o){switch(o.label){case 0:return e=e.replace(".unity3d",""),t=e+(e.indexOf(".glb")<0?".glb":""),this._objectCache.has(t)?(n(this._objectCache.get(t)),[2]):[4,F.FileExists(t,"https://cdn1.colijn-it.nl/content43/")];case 1:return o.sent()?this.loadGlbSource(t).then((function(e){r._objectCache.set(t,e),n(e)})):i("GLB source not found! ("+t+")"),[2]}}))}))}))},e.prototype.readFileAsText=function(e){var t=new FileReader;return new Promise((function(n,i){t.onload=function(e){return n(e.target.result)},t.onerror=function(e){return i(e)},t.readAsText(e)}))},e.prototype.loadJsonModel=function(e){return y(this,void 0,void 0,(function(){var n,i,r=this;return _(this,(function(o){switch(o.label){case 0:return this._objectCache.has(e)?[2,Promise.resolve(this._objectCache.get(e))]:[4,this._readJsonFile(e)];case 1:return n=o.sent(),(i=new t.ObjectLoader).crossOrigin="Anonymous",[2,new Promise((function(t,o){try{var a=i.parse(n);r._objectCache.set(e,a),t(a)}catch(e){o(null)}}))]}}))}))},e.prototype.loadJsonObjectModel=function(e){return y(this,void 0,void 0,(function(){var n,i=this;return _(this,(function(r){return this._objectCache.has(e)?[2,Promise.resolve(this._objectCache.get(e))]:((n=new t.ObjectLoader).setCrossOrigin("Anonymous"),n.setResourcePath(""),[2,new Promise((function(t,r){n.load(e,(function(n){var r="Scene"===n.type&&"Object3D"===n.children[0].type?n.children[0]:n;i._objectCache.set(e,r),t(r)}),(function(e){return null}),(function(e){return r(e)}))}))])}))}))},e.prototype.loadGlbModel=function(e,t){return void 0===t&&(t=!0),y(this,void 0,void 0,(function(){var n;return _(this,(function(i){switch(i.label){case 0:return this._objectCache.has(e)?[2,Promise.resolve(this._objectCache.get(e))]:window.hasOwnProperty("loadGLTF")?[4,window.loadGLTF(e)]:(console.error("loadGLTF not defined in window global"),[2,null]);case 1:return(n=i.sent())?(this._cleanedUpObjects(n,t),this._objectCache.set(e,n),[2,n]):[2,null]}}))}))},e.prototype.loadGlbSource=function(e){return y(this,void 0,void 0,(function(){var n,i;return _(this,(function(r){switch(r.label){case 0:return[4,this.loadGlbModel(e,!1)];case 1:return(n=r.sent())&&(n.children=n.children.filter((function(e){return!(e instanceof t.Camera)})),n.children.sort((function(e,t){return e.name<t.name?1:-1})),n.children.forEach((function(e){e.traverse((function(e){e.visible=!e.name.toLowerCase().startsWith("c_")})),e.visible=!1})),1===n.children.length&&n.children[0]instanceof t.Group&&(i=n.children[0].children.slice(),n.children.length=0,n.children=i)),[2,n]}}))}))},e.prototype.textureFromUrl=function(e){return y(this,void 0,void 0,(function(){return _(this,(function(n){return[2,new Promise((function(n,i){(new t.TextureLoader).load(e,(function(e){return e.wrapT=t.RepeatWrapping,e.wrapS=t.RepeatWrapping,e.repeat.set(1,1),e.needsUpdate=!0,n(e)}),null,i)}))]}))}))},e.prototype._cleanedUpObjects=function(e,n){var i=this;void 0===n&&(n=!0);var r=new t.Object3D;e.children.forEach((function(e){e instanceof t.Camera||(n&&e instanceof t.Group||1===e.children.length&&e.children[0]instanceof t.Group?i._addGroupChildrenToObject(e,r):n&&!(e instanceof t.Mesh)||!(e instanceof t.Mesh)&&!e.name&&e.children.length>0?(e.children.forEach((function(t){t.translateY(e.position.y)})),e.translateY(-e.position.y),r.children.length>0?r.add(e.clone()):r=e.clone()):r.add(e.clone()))}));var o=(new t.Box3).setFromObject(r),a=new t.Vector3;o.getCenter(a);var s=(new t.Vector3).add(a).negate();return r.children.forEach((function(e){e.position.add(s)})),r},e.prototype._addGroupChildrenToObject=function(e,n,i){var r=this;void 0===i&&(i=!0),e.children.forEach((function(o){i&&o instanceof t.Group?r._addGroupChildrenToObject(o,n):(o.translateY(e.position.y),n.add(o.clone()))}))},e.prototype._iterateChildren=function(e,n){for(var i=0;i<e.length;i++){var r=e[i];r instanceof t.Mesh?n(r):this._iterateChildren(r.children,n)}},e.prototype._readJsonFile=function(e){return y(this,void 0,void 0,(function(){var t,n;return _(this,(function(i){switch(i.label){case 0:return i.trys.push([0,5,,6]),[4,fetch(e)];case 1:return(t=i.sent()).ok?[3,2]:[2,""];case 2:return n=!1,[4,t.clone().text().then((function(e){""===e&&(n=!0)}))];case 3:return i.sent(),[2,n?{}:t.json()];case 4:return[3,6];case 5:return i.sent(),[2,""];case 6:return[2]}}))}))},e}(),I=function(){function e(){}return e.TrySelectorConnection=function(e,t,n,i,r){var o;r&&(i=r(o=i));for(var a=0;a<n.children.length;a++)for(var s=0;s<i.children.length;s++){var c=n.children[a],l=i.children[s];if(!c.connected&&!l.connected&&this.CanSelectorConnect(c,l)){if(!o)return this.SelectorConnect(e,t,c,l);var u=r(o,i,n);this.SelectorConnect(e,t,c,u.children[s])}}return!1},e.Convert3DPointToScreenPoint=function(e,n,i,r){if(!e)return new t.Vector2;var o=e.clone().project(n);return o.x=(o.x+1)/2*i,o.y=-(o.y-1)/2*r,new t.Vector2(o.x,o.y)},e.CanSelectorConnect=function(e,n){var i=e instanceof t.Object3D?e.name:e.connector,r=n instanceof t.Object3D?n.name:n.connector,o=e instanceof t.Object3D&&n instanceof t.Object3D&&e.parent===n.parent,a=i.toUpperCase().split("_"),s=r.toUpperCase().split("_");return a.length>=3&&s.length>=3&&!o&&("C"===a[0]&&"C"===s[0]&&a[1]===s[1]&&a[2]!==s[2])},e.SelectorConnect=function(e,n,i,r){if(!e||!n)return!1;i.connectedTo=r.parent.name,r.connectedTo=i.parent.name;var o=new t.Euler(0,0,0),a=new t.Vector3(0,0,0);e.updateMatrixWorld(!0),o.copy(n.rotation),n.getWorldPosition(a),n.rotation.set(0,0,0),n.position.set(0,0,0);var s=new t.Quaternion;i.getWorldQuaternion(s);var c=new t.Quaternion;r.getWorldQuaternion(c);var l=new t.Quaternion;i.parent.getWorldQuaternion(l);var u=new t.Quaternion;r.parent.getWorldQuaternion(u);var d=(new t.Quaternion).multiplyQuaternions(s.invert(),c).multiply((new t.Quaternion).multiplyQuaternions(l,l));r.parent.quaternion.copy(d),e.updateMatrixWorld(!0);var p=new t.Vector3;i.getWorldPosition(p);var h=new t.Vector3;r.getWorldPosition(h);var f=p.sub(h);return r.parent.position.x+=f.x,r.parent.position.y+=f.y,r.parent.position.z+=f.z,n.rotation.copy(o),n.position.copy(a),e.updateMatrixWorld(!0),i.connected=!0,r.connected=!0,!0},e}(),N=function(){this.specular=new t.Color(.3,.3,.3),this.shininess=0,this.repeatX=4,this.repeatY=4,this.loaded=!1},A=function(){function e(){}return e.CreateTextureFromBase64=function(n,i,r){return new Promise((function(o){e.textures.has(n)?o(e.textures.get(n)):i?(new t.TextureLoader).load(i,(function(i){i.anisotropy=16,i.wrapS=t.RepeatWrapping,i.wrapT=t.RepeatWrapping,i.repeat=new t.Vector2(r?r.repeatX:1,r?r.repeatY:1),i.needsUpdate=!0,e.textures.set(n,i),o(i)})):o(new t.Texture)}))},e.getDocBodyWithMimeTypeDefinition=function(e,t){if(null===t)return t;switch(e.substr(e.lastIndexOf(".")+1).toLowerCase()){case"jpg":case"jpeg":return"data:image/jpg;base64,"+t;case"png":return"data:image/png;base64,"+t;case"gif":return"data:image/gif;base64,"+t;case"bmp":return"data:image/bmp;base64,"+t;default:return"data:image/png;base64,"+t}},e.getFixedImageFilepathUrl=function(e){return e.replace("/content/","/content43/")},e.textures=new Map,e}(),M=(function(e){function t(){return null!==e&&e.apply(this,arguments)||this}(function(e,t){function n(){this.constructor=e}v(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)})(t,e)}(N),function(){function e(){}return e.CreateMaterialFromAsset=function(n){return y(this,void 0,void 0,(function(){var i,r,o,a,s,c;return _(this,(function(l){switch(l.label){case 0:return i=new N,n?(n.settings&&e.setSettingsOfMaterial(i,n.settings),n.texture?(r=i,[4,A.CreateTextureFromBase64(n.id+"_texture",n.texture,i)]):[3,2]):[2,i];case 1:r.texture=l.sent(),i.texture.encoding=t.sRGBEncoding,i.textureFilename=n.textureFilename,l.label=2;case 2:return n.normal?(o=i,[4,A.CreateTextureFromBase64(n.id+"_normal",n.normal,i)]):[3,4];case 3:o.normal=l.sent(),i.normalFilename=n.normalFilename,l.label=4;case 4:return n.ao?(a=i,[4,A.CreateTextureFromBase64(n.id+"_ao",n.ao,i)]):[3,6];case 5:a.ao=l.sent(),i.aoFilename=n.aoFilename,l.label=6;case 6:return n.metalness?(s=i,[4,A.CreateTextureFromBase64(n.id+"_metalness",n.metalness,i)]):[3,8];case 7:s.metalness=l.sent(),i.metalnessFilename=n.metalnessFilename,l.label=8;case 8:return n.roughness?(c=i,[4,A.CreateTextureFromBase64(n.id+"_roughness",n.roughness,i)]):[3,10];case 9:c.roughness=l.sent(),i.roughnessFilename=n.roughnessFilename,l.label=10;case 10:return[2,i]}}))}))},e.setSettingsOfMaterial=function(e,n){var i=parseFloat(n.power);isNaN(i)||(e.shininess=i);var r=parseFloat(n.level);isNaN(r)||(e.specular=new t.Color(r,r,r));var o=n.hasOwnProperty("repeat"),a=o?parseFloat(n.repeat.repeatx):parseFloat(n.repeatx);isNaN(a)||(e.repeatX=Math.max(1,a));var s=o?parseFloat(n.repeat.repeaty):parseFloat(n.repeaty);isNaN(s)||(e.repeatY=Math.max(1,s));var c=parseFloat(n.metalness);isNaN(c)||(e.metalnessValue=Math.min(1,c));var l=parseFloat(n.roughness);isNaN(l)||(e.roughnessValue=Math.min(1,l))},e}()),S=function(){},k=function(){this.settings={}},D=function(){function e(){}return e.LoadVariation=function(t,n){return y(this,void 0,void 0,(function(){var i,r,o;return _(this,(function(a){switch(a.label){case 0:if(!n)return[2,null];n.indexOf("ione3d")<0&&(n=n.concat(".ione3d")),i=n.substr(0,n.lastIndexOf(".ione3d")),a.label=1;case 1:return a.trys.push([1,4,,5]),t.endsWith("/")||(t+="/"),window.hasOwnProperty("downloadVariation")?[4,window.downloadVariation(t.replace("https://cdn1.colijn-it.nl/","")+"variation/"+n)]:(console.error("downloadVariation not defined in window global"),[2,null]);case 2:return r=a.sent(),[4,e.GetVariationSettingsFromFile(i,r)];case 3:return[2,a.sent()];case 4:return o=a.sent(),o,[2,null];case 5:return[2]}}))}))},e.GetVariationSettingsFromFile=function(t,n){return y(this,void 0,void 0,(function(){var i,r,o,a;return _(this,(function(s){switch(s.label){case 0:return n?[4,e.GetZipContent(n)]:[2,null];case 1:return i=s.sent(),(r=new k).id=t,i.files["index.json"]?[4,i.files["index.json"].async("string")]:[3,3];case 2:a=s.sent(),o=JSON.parse(a),s.label=3;case 3:return o?[4,e.CreateSettingsBasedOnIndex(o,r,i)]:[3,5];case 4:return s.sent(),[3,7];case 5:return[4,e.CreateSettingsBasedOnFileName(r,i)];case 6:s.sent(),s.label=7;case 7:return[2,r]}}))}))},e.CreateSettingsBasedOnIndex=function(t,n,i){return y(this,void 0,void 0,(function(){var r,o,a,s,c,l;return _(this,(function(u){switch(u.label){case 0:return t.normalFile?(r=n,[4,e.LoadFileContentFromZip(i.files[t.normalFile],t.normalFile)]):[3,2];case 1:r.normal=u.sent(),n.normalFilename=t.normalFile,u.label=2;case 2:return t.aoFile?(o=n,[4,e.LoadFileContentFromZip(i.files[t.aoFile],t.aoFile)]):[3,4];case 3:o.ao=u.sent(),n.aoFilename=t.aoFile,u.label=4;case 4:return t.metalnessFile?(a=n,[4,e.LoadFileContentFromZip(i.files[t.metalnessFile],t.metalnessFile)]):[3,6];case 5:a.metalness=u.sent(),n.metalnessFilename=t.metalnessFile,u.label=6;case 6:return t.roughnessFile?(s=n,[4,e.LoadFileContentFromZip(i.files[t.roughnessFile],t.roughnessFile)]):[3,8];case 7:s.roughness=u.sent(),n.roughnessFilename=t.roughnessFile,u.label=8;case 8:return t.diffuseFile?(c=n,[4,e.LoadFileContentFromZip(i.files[t.diffuseFile],t.diffuseFile)]):[3,10];case 9:c.texture=u.sent(),n.textureFilename=t.diffuseFile,u.label=10;case 10:return l=n,[4,e.LoadFileContentFromZip(i.files["repeat.json"],"repeat.json",!1)];case 11:return l.settings=u.sent()||{},Object.assign(n.settings,t.repeat),n.settings.metalness=t.metalness,n.settings.roughness=t.roughness,[2]}}))}))},e.CreateSettingsBasedOnFileName=function(e,t){return y(this,void 0,void 0,(function(){var n,i,r,o,a,s,c,l=this;return _(this,(function(u){switch(u.label){case 0:for(a in n=[],i=function(i){var o;return _(this,(function(a){switch(a.label){case 0:return t.files[i]?[4,t.files[i]]:[3,2];case 1:(o=a.sent()).name.toLowerCase().indexOf("normal")>-1&&r.FileIsImage(o.name)?n.push(t.files[i].async("base64").then((function(t){e.normal="data:image/"+l.GetBase64FileType(o.name)+";base64,"+t,e.normalFilename=i}))):o.name.toLowerCase().indexOf("ao")>-1&&r.FileIsImage(o.name)?n.push(t.files[i].async("base64").then((function(t){e.ao="data:image/"+l.GetBase64FileType(o.name)+";base64,"+t,e.aoFilename=i}))):o.name.toLowerCase().indexOf("metalness")>-1&&r.FileIsImage(o.name)?n.push(t.files[i].async("base64").then((function(t){e.metalness="data:image/"+l.GetBase64FileType(o.name)+";base64,"+t,e.metalnessFilename=i}))):o.name.toLowerCase().indexOf("roughness")>-1&&r.FileIsImage(o.name)?n.push(t.files[i].async("base64").then((function(t){e.roughness="data:image/"+l.GetBase64FileType(o.name)+";base64,"+t,e.roughnessFilename=i}))):o.name.toLowerCase().indexOf("diffuse")>-1&&r.FileIsImage(o.name)?n.push(t.files[i].async("base64").then((function(t){e.texture="data:image/"+l.GetBase64FileType(o.name)+";base64,"+t,e.textureFilename=i}))):o.name.indexOf(".jp")>-1?n.push(t.files[i].async("base64").then((function(t){e.texture="data:image/jpeg;base64,"+t,e.textureFilename=i}))):o.name.indexOf(".json")>-1&&n.push(t.files[i].async("string").then((function(t){var n=JSON.parse(t);for(var i in n)n[i]&&(e.settings[i]=n[i])}))),a.label=2;case 2:return[2]}}))},r=this,o=[],t.files)o.push(a);s=0,u.label=1;case 1:return s<o.length?(c=o[s],[5,i(c)]):[3,4];case 2:u.sent(),u.label=3;case 3:return s++,[3,1];case 4:return[4,Promise.all(n)];case 5:return u.sent(),[2]}}))}))},e.LoadFileContentFromZip=function(e,t,n){var i=this;return void 0===n&&(n=!0),new Promise((function(r){e&&t?e.async(n?"base64":"string").then((function(e){r(n?"data:image/"+i.GetBase64FileType(t)+";base64,"+e:e)})):r(void 0)}))},e.FileIsImage=function(e){switch(e.substring(e.lastIndexOf(".")+1,e.length).toLowerCase()){case"jpg":case"jpeg":case"png":case"bmp":return!0;default:return!1}},e.GetBase64FileType=function(e){switch(e.substring(e.lastIndexOf(".")+1,e.length).toLowerCase()){case"jpg":case"jpeg":return"jpeg";case"png":return"png";case"bmp":return"bmp";default:return"jpeg"}},e.GetZipContent=function(e){return y(this,void 0,void 0,(function(){return _(this,(function(t){switch(t.label){case 0:return[4,(new l).loadAsync(e)];case 1:return[2,t.sent()]}}))}))},e.MaterialCache=new Map,e}(),P=function(){function e(){this._lastKnownVariations=new Map}return e.prototype.clearCache=function(){for(var e=Array.from(this._lastKnownVariations.values()),t=0;t<e.length;t++){Array.from(e[t].values()).forEach((function(e){e.forEach((function(e){e.material.texture.dispose(),e.material.normal.dispose(),e.material.metalness.dispose(),e.material.roughness.dispose(),e.material.ao.dispose()}))}))}},e.prototype.loadPart=function(e,t,n){return void 0===n&&(n=!1),y(this,void 0,void 0,(function(){var i,r,o,s,c,l;return _(this,(function(u){switch(u.label){case 0:u.trys.push([0,6,,7]),i=t.length,r=0,u.label=1;case 1:return r<i?t[r].decoNode&&t[r].decoNode.gameObjectName&&t[r].decoNode.type===a.DecoNodeType.Part?[4,D.LoadVariation(this.assetPath,t[r].decoNode.gameObjectName||t[r].decoId)]:[3,4]:[3,5];case 2:return(o=u.sent())?((s=new S).decoId=parseFloat(t[r].decoNode.id),s.brandId=t[r].decoNode.brandId,s.gameObjectName=t[r].decoNode.gameObjectName,c=s,[4,M.CreateMaterialFromAsset(o)]):[3,4];case 3:c.material=u.sent(),this._applyMaterialPart(e,s,t[r].node,n),u.label=4;case 4:return r++,[3,1];case 5:return[3,7];case 6:return l=u.sent(),console.error(l),[3,7];case 7:return[2]}}))}))},e.prototype.loadVariation=function(e,t,n,i){return void 0===i&&(i=!1),y(this,void 0,void 0,(function(){var r,o,a,s,c,l,u,d,p;return _(this,(function(h){switch(h.label){case 0:h.trys.push([0,9,,10]),r=n.length,o=0,h.label=1;case 1:if(!(o<r))return[3,8];if(!(a=n[o].variations)||0===a.length)return this._getLastKnownVariations(e,n[o].nodeId)?(n[o].variations=this._getLastKnownVariations(e,n[o].nodeId),this._applyVariations(t,n[o],i),[3,7]):[3,7];s=[],c=0,h.label=2;case 2:return c<a.length?[4,D.LoadVariation(this.assetPath,a[c].gameObjectName||n[o].decoId)]:[3,6];case 3:return l=h.sent(),(u=new S).decoId=parseFloat(a[c].id),u.brandId=a[c].brandId,u.gameObjectName=a[c].gameObjectName,u.supplierArticleNr=a[c].supplierArticleNr,u.materialId=a[c].materialId,d=u,[4,M.CreateMaterialFromAsset(l)];case 4:d.material=h.sent(),s.push(u),h.label=5;case 5:return c++,[3,2];case 6:this._setLastKnownVariations(e,n[o].nodeId,s),n[o].variations=s,this._applyVariations(t,n[o],i),h.label=7;case 7:return o++,[3,1];case 8:return[3,10];case 9:return p=h.sent(),console.error(p),[3,10];case 10:return[2]}}))}))},e.prototype._getChildrenFilterByProp=function(e,t,n,i){return e.children.filter((function(e){return e.userData&&e.userData.hasOwnProperty(t)&&e.userData[t].hasOwnProperty(n)&&e.userData[t][n]===i}))},e.prototype._applyMaterialPart=function(e,n,i,r){var o=this;void 0===r&&(r=!1);for(var a=this._getChildrenFilterByProp(e,"selection","node",i),s=a.length,c=0;c<s;c++){var l=a[c];null!=l&&l.traverse((function(e){if(e instanceof t.Mesh&&n)if(Array.isArray(e.material))for(var i=0,a=e.material.length;i<a;i++)-1!==e.material[i].name.toLowerCase().indexOf("fixed_frame")&&(e.material[i]=o._setMeshMaterialFromVariation(e.material[i].name,n,r));else-1!==e.material.name.toLowerCase().indexOf("fixed_frame")&&(e.material=o._setMeshMaterialFromVariation(e.material.name,n,r))}))}},e.prototype._applyVariations=function(e,n,i){var r=this;void 0===i&&(i=!1);for(var o=this._getChildrenFilterByProp(e,"selection","node",n.node),a=o.length,s=0;s<a;s++){var c=o[s];null!=c&&c.traverse((function(e){if(e instanceof t.Mesh&&n.variations&&n.variations.length>0&&e.name.toLowerCase().indexOf("c_"))for(var o=0;o<n.variations.length;o++){var a=n.variations[o];if(a.material){var s=a.materialId?a.materialId.toLowerCase():"default";if(Array.isArray(e.material))for(var c=0,l=e.material.length;c<l;c++)-1!==e.material[c].name.toLowerCase().indexOf(s)&&(e.material[c]=r._setMeshMaterialFromVariation(e.material[c].name,a,i));else-1!==e.material.name.toLowerCase().indexOf(s)&&(e.material=r._setMeshMaterialFromVariation(e.material.name,a,i))}}}))}},e.prototype._setMeshMaterialFromVariation=function(e,n,i){if(void 0===i&&(i=!1),n.material.texture&&(n.material.texture.needsUpdate=!0),i){var r={name:e,roughness:n.material.roughnessValue?n.material.roughnessValue:1,metalness:n.material.metalnessValue?n.material.metalnessValue:0};return n.material.texture&&(r.map=n.material.texture),n.material.ao&&(r.aoMap=n.material.ao),n.material.roughness&&(r.roughnessMap=n.material.roughness),n.material.metalness&&(r.metalnessMap=n.material.metalness),n.material.normal&&(r.normalMap=n.material.normal),(o=new t.MeshStandardMaterial(r)).color.setRGB(1,1,1),o.needsUpdate=!0,o}var o;return(o=new t.MeshPhongMaterial({name:e,shininess:n.material.shininess,specular:n.material.specular,map:n.material.texture,normalMap:n.material.normal})).needsUpdate=!0,o},e.prototype._setLastKnownVariations=function(e,t,n){if(this._lastKnownVariations.has(e)){(i=this._lastKnownVariations.get(e)).set(t,n)}else{var i=new Map;this._lastKnownVariations.set(e,i.set(t,n))}},e.prototype._getLastKnownVariations=function(e,t){if(this._lastKnownVariations.has(e)){var n=this._lastKnownVariations.get(e);if(n.has(t))return n.get(t)}return null},e}(),T=function(){function e(){}return e.injector=void 0,e=x([d.Injectable()],e)}(),V=function(){function e(e){this._injector=e,T.injector||(T.injector=e)}return e.prototype.initApi=function(e){this._configuratorApi=new p.Configurator(e)},e.prototype.initNodeInstance=function(e){return y(this,void 0,void 0,(function(){return _(this,(function(t){switch(t.label){case 0:return[4,this._configuratorApi.initNodeInstance(e)];case 1:return[2,t.sent()]}}))}))},e.prototype.setInstanceToConfigure=function(e,t){return void 0===t&&(t=!1),y(this,void 0,void 0,(function(){return _(this,(function(n){switch(n.label){case 0:return[4,this._configuratorApi.setInstanceToConfigure(e,t)];case 1:return[2,n.sent()]}}))}))},e.prototype.getGoodIdFromSku=function(e,t){return void 0===t&&(t=!1),y(this,void 0,void 0,(function(){return _(this,(function(n){switch(n.label){case 0:return[4,this._configuratorApi.getGoodIdFromSku(e,t)];case 1:return[2,n.sent()]}}))}))},e.prototype.getArticleQuickSel=function(e,t){return void 0===t&&(t=!1),y(this,void 0,void 0,(function(){return _(this,(function(n){switch(n.label){case 0:return[4,this._configuratorApi.getArticleQuickSel(e,t)];case 1:return[2,n.sent()]}}))}))},e.prototype.getSelections=function(e,t){return void 0===e&&(e=!1),void 0===t&&(t=2),y(this,void 0,void 0,(function(){var n;return _(this,(function(i){switch(i.label){case 0:return[4,this._configuratorApi.getSelections(e)];case 1:return(n=i.sent()).resultObjects.filter((function(e){(g.isNill(e.hierarchicalPublicationCode)||(e.hierarchicalPublicationCode&t)>0)&&(e.nodeType===f.NodeType.Question&&((e.questionPublicationCode&t)>0||g.isNill(e.questionPublicationCode))||e.nodeType===f.NodeType.Answer&&((e.answerPublicationCode&t)>0||g.isNill(e.answerPublicationCode)))})),[2,n]}}))}))},e.prototype.getDecos=function(e){return void 0===e&&(e=!1),y(this,void 0,void 0,(function(){return _(this,(function(t){switch(t.label){case 0:return[4,this._configuratorApi.getDecos(e)];case 1:return[2,t.sent()]}}))}))},e.prototype.getQuestionAndAnswers=function(e,t){return void 0===e&&(e=!1),void 0===t&&(t=2),y(this,void 0,void 0,(function(){var n;return _(this,(function(i){switch(i.label){case 0:return[4,this._configuratorApi.getQuestionAndAnswers(e)];case 1:return(n=i.sent()).answers.filter((function(e){h.notNill(e.hierarchicalPublicationCode)&&0==(e.hierarchicalPublicationCode&t)||e.type===f.NodeType.Question&&0==(e.questionPublicationCode&t)&&h.notNill(e.questionPublicationCode)||e.type===f.NodeType.Answer&&0==(e.publicationCode&t)&&h.notNill(e.publicationCode)})),[2,n]}}))}))},e.prototype.getSingleImage=function(e,t,n,i,r){return y(this,void 0,void 0,(function(){return _(this,(function(o){switch(o.label){case 0:return e?[4,this._configuratorApi.getSingleImage(e,t,n,i,r)]:[2,null];case 1:return[2,o.sent()]}}))}))},e.prototype.selectSelection=function(e,t){return void 0===t&&(t=!1),y(this,void 0,void 0,(function(){return _(this,(function(n){switch(n.label){case 0:return[4,this._configuratorApi.selectSelection(e,t)];case 1:return[2,n.sent()]}}))}))},e.prototype.selectAnswer=function(e,t){return void 0===t&&(t=!1),y(this,void 0,void 0,(function(){return _(this,(function(n){switch(n.label){case 0:return[4,this._configuratorApi.selectAnswer(e,t)];case 1:return[2,n.sent()]}}))}))},e.ctorParameters=function(){return[{type:d.Injector}]},e.ɵprov=d.ɵɵdefineInjectable({factory:function(){return new e(d.ɵɵinject(d.INJECTOR))},token:e,providedIn:"root"}),e=x([d.Injectable({providedIn:"root"})],e)}(),B=function(){function e(e,t,n){if(this.selectionsReceived=new m.BehaviorSubject([]),this.answersReceived=new m.BehaviorSubject([]),this.modelLoaded=new m.BehaviorSubject(null),this._selections=[],this._answers=[],this._decos=[],this._placedAdjustables=[],this._placedAddables=[],this._adjustables=[],this._addables=[],this._articleCache=new Map,this._boFactory=new r.BusinessObjectFactory,this._threedUtils=new O,this._variationHelper=new P,!e)throw"No scene object provided!";if(!t)throw"No connection options provided!";this._configuratorService=n?T.injector.get(V):new V(void 0),this._configuratorService.initApi(t),this._scene=e}return e.prototype.buildModel=function(e,t,n){return y(this,void 0,void 0,(function(){var i;return _(this,(function(r){switch(r.label){case 0:if(!this._scene)return[2];r.label=1;case 1:return r.trys.push([1,8,,9]),[4,this._setInstanceId(e,t,n)];case 2:return r.sent(),[4,this._prepareConfiguration(this._sku,this._goodId)];case 3:return r.sent(),this._source?[4,this._configuratorService.setInstanceToConfigure(this._instanceId)]:[3,6];case 4:return r.sent(),(i=[]).push(this.getQuestionAndAnswers()),i.push(this._getSelections(this._instanceId)),i.push(this._getDecos()),[4,Promise.all(i)];case 5:return r.sent(),this._answers.length>0?[2]:(this._linkSelectionsAndDecos(),[2,this._build(this._instanceId)]);case 6:throw"GLB source not found!";case 7:return[3,9];case 8:throw r.sent();case 9:return[2]}}))}))},e.prototype.initNodeInstance=function(e){return this._configuratorService.initNodeInstance(e)},e.prototype.destroy=function(){this._threedUtils.clearCache(),this._variationHelper.clearCache()},e.prototype.selectSelection=function(e){return y(this,void 0,void 0,(function(){return _(this,(function(t){switch(t.label){case 0:return[4,this._configuratorService.selectSelection(e,!1)];case 1:return t.sent(),this.getQuestionAndAnswers(),[2]}}))}))},e.prototype.getQuestionAndAnswers=function(e){return y(this,void 0,void 0,(function(){var t;return _(this,(function(n){switch(n.label){case 0:return[4,this._configuratorService.getQuestionAndAnswers(!1,e)];case 1:return t=n.sent(),this._answers=t.answers,this.answersReceived.next(t.answers),[2]}}))}))},e.prototype.selectAnswer=function(e){return y(this,void 0,void 0,(function(){var t,n;return _(this,(function(i){switch(i.label){case 0:return[4,this._configuratorService.selectAnswer(e,!1)];case 1:return i.sent(),n=(t=this.modelLoaded).next,[4,this.buildModel()];case 2:return n.apply(t,[i.sent()]),[2]}}))}))},e.prototype._setInstanceId=function(e,t,n){return y(this,void 0,void 0,(function(){var i;return _(this,(function(r){switch(r.label){case 0:return t||this._instanceId?[3,4]:n?[3,2]:[4,this._getGoodIdFromSku(e)];case 1:n=r.sent(),r.label=2;case 2:return this._goodId=n,[4,this.initNodeInstance(this._goodId)];case 3:if(!(i=r.sent())||!i.resultObject)throw"Failed to initialize node instance";return this._instanceId=i.resultObject,[3,5];case 4:this._instanceId||(this._instanceId=t),r.label=5;case 5:return this._sku||(this._sku=e),[2]}}))}))},e.prototype._prepareConfiguration=function(e,t){return y(this,void 0,void 0,(function(){var n,i;return _(this,(function(r){switch(r.label){case 0:return[4,this._getArticle(e,t)];case 1:return(n=r.sent())&&n.assetUrl?(i=this,[4,this._threedUtils.download3DSource(n.assetUrl).catch((function(e){throw e}))]):[3,3];case 2:i._source=r.sent(),n.contentDeliveryUrl&&(this._variationHelper.assetPath=n.contentDeliveryUrl+(n.contentDeliveryUrl.endsWith("/")?"":"/")+(n.distSchema?n.distSchema:"UP_DBA")),r.label=3;case 3:return[2]}}))}))},e.prototype._build=function(e){return y(this,void 0,void 0,(function(){var n,i,r,o,a,s,c,l;return _(this,(function(u){switch(u.label){case 0:if(this._reset(),!((n=this._getAdjustables())&&n.length>0))return[3,2];for((i=new t.Object3D).visible=!1,this._scene.add(i),r=!1,o=0,a=n.length;o<a;o++){if(s=this._createAdjustable(i,n[o]))for(c=0,l=this._placedAdjustables.length;c<l;c++){if(I.TrySelectorConnection(this._scene,i,this._placedAdjustables[c],s)){this._placedAdjustables[c].visible=!0,s.visible=!0,r=!0;break}r=!1}!r&&this._placedAdjustables.length>1&&console.warn("No connection found for: ",s.name)}return this._placeAddables(i),this._updatePivot(i),[4,this._loadVariations(i,e)];case 1:return u.sent(),this._scene.remove(i),[2,i];case 2:throw"No adjustables found!"}}))}))},e.prototype._prepareTheSelections=function(){for(var e,t,n,i=this,r=this._selections.filter((function(e){return e.generic&&e.decoNode.variation&&!e.decoNode.type})).map((function(e,t,n){var r=i._selections.find((function(t){return t.artNodeIdDeco===e.decoNode.variation.id}));return r&&(e.decoNode.variation.supplierArticleNr=r.supplierArticleNr),e.decoNode.variation.materialId=e.hdecoGameObject,e.decoNode.variation})),o=!0,s=this._selections.length,l=!1,u=-1,d=0;d<s;d++){var p=this._selections[d];1===p.presentationLevel&&(n=p.hdecoPositioning),p.presentationLevel>u&&(p.hdecoPositioning=p.hdecoPositioning||n),p.decoNode&&(p.decoNode.type===a.DecoNodeType.Variation?e?(l?e.variations=[p.decoNode]:e.variations.push(p.decoNode),l=!1):(o&&(r.length=0,o=!1),r.push(p.decoNode)):p.decoNode.type===a.DecoNodeType.Part&&"string"==typeof p.decoNode.gameObjectName&&p.decoNode.gameObjectName.length&&(p.decoNode.kind===c.DecoNodeKind.Adjustable?(p.variations=r,this._adjustables.push(p),e&&e.nodeId===p.nodeId||(l=!0),e=p,t=p):p.decoNode.kind===c.DecoNodeKind.Addable&&(p.variations=t?t.variations:r,t&&t.addables.push(p),this._addables.push(p),e&&e.nodeId===p.nodeId||(l=!0),e=p))),u=p.presentationLevel}},e.prototype._createAdjustable=function(e,t){var n=this._source?this._source.getObjectByName(t.decoNode.gameObjectName):null;if(!n){var i=t.decoNode.gameObjectName.replace(/[.]/g,"");if(!(n=this._source?this._source.getObjectByName(i):null))return null}var r=n.clone();return r.name=this._createUniqueName(e,n),r.userData.selection=t,r.position.set(0,0,0),r.visible=!0,e.add(r),this._placedAdjustables.push(r),r},e.prototype._createAddable=function(e,t,n,i){var r=this._source.getObjectByName(t.decoNode.gameObjectName);if(!r)return null;var o=r.clone();return o.name=this._createUniqueName(e,r),o.userData.selection=t,o.position.set(0,0,0),o.visible=!0,i&&n?(e.add(o),this._placedAddables.push(o),o):o},e.prototype._placeAddables=function(e){for(var t=this,n=this._placedAdjustables.length,i=0;i<n;i++)if(this._placedAdjustables[i].userData.hasOwnProperty("selection")&&this._placedAdjustables[i].userData.selection){var r=this._placedAdjustables[i].userData.selection;if(r)for(var o=r.addables.length,a=void 0,s=0;s<o;s++)I.TrySelectorConnection(this._scene,e,this._placedAdjustables[i],r.addables[s],(function(n,i,r){return t._createAddable(e,n,i,r)})),a&&I.TrySelectorConnection(this._scene,e,a,r.addables[s],(function(n,i,r){return t._createAddable(e,n,i,r)})),a=this._placedAddables[this._placedAddables.length-1]}},e.prototype._createUniqueName=function(e,t){for(var n=0,i=t.name,r=e.getObjectByName(i);r;)n++,i=t.name+(0!==n?"_"+n:""),r=e.getObjectByName(i);return i},e.prototype._getGoodIdFromSku=function(e){return y(this,void 0,void 0,(function(){var t;return _(this,(function(n){switch(n.label){case 0:return[4,this._configuratorService.getGoodIdFromSku(e,!1)];case 1:return(t=n.sent()).validationResult.success&&t.resultObject?[2,t.resultObject]:[2]}}))}))},e.prototype._getArticle=function(e,t){return y(this,void 0,void 0,(function(){var n,i,r;return _(this,(function(o){switch(o.label){case 0:return this._articleCache.has(e)?[2,this._articleCache.get(e)]:t?[3,2]:[4,this._getGoodIdFromSku(e).catch((function(t){throw"Article with sku "+e+" not found!"}))];case 1:t=o.sent(),o.label=2;case 2:return[4,this._configuratorService.getArticleQuickSel(t,!1)];case 3:return(i=o.sent()).validationResult.success&&i.resultObject&&(i.resultObject.hasOwnProperty("oArticle")?(r=Array.isArray(i.resultObject.oArticle)?i.resultObject.oArticle[0]:i.resultObject.oArticle,n=this._boFactory.makeWithRawBackendData(u.Article,r)):n=this._boFactory.makeWithRawBackendData(u.Article,i.resultObject)),this._articleCache.set(e,n),[2,n]}}))}))},e.prototype._getSelections=function(e,t){return y(this,void 0,void 0,(function(){var n;return _(this,(function(i){switch(i.label){case 0:return this._selections=[],[4,this._configuratorService.getSelections(!1,t)];case 1:if(!((n=i.sent()).resultObjects&&n.resultObjects.length>0))throw"No selections found!";return this._selections=this._boFactory.makeBOArrayFromRawBackendDataArray(o.Selection,n.resultObjects),this._selections.forEach((function(t){return t.instanceId=e})),this.selectionsReceived.next(this._selections),[2]}}))}))},e.prototype._getDecos=function(){return y(this,void 0,void 0,(function(){var e;return _(this,(function(t){switch(t.label){case 0:return this._decos=[],[4,this._configuratorService.getDecos(!1)];case 1:if(!((e=t.sent()).resultObjects&&e.resultObjects.length>0))throw"No deconodes found!";return this._decos=this._boFactory.makeBOArrayFromRawBackendDataArray(i.DecoNode,e.resultObjects),[2]}}))}))},e.prototype._linkSelectionsAndDecos=function(){for(var e=this,t=this._selections.length,n=function(t){var n=r._selections[t].artNodeIdDeco,o=r._decos.find((function(e){return e.id===n}));o||(o=new i.DecoNode);var a=r._getVariations().find((function(n){return n.parentId===e._selections[t].artNodeIdDeco}));a&&(o.variation=a),r._selections[t].decoNode=o},r=this,o=0;o<t;o++)n(o)},e.prototype._getVariations=function(){return this._decos.filter((function(e){return e.type===a.DecoNodeType.Variation}))},e.prototype._loadVariations=function(e,t){return y(this,void 0,void 0,(function(){return _(this,(function(n){switch(n.label){case 0:return[4,this._variationHelper.loadPart(e,this._adjustables,!0)];case 1:return n.sent(),[4,this._variationHelper.loadVariation(t,e,this._adjustables,!0)];case 2:return n.sent(),[4,this._variationHelper.loadVariation(t,e,this._addables,!0)];case 3:return n.sent(),[2]}}))}))},e.prototype._getAdjustables=function(){return this._selections.filter((function(e){var t=e.decoNode;return t&&t.gameObjectName&&t.type===a.DecoNodeType.Part&&t.kind===c.DecoNodeKind.Adjustable}))},e.prototype._updatePivot=function(e){var n=(new t.Box3).setFromObject(e),i=new t.Vector3;n.getCenter(i);var r=(new t.Vector3).sub(i).setY(Math.abs(Math.min(n.min.y,0)));e.children.forEach((function(e){e.position.add(r)})),e.updateWorldMatrix(!1,!0)},e.prototype._reset=function(){this._placedAddables.length=0,this._placedAdjustables.length=0,this._adjustables.length=0,this._addables.length=0,this._prepareTheSelections()},e.ctorParameters=function(){return[{type:t.Scene},{type:n.Options},{type:Boolean}]},e=x([d.Injectable()],e)}(),L=function(){function e(){this.answers=[],this.answerClick=new d.EventEmitter}return x([d.Input()],e.prototype,"answers",void 0),x([d.Input()],e.prototype,"selectionTitle",void 0),x([d.Output()],e.prototype,"answerClick",void 0),e=x([d.Component({selector:"answers",template:'\n <div class="ione-configurator">\n <div class="rp-answers-slideout">\n <h2 class="answers-title" [textContent]="selectionTitle"></h2>\n <div class="answers-container" visibilityObserverMaster>\n <answer *ngFor="let answer of answers"\n (click)="answerClick.emit(answer)"\n [answer]="answer"\n visibilityObserver\n #intersection="intersection"\n [observerEnabled]="true"\n [showing]="intersection.isIntersecting"\n ></answer>\n </div>\n \n </div>\n </div>\n ',styles:[".ione-configurator .rp-answers-slideout{position:absolute;top:0;right:0;width:400px;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content}.ione-configurator .answers-title{margin-left:10px;color:#1a1a1a}.ione-configurator .answers-container{height:100vh;overflow-y:scroll}.ione-configurator .answer-content{position:relative;overflow:hidden;cursor:pointer;font-size:12px;border:1px solid #d3d3d3;padding:10px;display:flex;flex-direction:row;border-radius:3px;margin-bottom:3px;box-shadow:2px 1px rgba(211,211,211,.5);background:#fff}.ione-configurator .thumbnail{width:54px;min-width:54px;height:54px;min-height:54px;border:1px solid #d3d3d3;border-radius:5px}.ione-configurator .img-size{width:54px;min-width:54px;height:54px;min-height:54px;border-radius:5px}.ione-configurator .answer-wrapper{display:block}.ione-configurator .answer-title{font-size:12px;position:relative;overflow:hidden;cursor:pointer}.ione-configurator .question{font-weight:700;color:#1a1a1a}.ione-configurator .answer{font-size:12px;font-style:italic;margin-top:3px}.ione-configurator .collapse-content,.ione-configurator .collapse-wrapper{display:block}.ione-configurator .collapse-handle{position:absolute;top:10px;right:12px;border:solid #000;border-width:0 3px 3px 0;display:inline-block;padding:3px;transform:rotate(45deg);-webkit-transform:rotate(45deg)}.ione-configurator .collapse-handle.expanded{transform:rotate(-135deg);-webkit-transform:rotate(-135deg)}.ione-configurator .child-selection{margin-left:10px;display:flex;flex-direction:column;margin-top:5px}.ione-configurator .mat-title{margin-left:10px;color:#1a1a1a}.ione-configurator .drawer__header{height:48px}.ione-configurator .rp-selections-summary{height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;background:0 0;overflow:auto;position:absolute;top:0;right:0;width:400px}.ione-configurator .selections-content{overflow-y:auto}.ione-configurator .co-summary-line{position:relative;overflow:hidden;cursor:pointer;font-size:12px;border:1px solid #d3d3d3;padding:10px;display:flex;flex-direction:row;border-radius:3px;margin-bottom:3px;box-shadow:2px 1px rgba(211,211,211,.5);background:#fff}.ione-configurator .selection-thumbnail{width:54px;min-width:54px;height:54px;min-height:54px;border:1px solid #d3d3d3;border-radius:5px}.ione-configurator .selection-img{width:54px;min-width:54px;height:54px;min-height:54px;border-radius:5px}.ione-configurator .answer-thumbnail{width:54px;min-width:54px;height:54px;min-height:54px;border:1px solid #d3d3d3;border-radius:5px}.ione-configurator .answer-img{width:54px;min-width:54px;height:54px;min-height:54px;border-radius:5px}.ione-configurator .unloaded{background-color:#d3d3d3}.ione-configurator .titles{margin-left:14px;-ms-grid-row-align:center;align-self:center}.ione-configurator .title-wrapper{display:flex;flex-direction:column}.ione-configurator .answer-title-wrapper{text-align:center;-ms-grid-row-align:center;align-self:center;margin-left:14px}"]})],e)}(),G=function(){function e(e){this._configuratorService=e,this._imageCache=new Map}var t;return t=e,e._handleResponseData=function(e,t,n){return n&&n.resultObject?null!==n.resultObject.filePath&&""!==n.resultObject.filePath?A.getFixedImageFilepathUrl(n.resultObject.filePath):e?A.getDocBodyWithMimeTypeDefinition(n.resultObject.fileName,t?n.resultObject.thumbnailBody:n.resultObject.documentBody):t?n.resultObject.thumbnailBody:n.resultObject.documentBody:""},e.prototype.getImageForSelectionOrAnswer=function(e){var n=this;return new Promise((function(i,r){if(e&&e.nodeId){if(!n._imageCache.has(e.nodeId))return n._configuratorService.getSingleImage(e.nodeId,4,!0,!0,!0).then((function(r){var o=t._handleResponseData(!0,!0,r);n._imageCache.set(e.nodeId,o),i(o)})).catch((function(){r()}));i(n._imageCache.get(e.nodeId))}else r()}))},e.ctorParameters=function(){return[{type:V}]},e.ɵprov=d.ɵɵdefineInjectable({factory:function(){return new e(d.ɵɵinject(V))},token:e,providedIn:"root"}),e=t=x([d.Injectable({providedIn:"root"})],e)}(),E=function(){function e(e){this._imageCacheService=e}return Object.defineProperty(e.prototype,"showing",{set:function(e){this.answer.imageData="",e&&"Skip / Cancel"!==this.answer.answer?this._loadThumbnail(this.answer):this.answer.imageData=null},enumerable:!0,configurable:!0}),e.prototype.ngOnInit=function(){},e.prototype._loadThumbnail=function(e){return y(this,void 0,void 0,(function(){return _(this,(function(t){switch(t.label){case 0:return[4,this._imageCacheService.getImageForSelectionOrAnswer(e).then((function(t){e.imageData=""===t?null:t}))];case 1:return t.sent(),[2]}}))}))},e.ctorParameters=function(){return[{type:G}]},x([d.Input()],e.prototype,"answer",void 0),x([d.Input()],e.prototype,"showing",null),e=x([d.Component({selector:"answer",template:'\n <div class="ione-configurator">\n <div class="answer-wrapper">\n <div class="answer-content" @answerAppear>\n <div class="answer-thumbnail">\n <rp-loader *ngIf="answer.imageData === \'\'"></rp-loader>\n <img *ngIf="answer.imageData !== \'\' && answer.imageData !== null" class="answer-img" [src]="answer.imageData">\n </div>\n <div class="answer-title-wrapper">\n <span class="answer-title" [textContent]="answer.commercialAnswer"></span>\n </div>\n <div class="price">\n <span class="price-value"></span>\n </div>\n </div>\n </div>\n </div>\n ',animations:[w.trigger("answerAppear",[w.state("void",w.style({background:"#dbdbdb"})),w.state("white",w.style({background:"white"})),w.transition("void <=> *",w.animate(500))])],styles:[".ione-configurator .rp-answers-slideout{position:absolute;top:0;right:0;width:400px;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content}.ione-configurator .answers-title{margin-left:10px;color:#1a1a1a}.ione-configurator .answers-container{height:100vh;overflow-y:scroll}.ione-configurator .answer-content{position:relative;overflow:hidden;cursor:pointer;font-size:12px;border:1px solid #d3d3d3;padding:10px;display:flex;flex-direction:row;border-radius:3px;margin-bottom:3px;box-shadow:2px 1px rgba(211,211,211,.5);background:#fff}.ione-configurator .thumbnail{width:54px;min-width:54px;height:54px;min-height:54px;border:1px solid #d3d3d3;border-radius:5px}.ione-configurator .img-size{width:54px;min-width:54px;height:54px;min-height:54px;border-radius:5px}.ione-configurator .answer-wrapper{display:block}.ione-configurator .answer-title{font-size:12px;position:relative;overflow:hidden;cursor:pointer}.ione-configurator .question{font-weight:700;color:#1a1a1a}.ione-configurator .answer{font-size:12px;font-style:italic;margin-top:3px}.ione-configurator .collapse-content,.ione-configurator .collapse-wrapper{display:block}.ione-configurator .collapse-handle{position:absolute;top:10px;right:12px;border:solid #000;border-width:0 3px 3px 0;display:inline-block;padding:3px;transform:rotate(45deg);-webkit-transform:rotate(45deg)}.ione-configurator .collapse-handle.expanded{transform:rotate(-135deg);-webkit-transform:rotate(-135deg)}.ione-configurator .child-selection{margin-left:10px;display:flex;flex-direction:column;margin-top:5px}.ione-configurator .mat-title{margin-left:10px;color:#1a1a1a}.ione-configurator .drawer__header{height:48px}.ione-configurator .rp-selections-summary{height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;background:0 0;overflow:auto;position:absolute;top:0;right:0;width:400px}.ione-configurator .selections-content{overflow-y:auto}.ione-configurator .co-summary-line{position:relative;overflow:hidden;cursor:pointer;font-size:12px;border:1px solid #d3d3d3;padding:10px;display:flex;flex-direction:row;border-radius:3px;margin-bottom:3px;box-shadow:2px 1px rgba(211,211,211,.5);background:#fff}.ione-configurator .selection-thumbnail{width:54px;min-width:54px;height:54px;min-height:54px;border:1px solid #d3d3d3;border-radius:5px}.ione-configurator .selection-img{width:54px;min-width:54px;height:54px;min-height:54px;border-radius:5px}.ione-configurator .answer-thumbnail{width:54px;min-width:54px;height:54px;min-height:54px;border:1px solid #d3d3d3;border-radius:5px}.ione-configurator .answer-img{width:54px;min-width:54px;height:54px;min-height:54px;border-radius:5px}.ione-configurator .unloaded{background-color:#d3d3d3}.ione-configurator .titles{margin-left:14px;-ms-grid-row-align:center;align-self:center}.ione-configurator .title-wrapper{display:flex;flex-direction:column}.ione-configurator .answer-title-wrapper{text-align:center;-ms-grid-row-align:center;align-self:center;margin-left:14px}"]})],e)}(),U=function(){function e(){var e=this;this._mapping=new Map,this._observer=new IntersectionObserver((function(t){var n,i;try{for(var r=j(t),o=r.next();!o.done;o=r.next()){var a=o.value,s=e._mapping.get(a.target);s&&s(a.isIntersecting)}}catch(e){n={error:e}}finally{try{o&&!o.done&&(i=r.return)&&i.call(r)}finally{if(n)throw n.error}}}),{rootMargin:"300px 0px 300px 0px"})}return e.prototype.ngOnDestroy=function(){this._mapping.clear(),this._observer.disconnect()},e.prototype.add=function(e,t){this._mapping.set(e,t),this._observer.observe(e)},e.prototype.remove=function(e){this._mapping.delete(e),this._observer.unobserve(e)},e=x([d.Directive({selector:"[visibilityObserverMaster]"})],e)}(),R=function(){function e(e,t){this.observerEnabled=!1,this.IS_INTERSECTING=!0,this.IS_NOT_INTERSECTING=!1,this._parent=e,this._elementRef=t,this.isIntersecting=!1}return e.prototype.ngOnDestroy=function(){this._parent.remove(this._elementRef.nativeElement),this._elementRef=void 0},e.prototype.ngOnInit=function(){var e=this;this.observerEnabled&&this._parent.add(this._elementRef.nativeElement,(function(t){e.isIntersecting=t,e.isIntersecting&&e._parent.remove(e._elementRef.nativeElement)}))},e.ctorParameters=function(){return[{type:U},{type:d.ElementRef}]},x([d.Input()],e.prototype,"observerEnabled",void 0),e=x([d.Directive({selector:"[visibilityObserver]",exportAs:"intersection"})],e)}(),q=function(){function e(){}return e=x([d.Component({selector:"rp-loader",template:'\n <div class="loader-wrapper">\n <svg xmlns="http://www.w3.org/2000/svg" width="44" height="44" viewBox="0 0 44 44" stroke="#3760a1">\n <g fill="none" fill-rule="evenodd" stroke-width="3">\n <circle class="ripple1" cx="22" cy="22" r="19">\n </circle>\n <circle class="ripple2" cx="22" cy="22" r="19">\n </circle>\n </g>\n </svg>\n </div>\n ',styles:[":host{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none}:host .loader-wrapper{z-index:1100;position:absolute;width:54px;height:54px}:host .loader-wrapper svg{width:100%;height:100%}:host .loader-wrapper svg .ripple1{transform-origin:center;-webkit-animation:1.5s infinite ripple;animation:1.5s infinite ripple}:host .loader-wrapper svg .ripple2{transform-origin:center;-webkit-animation:1.5s .4s infinite ripple;animation:1.5s .4s infinite ripple}@-webkit-keyframes ripple{0%{transform:scale(0);opacity:1}100%{transform:scale(1);opacity:0}}@keyframes ripple{0%{transform:scale(0);opacity:1}100%{transform:scale(1);opacity:0}}"]})],e)}(),z=function(){function e(){}return e=x([d.NgModule({imports:[b.CommonModule],declarations:[q],exports:[q]})],e)}(),W=function(){function e(){}return e=x([d.NgModule({imports:[b.CommonModule,z],declarations:[L,E,R,U],exports:[L]})],e)}(),Q=function(){this.children=[],this.expanded=!1,this.thumbnail=""},K=function(){function e(e){this._imageCacheService=e,this.selectionViewModels=[],this.selectionClick=new d.EventEmitter}return Object.defineProperty(e.prototype,"selections",{set:function(e){this._prepareSelections(e),this._loadThumbnails()},enumerable:!0,configurable:!0}),e.prototype.ngOnInit=function(){},e.prototype.expandClicked=function(e,t){t.preventDefault(),t.stopImmediatePropagation(),e.expanded=!e.expanded},e.prototype.selectSelection=function(e,t){t.preventDefault(),t.stopImmediatePropagation(),this.selectionClick.next(e)},e.prototype._loadThumbnails=function(){return y(this,void 0,void 0,(function(){var e=this;return _(this,(function(t){return this.selectionViewModels.length>0&&this.selectionViewModels.forEach((function(t){return y(e,void 0,void 0,(function(){return _(this,(function(e){switch(e.label){case 0:return[4,this._imageCacheService.getImageForSelectionOrAnswer(t.selection).then((function(e){t.thumbnail=""===e?null:e}))];case 1:return e.sent(),[2]}}))}))})),[2]}))}))},e.prototype._prepareSelections=function(e){var t,n=this;this.selectionViewModels.length=0,e.forEach((function(e){1===e.presentationLevel?((t=new Q).selection=e,n.selectionViewModels.push(t)):e.presentationLevel>1&&t&&t.children.push(e)}))},e.ctorParameters=function(){return[{type:G}]},x([d.Input()],e.prototype,"selections",null),x([d.Output()],e.prototype,"selectionClick",void 0),e=x([d.Component({selector:"selections",template:'\n <div class="ione-configurator">\n <div class="rp-selections-summary">\n <header class="drawer__header">\n <h2 class="mat-title" [textContent]="\'Configuratie\'"></h2>\n \x3c!--<button>--\x3e\n \x3c!----\x3e\n \x3c!--</button>--\x3e\n </header>\n <div class="selections-content">\n <ng-container *ngFor="let selectionViewModel of selectionViewModels">\n\n <div class="co-summary-line" (click)="selectSelection(selectionViewModel.selection, $event)">\n <div class="selection-thumbnail">\n <rp-loader *ngIf="selectionViewModel.thumbnail === \'\'"></rp-loader>\n <img visibilityObserver *ngIf="selectionViewModel.thumbnail !== \'\' && selectionViewModel.thumbnail !== null" class="selection-img" [src]="selectionViewModel.thumbnail">\n </div>\n <div class="titles">\n <div class="title-wrapper">\n <label class="question" [textContent]="selectionViewModel.selection.question"></label>\n <span class="answer" [textContent]="selectionViewModel.selection.answer"></span>\n <div *ngIf="selectionViewModel.children.length > 0 && selectionViewModel.expanded" @showHideChildren>\n <div class="child-selection" *ngFor="let selection of selectionViewModel.children"\n (click)="selectSelection(selection, $event)"\n >\n <label class="question" [textContent]="selection.commercialQuestion"></label>\n <span class="answer" [textContent]="selection.answer"></span>\n </div>\n </div>\n </div>\n </div>\n \n <div class="price-wrapper">\n <span class="price-value"></span>\n </div>\n\n <div class="collapse-wrapper">\n <div class="collapse-content">\n <div class="collapse-handle" [class.expanded]="selectionViewModel.expanded"\n *ngIf="selectionViewModel.children.length > 0" (click)="expandClicked(selectionViewModel, $event)"></div>\n </div>\n </div>\n </div>\n\n </ng-container>\n </div>\n </div>\n </div>\n ',animations:[w.trigger("showHideChildren",[w.state("void",w.style({height:"0"})),w.state("*",w.style({height:"*"})),w.transition("void <=> *",w.animate(200))])],styles:[".ione-configurator .rp-answers-slideout{position:absolute;top:0;right:0;width:400px;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content}.ione-configurator .answers-title{margin-left:10px;color:#1a1a1a}.ione-configurator .answers-container{height:100vh;overflow-y:scroll}.ione-configurator .answer-content{position:relative;overflow:hidden;cursor:pointer;font-size:12px;border:1px solid #d3d3d3;padding:10px;display:flex;flex-direction:row;border-radius:3px;margin-bottom:3px;box-shadow:2px 1px rgba(211,211,211,.5);background:#fff}.ione-configurator .thumbnail{width:54px;min-width:54px;height:54px;min-height:54px;border:1px solid #d3d3d3;border-radius:5px}.ione-configurator .img-size{width:54px;min-width:54px;height:54px;min-height:54px;border-radius:5px}.ione-configurator .answer-wrapper{display:block}.ione-configurator .answer-title{font-size:12px;position:relative;overflow:hidden;cursor:pointer}.ione-configurator .question{font-weight:700;color:#1a1a1a}.ione-configurator .answer{font-size:12px;font-style:italic;margin-top:3px}.ione-configurator .collapse-content,.ione-configurator .collapse-wrapper{display:block}.ione-configurator .collapse-handle{position:absolute;top:10px;right:12px;border:solid #000;border-width:0 3px 3px 0;display:inline-block;padding:3px;transform:rotate(45deg);-webkit-transform:rotate(45deg)}.ione-configurator .collapse-handle.expanded{transform:rotate(-135deg);-webkit-transform:rotate(-135deg)}.ione-configurator .child-selection{margin-left:10px;display:flex;flex-direction:column;margin-top:5px}.ione-configurator .mat-title{margin-left:10px;color:#1a1a1a}.ione-configurator .drawer__header{height:48px}.ione-configurator .rp-selections-summary{height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;background:0 0;overflow:auto;position:absolute;top:0;right:0;width:400px}.ione-configurator .selections-content{overflow-y:auto}.ione-configurator .co-summary-line{position:relative;overflow:hidden;cursor:pointer;font-size:12px;border:1px solid #d3d3d3;padding:10px;display:flex;flex-direction:row;border-radius:3px;margin-bottom:3px;box-shadow:2px 1px rgba(211,211,211,.5);background:#fff}.ione-configurator .selection-thumbnail{width:54px;min-width:54px;height:54px;min-height:54px;border:1px solid #d3d3d3;border-radius:5px}.ione-configurator .selection-img{width:54px;min-width:54px;height:54px;min-height:54px;border-radius:5px}.ione-configurator .answer-thumbnail{width:54px;min-width:54px;height:54px;min-height:54px;border:1px solid #d3d3d3;border-radius:5px}.ione-configurator .answer-img{width:54px;min-width:54px;height:54px;min-height:54px;border-radius:5px}.ione-configurator .unloaded{background-color:#d3d3d3}.ione-configurator .titles{margin-left:14px;-ms-grid-row-align:center;align-self:center}.ione-configurator .title-wrapper{display:flex;flex-direction:column}.ione-configurator .answer-title-wrapper{text-align:center;-ms-grid-row-align:center;align-self:center;margin-left:14px}"]})],e)}(),Z=function(){function e(){}return e=x([d.NgModule({imports:[b.CommonModule,z],declarations:[K],exports:[K]})],e)}();e.AnswersComponent=L,e.AnswersModule=W,e.Builder=B,e.ConfiguratorService=V,e.SelectionsComponent=K,e.SelectionsModule=Z,e.ɵa=z,e.ɵb=q,e.ɵc=E,e.ɵd=G,e.ɵe=R,e.ɵf=U,Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
17
|
+
//# sourceMappingURL=colijnit-configurator.umd.min.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../node_modules/tslib/tslib.es6.js","ng://@colijnit/configurator/utils/object.utils.ts","ng://@colijnit/configurator/utils/file.utils.ts","ng://@colijnit/configurator/utils/threed.utils.ts","ng://@colijnit/configurator/utils/scene-utils.ts","ng://@colijnit/configurator/model/material.ts","ng://@colijnit/configurator/utils/image.utils.ts","ng://@colijnit/configurator/utils/asset.utils.ts","ng://@colijnit/configurator/model/variation.ts","ng://@colijnit/configurator/model/variation-settings.ts","ng://@colijnit/configurator/utils/variation-utils.ts","ng://@colijnit/configurator/helper/variation-helper.ts","ng://@colijnit/configurator/app/services/locator.service.ts","ng://@colijnit/configurator/app/services/configurator.service.ts","ng://@colijnit/configurator/app/builder.ts","ng://@colijnit/configurator/app/components/answers/answers.component.ts","ng://@colijnit/configurator/app/services/image-cache.service.ts","ng://@colijnit/configurator/app/components/answers/answer/answer.component.ts","ng://@colijnit/configurator/app/directives/visibility-observer-master.directive.ts","ng://@colijnit/configurator/app/directives/visibility-observer.directive.ts","ng://@colijnit/configurator/app/components/shared/loader/loader.component.ts","ng://@colijnit/configurator/app/components/shared/shared.module.ts","ng://@colijnit/configurator/app/components/answers/answers.module.ts","ng://@colijnit/configurator/app/components/selections/selections.component.ts","ng://@colijnit/configurator/app/components/selections/selections.module.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__decorate","decorators","target","key","desc","c","arguments","length","r","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","this","n","v","op","TypeError","call","pop","push","__values","o","s","m","ObjectUtils","DisposeMaterial","material","_this","isArray","forEach","mtrl","materialProps","filter","mapType","dispose","DisposeObject","object","children","child","DisposeNode","node","traverse","obj","Mesh","geometry","FileUtils","StripMimeStringFromDataUri","dataUri","mimeString","GetMimeStringFromDataUri","substr","split","FileExists","url","assetPath","axios","method","responseType","_a","data","FixUrl","assetUrl","fixedUrl","endsWith","FixUnityUrl","replace","FixGlbUrl","indexOf","concat","MimeTypeFromFilename","fileName","exec","DownloadFile","content","mimeType","element","document","createElement","setAttribute","encodeURIComponent","style","display","appendChild","click","removeChild","ReadAsText","file","reader","FileReader","readAsText","onloadend","event","readyState","GetExtensionFromDataUri","CreateDownloadFileNameFromBase64","DownloadFromDataUri","link","download","href","DocumentBodyToDataUri","documentBody","_cachedTextureUploads","Map","ThreedUtils","_objectCache","prototype","clearCache","from","values","clear","download3DSource","lookupFileName","has","get","loadGlbSource","set","readFileAsText","fileReader","onload","onerror","error","loadJsonModel","filePath","_readJsonFile","json","loader","THREE.ObjectLoader","crossOrigin","parse","loadJsonObjectModel","setCrossOrigin","setResourcePath","load","type","xhr","loadGlbModel","cleanUp","window","loadGLTF","console","_cleanedUpObjects","THREE.Camera","sort","a","visible","name","toLowerCase","startsWith","THREE.Group","slice","textureFromUrl","THREE.TextureLoader","texture","wrapT","THREE.RepeatWrapping","wrapS","repeat","needsUpdate","THREE.Object3D","_addGroupChildrenToObject","THREE.Mesh","translateY","position","add","clone","boundingBox","THREE.Box3","setFromObject","bbCenterPivot","THREE.Vector3","getCenter","delta","negate","cc","group","gc","_iterateChildren","callback","fetch","response","ok","empty_1","text","SceneUtils","TrySelectorConnection","scene","parent","part1","part2","createAddableFn","addable","ii","con1","con2","CanSelectorConnect","SelectorConnect","newPart2","Convert3DPointToScreenPoint","point","camera","width","height","THREE.Vector2","vector","project","x","con1Name","connector","con2Name","sameParent","parts1","toUpperCase","parts2","motherRotation","THREE.Euler","motherPosition","updateMatrixWorld","copy","rotation","getWorldPosition","con1Quat","THREE.Quaternion","getWorldQuaternion","con2Quat","con1QuatParent","con2QuatParent","multiplyQuaternions","invert","multiply","quaternion","con1Pos","con2Pos","move","sub","z","Material","specular","THREE.Color","shininess","repeatX","repeatY","loaded","ImageUtils","CreateTextureFromBase64","id","base64","textures","anisotropy","THREE.Texture","getDocBodyWithMimeTypeDefinition","lastIndexOf","getFixedImageFilepathUrl","imageFilepathUrl","AssetUtils","_super","FurnitureMaterial","__","constructor","create","__extends","CreateMaterialFromAsset","asset","settings","setSettingsOfMaterial","_f","encoding","sRGBEncoding","textureFilename","normal","_b","normalFilename","ao","_c","aoFilename","metalness","_d","metalnessFilename","roughness","_e","roughnessFilename","parseFloat","isNaN","level","repeatObjectUsed","repeatx","Math","max","repeaty","metalnessValue","min","roughnessValue","Variation","VariationSettings","VariationUtils","LoadVariation","downloadVariation","GetVariationSettingsFromFile","err_1","compressedFile","GetZipContent","zipContent","variationSettings","files","async","indexFile","index","JSON","CreateSettingsBasedOnIndex","CreateSettingsBasedOnFileName","normalFile","LoadFileContentFromZip","_g","aoFile","metalnessFile","roughnessFile","diffuseFile","assign","allLoaded","file_1","this_1","FileIsImage","GetBase64FileType","textureFile","settingsFile","settingsFileObj","all","zip","fileContent","undefined","substring","JSZip","loadAsync","MaterialCache","VariationHelper","_lastKnownVariations","valueMap","variations","variation","loadPart","parts","usePbr","len","decoNode","gameObjectName","DecoNodeType","Part","decoId","partSettings","partVariation","brandId","_applyMaterialPart","e_1","loadVariation","instanceId","_getLastKnownVariations","nodeId","_applyVariations","lastKnownVariations","j","newVariation","supplierArticleNr","materialId","_setLastKnownVariations","e_2","_getChildrenFilterByProp","userDataObjectProp","prop","userData","partMaterial","mesh","jlen","_setMeshMaterialFromVariation","part","materialToSearch","mlen","params","map","aoMap","roughnessMap","metalnessMap","normalMap","THREE.MeshStandardMaterial","color","setRGB","THREE.MeshPhongMaterial","ServiceLocator","injector","Injectable","ConfiguratorService","_injector","initApi","options","_configuratorApi","Configurator","initNodeInstance","goodId","setInstanceToConfigure","showLoader","getGoodIdFromSku","sku","getArticleQuickSel","getSelections","publicationCode","selections","resultObjects","isNill","hierarchicalPublicationCode","nodeType","NodeType","Question","questionPublicationCode","Answer","answerPublicationCode","getDecos","getQuestionAndAnswers","questionAndAnswers","answers","answer","notNill","getSingleImage","publication","includeMimetype","thumb","selectSelection","selection","selectAnswer","Injector","providedIn","Builder","useInAngular","selectionsReceived","BehaviorSubject","answersReceived","modelLoaded","_selections","_answers","_decos","_placedAdjustables","_placedAddables","_adjustables","_addables","_articleCache","_boFactory","BusinessObjectFactory","_threedUtils","_variationHelper","_configuratorService","_scene","buildModel","_setInstanceId","_prepareConfiguration","_sku","_goodId","_source","_instanceId","promises","_getSelections","_getDecos","_linkSelectionsAndDecos","_build","destroy","questionsAndAnswers","_getGoodIdFromSku","resultObject","_getArticle","article","catch","contentDeliveryUrl","distSchema","_reset","adjustables","_getAdjustables","connected","adjustable","_createAdjustable","lenii","warn","_placeAddables","_updatePivot","_loadVariations","remove","_prepareTheSelections","lastAdded","lastAdjustable","positioning","globalVariations","generic","array","sel","find","artNodeIdDeco","hdecoGameObject","globalVariationsRewrite","newPart","previousPresLevel","presentationLevel","hdecoPositioning","kind","DecoNodeKind","Adjustable","Addable","addables","adj","getObjectByName","name_1","_createUniqueName","_createAddable","adjustableSelection","lena","conAddable","ia","iteration","existingObj","validationResult","success","articleResponse","makeWithRawBackendData","Article","selectionResponse","makeBOArrayFromRawBackendDataArray","Selection","decosResponse","DecoNode","deco","_getVariations","parentId","setY","abs","updateWorldMatrix","Scene","Options","AnswersComponent","answerClick","EventEmitter","Input","Output","Component","selector","template","ImageCacheService","_imageCache","_handleResponseData","responseData","thumbnailBody","getImageForSelectionOrAnswer","ImageCacheService_1","AnswerComponent","_imageCacheService","imageData","_loadThumbnail","ngOnInit","imageSrc","animations","trigger","state","background","transition","animate","VisibilityObserverMasterDirective","_mapping","_observer","IntersectionObserver","entries","entries_1","entries_1_1","entry","isIntersecting","rootMargin","ngOnDestroy","disconnect","observe","delete","unobserve","Directive","VisibilityObserverDirective","elementRef","observerEnabled","IS_INTERSECTING","IS_NOT_INTERSECTING","_parent","_elementRef","nativeElement","ElementRef","exportAs","LoaderComponent","SharedModule","NgModule","imports","CommonModule","declarations","exports","AnswersModule","SelectionViewModel","expanded","thumbnail","SelectionsComponent","selectionViewModels","selectionClick","_prepareSelections","_loadThumbnails","expandClicked","selectionViewModel","mouseEvent","preventDefault","stopImmediatePropagation","viewModel","SelectionsModule"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\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 */\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 (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\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 __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 (_) 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 function __createBinding(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, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = 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\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\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 __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: n === \"return\" } : 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\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 (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = 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, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import {Material, Mesh, Object3D} from \"three\";\r\n\r\nexport class ObjectUtils {\r\n static materialProps = ['map', 'lightMap', 'bumpMap', 'normalMap', 'specularMap', 'envMap', 'aoMap', 'roughnessMap', 'metalnessMap'];\r\n\r\n public static DisposeMaterial(material: Material | Material[]): void {\r\n if (!material) {\r\n return;\r\n }\r\n if (Array.isArray(material)) {\r\n material.forEach(mtrl => {\r\n this.materialProps\r\n .filter(mapType => mtrl[mapType])\r\n .forEach(mapType => mtrl[mapType].dispose());\r\n mtrl.dispose();\r\n });\r\n } else {\r\n this.materialProps\r\n .filter(mapType => material[mapType] && material[mapType].dispose)\r\n .forEach(mapType => material[mapType].dispose());\r\n if (material.dispose) {\r\n material.dispose();\r\n }\r\n }\r\n }\r\n\r\n public static DisposeObject(object: Object3D | Mesh): void {\r\n if (!object) {\r\n return;\r\n }\r\n if (object.children.length) {\r\n object.children.forEach(child => this.DisposeObject(child));\r\n }\r\n this.DisposeNode(object);\r\n }\r\n\r\n private static DisposeNode(node: Object3D | Mesh): void {\r\n node.traverse((obj: Object3D) => {\r\n if (obj instanceof Mesh) {\r\n if (obj.geometry) {\r\n obj.geometry.dispose();\r\n }\r\n this.DisposeMaterial(obj.material);\r\n }\r\n if (typeof (obj as any).dispose === 'function') {\r\n // @ts-ignore\r\n obj.dispose();\r\n }\r\n });\r\n }\r\n\r\n}\r\n","import axios from \"axios\";\n// Static utility functions holder related to files.\n// @dynamic\nexport class FileUtils {\n\n private static _cachedTextureUploads: Map<string, Object> = new Map();\n\n // Returns the given dataUri string stripped of the mimetype part.\n public static StripMimeStringFromDataUri(dataUri: string): string {\n if (!dataUri) {\n return '';\n }\n\n const mimeString: string = this.GetMimeStringFromDataUri(dataUri);\n return dataUri.substr(mimeString.length + 1);\n }\n\n public static GetMimeStringFromDataUri(dataUri: string): string {\n if (!dataUri) {\n return '';\n }\n\n return dataUri.split(',')[0];\n }\n\n public static async FileExists(url: string, assetPath: string): Promise<boolean> {\n const result = await axios({\n method: 'get',\n url: `${assetPath}getFiles.php?assetUrl=${url}`,\n responseType: \"json\"\n })\n return !!result.data;\n }\n\n /**\n * There is some discrepancy regarding locations of h3d objects\n * Therefor we need to (temporarily?!) fix the content url\n * Also we need to change some additionals\n */\n public static FixUrl(assetUrl: string): string {\n if (!assetUrl) {\n return '';\n }\n let fixedUrl: string = assetUrl;\n if (!fixedUrl.endsWith('glb') && !fixedUrl.endsWith('obj') && !fixedUrl.endsWith('glb.gz') && !fixedUrl.endsWith('obj.gz')) {\n fixedUrl = FileUtils.FixUnityUrl(fixedUrl);\n }\n fixedUrl = fixedUrl.replace('/content/', '/content43/');\n return fixedUrl;\n }\n\n public static FixGlbUrl(assetUrl: string): string {\n if (!assetUrl) {\n return '';\n }\n let fixedUrl: string = assetUrl;\n if (assetUrl.indexOf('_webplayer') === -1) {\n fixedUrl = assetUrl.concat('_webplayer');\n }\n fixedUrl = fixedUrl.replace('/content/', '/content43/');\n if (!fixedUrl.endsWith('.glb')) {\n fixedUrl = fixedUrl.concat('.glb');\n }\n return fixedUrl;\n }\n\n // Return the mimetype of the given filename.\n public static MimeTypeFromFilename(fileName: string): string {\n const regEx: RegExp = /(?:\\.([^.]+))?$/; // regex to find extension\n const extension: any = regEx.exec(fileName)[1];\n switch (extension) {\n case 'jpg':\n case 'jpeg':\n return 'image/jpeg';\n case 'png':\n return 'image/png';\n case 'bmp':\n return 'image/bmp';\n }\n }\n\n /**\n * Downloads the given file to the users default download location.\n * @param fileName With or without extension\n * @param content File content as a string\n * @param [mimeType = 'text/plain']\n */\n public static DownloadFile(\n fileName: string,\n content: string,\n mimeType: string = 'text/plain'\n ): void {\n const element: HTMLAnchorElement = document.createElement('a');\n element.setAttribute('href', 'data:' + mimeType + ';charset=utf-8,' + encodeURIComponent(content));\n element.setAttribute('download', fileName);\n\n element.style.display = 'none';\n document.body.appendChild(element);\n\n element.click();\n\n document.body.removeChild(element);\n }\n\n // Returns the contents of given file as a text string.\n public static ReadAsText(file: File): Promise<string> {\n return new Promise<string>((resolve: Function) => {\n const reader: FileReader = new FileReader();\n reader.readAsText(file);\n reader.onloadend = (event: any) => {\n if (event.target.readyState === 2) {\n resolve(event.target.result);\n }\n };\n });\n }\n\n public static GetExtensionFromDataUri(dataUri: string): string {\n return dataUri.replace(/(data:image\\/)(.*?)(;base64.*)/gi, '$2');\n }\n\n public static CreateDownloadFileNameFromBase64(dataUri: string): string {\n const ext: string = this.GetExtensionFromDataUri(dataUri);\n return 'preview.' + ext;\n }\n\n public static DownloadFromDataUri(dataUri: string, fileName: string): void {\n const link: any = document.createElement('a');\n link.download = fileName;\n link.href = dataUri;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n\n // todo remove once Connector deals with mimetypes and this method isn't used anymore\n public static DocumentBodyToDataUri(documentBody: string, mimeType: string): string {\n if (!!documentBody) {\n return 'data:' + mimeType + ';base64,' + documentBody;\n } else {\n return '';\n }\n }\n\n private static FixUnityUrl(url): string {\n if (url.indexOf('_webplayer') === -1) {\n url = url.concat('_webplayer.ione3d');\n } else {\n url = url.replace('_webplayer', '_webplayer.ione3d');\n }\n if (!url.endsWith('.gz')) {\n url = url.concat('.gz');\n }\n return url.replace('.unity3d', '');\n }\n}\n","import * as THREE from \"three\";\nimport {ObjectUtils} from \"./object.utils\";\nimport {FileUtils} from \"./file.utils\";\n\nexport class ThreedUtils {\n\n private _objectCache: Map<string, THREE.Object3D> = new Map();\n\n public clearCache(): void {\n const objs: THREE.Object3D[] = Array.from(this._objectCache.values());\n objs.forEach(o => ObjectUtils.DisposeObject(o));\n this._objectCache.clear();\n }\n\n public download3DSource(fileName: string): Promise<THREE.Object3D> {\n return new Promise(async (resolve: Function, reject: Function) => {\n fileName = fileName.replace('.unity3d', '');\n let lookupFileName: string = fileName + (fileName.indexOf('.glb') < 0 ? '.glb' : '');\n if (this._objectCache.has(lookupFileName)) {\n resolve(this._objectCache.get(lookupFileName));\n return;\n }\n if (await FileUtils.FileExists(lookupFileName, 'https://cdn1.colijn-it.nl/content43/')) {\n this.loadGlbSource(lookupFileName).then((obj: THREE.Object3D) => {\n this._objectCache.set(lookupFileName, obj);\n resolve(obj);\n });\n } else {\n reject(`GLB source not found! (${lookupFileName})`);\n }\n });\n }\n\n public readFileAsText(file: File): Promise<string> {\n const fileReader = new FileReader();\n return new Promise((resolve, reject) => {\n fileReader.onload = (e: any) => resolve(e.target.result);\n fileReader.onerror = error => reject(error);\n fileReader.readAsText(file);\n });\n }\n\n public async loadJsonModel(filePath: string): Promise<any> {\n if (this._objectCache.has(filePath)) {\n return Promise.resolve(this._objectCache.get(filePath));\n }\n const json: string = await this._readJsonFile(filePath);\n const loader = new THREE.ObjectLoader();\n loader.crossOrigin = 'Anonymous';\n return new Promise((resolve, reject) => {\n try {\n const obj = loader.parse(json);\n this._objectCache.set(filePath, obj);\n resolve(obj);\n } catch (e) {\n reject(null);\n }\n });\n }\n\n public async loadJsonObjectModel(filePath: string): Promise<any> {\n if (this._objectCache.has(filePath)) {\n return Promise.resolve(this._objectCache.get(filePath));\n }\n const loader = new THREE.ObjectLoader();\n loader.setCrossOrigin('Anonymous');\n loader.setResourcePath('');\n return new Promise((resolve, reject) => {\n loader.load(filePath,\n (object: any) => {\n const obj: THREE.Object3D = (object.type === 'Scene' && object.children[0].type === 'Object3D') ? object.children[0] : object;\n this._objectCache.set(filePath, obj);\n resolve(obj as THREE.Object3D);\n },\n xhr => null,\n error => reject(error)\n );\n });\n }\n\n public async loadGlbModel(file: string, cleanUp: boolean = true): Promise<THREE.Object3D> {\n if (this._objectCache.has(file)) {\n return Promise.resolve(this._objectCache.get(file));\n }\n if (!window.hasOwnProperty('loadGLTF')) {\n console.error('loadGLTF not defined in window global');\n return null;\n }\n // const loader = new GLTFLoader();\n const obj: THREE.Object3D = await (window as any).loadGLTF(file);\n if (obj) {\n this._cleanedUpObjects(obj, cleanUp);\n this._objectCache.set(file, obj);\n return obj;\n } else {\n return null;\n }\n }\n\n public async loadGlbSource(file: string): Promise<THREE.Object3D> {\n const obj = await this.loadGlbModel(file, false);\n if (obj) {\n obj.children = obj.children.filter(c => !(c instanceof THREE.Camera));\n obj.children.sort((a, b) => a['name'] < b['name'] ? 1 : -1);\n obj.children.forEach((c: THREE.Object3D) => {\n c.traverse((t: THREE.Object3D) => {\n t.visible = !t.name.toLowerCase().startsWith('c_');\n });\n c.visible = false;\n });\n if (obj.children.length === 1 && obj.children[0] instanceof THREE.Group) { // flatten children\n const children: any = obj.children[0].children.slice();\n obj.children.length = 0;\n obj.children = children;\n }\n }\n return obj;\n }\n\n public async textureFromUrl(url: string): Promise<any> {\n // url = this._includeBaseUrl(url);\n return new Promise((resolve, reject) => {\n const textureLoader = new THREE.TextureLoader();\n // textureLoader.setBaseU(this._settingsService.settings.assetPath);\n textureLoader.load(url,\n (texture: THREE.Texture) => {\n texture.wrapT = THREE.RepeatWrapping;\n texture.wrapS = THREE.RepeatWrapping;\n texture.repeat.set(1, 1);\n texture.needsUpdate = true;\n return resolve(texture);\n },\n null,\n reject\n );\n });\n }\n\n private _cleanedUpObjects(object: THREE.Object3D, cleanUp: boolean = true): THREE.Object3D {\n let obj: THREE.Object3D = new THREE.Object3D();\n object.children.forEach((c: THREE.Object3D) => {\n if (!(c instanceof THREE.Camera)) {\n if (cleanUp && c instanceof THREE.Group || (c.children.length === 1 && c.children[0] instanceof THREE.Group)) {\n this._addGroupChildrenToObject(c, obj);\n } else if ((cleanUp && !(c instanceof THREE.Mesh)) || (!(c instanceof THREE.Mesh) && !c.name && c.children.length > 0)) {\n c.children.forEach((child) => {\n child.translateY(c.position.y);\n });\n c.translateY(-c.position.y);\n if (obj.children.length > 0) {\n obj.add(c.clone());\n } else {\n obj = c.clone();\n }\n } else {\n // if (c.position.y > 0 || c.position.y < 0) {\n // c.children.forEach((child) => {\n // child.translateY(c.position.y);\n // });\n // c.translateY(-c.position.y);\n // }\n obj.add(c.clone());\n }\n }\n });\n const boundingBox = new THREE.Box3().setFromObject(obj);\n const bbCenterPivot = new THREE.Vector3();\n boundingBox.getCenter(bbCenterPivot);\n const delta: THREE.Vector3 = new THREE.Vector3().add(bbCenterPivot).negate();\n obj.children.forEach((cc) => {\n cc.position.add(delta);\n });\n return obj;\n }\n\n private _addGroupChildrenToObject(group: THREE.Object3D, obj: THREE.Object3D, cleanUp: boolean = true): void {\n group.children.forEach((gc: THREE.Object3D) => {\n if (cleanUp && gc instanceof THREE.Group) {\n this._addGroupChildrenToObject(gc, obj);\n } else {\n // gc.translateX(-group.position.x);\n gc.translateY(group.position.y);\n // gc.translateZ(-group.position.z);\n obj.add(gc.clone());\n }\n });\n }\n\n private _iterateChildren(children: THREE.Object3D[], callback: (child: THREE.Mesh) => {}): void {\n for (let i = 0; i < children.length; i++) {\n const child: THREE.Object3D = children[i];\n if (child instanceof THREE.Mesh) {\n callback(child);\n } else {\n this._iterateChildren(child.children, callback);\n }\n }\n }\n\n private async _readJsonFile(filePath: string): Promise<any> {\n try {\n const response = await fetch(filePath);\n if (!response.ok) {\n return '';\n } else {\n let empty = false;\n await response.clone().text().then((value) => {\n if (value === '') {\n empty = true;\n }\n });\n return empty ? {} : response.json();\n }\n } catch (e) {\n return '';\n }\n }\n\n}\n","import * as THREE from 'three';\r\n\r\nexport class SceneUtils {\r\n\r\n public static TrySelectorConnection(scene: THREE.Scene, parent: THREE.Object3D,\r\n part1: any, part2: any, createAddableFn?: Function): boolean {\r\n let addable: any;\r\n if (createAddableFn) {\r\n addable = part2;\r\n part2 = createAddableFn(addable);\r\n }\r\n for (let i = 0; i < part1.children.length; i++) {\r\n for (let ii = 0; ii < part2.children.length; ii++) {\r\n const con1: THREE.Object3D = part1.children[i];\r\n const con2: THREE.Object3D = part2.children[ii];\r\n // if these connectors can connect connect them\r\n if (!con1['connected'] && !con2['connected'] && this.CanSelectorConnect(con1, con2)) {\r\n // if addable, continue this loop with a new addable\r\n if (addable) {\r\n const newPart2: THREE.Object3D = createAddableFn(addable, part2, part1);\r\n // reference of part2 changed, so refresh con2\r\n this.SelectorConnect(scene, parent, con1, newPart2.children[ii]);\r\n } else {\r\n return this.SelectorConnect(scene, parent, con1, con2);\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n public static Convert3DPointToScreenPoint(point: THREE.Vector3, camera: THREE.Camera, width: number, height: number): THREE.Vector2 {\r\n if (!point) {\r\n return new THREE.Vector2();\r\n }\r\n const vector: THREE.Vector3 = point.clone().project(camera);\r\n vector.x = (vector.x + 1) / 2 * width;\r\n vector.y = -(vector.y - 1) / 2 * height;\r\n return new THREE.Vector2(vector.x, vector.y);\r\n }\r\n\r\n public static CanSelectorConnect(con1: THREE.Object3D | any, con2: THREE.Object3D | any): boolean {\r\n const con1Name: string = con1 instanceof THREE.Object3D ? con1.name : con1.connector;\r\n const con2Name: string = con2 instanceof THREE.Object3D ? con2.name : con2.connector;\r\n const sameParent: boolean = con1 instanceof THREE.Object3D && con2 instanceof THREE.Object3D ? con1.parent === con2.parent : false;\r\n const parts1: string[] = con1Name.toUpperCase().split('_'),\r\n parts2: string[] = con2Name.toUpperCase().split('_');\r\n if (parts1.length >= 3 && parts2.length >= 3 && !sameParent) {\r\n const connectable: boolean = parts1[0] === 'C' && parts2[0] === 'C' &&\r\n parts1[1] === parts2[1] && parts1[2] !== parts2[2];\r\n return connectable;\r\n }\r\n return false;\r\n }\r\n\r\n private static SelectorConnect(scene: THREE.Scene, parent: THREE.Object3D, con1: THREE.Object3D, con2: THREE.Object3D): boolean {\r\n if (!scene || !parent) {\r\n return false;\r\n }\r\n con1['connectedTo'] = con2.parent.name;\r\n con2['connectedTo'] = con1.parent.name;\r\n\r\n const motherRotation: THREE.Euler = new THREE.Euler(0, 0, 0);\r\n const motherPosition: THREE.Vector3 = new THREE.Vector3(0, 0, 0);\r\n\r\n scene.updateMatrixWorld(true);\r\n motherRotation.copy(parent.rotation);\r\n parent.getWorldPosition(motherPosition);\r\n\r\n parent.rotation.set(0, 0, 0);\r\n parent.position.set(0, 0, 0);\r\n\r\n const con1Quat: THREE.Quaternion = new THREE.Quaternion();\r\n con1.getWorldQuaternion(con1Quat);\r\n const con2Quat: THREE.Quaternion = new THREE.Quaternion();\r\n con2.getWorldQuaternion(con2Quat);\r\n const con1QuatParent: THREE.Quaternion = new THREE.Quaternion();\r\n con1.parent.getWorldQuaternion(con1QuatParent);\r\n const con2QuatParent: THREE.Quaternion = new THREE.Quaternion();\r\n con2.parent.getWorldQuaternion(con2QuatParent);\r\n\r\n const rotation: THREE.Quaternion = new THREE.Quaternion().multiplyQuaternions(\r\n con1Quat.invert(),\r\n con2Quat\r\n ).multiply(\r\n new THREE.Quaternion().multiplyQuaternions(\r\n con1QuatParent,\r\n con1QuatParent\r\n )\r\n );\r\n\r\n con2.parent.quaternion.copy(rotation);\r\n // Update because the matrix has been tempered with\r\n scene.updateMatrixWorld(true);\r\n\r\n // Move the connectors towards eachother\r\n const con1Pos: THREE.Vector3 = new THREE.Vector3();\r\n con1.getWorldPosition(con1Pos);\r\n const con2Pos: THREE.Vector3 = new THREE.Vector3();\r\n con2.getWorldPosition(con2Pos);\r\n\r\n const move: THREE.Vector3 = con1Pos.sub(con2Pos);\r\n con2.parent.position.x += move.x;\r\n con2.parent.position.y += move.y;\r\n con2.parent.position.z += move.z;\r\n\r\n // reset parent's objects rotation and position\r\n parent.rotation.copy(motherRotation);\r\n parent.position.copy(motherPosition);\r\n\r\n scene.updateMatrixWorld(true);\r\n\r\n // Set the connected flag\r\n con1['connected'] = true;\r\n con2['connected'] = true;\r\n return true;\r\n }\r\n\r\n}\r\n","import * as THREE from 'three';\n\nexport class Material {\n\n public name: string;\n public schema: string;\n public specular: THREE.Color = new THREE.Color(0.3, 0.3, 0.3);\n public shininess = 0;\n // public roughness = 1;\n // public metalness = 0.5;\n public normal: THREE.Texture;\n public texture: THREE.Texture;\n public ao: THREE.Texture;\n public metalness: THREE.Texture;\n public roughness: THREE.Texture;\n public repeatX = 4;\n public repeatY = 4;\n public loaded = false;\n public metalnessValue: number;\n public roughnessValue: number;\n\n}\n","import * as THREE from 'three';\nimport {Material} from '../model/material';\n// @dynamic\nexport class ImageUtils {\n\n public static textures: Map<string, THREE.Texture> = new Map();\n\n public static CreateTextureFromBase64(id: string, base64: string, material: Material): Promise<THREE.Texture> {\n return new Promise<THREE.Texture>((resolve) => {\n if (ImageUtils.textures.has(id)) {\n resolve(ImageUtils.textures.get(id));\n } else {\n if (!base64) {\n resolve(new THREE.Texture());\n } else {\n const loader: THREE.TextureLoader = new THREE.TextureLoader();\n loader.load(base64, (texture: THREE.Texture) => {\n texture.anisotropy = 16;\n texture.wrapS = THREE.RepeatWrapping;\n texture.wrapT = THREE.RepeatWrapping;\n texture.repeat = new THREE.Vector2(material ? material.repeatX : 1, material ? material.repeatY : 1);\n texture.needsUpdate = true;\n ImageUtils.textures.set(id, texture);\n resolve(texture);\n });\n }\n }\n });\n }\n\n public static getDocBodyWithMimeTypeDefinition(fileName: string, documentBody: string): string {\n if (documentBody === null) {\n return documentBody;\n }\n const fileExtension: string = fileName.substr(fileName.lastIndexOf('.') + 1);\n switch (fileExtension.toLowerCase()) {\n case \"jpg\":\n case \"jpeg\":\n return \"data:image/jpg;base64,\" + documentBody;\n case \"png\":\n return \"data:image/png;base64,\" + documentBody;\n case \"gif\":\n return \"data:image/gif;base64,\" + documentBody;\n case \"bmp\":\n return \"data:image/bmp;base64,\" + documentBody;\n default:\n return \"data:image/png;base64,\" + documentBody;\n }\n }\n\n public static getFixedImageFilepathUrl(imageFilepathUrl: string): string {\n return imageFilepathUrl.replace(\"/content/\", \"/content43/\");\n }\n}\n","import {Material} from '../model/material';\nimport {ImageUtils} from './image.utils';\nimport * as THREE from 'three';\nimport {sRGBEncoding} from 'three';\nimport {VariationSettings} from '../model/variation-settings';\n\nexport class FurnitureMaterial extends Material {\n\n public textureFilename?: string;\n public normalFilename?: string;\n public aoFilename?: string;\n public metalnessFilename?: string;\n public roughnessFilename?: string;\n\n}\n\nexport class AssetUtils {\n\n public static async CreateMaterialFromAsset(asset: VariationSettings): Promise<Material> {\n const material: FurnitureMaterial = new Material();\n if (!asset) {\n return material;\n }\n if (asset.settings) {\n AssetUtils.setSettingsOfMaterial(material, asset.settings);\n }\n if (asset.texture) {\n material.texture = await ImageUtils.CreateTextureFromBase64(asset.id + '_texture', asset.texture, material);\n material.texture.encoding = sRGBEncoding;\n\n material.textureFilename = asset.textureFilename;\n }\n if (asset.normal) {\n material.normal = await ImageUtils.CreateTextureFromBase64(asset.id + '_normal', asset.normal, material);\n material.normalFilename = asset.normalFilename;\n // material.normal.anisotropy = 1;\n // material.normal.repeat.set(1, 1);\n // material.normal.flipY = false;\n }\n if (asset.ao) {\n material.ao = await ImageUtils.CreateTextureFromBase64(asset.id + '_ao', asset.ao, material);\n material.aoFilename = asset.aoFilename;\n }\n if (asset.metalness) {\n material.metalness = await ImageUtils.CreateTextureFromBase64(asset.id + '_metalness', asset.metalness, material);\n material.metalnessFilename = asset.metalnessFilename;\n }\n if (asset.roughness) {\n material.roughness = await ImageUtils.CreateTextureFromBase64(asset.id + '_roughness', asset.roughness, material);\n material.roughnessFilename = asset.roughnessFilename;\n }\n return material;\n }\n\n public static setSettingsOfMaterial(material: Material, settings: any): void {\n const shininess = parseFloat(settings['power']);\n if (!isNaN(shininess)) {\n material.shininess = shininess;\n // material.roughness = 1 - (shininess / 100);\n }\n\n const level = parseFloat(settings['level']);\n if (!isNaN(level)) {\n material.specular = new THREE.Color(level, level, level);\n }\n\n const repeatObjectUsed: boolean = settings.hasOwnProperty('repeat');\n const repeatx = repeatObjectUsed ? parseFloat(settings['repeat']['repeatx']) : parseFloat(settings['repeatx']);\n if (!isNaN(repeatx)) {\n material.repeatX = Math.max(1, repeatx);\n }\n\n const repeaty = repeatObjectUsed ? parseFloat(settings['repeat']['repeaty']) : parseFloat(settings['repeaty']);\n if (!isNaN(repeaty)) {\n material.repeatY = Math.max(1, repeaty);\n }\n\n const metalness = parseFloat(settings['metalness']);\n if (!isNaN(metalness)) {\n material.metalnessValue = Math.min(1, metalness);\n }\n\n const roughness = parseFloat(settings['roughness']);\n if (!isNaN(roughness)) {\n material.roughnessValue = Math.min(1, roughness);\n }\n }\n}\n","import {Material} from './material';\n\nexport class Variation {\n public decoId: number;\n public brandId: string;\n public gameObjectName: string;\n public node: any;\n public supplierArticleNr: string;\n public materialId: string;\n public material: Material;\n}\n","export class VariationSettings {\n public id: string;\n public settings: any = {};\n public texture: string;\n public textureFilename: string;\n public normal: string;\n public normalFilename: string;\n public ao: string;\n public aoFilename: string;\n public metalness: string;\n public metalnessFilename: string;\n public roughness: string;\n public roughnessFilename: string;\n}\n","import * as JSZip from 'jszip';\r\nimport * as THREE from 'three';\r\nimport {FileUtils} from \"./file.utils\";\r\nimport {VariationSettings} from \"../model/variation-settings\";\r\nimport axios from \"axios\";\r\n\r\n// @dynamic\r\nexport class VariationUtils {\r\n private static MaterialCache: Map<string, THREE.MeshStandardMaterial> = new Map();\r\n\r\n public static async LoadVariation(assetPath: string, fileName: string): Promise<VariationSettings> {\r\n if (!fileName) {\r\n return null;\r\n }\r\n if (fileName.indexOf('ione3d') < 0) {\r\n fileName = fileName.concat('.ione3d');\r\n }\r\n const id: string = fileName.substr(0, fileName.lastIndexOf('.ione3d'));\r\n try {\r\n if (!assetPath.endsWith('/')) {\r\n assetPath += '/';\r\n }\r\n if (!window.hasOwnProperty('downloadVariation')) {\r\n console.error('downloadVariation not defined in window global');\r\n return null;\r\n }\r\n const file: any = await (window as any).downloadVariation(`${assetPath.replace('https://cdn1.colijn-it.nl/', '')}variation/${fileName}`);\r\n return await VariationUtils.GetVariationSettingsFromFile(id, file);\r\n } catch (err) {\r\n const mute = err;\r\n return null;\r\n }\r\n }\r\n\r\n // public static GetMaterialFromName(variationFolder: string, material: any): Promise<MeshStandardMaterial> {\r\n // return new Promise((resolve: Function) => {\r\n // if (!material) {\r\n // resolve(null);\r\n // }\r\n // if (this.MaterialCache.has(material.name)) {\r\n // resolve(this.MaterialCache.get(material.name).clone());\r\n // } else {\r\n // VariationUtils.LoadVariation(variationFolder, material.name, false).then((settings: VariationSettings) => {\r\n // if (settings) {\r\n // AssetUtils.CreateMaterialFromAsset(settings).then((materialObj: Material) => {\r\n // const materialParams: MeshStandardMaterialParameters = {};\r\n // materialParams.name = material.name;\r\n // materialParams.map = materialObj.texture;\r\n // materialParams.normalMap = materialObj.normal;\r\n // materialParams.aoMap = materialObj.ao;\r\n // materialParams.roughnessMap = materialObj.roughness;\r\n // materialParams.metalnessMap = materialObj.metalness;\r\n // materialParams.roughness = 1;\r\n // materialParams.metalness = 1;\r\n // const pbrMat: MeshStandardMaterial = new MeshStandardMaterial(materialParams);\r\n // this.MaterialCache.set(material.name, pbrMat);\r\n // resolve(pbrMat.clone());\r\n // });\r\n // } else {\r\n // resolve(material);\r\n // }\r\n // });\r\n // }\r\n // });\r\n // }\r\n\r\n private static async GetVariationSettingsFromFile(id: string, compressedFile: any): Promise<VariationSettings> {\r\n if (!compressedFile) {\r\n return null;\r\n }\r\n const zipContent = await VariationUtils.GetZipContent(compressedFile);\r\n const variationSettings: VariationSettings = new VariationSettings();\r\n let index;\r\n variationSettings.id = id;\r\n\r\n if (zipContent.files['index.json']) {\r\n const indexFile: string = await zipContent.files['index.json'].async('string');\r\n index = JSON.parse(indexFile);\r\n }\r\n if (index) {\r\n await VariationUtils.CreateSettingsBasedOnIndex(index, variationSettings, zipContent);\r\n } else {\r\n await VariationUtils.CreateSettingsBasedOnFileName(variationSettings, zipContent);\r\n }\r\n return variationSettings;\r\n }\r\n\r\n private static async CreateSettingsBasedOnIndex(index: any, variationSettings: VariationSettings, zipContent: any): Promise<void> {\r\n if (index.normalFile) {\r\n variationSettings.normal = await VariationUtils.LoadFileContentFromZip(zipContent.files[index.normalFile], index.normalFile);\r\n variationSettings.normalFilename = index.normalFile;\r\n }\r\n if (index.aoFile) {\r\n variationSettings.ao = await VariationUtils.LoadFileContentFromZip(zipContent.files[index.aoFile], index.aoFile);\r\n variationSettings.aoFilename = index.aoFile;\r\n }\r\n if (index.metalnessFile) {\r\n variationSettings.metalness = await VariationUtils.LoadFileContentFromZip(zipContent.files[index.metalnessFile], index.metalnessFile);\r\n variationSettings.metalnessFilename = index.metalnessFile;\r\n }\r\n if (index.roughnessFile) {\r\n variationSettings.roughness = await VariationUtils.LoadFileContentFromZip(zipContent.files[index.roughnessFile], index.roughnessFile);\r\n variationSettings.roughnessFilename = index.roughnessFile;\r\n }\r\n if (index.diffuseFile) {\r\n variationSettings.texture = await VariationUtils.LoadFileContentFromZip(zipContent.files[index.diffuseFile], index.diffuseFile);\r\n variationSettings.textureFilename = index.diffuseFile;\r\n }\r\n variationSettings.settings =\r\n await VariationUtils.LoadFileContentFromZip(zipContent.files['repeat.json'], 'repeat.json', false) || {};\r\n Object.assign(variationSettings.settings, index.repeat);\r\n variationSettings.settings.metalness = index.metalness;\r\n variationSettings.settings.roughness = index.roughness;\r\n }\r\n\r\n private static async CreateSettingsBasedOnFileName(variationSettings: VariationSettings, zipContent: any): Promise<void> {\r\n const allLoaded: Promise<VariationSettings>[] = [];\r\n for (const fileName in zipContent.files) {\r\n if (zipContent.files[fileName]) {\r\n const file: any = await zipContent.files[fileName];\r\n if (file.name.toLowerCase().indexOf('normal') > -1 && this.FileIsImage(file.name)) {\r\n allLoaded.push(zipContent.files[fileName].async('base64').then((normalFile: any) => {\r\n variationSettings.normal = `data:image/${this.GetBase64FileType(file.name)};base64,${normalFile}`;\r\n variationSettings.normalFilename = fileName;\r\n }));\r\n } else if (file.name.toLowerCase().indexOf('ao') > -1 && this.FileIsImage(file.name)) {\r\n allLoaded.push(zipContent.files[fileName].async('base64').then((aoFile: any) => {\r\n variationSettings.ao = `data:image/${this.GetBase64FileType(file.name)};base64,${aoFile}`;\r\n variationSettings.aoFilename = fileName;\r\n }));\r\n } else if (file.name.toLowerCase().indexOf('metalness') > -1 && this.FileIsImage(file.name)) {\r\n allLoaded.push(zipContent.files[fileName].async('base64').then((metalnessFile: any) => {\r\n variationSettings.metalness = `data:image/${this.GetBase64FileType(file.name)};base64,${metalnessFile}`;\r\n variationSettings.metalnessFilename = fileName;\r\n }));\r\n } else if (file.name.toLowerCase().indexOf('roughness') > -1 && this.FileIsImage(file.name)) {\r\n allLoaded.push(zipContent.files[fileName].async('base64').then((roughnessFile: any) => {\r\n variationSettings.roughness = `data:image/${this.GetBase64FileType(file.name)};base64,${roughnessFile}`;\r\n variationSettings.roughnessFilename = fileName;\r\n }));\r\n } else if (file.name.toLowerCase().indexOf('diffuse') > -1 && this.FileIsImage(file.name)) {\r\n allLoaded.push(zipContent.files[fileName].async('base64').then((diffuseFile: any) => {\r\n variationSettings.texture = `data:image/${this.GetBase64FileType(file.name)};base64,${diffuseFile}`;\r\n variationSettings.textureFilename = fileName;\r\n }));\r\n } else if (file.name.indexOf('.jp') > -1) {\r\n allLoaded.push(zipContent.files[fileName].async('base64').then((textureFile: any) => {\r\n variationSettings.texture = 'data:image/jpeg;base64,' + textureFile;\r\n variationSettings.textureFilename = fileName;\r\n }));\r\n } else if (file.name.indexOf('.json') > -1) {\r\n allLoaded.push(zipContent.files[fileName].async('string').then((settingsFile: any) => {\r\n const settingsFileObj = JSON.parse(settingsFile);\r\n for (const key in settingsFileObj) {\r\n if (settingsFileObj[key]) {\r\n variationSettings.settings[key] = settingsFileObj[key];\r\n }\r\n }\r\n }));\r\n }\r\n }\r\n }\r\n await Promise.all(allLoaded);\r\n }\r\n\r\n private static LoadFileContentFromZip(zip: any, fileName: string, base64: boolean = true): Promise<string> {\r\n return new Promise((resolve: Function) => {\r\n if (zip && fileName) {\r\n zip.async(base64 ? 'base64' : 'string').then((fileContent: any) => {\r\n if (base64) {\r\n resolve(`data:image/${this.GetBase64FileType(fileName)};base64,${fileContent}`);\r\n } else {\r\n resolve(fileContent);\r\n }\r\n });\r\n } else {\r\n resolve(undefined);\r\n }\r\n });\r\n }\r\n\r\n private static FileIsImage(fileName: string): boolean {\r\n const ext: string = fileName.substring(fileName.lastIndexOf('.') + 1, fileName.length).toLowerCase();\r\n switch (ext) {\r\n case 'jpg':\r\n case 'jpeg':\r\n case 'png':\r\n case 'bmp':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n private static GetBase64FileType(fileName: string): string {\r\n const ext: string = fileName.substring(fileName.lastIndexOf('.') + 1, fileName.length).toLowerCase();\r\n switch (ext) {\r\n case 'jpg':\r\n case 'jpeg':\r\n return 'jpeg';\r\n case 'png':\r\n return 'png';\r\n case 'bmp':\r\n return 'bmp';\r\n default:\r\n return 'jpeg';\r\n }\r\n }\r\n\r\n // Get the content\r\n private static async GetZipContent(file): Promise<any> {\r\n const jszip = new JSZip();\r\n const content = await jszip.loadAsync(file);\r\n return content;\r\n }\r\n}\r\n","import {DecoNodeType} from \"@colijnit/configuratorapi/build/enum/deco-node-type.enum\";\r\nimport {VariationSettings} from \"../model/variation-settings\";\r\nimport {AssetUtils} from \"../utils/asset.utils\";\r\nimport {DecoNode} from \"@colijnit/configuratorapi/build/model/deco-node\";\r\nimport {Variation} from \"../model/variation\";\r\nimport * as THREE from \"three\";\r\nimport {VariationUtils} from \"../utils/variation-utils\";\r\n\r\nexport class VariationHelper {\r\n\r\n public assetPath: string;\r\n\r\n private _lastKnownVariations: Map<string, Map<string, Variation[]>> = new Map();\r\n\r\n public clearCache(): void {\r\n const valueMap: Map<string, Variation[]>[] = Array.from(this._lastKnownVariations.values());\r\n for (let i = 0; i < valueMap.length; i++) {\r\n const values = Array.from(valueMap[i].values());\r\n values.forEach((variations) => {\r\n variations.forEach((variation) => {\r\n variation.material.texture.dispose();\r\n variation.material.normal.dispose();\r\n variation.material.metalness.dispose();\r\n variation.material.roughness.dispose();\r\n variation.material.ao.dispose();\r\n })\r\n });\r\n }\r\n }\r\n\r\n public async loadPart(obj: THREE.Object3D, parts: any[], usePbr: boolean = false): Promise<void> {\r\n try {\r\n const len: number = parts.length;\r\n for (let i = 0; i < len; i++) {\r\n if (parts[i].decoNode && parts[i].decoNode.gameObjectName && parts[i].decoNode.type === DecoNodeType.Part) {\r\n const partSettings: VariationSettings =\r\n await VariationUtils.LoadVariation(this.assetPath, parts[i].decoNode.gameObjectName || parts[i].decoId);\r\n if (partSettings) {\r\n const partVariation: Variation = new Variation();\r\n partVariation.decoId = parseFloat(parts[i].decoNode.id);\r\n partVariation.brandId = parts[i].decoNode.brandId;\r\n partVariation.gameObjectName = parts[i].decoNode.gameObjectName;\r\n partVariation.material = await AssetUtils.CreateMaterialFromAsset(partSettings);\r\n // parts[i].variation = partVariation;\r\n this._applyMaterialPart(obj, partVariation, parts[i].node, usePbr);\r\n }\r\n }\r\n }\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n\r\n public async loadVariation(instanceId: string, obj: THREE.Object3D, parts: any[], usePbr: boolean = false): Promise<void> {\r\n try {\r\n const len: number = parts.length;\r\n for (let i = 0; i < len; i++) {\r\n const variations: DecoNode[] = parts[i].variations;\r\n if (!variations || variations.length === 0) {\r\n if (this._getLastKnownVariations(instanceId, parts[i].nodeId)) {\r\n parts[i].variations = this._getLastKnownVariations(instanceId, parts[i].nodeId);\r\n this._applyVariations(obj, parts[i], usePbr);\r\n continue;\r\n } else {\r\n continue;\r\n }\r\n }\r\n const lastKnownVariations: Variation[] = [];\r\n for (let j = 0; j < variations.length; j++) {\r\n const variationSettings: VariationSettings =\r\n await VariationUtils.LoadVariation(this.assetPath, variations[j].gameObjectName || parts[i].decoId);\r\n const newVariation: Variation = new Variation();\r\n newVariation.decoId = parseFloat(variations[j].id);\r\n newVariation.brandId = variations[j].brandId;\r\n newVariation.gameObjectName = variations[j].gameObjectName;\r\n newVariation.supplierArticleNr = (variations[j] as any).supplierArticleNr;\r\n newVariation.materialId = (variations[j] as any).materialId;\r\n newVariation.material = await AssetUtils.CreateMaterialFromAsset(variationSettings);\r\n lastKnownVariations.push(newVariation);\r\n }\r\n this._setLastKnownVariations(instanceId, parts[i].nodeId, lastKnownVariations);\r\n parts[i].variations = lastKnownVariations;\r\n this._applyVariations(obj, parts[i], usePbr);\r\n }\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n\r\n private _getChildrenFilterByProp(obj: THREE.Object3D, userDataObjectProp: string, prop: string, value: any): THREE.Object3D[] {\r\n return obj.children.filter((child) => {\r\n return child.userData &&\r\n child.userData.hasOwnProperty(userDataObjectProp) &&\r\n child.userData[userDataObjectProp].hasOwnProperty(prop) &&\r\n child.userData[userDataObjectProp][prop] === value;\r\n });\r\n }\r\n\r\n private _applyMaterialPart(obj: THREE.Object3D, partMaterial: any, nodeId: any, usePbr: boolean = false): void {\r\n const children = this._getChildrenFilterByProp(obj, 'selection', 'node', nodeId);\r\n const len: number = children.length;\r\n for (let i: number = 0; i < len; i++) {\r\n const child = children[i];\r\n if (child !== null && child !== undefined) {\r\n child.traverse((mesh) => {\r\n if (mesh instanceof THREE.Mesh && partMaterial) {\r\n if (Array.isArray(mesh.material)) { // multimaterial support\r\n for (let j = 0, jlen: number = mesh.material.length; j < jlen; j++) {\r\n if (mesh.material[j].name.toLowerCase().indexOf('fixed_frame') !== -1) {\r\n mesh.material[j] = this._setMeshMaterialFromVariation(mesh.material[j].name, partMaterial, usePbr);\r\n }\r\n }\r\n } else {\r\n if (mesh.material.name.toLowerCase().indexOf('fixed_frame') !== -1) {\r\n mesh.material = this._setMeshMaterialFromVariation(mesh.material.name, partMaterial, usePbr);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n private _applyVariations(obj: THREE.Object3D, part: any, usePbr: boolean = false): void {\r\n const children = this._getChildrenFilterByProp(obj, 'selection', 'node', part.node);\r\n const len: number = children.length;\r\n for (let i: number = 0; i < len; i++) {\r\n const child = children[i];\r\n if (child !== null && child !== undefined) {\r\n child.traverse((mesh) => {\r\n if (mesh instanceof THREE.Mesh && part.variations && part.variations.length > 0 && mesh.name.toLowerCase().indexOf('c_')) {\r\n for (let j = 0; j < part.variations.length; j++) {\r\n const variation: Variation = part.variations[j];\r\n if (variation.material) {\r\n const materialToSearch: string = !!variation.materialId ? variation.materialId.toLowerCase() : 'default';\r\n if (Array.isArray(mesh.material)) { // multimaterial support\r\n for (let m = 0, mlen: number = mesh.material.length; m < mlen; m++) {\r\n if (mesh.material[m].name.toLowerCase().indexOf(materialToSearch) !== -1) {\r\n mesh.material[m] = this._setMeshMaterialFromVariation(mesh.material[m].name, variation, usePbr);\r\n }\r\n }\r\n } else {\r\n if (mesh.material.name.toLowerCase().indexOf(materialToSearch) !== -1) {\r\n mesh.material = this._setMeshMaterialFromVariation(mesh.material.name, variation, usePbr);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n private _setMeshMaterialFromVariation(name: string, variation: Variation, usePbr: boolean = false): THREE.Material {\r\n if (variation.material.texture) {\r\n variation.material.texture.needsUpdate = true;\r\n }\r\n if (!usePbr) {\r\n const material: THREE.MeshPhongMaterial = new THREE.MeshPhongMaterial({\r\n name: name,\r\n shininess: variation.material.shininess,\r\n specular: variation.material.specular,\r\n map: variation.material.texture,\r\n normalMap: variation.material.normal\r\n });\r\n // material.color.setRGB(0.8, 0.8, 0.8);\r\n material.needsUpdate = true;\r\n return material;\r\n } else {\r\n const params: THREE.MeshStandardMaterialParameters = {\r\n // side: DoubleSide,\r\n name: name,\r\n roughness: variation.material.roughnessValue ? variation.material.roughnessValue : 1,\r\n metalness: variation.material.metalnessValue ? variation.material.metalnessValue : 0,\r\n // wireframe: true\r\n };\r\n if (variation.material.texture) {\r\n params.map = variation.material.texture;\r\n }\r\n if (variation.material.ao) {\r\n params.aoMap = variation.material.ao;\r\n }\r\n if (variation.material.roughness) {\r\n params.roughnessMap = variation.material.roughness;\r\n }\r\n if (variation.material.metalness) {\r\n params.metalnessMap = variation.material.metalness;\r\n }\r\n if (variation.material.normal) {\r\n params.normalMap = variation.material.normal;\r\n }\r\n const material: THREE.MeshStandardMaterial = new THREE.MeshStandardMaterial(params);\r\n material.color.setRGB(1, 1, 1);\r\n material.needsUpdate = true;\r\n return material;\r\n }\r\n }\r\n\r\n private _setLastKnownVariations(instanceId: string, id: string, variation: Variation[]): void {\r\n if (this._lastKnownVariations.has(instanceId)) {\r\n const variations = this._lastKnownVariations.get(instanceId);\r\n variations.set(id, variation);\r\n } else {\r\n const variations: Map<string, Variation[]> = new Map();\r\n this._lastKnownVariations.set(instanceId, variations.set(id, variation));\r\n }\r\n }\r\n\r\n private _getLastKnownVariations(instanceId: string, id: string): Variation[] {\r\n if (this._lastKnownVariations.has(instanceId)) {\r\n const variations = this._lastKnownVariations.get(instanceId);\r\n if (variations.has(id)) {\r\n return variations.get(id);\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n}\r\n","import {Injectable, Injector} from '@angular/core';\n\n@Injectable()\nexport class ServiceLocator {\n static injector: Injector = undefined;\n}\n","import {Injectable, Injector, OnDestroy} from '@angular/core';\nimport {Configurator} from '@colijnit/configuratorapi/build/configurator';\nimport {Subscription} from 'rxjs';\nimport {Selection} from '@colijnit/configuratorapi/build/model/selection';\nimport {Answer} from '@colijnit/configuratorapi/build/model/answer';\nimport {DataServiceResponseData} from '@colijnit/ioneconnector/build/model/data-service-response-data';\nimport {Options} from \"@colijnit/ioneconnector/build/model/options\";\nimport {QuestionAndAnswers} from \"@colijnit/configuratorapi/build/model/question-and-answers\";\nimport {ServiceLocator} from './locator.service';\nimport {notNill} from '@colijnit/configuratorapi/build/utils/function/not-nill.function';\nimport {NodeType} from '@colijnit/configuratorapi/build/enum/node-type.enum';\nimport {isNill} from '@colijnit/configuratorapi/build/utils/function/is-nill.function';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ConfiguratorService {\n\n private _configuratorApi: Configurator;\n\n constructor(private _injector: Injector) {\n if (!ServiceLocator.injector) {\n ServiceLocator.injector = _injector;\n }\n }\n\n public initApi(options: Options): void {\n this._configuratorApi = new Configurator(options);\n }\n\n public async initNodeInstance(goodId: number): Promise<DataServiceResponseData> {\n return await this._configuratorApi.initNodeInstance(goodId);\n }\n\n public async setInstanceToConfigure(id: string, showLoader: boolean = false): Promise<DataServiceResponseData> {\n return await this._configuratorApi.setInstanceToConfigure(id, showLoader);\n }\n\n public async getGoodIdFromSku(sku: string, showLoader: boolean = false): Promise<DataServiceResponseData> {\n return await this._configuratorApi.getGoodIdFromSku(sku, showLoader);\n }\n\n public async getArticleQuickSel(goodId: number, showLoader: boolean = false): Promise<DataServiceResponseData> {\n return await this._configuratorApi.getArticleQuickSel(goodId, showLoader);\n }\n\n public async getSelections(showLoader: boolean = false, publicationCode: number = 2): Promise<DataServiceResponseData> {\n const selections: DataServiceResponseData = await this._configuratorApi.getSelections(showLoader);\n selections.resultObjects.filter((s: Selection) => {\n (isNill(s.hierarchicalPublicationCode) || ((s.hierarchicalPublicationCode & publicationCode) > 0)) && (\n (s.nodeType === NodeType.Question && (((s.questionPublicationCode & publicationCode) > 0) || isNill(s.questionPublicationCode))) ||\n (s.nodeType === NodeType.Answer && (((s.answerPublicationCode & publicationCode) > 0) || isNill(s.answerPublicationCode))));\n });\n return selections;\n }\n\n public async getDecos(showLoader: boolean = false): Promise<DataServiceResponseData> {\n return await this._configuratorApi.getDecos(showLoader);\n }\n\n public async getQuestionAndAnswers(showLoader: boolean = false, publicationCode: number = 2): Promise<QuestionAndAnswers> {\n const questionAndAnswers: QuestionAndAnswers = await this._configuratorApi.getQuestionAndAnswers(showLoader);\n questionAndAnswers.answers.filter((answer: Answer) => {\n (notNill(answer.hierarchicalPublicationCode) && (answer.hierarchicalPublicationCode & publicationCode) === 0) ||\n (answer.type === NodeType.Question && (answer.questionPublicationCode & publicationCode) === 0 && notNill(answer.questionPublicationCode)) ||\n (answer.type === NodeType.Answer && (answer.publicationCode & publicationCode) === 0 && notNill(answer.publicationCode));\n });\n return questionAndAnswers;\n }\n\n public async getSingleImage(nodeId: number | string, publication: number, includeMimetype: boolean, thumb: boolean, showLoader: boolean): Promise<DataServiceResponseData> {\n if (!nodeId) {\n return null;\n }\n return await this._configuratorApi.getSingleImage(nodeId, publication, includeMimetype, thumb, showLoader);\n }\n\n public async selectSelection(selection: Selection, showLoader: boolean = false): Promise<DataServiceResponseData> {\n return await this._configuratorApi.selectSelection(selection, showLoader);\n }\n\n public async selectAnswer(answer: Answer, showLoader: boolean = false): Promise<DataServiceResponseData> {\n return await this._configuratorApi.selectAnswer(answer, showLoader);\n }\n\n}\n","import * as THREE from \"three\";\r\nimport {Options} from \"@colijnit/ioneconnector/build/model/options\";\r\nimport {DataServiceResponseData} from \"@colijnit/ioneconnector/build/model/data-service-response-data\";\r\nimport {DecoNode} from \"@colijnit/configuratorapi/build/model/deco-node\";\r\nimport {BusinessObjectFactory} from \"@colijnit/ioneconnector/build/service/business-object-factory\";\r\nimport {Selection} from \"@colijnit/configuratorapi/build/model/selection\";\r\nimport {DecoNodeType} from \"@colijnit/configuratorapi/build/enum/deco-node-type.enum\";\r\nimport {ThreedUtils} from \"../utils/threed.utils\";\r\nimport {DecoNodeKind} from \"@colijnit/configuratorapi/build/enum/deco-node-kind.enum\";\r\nimport {SceneUtils} from \"../utils/scene-utils\";\r\nimport {VariationHelper} from \"../helper/variation-helper\";\r\nimport {Article} from \"@colijnit/configuratorapi/build/model/article\";\r\nimport {ConfiguratorService} from './services/configurator.service';\r\nimport {Scene} from 'three';\r\nimport {Injectable} from '@angular/core';\r\nimport {Answer} from '@colijnit/configuratorapi/build/model/answer';\r\nimport {BehaviorSubject} from 'rxjs';\r\nimport {ServiceLocator} from './services/locator.service';\r\nimport {QuestionAndAnswers} from '@colijnit/configuratorapi/build/model/question-and-answers';\r\n\r\n@Injectable()\r\nexport class Builder {\r\n\r\n public selectionsReceived: BehaviorSubject<Selection[]> = new BehaviorSubject<Selection[]>([]);\r\n public answersReceived: BehaviorSubject<Answer[]> = new BehaviorSubject<Answer[]>([]);\r\n public modelLoaded: BehaviorSubject<THREE.Object3D> = new BehaviorSubject<THREE.Object3D>(null);\r\n\r\n private _scene: THREE.Scene;\r\n private _instanceId: string;\r\n private _sku: string;\r\n private _goodId: number;\r\n private _selections: Selection[] = [];\r\n private _answers: Answer[] = [];\r\n private _decos: DecoNode[] = [];\r\n private _placedAdjustables: any[] = [];\r\n private _placedAddables: any[] = [];\r\n private _adjustables: any[] = [];\r\n private _addables: any[] = [];\r\n\r\n private _boFactory: BusinessObjectFactory;\r\n private _source: THREE.Object3D;\r\n private _threedUtils: ThreedUtils;\r\n private _variationHelper: VariationHelper;\r\n private _articleCache: Map<string, Article> = new Map();\r\n private _configuratorService: ConfiguratorService;\r\n\r\n constructor(scene: Scene, options: Options, useInAngular: boolean) {\r\n this._boFactory = new BusinessObjectFactory();\r\n this._threedUtils = new ThreedUtils();\r\n this._variationHelper = new VariationHelper();\r\n\r\n if (!scene) {\r\n throw 'No scene object provided!';\r\n }\r\n if (!options) {\r\n throw 'No connection options provided!';\r\n }\r\n if (useInAngular) {\r\n this._configuratorService = ServiceLocator.injector.get(ConfiguratorService);\r\n } else {\r\n this._configuratorService = new ConfiguratorService(undefined);\r\n }\r\n this._configuratorService.initApi(options);\r\n this._scene = scene;\r\n }\r\n\r\n public async buildModel(sku?: string, instanceId?: string, goodId?: number): Promise<THREE.Object3D> {\r\n if (!this._scene) {\r\n return;\r\n }\r\n try {\r\n await this._setInstanceId(sku, instanceId, goodId);\r\n await this._prepareConfiguration(this._sku, this._goodId);\r\n if (this._source) {\r\n await this._configuratorService.setInstanceToConfigure(this._instanceId);\r\n const promises: Promise<any>[] = [];\r\n promises.push(this.getQuestionAndAnswers());\r\n promises.push(this._getSelections(this._instanceId));\r\n promises.push(this._getDecos());\r\n await Promise.all(promises);\r\n if (this._answers.length > 0) {\r\n return;\r\n }\r\n this._linkSelectionsAndDecos();\r\n return this._build(this._instanceId);\r\n } else {\r\n throw 'GLB source not found!';\r\n }\r\n } catch (e) {\r\n throw e;\r\n }\r\n }\r\n\r\n public initNodeInstance(goodId: number): Promise<any> {\r\n return this._configuratorService.initNodeInstance(goodId);\r\n }\r\n\r\n public destroy(): void {\r\n this._threedUtils.clearCache();\r\n this._variationHelper.clearCache();\r\n }\r\n\r\n public async selectSelection(selection: Selection): Promise<void> {\r\n await this._configuratorService.selectSelection(selection, false);\r\n this.getQuestionAndAnswers();\r\n }\r\n\r\n public async getQuestionAndAnswers(publicationCode?: number): Promise<void> {\r\n const questionsAndAnswers: QuestionAndAnswers = await this._configuratorService.getQuestionAndAnswers(false, publicationCode);\r\n this._answers = questionsAndAnswers.answers;\r\n this.answersReceived.next(questionsAndAnswers.answers);\r\n }\r\n\r\n public async selectAnswer(answer: Answer): Promise<void> {\r\n await this._configuratorService.selectAnswer(answer, false);\r\n this.modelLoaded.next(await this.buildModel());\r\n }\r\n\r\n private async _setInstanceId(sku: string, instanceId?: string, goodId?: number): Promise<void> {\r\n if (!instanceId && !this._instanceId) {\r\n if (!goodId) {\r\n goodId = await this._getGoodIdFromSku(sku);\r\n }\r\n this._goodId = goodId;\r\n const result: DataServiceResponseData = await this.initNodeInstance(this._goodId);\r\n if (result && result.resultObject) {\r\n this._instanceId = result.resultObject;\r\n } else {\r\n throw 'Failed to initialize node instance';\r\n }\r\n } else if (!this._instanceId) {\r\n this._instanceId = instanceId;\r\n }\r\n if (!this._sku) {\r\n this._sku = sku;\r\n }\r\n }\r\n\r\n private async _prepareConfiguration(sku: string, goodId?: number): Promise<void> {\r\n const article: Article = await this._getArticle(sku, goodId);\r\n if (article && article.assetUrl) {\r\n this._source = await this._threedUtils.download3DSource(article.assetUrl)\r\n .catch((error) => {\r\n throw error;\r\n });\r\n if (article.contentDeliveryUrl) {\r\n this._variationHelper.assetPath =\r\n article.contentDeliveryUrl +\r\n (article.contentDeliveryUrl.endsWith('/') ? '' : '/') +\r\n (article.distSchema ? article.distSchema : 'UP_DBA');\r\n }\r\n }\r\n }\r\n\r\n private async _build(instanceId: string): Promise<THREE.Object3D> {\r\n this._reset();\r\n const adjustables: Selection[] = this._getAdjustables();\r\n if (adjustables && adjustables.length > 0) {\r\n const obj: THREE.Object3D = new THREE.Object3D();\r\n obj.visible = false; // no need to render visualy\r\n this._scene.add(obj);\r\n let connected = false;\r\n for (let i = 0, len: number = adjustables.length; i < len; i++) {\r\n const adjustable: THREE.Object3D = this._createAdjustable(obj, adjustables[i]);\r\n if (adjustable) {\r\n for (let ii = 0, lenii: number = this._placedAdjustables.length; ii < lenii; ii++) {\r\n if (SceneUtils.TrySelectorConnection(this._scene,\r\n obj, this._placedAdjustables[ii], adjustable)) {\r\n this._placedAdjustables[ii].visible = true;\r\n adjustable.visible = true;\r\n connected = true;\r\n break;\r\n }\r\n connected = false;\r\n }\r\n }\r\n if (!connected && this._placedAdjustables.length > 1) {\r\n console.warn('No connection found for: ', adjustable.name);\r\n }\r\n }\r\n this._placeAddables(obj);\r\n this._updatePivot(obj);\r\n await this._loadVariations(obj, instanceId);\r\n this._scene.remove(obj);\r\n return obj;\r\n } else {\r\n throw 'No adjustables found!';\r\n // this._building = false;\r\n // if (this.selections.length < 2) {\r\n // this._errorService.addError(this.activeInstance, {message: 'NO_SELECTIONS_OR_DECOS', description: 'NO_SELECTIONS_OR_DECOS_INFO'});\r\n // this.buildFinished.next({instanceId: this.activeInstance, resultType: ResultType.NoSelections});\r\n // } else if (this.decos.size === 0) {\r\n // this._errorService.addError(this.activeInstance, {message: 'NO_SELECTIONS_OR_DECOS', description: 'NO_SELECTIONS_OR_DECOS_INFO'});\r\n // this.buildFinished.next({instanceId: this.activeInstance, resultType: ResultType.NoDecoNodes});\r\n // } else {\r\n // this._errorService.addError(this.activeInstance, {message: 'NO_ADJUSTABLES', description: 'NO_ADJUSTABLES_INFO'});\r\n // this.buildFinished.next({instanceId: this.activeInstance, resultType: ResultType.NoAdjustables});\r\n // }\r\n }\r\n }\r\n\r\n private _prepareTheSelections(): void {\r\n // get generic variations\r\n const globalVariations: DecoNode[] = this._selections\r\n .filter(s => s.generic && (s.decoNode as any).variation && !s.decoNode.type)\r\n .map((value: Selection, index: number, array: Selection[]) => {\r\n // find selection of variation\r\n const sel: Selection = this._selections.find(s => s.artNodeIdDeco === (value.decoNode as any).variation.id);\r\n if (sel) {\r\n (value.decoNode as any).variation.supplierArticleNr = sel.supplierArticleNr;\r\n }\r\n (value.decoNode as any).variation.materialId = value.hdecoGameObject;\r\n return (value.decoNode as any).variation;\r\n });\r\n\r\n // const usedVariations: FurniturePartVariation[] = [];\r\n let globalVariationsRewrite: boolean = true;\r\n\r\n const len: number = this._selections.length;\r\n let lastAdded: Selection;\r\n let lastAdjustable: Selection;\r\n let newPart: boolean = false;\r\n let previousPresLevel: number = -1;\r\n let positioning: any;\r\n for (let i = 0; i < len; i++) {\r\n const selection: Selection = this._selections[i];\r\n if (selection.presentationLevel === 1) {\r\n positioning = selection.hdecoPositioning;\r\n }\r\n if (selection.presentationLevel > previousPresLevel) {\r\n selection.hdecoPositioning = selection.hdecoPositioning || positioning;\r\n }\r\n if (selection.decoNode) {\r\n if (selection.decoNode.type === DecoNodeType.Variation) {\r\n if (lastAdded) {\r\n if (newPart) {\r\n lastAdded.variations = [selection.decoNode];\r\n } else {\r\n lastAdded.variations.push(selection.decoNode);\r\n }\r\n newPart = false;\r\n } else {\r\n if (globalVariationsRewrite) {\r\n globalVariations.length = 0;\r\n globalVariationsRewrite = false;\r\n }\r\n globalVariations.push(selection.decoNode);\r\n }\r\n // const variation: FurniturePartVariation = new FurniturePartVariation();\r\n // variation.BrandId = selection.decoNode.brandId;\r\n // variation.Description = selection.decoNode.gameObjectName;\r\n // variation.MaterialId = (selection.decoNode as any).materialId;\r\n // variation.SupplierArticleNr = (selection.decoNode as any).supplierArticleNr;\r\n // usedVariations.push(variation);\r\n // this._upsertFurniture(this.activeInstance, {\r\n // Variation: selection.decoNode.brandId,\r\n // VariationDescription: selection.decoNode.gameObjectName,\r\n // SupplierArticleNr: (selection.decoNode as any).supplierArticleNr\r\n // });\r\n } else if (selection.decoNode.type === DecoNodeType.Part &&\r\n typeof selection.decoNode.gameObjectName === 'string' &&\r\n selection.decoNode.gameObjectName.length) {\r\n if (selection.decoNode.kind === DecoNodeKind.Adjustable) {\r\n selection.variations = globalVariations;\r\n this._adjustables.push(selection);\r\n if (!lastAdded || lastAdded.nodeId !== selection.nodeId) {\r\n newPart = true;\r\n }\r\n lastAdded = selection;\r\n lastAdjustable = selection;\r\n } else if (selection.decoNode.kind === DecoNodeKind.Addable) {\r\n selection.variations = lastAdjustable ? lastAdjustable.variations : globalVariations;\r\n if (lastAdjustable) {\r\n lastAdjustable.addables.push(selection);\r\n }\r\n this._addables.push(selection);\r\n if (!lastAdded || lastAdded.nodeId !== selection.nodeId) {\r\n newPart = true;\r\n }\r\n lastAdded = selection;\r\n }\r\n }\r\n }\r\n previousPresLevel = selection.presentationLevel;\r\n }\r\n // this._upsertFurniture(this.activeInstance,\r\n // {Variations: usedVariations});\r\n }\r\n\r\n private _createAdjustable(parent: THREE.Object3D, adj: Selection): THREE.Object3D {\r\n let obj: any = this._source ? this._source.getObjectByName(adj.decoNode.gameObjectName) : null;\r\n if (!obj) {\r\n // in case of glb files, the importer removes dots from names\r\n const name = adj.decoNode.gameObjectName.replace(/[.]/g, '');\r\n obj = this._source ? this._source.getObjectByName(name) : null;\r\n if (!obj) {\r\n // console.warn(`No object with name ${adj.decoNode.gameObjectName} found!`);\r\n return null;\r\n }\r\n }\r\n let adjustable: any = obj.clone();\r\n adjustable.name = this._createUniqueName(parent, obj);\r\n adjustable.userData.selection = adj;\r\n adjustable.position.set(0, 0, 0);\r\n adjustable.visible = true;\r\n parent.add(adjustable);\r\n // the object being added to the customFloorGroup is being recreated so we loose the reference\r\n // therefor we need to retrieve the created object again\r\n // adjustable = parent.getObjectByName(adjustable.name);\r\n this._placedAdjustables.push(adjustable);\r\n return adjustable;\r\n }\r\n\r\n private _createAddable(parent: THREE.Object3D, add: Selection, part2?: any, part1?: any): THREE.Object3D {\r\n const obj: any = this._source.getObjectByName(add.decoNode.gameObjectName);\r\n if (!obj) {\r\n return null;\r\n }\r\n // const selection: Selection = this._getSelectionFromId(adj.artNodeIdDeco);\r\n const addable: any = obj.clone();\r\n addable.name = this._createUniqueName(parent, obj);\r\n addable.userData.selection = add;\r\n addable.position.set(0, 0, 0);\r\n addable.visible = true;\r\n if (part1 && part2) {\r\n parent.add(addable);\r\n this._placedAddables.push(addable);\r\n return addable;\r\n }\r\n return addable;\r\n }\r\n\r\n private _placeAddables(parent: THREE.Object3D): void {\r\n const len: number = this._placedAdjustables.length;\r\n for (let i = 0; i < len; i++) {\r\n if (this._placedAdjustables[i].userData.hasOwnProperty('selection') && this._placedAdjustables[i].userData.selection) {\r\n const adjustableSelection: Selection = this._placedAdjustables[i].userData.selection;\r\n if (adjustableSelection) {\r\n const lena: number = adjustableSelection.addables.length;\r\n let conAddable: any;\r\n for (let ia = 0; ia < lena; ia++) {\r\n SceneUtils.TrySelectorConnection(this._scene,\r\n parent, this._placedAdjustables[i], adjustableSelection.addables[ia],\r\n (add, part2?, part1?) => this._createAddable(parent, add, part2, part1));\r\n if (conAddable) {\r\n SceneUtils.TrySelectorConnection(this._scene,\r\n parent, conAddable, adjustableSelection.addables[ia],\r\n (add, part2?, part1?) => this._createAddable(parent, add, part2, part1));\r\n }\r\n conAddable = this._placedAddables[this._placedAddables.length - 1];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n private _createUniqueName(parent: THREE.Object3D, obj: THREE.Object3D): string {\r\n let iteration = 0;\r\n let name = obj.name;\r\n let existingObj = parent.getObjectByName(name);\r\n while (existingObj) {\r\n iteration++;\r\n name = obj.name + (iteration !== 0 ? ('_' + iteration) : '');\r\n existingObj = parent.getObjectByName(name);\r\n }\r\n return name;\r\n }\r\n\r\n private async _getGoodIdFromSku(sku: string): Promise<number> {\r\n const response: DataServiceResponseData = await this._configuratorService.getGoodIdFromSku(sku, false);\r\n if (response.validationResult.success && response.resultObject) {\r\n return response.resultObject;\r\n }\r\n }\r\n\r\n private async _getArticle(sku: string, goodId: number): Promise<Article> {\r\n if (this._articleCache.has(sku)) {\r\n return this._articleCache.get(sku);\r\n }\r\n if (!goodId) {\r\n goodId = await this._getGoodIdFromSku(sku)\r\n .catch((error) => {\r\n throw `Article with sku ${sku} not found!`;\r\n });\r\n }\r\n let article: Article;\r\n const articleResponse: DataServiceResponseData = await this._configuratorService.getArticleQuickSel(goodId, false);\r\n if (articleResponse.validationResult.success && articleResponse.resultObject) {\r\n if (articleResponse.resultObject.hasOwnProperty('oArticle')) {\r\n const obj = Array.isArray(articleResponse.resultObject['oArticle']) ? articleResponse.resultObject['oArticle'][0] : articleResponse.resultObject['oArticle'];\r\n article = <Article>this._boFactory.makeWithRawBackendData(Article, obj);\r\n } else {\r\n article = <Article>this._boFactory.makeWithRawBackendData(Article, articleResponse.resultObject);\r\n }\r\n }\r\n this._articleCache.set(sku, article);\r\n return article;\r\n }\r\n\r\n private async _getSelections(instanceId: string, publicationCode?: number): Promise<void> {\r\n this._selections = [];\r\n const selectionResponse: DataServiceResponseData = await this._configuratorService.getSelections(false, publicationCode);\r\n if (selectionResponse.resultObjects && selectionResponse.resultObjects.length > 0) {\r\n this._selections = <Selection[]>this._boFactory.makeBOArrayFromRawBackendDataArray(Selection, selectionResponse.resultObjects);\r\n this._selections.forEach(s => s.instanceId = instanceId);\r\n // const filtered: Selection[] = this._selections.filter(s => s.nodeType !== NodeType.Article && s.presentationLevel === 1);\r\n this.selectionsReceived.next(this._selections);\r\n } else {\r\n throw 'No selections found!';\r\n }\r\n }\r\n\r\n private async _getDecos(): Promise<void> {\r\n this._decos = [];\r\n const decosResponse: DataServiceResponseData = await this._configuratorService.getDecos(false);\r\n if (decosResponse.resultObjects && decosResponse.resultObjects.length > 0) {\r\n this._decos = <DecoNode[]>this._boFactory.makeBOArrayFromRawBackendDataArray(DecoNode, decosResponse.resultObjects);\r\n } else {\r\n throw 'No deconodes found!';\r\n }\r\n }\r\n\r\n private _linkSelectionsAndDecos(): void {\r\n const len: number = this._selections.length;\r\n for (let i = 0; i < len; i++) {\r\n let id: string = this._selections[i].artNodeIdDeco;\r\n // if (this._useNodeIdToLink) {\r\n // id = `${this._selections[i].node}_${this._selections[i].artNodeIdDeco}`;\r\n // }\r\n let deco: any = this._decos.find(d => d.id === id);\r\n if (!deco) {\r\n deco = new DecoNode();\r\n }\r\n const variation: any = this._getVariations().find(v => v.parentId === this._selections[i].artNodeIdDeco);\r\n if (variation) {\r\n deco.variation = variation;\r\n }\r\n this._selections[i].decoNode = deco;\r\n }\r\n }\r\n\r\n private _getVariations(): DecoNode[] {\r\n return this._decos.filter((deco: DecoNode) => {\r\n return deco.type === DecoNodeType.Variation;\r\n });\r\n }\r\n\r\n private async _loadVariations(obj: THREE.Object3D, instanceId: string): Promise<void> {\r\n await this._variationHelper.loadPart(obj, this._adjustables, true);\r\n await this._variationHelper.loadVariation(instanceId, obj, this._adjustables, true);\r\n await this._variationHelper.loadVariation(instanceId, obj, this._addables, true);\r\n }\r\n\r\n private _getAdjustables(): Selection[] {\r\n return this._selections.filter(s => {\r\n const node: DecoNode = s.decoNode;\r\n return node && node.gameObjectName && node.type === DecoNodeType.Part && node.kind === DecoNodeKind.Adjustable;\r\n });\r\n }\r\n\r\n private _updatePivot(obj: THREE.Object3D) {\r\n const boundingBox = new THREE.Box3().setFromObject(obj);\r\n const bbCenterPivot = new THREE.Vector3();\r\n boundingBox.getCenter(bbCenterPivot);\r\n const delta: THREE.Vector3 = new THREE.Vector3().sub(bbCenterPivot).setY(Math.abs(Math.min(boundingBox.min.y, 0)));\r\n\r\n obj.children.forEach((child: any) => {\r\n child.position.add(delta);\r\n });\r\n obj.updateWorldMatrix(false, true);\r\n }\r\n\r\n private _reset(): void {\r\n this._placedAddables.length = 0;\r\n this._placedAdjustables.length = 0;\r\n this._adjustables.length = 0;\r\n this._addables.length = 0;\r\n this._prepareTheSelections();\r\n }\r\n}\r\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\r\nimport {Answer} from \"@colijnit/configuratorapi/build/model/answer\";\r\n\r\n@Component({\r\n selector: \"answers\",\r\n template: `\r\n <div class=\"ione-configurator\">\r\n <div class=\"rp-answers-slideout\">\r\n <h2 class=\"answers-title\" [textContent]=\"selectionTitle\"></h2>\r\n <div class=\"answers-container\" visibilityObserverMaster>\r\n <answer *ngFor=\"let answer of answers\"\r\n (click)=\"answerClick.emit(answer)\"\r\n [answer]=\"answer\"\r\n visibilityObserver\r\n #intersection=\"intersection\"\r\n [observerEnabled]=\"true\"\r\n [showing]=\"intersection.isIntersecting\"\r\n ></answer>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n `,\r\n styleUrls: [\r\n '../../../style/shared.scss'\r\n ]\r\n})\r\n\r\nexport class AnswersComponent {\r\n @Input()\r\n public answers: Answer[] = [];\r\n\r\n @Input()\r\n public selectionTitle: string;\r\n\r\n @Output()\r\n public answerClick: EventEmitter<Answer> = new EventEmitter<Answer>();\r\n\r\n constructor() {}\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\nimport {DataServiceResponseData} from '@colijnit/ioneconnector/build/model/data-service-response-data';\nimport {ImageUtils} from '../../utils/image.utils';\nimport {Answer} from '@colijnit/configuratorapi/build/model/answer';\nimport {Selection} from '@colijnit/configuratorapi/build/model/selection';\nimport {ConfiguratorService} from './configurator.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ImageCacheService {\n\n // Map containing the retrieved images, @number = nodeId, @string = base64 string\n private _imageCache: Map<number, string> = new Map();\n\n constructor(private _configuratorService: ConfiguratorService) { }\n\n private static _handleResponseData(includeMimetype: boolean, thumb: boolean, responseData: DataServiceResponseData): string {\n if (responseData && responseData.resultObject) {\n if (responseData.resultObject.filePath !== null && responseData.resultObject.filePath !== \"\") {\n return ImageUtils.getFixedImageFilepathUrl(responseData.resultObject.filePath);\n } else {\n if (includeMimetype) {\n return ImageUtils.getDocBodyWithMimeTypeDefinition(responseData.resultObject.fileName,\n thumb ? responseData.resultObject.thumbnailBody : responseData.resultObject.documentBody);\n } else {\n return thumb ? responseData.resultObject.thumbnailBody : responseData.resultObject.documentBody;\n }\n }\n } else {\n return '';\n }\n }\n\n public getImageForSelectionOrAnswer(object: Selection | Answer): Promise<string> {\n const includeMimeType: boolean = true, thumb: boolean = true;\n return new Promise((resolve: Function, reject: Function) => {\n if (object && object.nodeId) {\n if (!this._imageCache.has(object.nodeId)) {\n return this._configuratorService.getSingleImage(object.nodeId, 4, includeMimeType, thumb, true)\n .then((responseData: DataServiceResponseData) => {\n const base64: string = ImageCacheService._handleResponseData(includeMimeType, thumb, responseData);\n this._imageCache.set(object.nodeId, base64);\n resolve(base64);\n }).catch(() => {\n reject();\n });\n } else {\n resolve(this._imageCache.get(object.nodeId));\n }\n } else {\n reject();\n }\n });\n }\n}\n","import {Component, Input, OnInit} from '@angular/core';\nimport {ImageCacheService} from '../../../services/image-cache.service';\nimport {Answer} from '@colijnit/configuratorapi/build/model/answer';\nimport {animate, state, style, transition, trigger} from '@angular/animations';\n\n@Component({\n selector: 'answer',\n template: `\n <div class=\"ione-configurator\">\n <div class=\"answer-wrapper\">\n <div class=\"answer-content\" @answerAppear>\n <div class=\"answer-thumbnail\">\n <rp-loader *ngIf=\"answer.imageData === ''\"></rp-loader>\n <img *ngIf=\"answer.imageData !== '' && answer.imageData !== null\" class=\"answer-img\" [src]=\"answer.imageData\">\n </div>\n <div class=\"answer-title-wrapper\">\n <span class=\"answer-title\" [textContent]=\"answer.commercialAnswer\"></span>\n </div>\n <div class=\"price\">\n <span class=\"price-value\"></span>\n </div>\n </div>\n </div>\n </div>\n `,\n styleUrls: [\n '../../../../style/shared.scss'\n ],\n animations: [\n trigger('answerAppear', [\n state('void', style({'background': '#dbdbdb'})),\n state('white', style({'background': 'white'})),\n transition('void <=> *', animate(500))\n ])\n ]\n})\nexport class AnswerComponent implements OnInit {\n @Input()\n public answer: Answer;\n\n @Input()\n public set showing(value: boolean) {\n this.answer.imageData = '';\n if (value && this.answer.answer !== 'Skip / Cancel') {\n this._loadThumbnail(this.answer);\n } else {\n this.answer.imageData = null;\n }\n }\n\n constructor(private _imageCacheService: ImageCacheService) { }\n\n public ngOnInit(): void {\n }\n\n private async _loadThumbnail(answer: Answer): Promise<void> {\n await this._imageCacheService.getImageForSelectionOrAnswer(answer).then((imageSrc: string) => {\n answer.imageData = imageSrc === \"\" ? null : imageSrc;\n });\n }\n}\n","// Import the core angular services.\nimport {Directive, OnDestroy} from '@angular/core';\n\n@Directive({\n selector: '[visibilityObserverMaster]'\n})\nexport class VisibilityObserverMasterDirective implements OnDestroy {\n\n private _mapping: Map<Element, Function>;\n private _observer: IntersectionObserver;\n\n // I initialize the intersection observer parent directive.\n constructor() {\n\n // As each observable child attaches itself to the parent observer, we need to\n // map Elements to Callbacks so that when an Element's intersection changes,\n // we'll know which callback to invoke. For this, we'll use an ES6 Map.\n this._mapping = new Map();\n\n this._observer = new IntersectionObserver(\n (entries: IntersectionObserverEntry[]) => {\n\n for (const entry of entries) {\n\n const callback = this._mapping.get(entry.target);\n if (callback) {\n callback(entry.isIntersecting);\n }\n }\n\n },\n {\n // This classifies the \"intersection\" as being a bit outside the\n // viewport. The intent here is give the elements a little time to react\n // to the change before the element is actually visible to the user.\n rootMargin: '300px 0px 300px 0px'\n }\n );\n\n }\n\n // I get called once when the host element is being destroyed.\n public ngOnDestroy(): void {\n\n this._mapping.clear();\n this._observer.disconnect();\n\n }\n\n // ---\n // PUBLIC METHODS.\n // ---\n\n // I add the given Element for intersection observation. When the intersection status\n // changes, the given callback is invoked with the new status.\n public add(element: HTMLElement, callback: Function): void {\n\n this._mapping.set(element, callback);\n this._observer.observe(element);\n\n }\n\n // I remove the given Element from intersection observation.\n public remove(element: HTMLElement): void {\n\n this._mapping.delete(element);\n this._observer.unobserve(element);\n\n }\n\n}\n","import {Directive, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output} from '@angular/core';\nimport {VisibilityObserverMasterDirective} from './visibility-observer-master.directive';\n\n@Directive({\n selector: '[visibilityObserver]',\n exportAs: 'intersection'\n})\nexport class VisibilityObserverDirective implements OnDestroy, OnInit {\n\n @Input()\n public observerEnabled: boolean = false;\n\n public isIntersecting: boolean;\n // These are just some human-friendly constants to make the HTML template a bit more\n // readable when being consumed as part of SWTCH/CASE statements.\n public IS_INTERSECTING: boolean = true;\n public IS_NOT_INTERSECTING: boolean = false;\n\n private _elementRef: ElementRef;\n private _parent: VisibilityObserverMasterDirective;\n\n // I initialize the intersection observer directive.\n constructor(\n parent: VisibilityObserverMasterDirective,\n elementRef: ElementRef\n ) {\n\n this._parent = parent;\n this._elementRef = elementRef;\n\n // By default, we're going to assume that the host element is NOT intersecting.\n // Then, we'll use the IntersectionObserver to asynchronously check for changes\n // in viewport visibility.\n this.isIntersecting = false;\n\n }\n\n // ---\n // PUBLIC METHODS.\n // ---\n\n // I get called once when the host element is being destroyed.\n public ngOnDestroy(): void {\n\n this._parent.remove(this._elementRef.nativeElement);\n this._elementRef = undefined;\n\n }\n\n\n // I get called once after the inputs have been bound for the first time.\n public ngOnInit(): void {\n\n // In this demo, instead of using an IntersectionObserver per Element, we're\n // going to use a shared observer in the parent element. However, we're still\n // going to use a CALLBACK style approach so that we're only reducing the number\n // of IntersectionObserver instances, not the number of Function calls.\n if (this.observerEnabled) {\n this._parent.add(\n this._elementRef.nativeElement,\n (isIntersecting: boolean) => {\n\n this.isIntersecting = isIntersecting;\n if (this.isIntersecting) {\n this._parent.remove(this._elementRef.nativeElement);\n }\n\n }\n );\n }\n\n }\n\n}\n","import {Component} from '@angular/core';\n\n@Component({\n selector: 'rp-loader',\n template: `\n <div class=\"loader-wrapper\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" stroke=\"#3760a1\">\n <g fill=\"none\" fill-rule=\"evenodd\" stroke-width=\"3\">\n <circle class=\"ripple1\" cx=\"22\" cy=\"22\" r=\"19\">\n </circle>\n <circle class=\"ripple2\" cx=\"22\" cy=\"22\" r=\"19\">\n </circle>\n </g>\n </svg>\n </div>\n `,\n styleUrls: ['./loader.component.scss']\n})\nexport class LoaderComponent {\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {LoaderComponent} from './loader/loader.component';\n\n@NgModule({\n imports: [\n CommonModule\n ],\n declarations: [\n LoaderComponent\n ],\n exports: [\n LoaderComponent\n ]\n})\nexport class SharedModule { }\n","import {NgModule} from \"@angular/core\";\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {AnswersComponent} from \"./answers.component\";\r\nimport { AnswerComponent } from './answer/answer.component';\r\nimport {VisibilityObserverDirective} from '../../directives/visibility-observer.directive';\r\nimport {VisibilityObserverMasterDirective} from '../../directives/visibility-observer-master.directive';\r\nimport {SharedModule} from '../shared/shared.module';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n SharedModule\r\n ],\r\n declarations: [\r\n AnswersComponent,\r\n AnswerComponent,\r\n VisibilityObserverDirective,\r\n VisibilityObserverMasterDirective\r\n ],\r\n exports: [\r\n AnswersComponent\r\n ]\r\n})\r\nexport class AnswersModule {\r\n\r\n}\r\n","import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';\r\nimport {Selection} from \"@colijnit/configuratorapi/build/model/selection\";\r\nimport {animate, state, style, transition, trigger} from \"@angular/animations\";\r\nimport {ImageCacheService} from '../../services/image-cache.service';\r\n\r\nclass SelectionViewModel {\r\n public selection: Selection;\r\n public children: Selection[] = [];\r\n public expanded: boolean = false;\r\n public thumbnail: string = '';\r\n}\r\n\r\n@Component({\r\n selector: \"selections\",\r\n template: `\r\n <div class=\"ione-configurator\">\r\n <div class=\"rp-selections-summary\">\r\n <header class=\"drawer__header\">\r\n <h2 class=\"mat-title\" [textContent]=\"'Configuratie'\"></h2>\r\n <!--<button>-->\r\n <!---->\r\n <!--</button>-->\r\n </header>\r\n <div class=\"selections-content\">\r\n <ng-container *ngFor=\"let selectionViewModel of selectionViewModels\">\r\n\r\n <div class=\"co-summary-line\" (click)=\"selectSelection(selectionViewModel.selection, $event)\">\r\n <div class=\"selection-thumbnail\">\r\n <rp-loader *ngIf=\"selectionViewModel.thumbnail === ''\"></rp-loader>\r\n <img visibilityObserver *ngIf=\"selectionViewModel.thumbnail !== '' && selectionViewModel.thumbnail !== null\" class=\"selection-img\" [src]=\"selectionViewModel.thumbnail\">\r\n </div>\r\n <div class=\"titles\">\r\n <div class=\"title-wrapper\">\r\n <label class=\"question\" [textContent]=\"selectionViewModel.selection.question\"></label>\r\n <span class=\"answer\" [textContent]=\"selectionViewModel.selection.answer\"></span>\r\n <div *ngIf=\"selectionViewModel.children.length > 0 && selectionViewModel.expanded\" @showHideChildren>\r\n <div class=\"child-selection\" *ngFor=\"let selection of selectionViewModel.children\"\r\n (click)=\"selectSelection(selection, $event)\"\r\n >\r\n <label class=\"question\" [textContent]=\"selection.commercialQuestion\"></label>\r\n <span class=\"answer\" [textContent]=\"selection.answer\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"price-wrapper\">\r\n <span class=\"price-value\"></span>\r\n </div>\r\n\r\n <div class=\"collapse-wrapper\">\r\n <div class=\"collapse-content\">\r\n <div class=\"collapse-handle\" [class.expanded]=\"selectionViewModel.expanded\"\r\n *ngIf=\"selectionViewModel.children.length > 0\" (click)=\"expandClicked(selectionViewModel, $event)\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n styleUrls: [\r\n '../../../style/shared.scss'\r\n ],\r\n animations: [\r\n trigger('showHideChildren', [\r\n state('void', style({'height': '0'})),\r\n state('*', style({'height': '*'})),\r\n transition('void <=> *', animate(200))\r\n ])\r\n ]\r\n})\r\n\r\nexport class SelectionsComponent implements OnInit {\r\n @Input()\r\n public set selections(value: Selection[]) {\r\n this._prepareSelections(value);\r\n this._loadThumbnails();\r\n }\r\n\r\n public selectionViewModels: SelectionViewModel[] = [];\r\n\r\n @Output()\r\n public selectionClick: EventEmitter<Selection> = new EventEmitter<Selection>();\r\n\r\n constructor(private _imageCacheService: ImageCacheService) {}\r\n\r\n public ngOnInit(): void {\r\n\r\n }\r\n\r\n public expandClicked(selectionViewModel: SelectionViewModel, mouseEvent: MouseEvent): void {\r\n mouseEvent.preventDefault();\r\n mouseEvent.stopImmediatePropagation();\r\n selectionViewModel.expanded = !selectionViewModel.expanded;\r\n }\r\n\r\n public selectSelection(selection: Selection, mouseEvent: MouseEvent): void {\r\n mouseEvent.preventDefault();\r\n mouseEvent.stopImmediatePropagation();\r\n this.selectionClick.next(selection);\r\n }\r\n\r\n private async _loadThumbnails(): Promise<void> {\r\n if (this.selectionViewModels.length > 0) {\r\n this.selectionViewModels.forEach(async (viewModel: SelectionViewModel) => {\r\n await this._imageCacheService.getImageForSelectionOrAnswer(viewModel.selection).then((imageSrc: string) => {\r\n viewModel.thumbnail = imageSrc === \"\" ? null : imageSrc;\r\n });\r\n });\r\n }\r\n }\r\n\r\n private _prepareSelections(value: Selection[]): void {\r\n this.selectionViewModels.length = 0;\r\n let selectionViewModel: SelectionViewModel;\r\n value.forEach(s => {\r\n if (s.presentationLevel === 1) {\r\n selectionViewModel = new SelectionViewModel();\r\n selectionViewModel.selection = s;\r\n this.selectionViewModels.push(selectionViewModel);\r\n } else if (s.presentationLevel > 1) {\r\n if (selectionViewModel) {\r\n selectionViewModel.children.push(s);\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","import {NgModule} from \"@angular/core\";\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {SelectionsComponent} from \"./selections.component\";\r\nimport {SharedModule} from '../shared/shared.module';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n SharedModule\r\n ],\r\n declarations: [\r\n SelectionsComponent\r\n ],\r\n exports: [\r\n SelectionsComponent\r\n ]\r\n})\r\nexport class SelectionsModule {\r\n\r\n}\r\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public_api';
|
|
5
|
+
export { AnswerComponent as ɵc } from './app/components/answers/answer/answer.component';
|
|
6
|
+
export { LoaderComponent as ɵb } from './app/components/shared/loader/loader.component';
|
|
7
|
+
export { SharedModule as ɵa } from './app/components/shared/shared.module';
|
|
8
|
+
export { VisibilityObserverMasterDirective as ɵf } from './app/directives/visibility-observer-master.directive';
|
|
9
|
+
export { VisibilityObserverDirective as ɵe } from './app/directives/visibility-observer.directive';
|
|
10
|
+
export { ImageCacheService as ɵd } from './app/services/image-cache.service';
|