@abi-software/scaffoldvuer 0.1.5-1.beta.0 → 0.1.5-1.beta.1
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/dist/scaffoldvuer.common.js +71 -85
- package/dist/scaffoldvuer.common.js.map +1 -1
- package/dist/scaffoldvuer.css +1 -1
- package/dist/scaffoldvuer.umd.js +71 -85
- package/dist/scaffoldvuer.umd.js.map +1 -1
- package/dist/scaffoldvuer.umd.min.js +1 -1
- package/dist/scaffoldvuer.umd.min.js.map +1 -1
- package/package.json +1 -1
- package/src/components/ScaffoldVuer.vue +18 -16
- package/src/components/TraditionalControls.vue +15 -25
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack://scaffoldvuer/webpack/universalModuleDefinition","webpack://scaffoldvuer/webpack/bootstrap","webpack://scaffoldvuer/./src/components/TraditionalControls.vue?1d8d","webpack://scaffoldvuer/external \"core-js/modules/es.symbol.iterator\"","webpack://scaffoldvuer/external \"element-ui/lib/checkbox-group\"","webpack://scaffoldvuer/external \"element-ui/lib/theme-chalk/checkbox-group.css\"","webpack://scaffoldvuer/external \"element-ui/lib/select\"","webpack://scaffoldvuer/external \"element-ui/lib/theme-chalk/select.css\"","webpack://scaffoldvuer/./node_modules/physiomeportal/src/utilities/WebGL.js","webpack://scaffoldvuer/external \"core-js/modules/es.array.for-each\"","webpack://scaffoldvuer/./node_modules/physiomeportal/src/shaders/varyingTexture.vs","webpack://scaffoldvuer/external \"core-js/modules/es.array.concat\"","webpack://scaffoldvuer/external \"element-ui/lib/container\"","webpack://scaffoldvuer/external \"core-js/modules/web.dom-collections.iterator\"","webpack://scaffoldvuer/external \"element-ui/lib/main\"","webpack://scaffoldvuer/external \"core-js/modules/es.object.keys\"","webpack://scaffoldvuer/./src/components/OpacityControls.vue?cbe9","webpack://scaffoldvuer/./src/components/TraditionalControls.vue?6a8e","webpack://scaffoldvuer/external \"core-js/modules/web.url\"","webpack://scaffoldvuer/external \"element-ui/lib/theme-chalk/loading.css\"","webpack://scaffoldvuer/external \"element-ui/lib/header\"","webpack://scaffoldvuer/external \"element-ui/lib/theme-chalk/tabs.css\"","webpack://scaffoldvuer/external \"core-js/modules/es.number.to-fixed\"","webpack://scaffoldvuer/external \"element-ui/lib/tab-pane\"","webpack://scaffoldvuer/external \"element-ui/lib/theme-chalk/color-picker.css\"","webpack://scaffoldvuer/external \"element-ui/lib/drawer\"","webpack://scaffoldvuer/./node_modules/physiomeportal/src/modules/BaseModule.js","webpack://scaffoldvuer/external \"@abi-software/svg-sprite\"","webpack://scaffoldvuer/external \"element-ui/lib/color-picker\"","webpack://scaffoldvuer/external \"element-ui/lib/theme-chalk/drawer.css\"","webpack://scaffoldvuer/external \"lodash/uniq\"","webpack://scaffoldvuer/./node_modules/physiomeportal/src/shaders/varyingTexture.fs","webpack://scaffoldvuer/external \"element-ui/lib/theme-chalk/header.css\"","webpack://scaffoldvuer/external \"core-js/modules/es.symbol.description\"","webpack://scaffoldvuer/external \"core-js/modules/es.regexp.exec\"","webpack://scaffoldvuer/./node_modules/physiomeportal/src/utilities/eventNotifier.js","webpack://scaffoldvuer/external \"element-ui/lib/theme-chalk/checkbox.css\"","webpack://scaffoldvuer/./src/components/OpacityControls.vue?e8dc","webpack://scaffoldvuer/external \"core-js/modules/es.regexp.to-string\"","webpack://scaffoldvuer/external \"core-js/modules/es.symbol\"","webpack://scaffoldvuer/./src/components/ScaffoldVuer.vue?7756","webpack://scaffoldvuer/external \"core-js/modules/es.array.slice\"","webpack://scaffoldvuer/./node_modules/physiomeportal/src/modules/organsRenderer.js","webpack://scaffoldvuer/external \"lodash/orderBy\"","webpack://scaffoldvuer/external \"core-js/modules/es.array.index-of\"","webpack://scaffoldvuer/external \"element-ui/lib/locale/lang/en\"","webpack://scaffoldvuer/external \"element-ui/lib/row\"","webpack://scaffoldvuer/./node_modules/physiomeportal/src/varyingTexCoordsReader.js","webpack://scaffoldvuer/external \"element-ui/lib/theme-chalk/col.css\"","webpack://scaffoldvuer/external \"element-ui/lib/theme-chalk/main.css\"","webpack://scaffoldvuer/./node_modules/physiomeportal/src/ui/tooltip.js","webpack://scaffoldvuer/./node_modules/physiomeportal/src/modules/RendererModule.js","webpack://scaffoldvuer/external \"core-js/modules/es.array.splice\"","webpack://scaffoldvuer/./src/components/ScaffoldVuer.vue?832c","webpack://scaffoldvuer/external \"element-ui/lib/locale\"","webpack://scaffoldvuer/external \"element-ui/lib/theme-chalk/option.css\"","webpack://scaffoldvuer/external \"core-js/modules/es.object.to-string\"","webpack://scaffoldvuer/external \"vue\"","webpack://scaffoldvuer/external \"element-ui/lib/tabs\"","webpack://scaffoldvuer/external \"core-js/modules/es.array.iterator\"","webpack://scaffoldvuer/./node_modules/physiomeportal/src/utilities/graphicsHighlight.js","webpack://scaffoldvuer/external \"element-ui/lib/theme-chalk/icon.css\"","webpack://scaffoldvuer/external \"core-js/modules/es.string.iterator\"","webpack://scaffoldvuer/external \"zincjs\"","webpack://scaffoldvuer/external \"element-ui/lib/popover\"","webpack://scaffoldvuer/external \"element-ui/lib/theme-chalk/slider.css\"","webpack://scaffoldvuer/external \"element-ui/lib/theme-chalk/tab-pane.css\"","webpack://scaffoldvuer/external \"element-ui/lib/theme-chalk/base.css\"","webpack://scaffoldvuer/external \"@soda/get-current-script\"","webpack://scaffoldvuer/./node_modules/physiomeportal/src/utilities/annotation.js","webpack://scaffoldvuer/external \"element-ui/lib/col\"","webpack://scaffoldvuer/external \"element-ui/lib/theme-chalk/popover.css\"","webpack://scaffoldvuer/external \"element-ui/lib/slider\"","webpack://scaffoldvuer/external \"core-js/modules/es.array.includes\"","webpack://scaffoldvuer/external \"element-ui/lib/loading\"","webpack://scaffoldvuer/./src/components/TraditionalControls.vue?54dd","webpack://scaffoldvuer/external \"element-ui/lib/theme-chalk/container.css\"","webpack://scaffoldvuer/external \"element-ui/lib/icon\"","webpack://scaffoldvuer/./node_modules/physiomeportal/src/styles/tooltip.css?ab35","webpack://scaffoldvuer/external \"element-ui/lib/checkbox\"","webpack://scaffoldvuer/external \"core-js/modules/es.function.name\"","webpack://scaffoldvuer/external \"core-js/modules/web.dom-collections.for-each\"","webpack://scaffoldvuer/external \"core-js/modules/es.string.replace\"","webpack://scaffoldvuer/external \"element-ui/lib/option\"","webpack://scaffoldvuer/external \"broadcast-channel\"","webpack://scaffoldvuer/./src/components/ScaffoldVuer.vue?45e7","webpack://scaffoldvuer/external \"core-js/modules/es.array.from\"","webpack://scaffoldvuer/./src/components/TraditionalControls.vue?1801","webpack://scaffoldvuer/./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js","webpack://scaffoldvuer/./src/components/ScaffoldVuer.vue?0cf8","webpack://scaffoldvuer/./src/components/OpacityControls.vue?a3fc","webpack://scaffoldvuer/src/components/OpacityControls.vue","webpack://scaffoldvuer/./src/components/OpacityControls.vue?c7a4","webpack://scaffoldvuer/./node_modules/vue-loader/lib/runtime/componentNormalizer.js","webpack://scaffoldvuer/./src/components/OpacityControls.vue","webpack://scaffoldvuer/./src/components/TraditionalControls.vue?21e2","webpack://scaffoldvuer/./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","webpack://scaffoldvuer/./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","webpack://scaffoldvuer/./node_modules/@babel/runtime/helpers/esm/iterableToArray.js","webpack://scaffoldvuer/./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","webpack://scaffoldvuer/./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","webpack://scaffoldvuer/./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","webpack://scaffoldvuer/src/components/TraditionalControls.vue","webpack://scaffoldvuer/./src/components/TraditionalControls.vue?54bd","webpack://scaffoldvuer/./src/components/TraditionalControls.vue","webpack://scaffoldvuer/src/components/ScaffoldVuer.vue","webpack://scaffoldvuer/./src/components/ScaffoldVuer.vue?13bd","webpack://scaffoldvuer/./src/components/ScaffoldVuer.vue","webpack://scaffoldvuer/./src/components/index.js","webpack://scaffoldvuer/./node_modules/@vue/cli-service/lib/commands/build/entry-lib-no-default.js","webpack://scaffoldvuer/./src/components/ScaffoldVuer.vue?6f3c","webpack://scaffoldvuer/external \"core-js/modules/es.string.includes\"","webpack://scaffoldvuer/external \"element-ui/lib/theme-chalk/row.css\""],"names":["_arrayLikeToArray","arr","len","length","i","arr2","Array","_arrayWithoutHoles","isArray","arrayLikeToArray","_iterableToArray","iter","Symbol","iterator","Object","from","_unsupportedIterableToArray","o","minLen","n","prototype","toString","call","slice","constructor","name","test","_nonIterableSpread","TypeError","_toConsumableArray","arrayWithoutHoles","iterableToArray","unsupportedIterableToArray","nonIterableSpread"],"mappings":"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;AAEA;AACA,mBAAmB,0BAA0B;AAC7C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,0BAA0B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,C;;AAEA;;;;;;;;ACnEA,oE;;;;;;;ACAA,uC;;;;;;;ACAA,gE;;;;;;;ACAA,sD;;;;;;;;ACAA;AAAA;AAAA;;;;;;;;ACAA,2D;;;;;;;ACAA,YAAY,mBAAO,CAAC,MAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA,eAAe,uBAAuB;AACtC;AACA,aAAa;AACb;AACA;AACA,GAAG,mBAAO,CAAC,MAAkB;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,iCAAiC;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,uBAAuB;AACzC;AACA;AACA;AACA;AACA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;AACA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,mBAAO,CAAC,MAA2B;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,0CAA0C;AAC9D;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,oCAAoC;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,wBAAwB,mBAAO,CAAC,MAAyB;AACzD,qBAAqB;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sBAAsB,uBAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,wBAAwB,kCAAkC;AAC1D;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,uC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB,uBAAuB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,wCAAwC,mBAAO,CAAC,MAAkB;AAClE;;;;;;;;ACjoBA,2C;;;;;;;ACAA,8D;;;;;;;ACAA,0D;;;;;;;ACAA,+C;;;;;;;ACAA,YAAY,mBAAO,CAAC,MAAQ;;AAE5B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc,gDAAgD;AAC9D,cAAc,gDAAgD;AAC9D,cAAc,gDAAgD;AAC9D,cAAc,gDAAgD;AAC9D,cAAc,wBAAwB;AACtC,YAAY,wBAAwB;AACpC,sBAAsB,gDAAgD;AACtE,0BAA0B,+CAA+C;AACzE,8BAA8B,0CAA0C;AACxE,iBAAiB,yCAAyC;AAC1D,SAAS,wBAAwB;AACjC,cAAc,wBAAwB;AACtC,UAAU;AACV,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;;AAGH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM,mBAAO,CAAC,MAA6B;AAC3C,MAAM,mBAAO,CAAC,MAA6B;AAC3C;AACA,mBAAmB,oBAAoB;AACvC;AACA;AACA;;;;;;;;ACrJA,+D;;;;;;;ACAA,gE;;;;;;;ACAA,mBAAO,CAAC,MAAuB;;AAE/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,uBAAuB;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;;;;;;;;ACtDA,YAAY,mBAAO,CAAC,MAAQ;;AAE5B;AACA,aAAa,oBAAoB;AACjC,WAAW,OAAO;AAClB,aAAa;AACb;AACA;AACA,cAAc,mBAAO,CAAC,MAAoB;AAC1C;AACA;AACA;AACA;AACA,eAAe,mBAAO,CAAC,MAAQ;AAC/B;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA,GAAG,mBAAO,CAAC,MAAc;AACzB;AACA;AACA;AACA;AACA,gCAAgC,mBAAO,CAAC,MAAgC;AACxE;AACA;AACA;AACA;;AAEA,0CAA0C,mBAAO,CAAC,MAAc;;AAEhE;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,uBAAuB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,mBAAO,CAAC,MAA4B;AACxD;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,oBAAoB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mBAAO,CAAC,MAA4B;AAC1D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,uBAAuB;AACxC;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAO,CAAC,MAAe;AACnD;AACA,G;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,mBAAO,CAAC,MAAc;AACzB;;AAEA;;;;;;;;ACxQA,4D;;;;;;;ACAA,uC;;;;;;;ACAA,kD;;;;;;;ACAA,kE;;;;;;;ACAA,gE;;;;;;;ACAA,gC;;;;;;;ACAA,gD;;;;;;;ACAA,8D;;;;;;;ACAA,YAAY,mBAAO,CAAC,MAAQ;;AAE5B;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,mBAAmB,mBAAmB;AACtC;AACA,qBAAqB,mBAAmB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,mBAAmB;AACtC;AACA,qBAAqB,mBAAmB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,0BAA0B;AAC7C;AACA,qBAAqB,0BAA0B;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qBAAqB;AACxC;AAC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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACiED;AACA;AAEA;AACA;;AAEA;;AACA;;AACA;AACA;AACA;AACA;AACA;AAEA;;;;AAGA;AACA,6BADA;AAEA;AACA;;;AAGA;AACA,kBADA;AAEA;AAFA,KAJA;;AAQA;;;AAGA;AAXA,GAFA;AAeA;AACA;AACA,oBADA;AAEA,4BAFA;AAGA,sBAHA;AAIA,+BAJA;AAKA,sBALA;AAMA,qBANA;AAOA,iDAPA;AAQA;AARA;AAUA,GA1BA;AA2BA;AACA;AACA,qBADA;AAEA;AACA,0EACA;AACA;AALA;AADA,GA3BA;AAoCA;AACA,2DACA,2BADA;AAGA;AACA;AACA;AACA;AACA;AACA,GA7CA;AA8CA;AACA;AACA,GAhDA;AAiDA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;;AACA;AACA;AACA,KAdA;;AAeA;;;AAGA;AACA;;AACA;AACA;AACA;;;;;;AAKA;AACA,OARA,MAQA;AACA;AACA;;AACA;AACA,KAhCA;;AAiCA;;;AAGA;AACA;;AACA;AACA;AACA;;;;;;AAKA;AACA,OARA,MAQA;AACA;AACA;AACA,KAjDA;;AAkDA;;;AAGA;AACA;AACA;AACA,KAxDA;;AAyDA;;;AAGA;AACA;AACA;AACA,KA/DA;;AAgEA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KA3EA;AA4EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA,KAxFA;AAyFA;AACA;;AACA;AACA;AACA;AACA;;AACA;AACA,KAhGA;AAiGA;AACA;;AACA;AACA;AACA;AACA;AACA,KAvGA;AAwGA;AACA;AACA,KA1GA;AA2GA;AACA,UACA,EACA,yDACA,wDAFA,CADA,EAKA;AACA;AACA;AACA;AACA,KArHA;AAsHA;AACA;AACA;AACA,mBACA;AACA;AACA,6BACA,oEADA;AAEA,KA9HA;AA+HA,wBA/HA,gCA+HA,GA/HA,EA+HA;AACA;AACA;;AACA;AACA;AACA;AACA,KArIA;AAsIA;AACA;A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IA,qBAJA;AAKA;AALA,KAdA;AAqBA;AACA;AACA;AACA,OAHA;AAIA;AAJA,KArBA;AA2BA;AACA;AACA,KA7BA;AA8BA;AACA;AACA,KAhCA;AAiCA;AACA;AACA,KAnCA;AAoCA;AACA;;;;;;AAMA;AACA,KA5CA;AA6CA;AACA;AACA,KA/CA;AAgDA;AACA,gBADA;AAEA;AAFA,KAhDA;AAoDA;AACA;AACA;AAtDA,GAxLA;AAgPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAxPA;AAyPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DACA,4BADA;AAGA;AACA,GArQA;AAsQA;AACA;AACA;AACA;AACA,GA1QA;AA2QA;AACA;;;AAGA;AACA;AACA,KANA;;AAOA;;;;;;AAMA;AACA;AACA,gCACA,kBADA,GAEA,aAFA,CAEA,sBAFA,EAEA,CAFA;AAGA,KAlBA;;AAmBA;;;;AAIA;AACA;AACA,iEACA,cADA;AAGA,iDACA,kBADA,GAEA,UAFA,CAEA,SAFA,CAEA,WAFA;AAGA;AACA;AACA,8EACA;AACA;AACA;AACA;AACA,KAtCA;;AAuCA;;;;;;;AAOA;AACA;AACA,+EACA,8BADA;AAGA,KAnDA;AAoDA,iBApDA,yBAoDA,GApDA,EAoDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA,KA7DA;;AA8DA;;;;;;AAMA;AACA;AACA;AACA;AACA,KAxEA;;AAyEA;;;;;;AAMA;AACA;AACA;AACA;AACA,KAnFA;;AAoFA;;;;;;AAMA;AACA;AACA;AACA;AACA,KA9FA;;AA+FA;;;;;AAKA;AACA;AACA;AACA,KAvGA;;AAwGA;;;;;AAKA;AACA;AACA;AACA;AACA,KAjHA;;AAkHA;;;AAGA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA,KA7HA;AA8HA;AACA;AACA;AACA;AACA,SAFA,MAEA;AACA,iDACA;AAAA;AAAA,YADA;AAGA;AACA;AACA,KAxIA;AAyIA;AACA;AACA;AACA;AACA;AACA,SAHA,MAGA;AACA,iDACA;AAAA;AAAA,YADA;AAGA;AACA;AACA,KApJA;;AAqJA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAnKA;;AAoKA;;;;AAIA;AACA;AACA;AACA;AACA,oDACA,4BADA,GAEA,+BAFA;AAGA;AACA,WALA,MAKA;AACA;AACA;AACA;AACA;;;;;;;;AAMA;AACA,OAlBA,MAkBA;AACA;AACA;AACA,qDACA,4BADA,GAEA,+BAFA;;AAGA;AACA,WALA,MAKA;AACA;AACA;;;;;;;;AAMA;AACA;AACA,KA5MA;;AA6MA;;;;;AAKA;AACA;AACA;AACA;;AACA;AACA,KAvNA;;AAwNA;;;;;;;AAOA;AACA;AACA,KAjOA;;AAkOA;;;AAGA;AACA;AACA,wDACA;AACA,KAzOA;;AA0OA;;;;;AAKA;AACA;AACA;AACA;AACA,4EACA;AACA;AACA,KAtPA;;AAuPA;;;;;AAKA;AACA;AACA;AACA,+EACA;AACA;AACA,KAlQA;;AAmQA;;;;;AAKA;AACA;AACA,8BACA;AACA,KA5QA;;AA6QA;;;;;AAKA;AACA;AACA,8BACA;AACA,KAtRA;;AAuRA;;;;;AAKA;AACA;AACA;AACA,KA/RA;;AAgSA;;;AAGA;AACA;AACA;AACA;AACA;AACA,SAFA;AAGA,OALA,MAKA;AACA;AACA;AACA;AACA,SAFA;AAGA;AACA,KA/SA;;AAgTA;;;;AAIA;AAAA;;AACA;AACA;AACA;AACA,SAFA,EAEA,GAFA;AAGA;AACA,KA1TA;;AA2TA;;;AAGA;AACA;AACA;AACA;AACA;AACA,KAnUA;;AAoUA;;;;AAIA;AAAA;;AACA;AACA;AACA,OAFA;AAGA;AACA,KA7UA;AA8UA;AACA;AACA;AACA,+DACA,kBADA;AAGA;AACA;AACA;;AACA;AACA;AACA;;AACA;AACA,KA3VA;AA4VA;AAAA;;AACA;AACA;AACA;AACA,iCACA,qBADA,GAEA,wBAFA,CAEA,gBAFA;AAGA,WAJA,MAIA;AACA;;AACA;AACA,WAHA,MAGA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA,aAFA;AAGA;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;AACA,OAxBA;AAyBA,KAtXA;;AAuXA;;;;;;AAMA;AACA;AACA,6BADA;AAEA,2BAFA;AAGA;AAHA;AAKA,yCACA;;AACA;AACA;AACA;AACA;;AACA;AACA,KA1YA;;AA2YA;;;;;;AAMA;AACA;AACA;AACA;AACA,oCADA;AAEA;AAFA;AAIA,SALA,MAKA;AACA;AACA;AACA,kCACA,mBACA,qBADA,GAEA,wBAFA,CAEA,cAFA;AAGA,oCACA;AACA,aAPA,MAOA;AACA,qDACA;AACA,wCADA;AAEA;AAFA,gBADA;AAMA;AACA;AACA;AACA;AACA,KA5aA;AA6aA;AACA;AACA,KA/aA;;AAgbA;;;;;;;AAOA;AACA;AACA;AACA,yBACA,wDADA;AAEA;AACA,2CACA;AACA;AACA;AACA,+CACA;AACA,4BADA;AAEA,6BAFA;AAGA,+BAHA;AAIA;AAJA,UADA;AAQA,uCACA,QADA,EAEA,SAFA,EAGA,SAHA,EAIA,OAJA,EAKA,SALA;AAOA;AACA;AACA;AACA;AACA,KApdA;;AAqdA;;;;;;AAMA;AACA;AACA,KA7dA;;AA8dA;;;;AAIA;AACA;AACA;AACA,KAreA;;AAseA;;;;AAIA;AACA;AACA;;AACA;AACA;AACA,OAFA,MAEA;AACA;AACA;AACA,KAlfA;AAmfA;AACA;AACA;AACA;AACA,SAFA,MAEA;AACA;AACA;AACA;AACA,KA3fA;AA4fA;AACA;AACA;AACA;AACA;AAhgBA;AA3QA,G;;ACzRsU,CAAgB,wHAAG,EAAC,C;;;;;;;;ACAnP;AACvC;AACL;AACsC;AACxB;;;AAGzE;AAC0F;AAC1F,IAAI,sBAAS,GAAG,kBAAU;AAC1B,EAAE,+CAAM;AACR,EAAE,MAAM;AACR,EAAE,eAAe;AACjB;AACA;AACA;AACA;;AAEA;;AAEe,uEAAS,Q;;ACpBxB;AACA;AACA;;;ACFwB;AACF;;;;;;;;;ACDtB;AAAA;AAAA;;;;;;;;ACAA,+D;;;;;;;ACAA,+D","file":"scaffoldvuer.umd.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"scaffoldvuer\"] = factory();\n\telse\n\t\troot[\"scaffoldvuer\"] = factory();\n})((typeof self !== 'undefined' ? self : this), function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"fae3\");\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TraditionalControls.vue?vue&type=style&index=0&id=b034523c&scoped=true&lang=scss&\"","module.exports = require(\"core-js/modules/es.symbol.iterator\");","module.exports = require(\"element-ui/lib/checkbox-group\");","module.exports = require(\"element-ui/lib/theme-chalk/checkbox-group.css\");","module.exports = require(\"element-ui/lib/select\");","module.exports = require(\"element-ui/lib/theme-chalk/select.css\");","/**\n * @author alteredq / http://alteredqualia.com/\n * @author mr.doob / http://mrdoob.com/\n */\n\nexports.WEBGL = {\n\n\tisWebGLAvailable: function () {\n\n\t\ttry {\n\n\t\t\tvar canvas = document.createElement( 'canvas' );\n\t\t\treturn !! ( window.WebGLRenderingContext && ( canvas.getContext( 'webgl' ) || canvas.getContext( 'experimental-webgl' ) ) );\n\n\t\t} catch ( e ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t},\n\n\tisWebGL2Available: function () {\n\n\t\ttry {\n\n\t\t\tvar canvas = document.createElement( 'canvas' );\n\t\t\treturn !! ( window.WebGL2RenderingContext && canvas.getContext( 'webgl2' ) );\n\n\t\t} catch ( e ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t},\n\n\tgetWebGLErrorMessage: function () {\n\n\t\treturn this.getErrorMessage( 1 );\n\n\t},\n\n\tgetWebGL2ErrorMessage: function () {\n\n\t\treturn this.getErrorMessage( 2 );\n\n\t},\n\n\tgetErrorMessage: function ( version ) {\n\n\t\tvar names = {\n\t\t\t1: 'WebGL',\n\t\t\t2: 'WebGL 2'\n\t\t};\n\n\t\tvar contexts = {\n\t\t\t1: window.WebGLRenderingContext,\n\t\t\t2: window.WebGL2RenderingContext\n\t\t};\n\n\t\tvar message = 'This module requires <a href=\"http://khronos.org/webgl/wiki/Getting_a_WebGL_Implementation\" style=\"color:#008\">$1</a> support but your $0 does not seem to support it.';\n\n\t\tvar element = document.createElement( 'div' );\n\t\telement.id = 'webglmessage';\n\t\telement.style.fontFamily = 'monospace';\n\t\telement.style.fontSize = '20px';\n\t\telement.style.fontWeight = 'normal';\n\t\telement.style.textAlign = 'center';\n\t\telement.style.background = '#fff';\n\t\telement.style.color = '#000';\n\t\telement.style.padding = '1.5em';\n\t\telement.style.width = '400px';\n\t\telement.style.margin = '5em auto 0';\n\n\t\tif ( contexts[ version ] ) {\n\n\t\t\tmessage = message.replace( '$0', 'graphics card' );\n\n\t\t} else {\n\n\t\t\tmessage = message.replace( '$0', 'browser' );\n\n\t\t}\n\n\t\tmessage = message.replace( '$1', names[ version ] );\n\n\t\telement.innerHTML = message;\n\n\t\treturn element;\n\n\t}\n\n};\n","module.exports = require(\"core-js/modules/es.array.for-each\");","module.exports = \"precision highp float;\\n\\nuniform mat4 modelViewMatrix;\\nuniform mat4 projectionMatrix;\\n\\nattribute vec3 position;\\nattribute vec3 normal;\\nattribute vec3 color;\\nattribute vec2 uv;\\nattribute vec3 position_1;\\nattribute vec3 position_2;\\nattribute vec2 uv_1;\\nattribute vec2 uv_2;\\n\\nuniform float time;\\nuniform float slide_pos;\\nvarying vec2 vUv;\\n\\nvoid main() {\\n\\tvUv = uv;\\n\\t\\n\\tvec3 transformed_xi1 = position * vec3(1.0 - time) + position_1 * vec3(time);\\n\\t\\n\\tvec3 xi0_time_1 = vec3(position_1.x, position_1.y, 0.0);\\n\\tvec3 transformed_xi0 = position_2 * vec3(1.0 - time) + xi0_time_1 * vec3(time);\\n\\n\\tvec3 transformed = vec3(transformed_xi0) * vec3(1.0 - slide_pos) + vec3(transformed_xi1) * vec3(slide_pos);\\n\\t\\n\\tvec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\\n\\tgl_Position = projectionMatrix * mvPosition;\\n\\n}\\n\"","module.exports = require(\"core-js/modules/es.array.concat\");","module.exports = require(\"element-ui/lib/container\");","module.exports = require(\"core-js/modules/web.dom-collections.iterator\");","module.exports = require(\"element-ui/lib/main\");","module.exports = require(\"core-js/modules/es.object.keys\");","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OpacityControls.vue?vue&type=style&index=0&id=4c00a30f&scoped=true&lang=scss&\"","// extracted by mini-css-extract-plugin","module.exports = require(\"core-js/modules/web.url\");","module.exports = require(\"element-ui/lib/theme-chalk/loading.css\");","module.exports = require(\"element-ui/lib/header\");","module.exports = require(\"element-ui/lib/theme-chalk/tabs.css\");","module.exports = require(\"core-js/modules/es.number.to-fixed\");","module.exports = require(\"element-ui/lib/tab-pane\");","module.exports = require(\"element-ui/lib/theme-chalk/color-picker.css\");","module.exports = require(\"element-ui/lib/drawer\");","var MODULE_CHANGE = { ALL: 0, DESTROYED: 1, NAME_CHANGED: 2, SETTINGS_CHANGED: 3 };\n\nvar BaseModule = function() {\n this.typeName = \"Base Module\";\n this.instanceName = \"default\";\n this.onChangedCallbacks = [];\n this.messageFunction = undefined;\n /** Notifier handle for informing other modules of any changes **/\n this.eventNotifiers = [];\n this.broadcastChannels = {};\n}\n\nBaseModule.prototype.setName = function(name) {\n if (name && this.instanceName !== name) {\n this.instanceName = name;\n var callbackArray = this.onChangedCallbacks.slice();\n for (var i = 0; i < callbackArray.length; i++) {\n callbackArray[i]( this, MODULE_CHANGE.NAME_CHANGED );\n }\n }\n}\n\nBaseModule.prototype.addBroadcastChannels = function(ChannelName) {\n\tif (ChannelName in this.broadcastChannels)\n\t\treturn false;\n\tvar newChannel = new (require('broadcast-channel')).default(ChannelName);\n\tthis.broadcastChannels[ChannelName] = newChannel;\n\treturn true;\n}\n\nBaseModule.prototype.removeBroadcastChannels = function(ChannelName) {\n\tif (ChannelName in this.broadcastChannels) {\n\t\tthis.broadcastChannels[ChannelName].close();\n\t\tdelete broadcastChannels[ChannelName];\n\t}\n\t\n}\n\nBaseModule.prototype.settingsChanged = function() {\n\tvar callbackArray = this.onChangedCallbacks.slice();\n for (var i = 0; i < callbackArray.length; i++) {\n callbackArray[i]( this, MODULE_CHANGE.SETTINGS_CHANGED );\n }\n}\n\nBaseModule.prototype.exportSettings = function() {\n\t var settings = {};\n\t settings.dialog = this.typeName;\n\t settings.name = this.instanceName;\n\t return settings;\n}\n\nBaseModule.prototype.importSettings = function(settings) {\n\tif (settings.dialog == this.typeName) {\n\t\tthis.setName(settings.name);\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nBaseModule.prototype.publishChanges = function(annotations, eventType) {\n for (var i = 0; i < this.eventNotifiers.length; i++) {\n this.eventNotifiers[i].publish(this, eventType, annotations);\n }\n if (eventType === require(\"../utilities/eventNotifier\").EVENT_TYPE.SELECTED) {\n\t if (annotations && annotations[0]) {\n\t\t var annotation = annotations[0];\t \n\t\t var data = {action: \"query-data\", resource: annotation.data.id, data: annotation.data, sender: this.instanceName};\n\t\t for (var key in this.broadcastChannels) {\n\t\t\t this.broadcastChannels[key].postMessage(data);\n\t\t }\n\t }\n }\n}\n\nBaseModule.prototype.setMessageFunction = function(functionIn) {\n this.messageFunction = functionIn;\n}\n\nBaseModule.prototype.displayMessage = function(message) {\n if (this.messageFunction)\n\t this.messageFunction(message);\n}\n\nBaseModule.prototype.getName = function() {\n return this.instanceName;\n}\n\nBaseModule.prototype.destroy = function() {\n //Make a temorary copy as the array may be altered during the loop\n var callbackArray = this.onChangedCallbacks.slice();\n for (var i = 0; i < callbackArray.length; i++) {\n callbackArray[i]( this, MODULE_CHANGE.DESTROYED );\n }\n\n delete this;\n} \n\nBaseModule.prototype.addChangedCallback = function(callback) {\n if (this.onChangedCallbacks.includes(callback) == false)\n this.onChangedCallbacks.push(callback);\n}\n\nBaseModule.prototype.removeChangedCallback = function(callback) {\n var index = this.onChangedCallbacks.indexOf(callback);\n if (index > -1) {\n this.onChangedCallbacks.splice(index, 1);\n }\n} \n\nBaseModule.prototype.addNotifier = function(eventNotifier) {\n this.eventNotifiers.push(eventNotifier);\n}\n\nexports.BaseModule = BaseModule;\nexports.MODULE_CHANGE = MODULE_CHANGE;\n","module.exports = require(\"@abi-software/svg-sprite\");","module.exports = require(\"element-ui/lib/color-picker\");","module.exports = require(\"element-ui/lib/theme-chalk/drawer.css\");","module.exports = require(\"lodash/uniq\");","module.exports = \"precision highp float;\\nuniform sampler2D myTex;\\nvarying vec2 vUv;\\n\\nvoid main() {\\n\\tgl_FragColor = texture2D( myTex, vUv );\\n\\n}\\n\"","module.exports = require(\"element-ui/lib/theme-chalk/header.css\");","module.exports = require(\"core-js/modules/es.symbol.description\");","module.exports = require(\"core-js/modules/es.regexp.exec\");","var EVENT_TYPE = { ALL: 0, SELECTED: 1, HIGHLIGHTED: 2 };\n\nvar SelectionEvent = function(eventTypeIn, identifiersIn) {\n this.eventType = eventTypeIn;\n this.identifiers = identifiersIn;\n}\n\nvar returnFullID = function(sourceId) {\n //return full annotations with all different name\n}\n \nvar Subscription = function(subscriberIn, callbackIn, eventType) {\n this.targetedID = [];\n var subscriber = subscriberIn;\n if (eventType === undefined)\n this.targetEventType = EVENT_TYPE.ALL;\n else\n this.targetEventType = eventType;\n var callback = callbackIn;\n \n var _this = this;\n \n this.getEventType = function() {\n return eventType;\n }\n \n this.notify = function(source, eventType, ids) {\n if (source !== subscriber && (_this.targetEventType === EVENT_TYPE.ALL ||\n _this.targetEventType === eventType)) {\n //should support different type of id e.g lyph, name, fmas...\n //need a function that finds all relavant ids\n var event = new SelectionEvent(eventType, ids);\n callback(event);\n }\n }\n}\n\nexports.EventNotifier = function() {\n var events = [];\n var subscriptions = [];\n var _this = this;\n \n this.publish = function(source, eventType, id) {\n for (var i = 0; i < subscriptions.length;i++) {\n subscriptions[i].notify(source, eventType, id);\n }\n }\n \n this.subscribe = function(subscriber, callbackFunction, eventType) {\n if (typeof callbackFunction === \"function\") {\n var subscription = new Subscription(subscriber, callbackFunction, eventType);\n subscriptions.push(subscription);\n return subscription;\n }\n return undefined;\n }\n \n this.unsubscribe = function(subscription) {\n for (var i = 0; i < subscriptions.length;i++) {\n if (subscription === subscriptions[i]) {\n subscriptions.splice(i, 1);\n return;\n }\n }\n }\n} \n\nexports.EVENT_TYPE = EVENT_TYPE;\n","module.exports = require(\"element-ui/lib/theme-chalk/checkbox.css\");","// extracted by mini-css-extract-plugin","module.exports = require(\"core-js/modules/es.regexp.to-string\");","module.exports = require(\"core-js/modules/es.symbol\");","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ScaffoldVuer.vue?vue&type=style&index=1&lang=scss&\"","module.exports = require(\"core-js/modules/es.array.slice\");","var THREE = require('zincjs').THREE;\n// Current model's associate data, data fields, external link, nerve map\n// informations,\n// these are proived in the organsFileMap array.\nvar OrgansSceneData = function() {\n this.currentName = \"\";\n this.currentSystem = \"\";\n this.currentPart = \"\";\n this.currentSpecies = \"\";\n this.metaURL = \"\";\n this.viewURL = \"\";\n this.geometries = [];\n this.lines = [];\n this.glyphsets = [];\n this.pointsets = [];\n this.currentTime = 0.0;\n this.timeVarying = false;\n // Current model's associate data, data fields, external link, nerve map\n\t// informations,\n this.nerveMap = undefined;\n this.nerveMapIsActive = false;\n}\n\n/**\n * Viewer of 3D-organs models. Users can toggle on/off different views. Data is\n * displayed instead if models are not available.\n * \n * @class\n * @param {PJP.ModelsLoader}\n * ModelsLoaderIn - defined in modelsLoade.js, providing locations of\n * files.\n * @param {String}\n * PanelName - Id of the target element to create the\n * {@link PJP.OrgansViewer} on.\n * @author Alan Wu\n * @returns {PJP.OrgansViewer}\n */\nvar OrgansViewer = function(ModelsLoaderIn) {\n (require('./RendererModule').RendererModule).call(this);\n\tvar pickerScene = undefined;\n\tvar nerveMapScene = undefined;\n\tthis.sceneData = new OrgansSceneData();\n\tvar timeChangedCallbacks = new Array();\n\tvar sceneChangedCallbacks = new Array();\n var organPartAddedCallbacks = new Array();\n var finishDownloadCallback = undefined;\n\tvar layoutUpdateRequiredCallbacks = new Array();\n\tvar modelsLoader = ModelsLoaderIn;\n\tvar _this = this;\n\t_this.typeName = \"Organ Viewer\";\n\t\n\tthis.getSceneData = function() {\n\t return _this.sceneData;\n\t}\n\n\t/**\n\t * Used to update internal timer in scene when time slider has changed.\n\t */\n\tthis.updateTime = function(value) {\n let duration = 6000;\n if (_this.scene)\n duration = _this.scene.getDuration();\n var actualTime = value / 100.0 * duration;\n\t\tif (!_this.sceneData.nerveMapIsActive) {\n\t\t\tif (pickerScene)\n\t\t\t\tpickerScene.setMorphsTime(actualTime);\n\t\t\tif (_this.scene)\n\t\t\t\t_this.scene.setMorphsTime(actualTime);\n\t\t} else if (nerveMapScene) {\n\t\t\t\tnerveMapScene.setMorphsTime(actualTime);\n\t\t\t\tif (_this.sceneData.nerveMap && _this.sceneData.nerveMap.additionalReader)\n\t\t\t\t\t_this.sceneData.nerveMap.additionalReader.setTime(value / 100.0);\n\t\t}\n\t\t_this.sceneData.currentTime = value;\n\t}\n\t\n\t/**\n\t * Update the time slider and other renderers/scenes when time has changed.\n\t */\n\tvar preRenderTimeUpdate = function() {\n let duration = 3000;\n if (_this.scene)\n duration = _this.scene.getDuration();\n\t\tvar currentTime = _this.zincRenderer.getCurrentTime();\n\t\tfor (var i = 0; i < timeChangedCallbacks.length;i++) {\n\t\t\ttimeChangedCallbacks[i](currentTime);\n\t\t}\n\t\tif (!_this.sceneData.nerveMapIsActive && pickerScene)\n\t\t\tpickerScene.setMorphsTime(currentTime);\n\t\tif (_this.sceneData.nerveMap && _this.sceneData.nerveMap.additionalReader)\n _this.sceneData.nerveMap.additionalReader.setTime(currentTime / \n duration);\n\t\t_this.sceneData.currentTime = currentTime / duration * 100.0;\n }\n \n var postRenderSelectedCoordinatesUpdate = function() {\n if (_this.selectedCenter) {\n const vector = new THREE.Vector3();\n vector.copy(_this.selectedCenter);\n var coord = _this.scene.vectorToScreenXY(vector);\n _this.selectedScreenCoordinates.x = coord.x;\n _this.selectedScreenCoordinates.y = coord.y;\n }\n }\n\t\n\tvar preRenderUpdateCallback = function() {\n\t\treturn function() {\n preRenderTimeUpdate();\n\t\t}\n }\n \n var postRenderUpdateCallback = function() {\n\t\treturn function() {\n postRenderSelectedCoordinatesUpdate();\n\t\t}\n\t}\n\t\n\t /**\n\t\t * Add a callback which will be called when time has changed\n\t\t */\n\tthis.addTimeChangedCallback = function(callback) {\n\t if (typeof(callback === \"function\"))\n\t timeChangedCallbacks.push(callback);\n\t}\n\t\n\tthis.setTexturePos = function(value) {\n\t\tif (_this.sceneData.nerveMap && _this.sceneData.nerveMap.additionalReader)\n\t\t\t_this.sceneData.nerveMap.additionalReader.setSliderPos(value);\n\t}\n\t\n\t this.addLayoutUpdateRequiredCallback = function(callback) {\n\t if (typeof(callback === \"function\")) {\n\t layoutUpdateRequiredCallbacks.push(callback);\n\t }\n\t }\n\t\n\tthis.addSceneChangedCallback = function(callback) {\n\t if (typeof(callback === \"function\")) {\n\t sceneChangedCallbacks.push(callback);\n\t }\n\t}\n\t\n\tthis.addOrganPartAddedCallback = function(callback) {\n if (typeof(callback === \"function\"))\n organPartAddedCallbacks.push(callback);\n }\n\n this.setFinishDownloadCallback = function(callback) {\n if (typeof(callback === \"function\"))\n finishDownloadCallback = callback;\n }\n\n this.unsetFinishDownloadCallback = function() {\n finishDownloadCallback = undefined;\n }\n\n this.getNamedObjectsToScreenCoordinates = function(name, camera) {\n var vector = new THREE.Vector3();\n vector.setFromMatrixPosition( obj.matrixWorld );\n var widthHalf = (width/2);\n var heightHalf = (height/2);\n vector.project(camera);\n vector.x = ( vector.x * widthHalf ) + widthHalf;\n vector.y = - ( vector.y * heightHalf ) + heightHalf;\n return vector;\n }\n\n var getIdObjectFromIntersect = function(intersected) {\n var id = undefined;\n var intersectedObject = undefined;\n if (intersected !== undefined) {\n if (intersected.object.userData && \n intersected.object.userData.isMarker) {\n intersectedObject = intersected.object.userData.parent.morph;\n } else {\n intersectedObject = intersected.object;\n }\n if (intersectedObject) {\n if (intersectedObject.name) {\n id = intersectedObject.name;\n } else {\n var annotations = _this.getAnnotationsFromObjects(\n [intersectedObject]);\n if (annotations && annotations[0]) {\n id = annotations[0].data.group;\n }\n }\n }\n }\n return {\"id\":id, \"object\":intersectedObject};\n }\n\t \n\t/**\n\t * Callback function when a pickable object has been picked. It will then\n\t * call functions in tissueViewer and cellPanel to show corresponding\n\t * informations.\n\t * \n\t * @callback\n\t */\n\tvar _pickingCallback = function() {\n\t\treturn function(intersects, window_x, window_y) {\n var intersected = _this.getIntersectedObject(intersects);\n var idObject = getIdObjectFromIntersect(intersected);\n if (idObject.id) {\n if (_this.toolTip !== undefined) {\n _this.toolTip.setText(idObject.id);\n _this.toolTip.show(window_x, window_y);\n }\n _this.displayMessage(idObject.object.name + \" selected.\");\n\n if (idObject.object.userData.isGlyph) {\n if (idObject.object.name)\n _this.setSelectedByObjects([idObject.object], true);\n else\n _this.setSelectedByZincObject(idObject.object.userData.getGlyphset(), true);\n } else {\n _this.setSelectedByObjects([idObject.object], true);\n }\n return;\n } else {\n\t\t\t\tif (_this.toolTip !== undefined) {\n\t\t\t\t\t_this.toolTip.hide();\n\t\t\t\t}\n\t\t\t\t_this.setSelectedByObjects([], true);\n\t\t\t}\n\t\t}\n\t};\n\t\n\t/**\n\t * Callback function when a pickable object has been hovered over. It will\n\t * show objecty id/name as _this.toolTip text.\n\t * \n\t * @callback\n\t */\n\tvar _hoverCallback = function() {\n\t\treturn function(intersects, window_x, window_y) {\n var intersected = _this.getIntersectedObject(intersects);\n var idObject = getIdObjectFromIntersect(intersected);\n if (idObject.id) {\n _this.displayArea.style.cursor = \"pointer\";\n if (_this.toolTip !== undefined) {\n _this.toolTip.setText(idObject.id);\n _this.toolTip.show(window_x, window_y);\n }\n _this.setHighlightedByObjects([idObject.object], true);\n return;\n }\n else {\n if (_this.toolTip !== undefined) {\n\t\t\t\t\t_this.toolTip.hide();\n\t\t\t\t}\n\t\t\t\t_this.displayArea.style.cursor = \"auto\";\n\t\t\t\t_this.setHighlightedByObjects([], true);\n }\n\t\t}\n\t};\n\n\tvar changeOrganPartsVisibilityForScene = function(scene, name, value, type) {\n\t\tif (type == \"all\" || type == \"geometries\") {\n\t\t\tvar geometries = scene.findGeometriesWithGroupName(name);\n\t\t\tfor (var i = 0; i < geometries.length; i ++ ) {\n\t\t\t\tgeometries[i].setVisibility(value);\n\t\t\t}\n\t\t}\n\t\tif (type == \"all\" || type == \"glyphsets\") {\n\t\t\tvar glyphsets = scene.findGlyphsetsWithGroupName(name);\n\t\t\tfor (var i = 0; i < glyphsets.length; i ++ ) {\n\t\t\t\tglyphsets[i].setVisibility(value);\n\t\t\t}\n\t\t}\n\t\tif (type == \"all\" || type == \"pointsets\") {\n\t\t\tvar pointsets = scene.findPointsetsWithGroupName(name);\n\t\t\tfor (var i = 0; i < pointsets.length; i ++ ) {\n\t\t\t\tpointsets[i].setVisibility(value);\n\t\t\t}\n\t\t}\n\t\tif (type == \"all\" || type == \"lines\") {\n\t\t\tvar lines = scene.findLinesWithGroupName(name);\n\t\t\tfor (var i = 0; i < lines.length; i ++ ) {\n\t\t\t\tlines[i].setVisibility(value);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Change visibility for parts of the current scene.\n\t */\n\tthis.changeGeometriesVisibility = function(name, value) {\n\t\tchangeOrganPartsVisibilityForScene(_this.scene, name, value, 'geometries');\n\t\tif (pickerScene)\n\t\t\tchangeOrganPartsVisibilityForScene(pickerScene, name, value, 'geometries');\n\t}\n\n\t/**\n\t * Change visibility for parts of the current scene.\n\t */\n\tthis.changeGlyphsetsVisibility = function(name, value) {\n\t\tchangeOrganPartsVisibilityForScene(_this.scene, name, value, 'glyphsets');\n\t\tif (pickerScene)\n\t\t\tchangeOrganPartsVisibilityForScene(pickerScene, name, value, 'glyphsets');\n\t}\n\n\t/**\n\t * Change visibility for parts of the current scene.\n\t */\n\tthis.changeLinesVisibility = function(name, value) {\n\t\tchangeOrganPartsVisibilityForScene(_this.scene, name, value, 'lines');\n\t\tif (pickerScene)\n\t\t\tchangeOrganPartsVisibilityForScene(pickerScene, name, value, 'lines');\n\t}\n\n\t/**\n\t * Change visibility for parts of the current scene.\n\t */\n\tthis.changePointsetsVisibility = function(name, value) {\n\t\tchangeOrganPartsVisibilityForScene(_this.scene, name, value, 'pointsets');\n\t\tif (pickerScene)\n\t\t\tchangeOrganPartsVisibilityForScene(pickerScene, name, value, 'pointsets');\n }\n \t\t\t\n\t/**\n\t * Change visibility for parts of the current scene.\n\t */\n\tthis.changeOrganPartsVisibility = function(name, value, typeIn) {\n\t\tvar type = \"all\";\n\t\tif (typeIn !== undefined)\n\t\t\ttype = typeIn;\n\t\tchangeOrganPartsVisibilityForScene(_this.scene, name, value, type);\n\t\tif (pickerScene)\n\t\t\tchangeOrganPartsVisibilityForScene(pickerScene, name, value, type);\n\t}\n\t\n\tthis.changeOrganPartsVisibilityCallback = function(name) {\n\t\treturn function(value) {\n\t\t\t_this.changeOrganPartsVisibility(name, value);\n\t\t}\n\t}\n\t\n\t/**\n\t * Change some of the ZincGeometry property for never map geometry\n\t * \n\t * @callback\n\t */\n\tvar _addNerveMapGeometryCallback = function(GroupName) {\n\t\treturn function(geometry) {\n\t\t\tgeometry.groupName = GroupName;\n\t\t\tif (imageCombiner && geometry.morph && geometry.morph.material.map) {\n\t\t\t\tgeometry.morph.material.map = new THREE.Texture(imageCombiner.getCombinedImage());\n\t\t\t\tgeometry.morph.material.map.needsUpdate = true;\n\t\t\t\tgeometry.morph.material.needsUpdate = true;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * Read in the nerve map models onto the primary renderer when nerve map has\n\t * been toggled on.\n\t */\n\tvar setupNerveMapPrimaryRenderer = function() {\n\t\tvar sceneName = _this.sceneData.currentName + \"_nervemap\";\n\t\tnerveMapScene = _this.zincRenderer.getSceneByName(sceneName);\n\t\tif (nerveMapScene == undefined) {\n\t\t\tvar downloadPath = modelsLoader.getOrgansDirectoryPrefix() + \"/\" + _this.sceneData.nerveMap.threed.meta;\n\t\t\tnerveMapScene = _this.zincRenderer.createScene(sceneName);\n\t\t\tnerveMapScene.loadMetadataURL(downloadPath, _addNerveMapGeometryCallback(\"threed\"));\n\t\t\tif (_this.sceneData.nerveMap.threed.view !== undefined)\n\t\t\t\tnerveMapScene.loadViewURL(modelsLoader.getOrgansDirectoryPrefix() + \"/\" + _this.sceneData.nerveMap.threed.view);\n\t\t\telse {\n\t\t\t\tnerveMapScene.loadViewURL(modelsLoader.getBodyDirectoryPrefix() + \"/body_view.json\");\n\t\t\t}\n\t\t\tnerveMapScene.ambient.intensity = 8.0;\n\t\t\tnerveMapScene.directionalLight.intensity = 0;\n\t\t\tvar zincCameraControl = nerveMapScene.getZincCameraControls();\n\t\t\tzincCameraControl.setMouseButtonAction(\"AUXILIARY\", \"ZOOM\");\n\t\t\tzincCameraControl.setMouseButtonAction(\"SECONDARY\", \"PAN\");\n\t\t\t_this.sceneData.nerveMap.additionalReader = new (require(\"../varyingTexCoordsReader\").VaryingTexCoordsReader)(nerveMapScene);\n\t\t\tvar urlsArray = [ modelsLoader.getOrgansDirectoryPrefix() + \"/digestive/stomach/nerve_map/3d/xi1_time_0.json\",\n\t\t\t modelsLoader.getOrgansDirectoryPrefix() + \"/digestive/stomach/nerve_map/3d/xi1_time_1.json\",\n\t\t\t modelsLoader.getOrgansDirectoryPrefix() + \"/digestive/stomach/nerve_map/3d/xi0_time_0.json\"];\n\t\t\t_this.sceneData.nerveMap.additionalReader.loadURLsIntoBufferGeometry(urlsArray);\n\t\t}\n\t\t_this.zincRenderer.setCurrentScene(nerveMapScene);\n\t\t_this.graphicsHighlight.reset();\n\t}\n\t\n\tvar activateAdditionalNerveMapRenderer = function() {\n\t for (var i = 0; i < layoutUpdateRequiredCallbacks.length;i++) {\n\t layoutUpdateRequiredCallbacks[i](false, true);\n\t }\n\t}\n\t\n\t/**\n\t * Nerve map has been toggled on/off, change organs renderer layput.\n\t */\n\tthis.changeNerveMapVisibility = function() {\n\t\t_this.sceneData.nerveMapIsActive = !_this.sceneData.nerveMapIsActive;\n\t\tif (_this.sceneData.nerveMapIsActive)\n\t\t\tsetupNerveMapPrimaryRenderer();\n\t\telse {\n\t\t\t_this.zincRenderer.setCurrentScene(_this.scene);\n\t\t\t_this.graphicsHighlight.reset();\n\t\t}\n\t\tactivateAdditionalNerveMapRenderer();\n\t}\n\t\n\tthis.changeBackgroundColour = function(backgroundColourString) {\n\t\tvar colour = new THREE.Color(backgroundColourString);\n\t\tif (_this.zincRenderer) {\n\t\t\tvar internalRenderer = _this.zincRenderer.getThreeJSRenderer();\n\t\t\tinternalRenderer.setClearColor( colour, 1 );\n\t\t}\n\t}\n\n\tvar addOrganPartToSceneData = function(zincObject) {\n\t\tif (zincObject.groupName) {\n\t\t\tif (zincObject.isGeometry) {\n\t\t\t\tif (!_this.sceneData.geometries.includes(zincObject.groupName)) {\n\t\t\t\t\t_this.sceneData.geometries.push(zincObject.groupName);\n\t\t\t\t}\n\t\t\t} else if (zincObject.isGlyphset) {\n\t\t\t\tif (!_this.sceneData.glyphsets.includes(zincObject.groupName)) {\n\t\t\t\t\t_this.sceneData.glyphsets.push(zincObject.groupName);\n\t\t\t\t}\n\t\t\t} else if (zincObject.isLines) {\n\t\t\t\tif (!_this.sceneData.lines.includes(zincObject.groupName)) {\n\t\t\t\t\t_this.sceneData.lines.push(zincObject.groupName);\n\t\t\t\t}\n\t\t\t} else if (zincObject.isPointset) {\n\t\t\t\tif (!_this.sceneData.pointsets.includes(zincObject.groupName)) {\n\t\t\t\t\t_this.sceneData.pointsets.push(zincObject.groupName);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tvar addOrganPart = function(systemName, partName, useDefautColour, zincObject) {\n for (var i = 0; i < organPartAddedCallbacks.length;i++) {\n organPartAddedCallbacks[i](zincObject.groupName, _this.scene.isTimeVarying(), zincObject);\n }\n if (useDefautColour)\n modelsLoader.setGeometryColour(zincObject, systemName, partName);\n addOrganPartToSceneData(zincObject);\n\t\tif (zincObject.groupName) {\n\t\t\t_this.displayMessage(zincObject.groupName + \" loaded.\");\n\t\t} else {\n\t\t\t_this.displayMessage(\"Resource loaded.\");\n\t\t}\n\t\tvar annotation = new (require('../utilities/annotation').annotation)();\n\t\tannotation.data = {species:_this.sceneData.currentSpecies, system:systemName, part:partName, group:zincObject.groupName};\n\t\tzincObject.userData = [annotation];\n\t}\n\n\t /**\n\t\t * New organs geometry has been added to the scene, add UIs and make\n\t\t * sure the viewport is correct.\n\t\t */\n\t var _addOrganPartCallback = function(systemName, partName, useDefautColour) {\n\t return function(zincObject) {\n\t \taddOrganPart(systemName, partName, useDefautColour, zincObject);\n\t }\n\t }\n\t \n\t var downloadCompletedCallback = function() {\n\t\t return function() {\n\t\t\t _this.settingsChanged();\n\t\t\t _this.sceneData.timeVarying = _this.scene.isTimeVarying();\n _this.displayMessage(\"All resources loaded.\");\n if (finishDownloadCallback)\n finishDownloadCallback();\n\t\t }\n\t }\n\t \n\t var singleItemDownloadCompletedCallback = function(systemName, partName, useDefautColour) {\n\t\t return function(geometry) {\n\t\t \taddOrganPart(systemName, partName, useDefautColour, geometry);\n\t\t \t_this.settingsChanged();\n\t\t }\n\t }\n\t \n\t /**\n\t\t * Toggle data field displays. Data fields displays flow/pressure and <button @click=\"play\">Play</button>\n\t\t * other activities of the organs.\n\t\t */\n\t this.updateFieldvisibility = function(dataFields, value) {\n for ( var i = 0; i < dataFields.length; i ++ ) {\n if (value != i) {\n var geometryName = dataFields[i].PartName;\n _this.changeOrganPartsVisibility(geometryName, false);\n }\n }\n if (value > -1) {\n var partName = dataFields[value].PartName;\n if ((_this.scene.findGeometriesWithGroupName(partName).length > 0) ||\n (_this.scene.findGlyphsetsWithGroupName(partName).length > 0)) {\n _this.changeOrganPartsVisibility(partName, true);\n } else {\n var partDetails = getOrganDetails(dataFields[value].SystemName, partName);\n if (partDetails != undefined) {\n _this.scene.loadMetadataURL(modelsLoader.getOrgansDirectoryPrefix() + \"/\" + partDetails.meta);\n }\n }\n\t }\n\t }\n\t \n\t /**\n\t\t * Return an array containing name(s) of species that also contains the\n\t\t * currently displayed organs.\n\t\t * \n\t\t * @returns {Array} containing species name\n\t\t */\n\t this.getAvailableSpecies = function(currentSpecies, currentSystem, currentPart) {\n\t var availableSpecies = new Array();\n\t availableSpecies.push(\"none\");\n\t var keysArray = Object.keys(organsFileMap);\n\t for (index in keysArray) {\n\t var species = keysArray[index];\n\t if (species != currentSpecies) {\n\t if (organsFileMap[species].hasOwnProperty(currentSystem) &&\n\t organsFileMap[species][currentSystem].hasOwnProperty(currentPart)) {\n\t availableSpecies.push(species);\n\t }\n\t }\n\t }\n\t return availableSpecies;\n\t }\n\t \n\t var setSceneData = function(speciesName, systemName, partName, organsDetails) {\n _this.sceneData.nerveMapIsActive = false;\n _this.sceneData.nerveMap = undefined;\n _this.sceneData.metaURL = \"\";\n _this.sceneData.viewURL = \"\";\n _this.sceneData.currentSpecies = speciesName;\n _this.sceneData.currentSystem = systemName;\n\t\t\t_this.sceneData.currentPart = partName;\n\t\t\t_this.sceneData.currentTime = 0.0;\n\t\t\t_this.sceneData.geometries.splice(0);\n\t\t\t_this.sceneData.lines.splice(0);\n\t\t\t_this.sceneData.glyphsets.splice(0);\n\t\t\t_this.sceneData.pointsets.splice(0);\n\t\t\t_this.sceneData.timeVarying = false;\n // This is used as title\n var name = \"\";\n if (speciesName)\n name = speciesName + \"/\";\n if (systemName)\n name = systemName + \"/\";\n if (partName)\n name = partName;\n _this.sceneData.currentName = name;\n\t }\n\n\t this.loadOrgansFromURL = function(url, speciesName, systemName, partName, viewURL) {\n\t\t if (_this.zincRenderer) {\n\t\t\t if (partName && (_this.sceneData.metaURL !== url)) {\n\t\t\t setSceneData(speciesName, systemName, partName, undefined);\n\t\t\t var name = _this.sceneData.currentName;\n\t\t\t var organScene = _this.zincRenderer.getSceneByName(name);\n\t\t\t if (organScene) {\n\t\t\t \t organScene.clearAll();\n\t\t\t } else {\n\t\t\t \t organScene = _this.zincRenderer.createScene(name);\n\t\t\t }\n\t\t\t for (var i = 0; i < sceneChangedCallbacks.length;i++) {\n\t\t\t \t sceneChangedCallbacks[i](_this.sceneData);\n\t\t\t }\n\t\t\t if (viewURL && viewURL != \"\") {\n\t\t\t \t _this.sceneData.viewURL = viewURL;\n\t\t\t\t organScene.loadViewURL(_this.sceneData.viewURL);\n\t\t\t } else\n\t\t\t \t _this.sceneData.viewURL = undefined;\n\t\t\t _this.sceneData.metaURL = url;\n\t\t\t _this.displayMessage(\"Downloading...\");\n\t\t\t organScene.loadMetadataURL(url, _addOrganPartCallback(systemName, partName, false),\n\t\t\t \t downloadCompletedCallback());\t \n\t\t\t _this.scene = organScene;\n\t\t\t _this.zincRenderer.setCurrentScene(organScene);\n\t\t\t _this.graphicsHighlight.reset();\n\t\t\t var zincCameraControl = organScene.getZincCameraControls();\n\t\t\t zincCameraControl.enableRaycaster(organScene, _pickingCallback(), _hoverCallback());\n\t\t\t zincCameraControl.setMouseButtonAction(\"AUXILIARY\", \"ZOOM\");\n\t\t\t zincCameraControl.setMouseButtonAction(\"SECONDARY\", \"PAN\");\n\t\t\t }\n\t\t }\n\t }\n\t \t \n\t this.alignCameraWithSelectedObject = function(transitionTime) {\n\t var objects = _this.graphicsHighlight.getSelected();\n\t if (objects && objects[0] && objects[0].userData) {\n\t _this.scene.alignObjectToCameraView(objects[0].userData, transitionTime);\n\t }\n\t }\n\t \n\t this.exportSettings = function() {\n\t\t var settings = {};\n\t\t settings.name = _this.instanceName;\n\t\t if (_this.sceneData.currentSystem)\n\t\t\t settings.system = _this.sceneData.currentSystem;\n\t\t if (_this.sceneData.currentSpecies)\n\t\t\t settings.species = _this.sceneData.currentSpecies;\n\t\t if (_this.sceneData.currentPart)\n\t\t\t settings.part = _this.sceneData.currentPart;\n\t\t settings.metaURL = _this.sceneData.metaURL;\n\t\t if (_this.sceneData.viewURL)\n\t\t\t settings.viewURL = _this.sceneData.viewURL;\n\t\t settings.dialog = \"Organ Viewer\";\n\t\t return settings;\n\t }\n\t \n\t this.importSettings = function(settings) {\n\t\t if (settings && (settings.dialog == this.typeName)) {\n\t\t\t _this.setName(settings.name);\n\t\t\t if (settings.metaURL !== undefined && settings.metaURL != \"\") {\n\t\t\t\t _this.loadOrgansFromURL(settings.metaURL, settings.species,\n\t\t\t\t\tsettings.system, settings.part, settings.viewURL);\n\t\t\t } else {\n\t\t\t\t _this.loadOrgans(settings.species, settings.system, settings.part);\n\t\t\t }\n\t\t\t return true;\n\t\t }\n\t\t return false;\n\t }\n\t\t\n\t/**\n\t * initialise loading of the html layout for the organs panel, this is\n\t * called when the {@link PJP.OrgansViewer} is created.\n\t * \n\t * @async\n\t */\n\t var initialise = function() {\n\t _this.initialiseRenderer(undefined);\n\t if (_this.zincRenderer) {\n _this.zincRenderer.addPreRenderCallbackFunction(preRenderUpdateCallback());\n _this.zincRenderer.addPostRenderCallbackFunction(postRenderUpdateCallback());\n }\n }\n\t \n\tinitialise();\n\n}\n\nOrgansViewer.prototype = Object.create((require('./RendererModule').RendererModule).prototype);\nexports.OrgansViewer = OrgansViewer;\n","module.exports = require(\"lodash/orderBy\");","module.exports = require(\"core-js/modules/es.array.index-of\");","module.exports = require(\"element-ui/lib/locale/lang/en\");","module.exports = require(\"element-ui/lib/row\");","var THREE = require('zincjs').THREE;\n\nexports.VaryingTexCoordsReader = function(sceneIn) {\n\t\n\tvar _this = this;\n\tvar finishCallbackFunction = undefined;\n\tvar bufferGeometry = undefined;\n\tvar zincGeometry = undefined;\n\tvar numberOfInputs = 0;\n\tvar completedInputs = 0;\n\tvar scene = sceneIn;\n\tvar currentMap = undefined;\n\tvar textureLoader = new THREE.TextureLoader();\n\tvar texture = new textureLoader.load( 'models/organsViewerModels/digestive/stomach/nerve_map/texture/ratstomach_innervation_square.png' );\n\ttexture.wrapS = THREE.RepeatWrapping;\n\ttexture.wrapT = THREE.RepeatWrapping;\n\ttexture.format = THREE.RGBFormat;\n\t\n\tvar shadersUniforms = THREE.UniformsUtils.merge( [\n\t {\n\t\tambient : { type: \"c\", value: new THREE.Color( 0x000000 ) },\n\t\tdiffuse : { type: \"c\", value: new THREE.Color( 0xffffff ) },\n\t\temissive : { type: \"c\", value: new THREE.Color( 0xbbbbbb ) },\n\t\tspecular : { type: \"c\", value: new THREE.Color( 0x111111 ) },\n\t\tshininess: { type: \"f\", value: 100 },\n\t\topacity: { type: \"f\", value: 1.0 },\n\t\tambientLightColor: { type: \"c\", value: new THREE.Color( 0xF0F0F0 ) },\n\t\tdirectionalLightColor: { type: \"c\", value: new THREE.Color( 0x555555) },\n\t\tdirectionalLightDirection: { type: \"v3\", value: new THREE.Vector3() },\n\t\toffsetRepeat: { value: new THREE.Vector4( 0, 0, 1, 1 ) },\n\t\ttime: { type: \"f\", value: 0.0 },\n\t\tslide_pos: { type: \"f\", value: 1.0 },\n\t\tmyTex: {type: 't', value: null}\n\t} ] );\n\n\tvar addGeometryIntoBufferGeometry = function(order, geometry)\n\t{\n\t\tvar arrayLength = geometry.faces.length * 3 * 3;\n\t\tvar positions = new Float32Array( arrayLength );\n\t\tvar colors = new Float32Array( arrayLength );\n\t\tvar normals = new Float32Array( arrayLength );\n\t\tvar texCoords = new Float32Array( geometry.faces.length * 3 * 2 );\n\t\tif (bufferGeometry === undefined)\n\t\t\tbufferGeometry = new THREE.BufferGeometry();\n\t\t\n\t\tgeometry.faces.forEach( function ( face, index ) {\n\t\t\tpositions[ index * 9 + 0 ] = geometry.vertices[ face.a ].x;\n\t\t\tpositions[ index * 9 + 1 ] = geometry.vertices[ face.a ].y;\n\t\t\tpositions[ index * 9 + 2 ] = geometry.vertices[ face.a ].z;\n\t\t\tpositions[ index * 9 + 3 ] = geometry.vertices[ face.b ].x;\n\t\t\tpositions[ index * 9 + 4 ] = geometry.vertices[ face.b ].y;\n\t\t\tpositions[ index * 9 + 5 ] = geometry.vertices[ face.b ].z;\n\t\t\tpositions[ index * 9 + 6 ] = geometry.vertices[ face.c ].x;\n\t\t\tpositions[ index * 9 + 7 ] = geometry.vertices[ face.c ].y;\n\t\t\tpositions[ index * 9 + 8 ] = geometry.vertices[ face.c ].z;\n\t\t\n\t\t\tnormals[ index * 9 + 0 ] = face.vertexNormals[0].x;\n\t\t\tnormals[ index * 9 + 1 ] = face.vertexNormals[0].y;\n\t\t\tnormals[ index * 9 + 2 ] = face.vertexNormals[0].z;\n\t\t\tnormals[ index * 9 + 3 ] = face.vertexNormals[1].x;\n\t\t\tnormals[ index * 9 + 4 ] = face.vertexNormals[1].y;\n\t\t\tnormals[ index * 9 + 5 ] = face.vertexNormals[1].z;\n\t\t\tnormals[ index * 9 + 6 ] = face.vertexNormals[2].x;\n\t\t\tnormals[ index * 9 + 7 ] = face.vertexNormals[2].y;\n\t\t\tnormals[ index * 9 + 8 ] = face.vertexNormals[2].z;\n\t\t\t\n\t\t\ttexCoords[ index * 6 + 0] = geometry.faceVertexUvs[ 0 ][index][0].x;\n\t\t\ttexCoords[ index * 6 + 1] = geometry.faceVertexUvs[ 0 ][index][0].y;\n\t\t\ttexCoords[ index * 6 + 2] = geometry.faceVertexUvs[ 0 ][index][1].x;\n\t\t\ttexCoords[ index * 6 + 3] = geometry.faceVertexUvs[ 0 ][index][1].y;\n\t\t\ttexCoords[ index * 6 + 4] = geometry.faceVertexUvs[ 0 ][index][2].x;\n\t\t\ttexCoords[ index * 6 + 5] = geometry.faceVertexUvs[ 0 ][index][2].y;\n\t\t} );\n\t\t\n\t\t\n\t\tif (order == 0) {\n\t\t\tbufferGeometry.addAttribute( \"position\", new THREE.BufferAttribute( positions, 3) );\n\t\t\tbufferGeometry.addAttribute( \"normal\", new THREE.BufferAttribute( normals, 3 ) );\n\t\t\tbufferGeometry.addAttribute( \"uv\", new THREE.BufferAttribute( texCoords, 2 ) );\n\t\t} else {\n\t\t\tvar positionStr = \"position_\" + order;\n\t\t\tvar normalStr = \"normal_\" + order;\n\t\t\tvar uvsStr = \"uv_\" + order;\n\t\t\tbufferGeometry.addAttribute( positionStr, new THREE.BufferAttribute( positions, 3) );\n\t\t\tbufferGeometry.addAttribute( normalStr, new THREE.BufferAttribute( normals, 3 ) );\n\t\t\tbufferGeometry.addAttribute( uvsStr, new THREE.BufferAttribute( texCoords, 2 ) );\n\t\t}\n\n\t}\n\t\n\tvar meshReady = function(bufferGeometryIn, shaderText, material){\n\t\tvar shaderMaterial = new THREE.RawShaderMaterial( {\n\t\t\tvertexShader: shaderText[0],\n\t\t\tfragmentShader: shaderText[1],\n\t\t\tuniforms: shadersUniforms\n\t\t} );\n\t\tshaderMaterial.uniforms.myTex.value = texture;\n\t\tshaderMaterial.side = THREE.DoubleSide;\n\t\tshaderMaterial.depthTest = true;\n\t\tshaderMaterial.needsUpdate = true;\n\t\tshaderMaterial.map = texture;\n\t\tshaderMaterial.uniforms.myTex.value.needsUpdate = true;\n\t\tshaderMaterial.opacity = 1.0;\n\t\tzincGeometry = scene.addZincGeometry(bufferGeometryIn, 30001, undefined, undefined, false, false, true, undefined, shaderMaterial);\n\t\tzincGeometry.groupName = \"varyingTexture\";\n\t}\n\t\n\tvar myLoader = function(order, shaderText) {\n\t return function(geometry, materials){\n\t \tvar material = 0;\n\t \taddGeometryIntoBufferGeometry(order, geometry);\n\t \tcompletedInputs++;\n\t \tif (completedInputs == numberOfInputs) {\n\t \t\tmeshReady(bufferGeometry, shaderText, material);\n\t \t\tif (finishCallbackFunction != undefined && (typeof finishCallbackFunction == 'function'))\n\t \t\t\tfinishCallbackFunction(bufferGeometry);\n\t \t}\n\t }\n\t}\n\t\n\tthis.setSliderPos = function(pos) {\n\t\tif (zincGeometry)\n\t\t\tzincGeometry.morph.material.uniforms.slide_pos.value = pos;\n\t}\n\t\n\tthis.setTime = function(time) {\n\t\tif (zincGeometry) {\n\t\t\tzincGeometry.morph.material.uniforms.time.value = time;\n\t\t}\n\t}\n\t\n\tthis.setTexture = function(textureIn) {\n\t\tif (zincGeometry) {\n\t\t\tzincGeometry.morph.material.uniforms.myTex.value = textureIn;\n\t\t\tzincGeometry.morph.material.uniforms.myTex.value.needsUpdate = true;\n\t\t}\n\t}\n\t\n\tthis.loadURLsIntoBufferGeometry = function(urls, finishCallback, progressCallback, errorCallback) {\n\t\tvar loader = new THREE.JSONLoader( true );\n numberOfInputs = urls.length;\n finishCallbackFunction = finishCallback;\n var shaderText = [\n require('./shaders/varyingTexture.vs'),\n require('./shaders/varyingTexture.fs')\n ];\n for (var i = 0; i < numberOfInputs; i++)\n loader.load( urls[i], myLoader(i, shaderText), progressCallback, errorCallback);\n\t}\n}\n","module.exports = require(\"element-ui/lib/theme-chalk/col.css\");","module.exports = require(\"element-ui/lib/theme-chalk/main.css\");","require(\"../styles/tooltip.css\");\n\nexports.ToolTip = function(container) {\n var tooltipcontainerElement = undefined;\n var tipElement = undefined;\n var tiptextElement = undefined;\n var template = '<div class=\"mptooltip\" id=\"tip\"><span class=\"mptooltiptext\" id=\"tiptext\"> Tooltip text</span></div>';\n var _this = this;\n \n /**\n * Show tool tip on the specified windows coordinates.\n * @param {Number} x - Style sheet with the same title.\n * @param {Number} y - selector string to match.\n */\n this.show = function(x, y) {\n \ttooltipcontainerElement.style.left = x +\"px\";\n \ttooltipcontainerElement.style.top = (y - 20) + \"px\";\n \ttipElement.style.visibility = \"visible\";\n \ttipElement.style.opacity = 1;\n \ttiptextElement.style.visibility = \"visible\";\n \ttiptextElement.style.opacity = 1;\n }\n \n this.hide = function() {\n \ttipElement.style.visibility = \"hidden\";\n \ttipElement.style.opacity = 0;\n \ttiptextElement.style.visibility = \"hidden\";\n \ttiptextElement.style.opacity = 0;\n }\n \n /**\n * Change the tooltip text.\n * @param {String} text - Text to update the tooltip to.\n */\n this.setText = function(text) {\n \ttiptextElement.innerHTML = text;\n }\n\n var setupToolTipContainer = function() {\n tooltipcontainerElement = document.createElement(\"div\");\n tooltipcontainerElement.id = \"tooltipcontainer\";\n tooltipcontainerElement.innerHTML = template;\n /*\n for (i = 0; i < childNodes.length; i++) {\n parent[0].appendChild(childNodes[i]);\n }\n */\n tipElement = tooltipcontainerElement.querySelector(\"#tip\");\n tiptextElement = tooltipcontainerElement.querySelector(\"#tiptext\");\n container.appendChild(tooltipcontainerElement);\n \n }\n \n setupToolTipContainer();\n}\n\n","var THREE = require('zincjs').THREE;\n\n/**\n * Create a {@link Zinc.Renderer} on the dom element with corresponding elementID.\n * @param {String} elementID - id of the target dom element.\n * @returns {Zinc.Renderer}\n */\nvar createRenderer = function () {\n var WEBGL = require('../utilities/WebGL').WEBGL;\n var localContainer = document.createElement( 'div' );\n var localRenderer = undefined;;\n localContainer.style.height = \"100%\";\n if (WEBGL.isWebGLAvailable()) {\n var Zinc = require('zincjs');\n var localRenderer = new Zinc.Renderer(localContainer, window);\n Zinc.defaultMaterialColor = 0xFFFF9C;\n localRenderer.initialiseVisualisation();\n localRenderer.playAnimation = false;\n } else {\n var warning = WEBGL.getWebGLErrorMessage();\n localContainer.appendChild(warning);\n }\n return {\"renderer\":localRenderer, \"container\":localContainer};\n}\n\nvar RendererModule = function() {\n (require('./BaseModule').BaseModule).call(this);\n this.scene = undefined;\n this.toolTip = undefined;\n this.rendererContainer = undefined;\n this.displayArea = undefined;\n this.graphicsHighlight = new (require(\"../utilities/graphicsHighlight\").GraphicsHighlight)();\n this.zincRenderer = null;\n this.selectedScreenCoordinates = new THREE.Vector3();\n this.selectedCenter = undefined;\n}\n\nRendererModule.prototype = Object.create((require('./BaseModule').BaseModule).prototype);\n\n/**\n * This function will get the the first intersected object with name or\n * the first glyph object with name.\n */\nRendererModule.prototype.getIntersectedObject = function(intersects) {\n\tif (intersects) {\n\t\tfor (var i = 0; i < intersects.length; i++) {\n\t\t\tif (intersects[i] !== undefined) {\n\t\t\t\tif (intersects[i].object &&\n intersects[i].object.userData && \n intersects[i].object.userData.isZincObject && \n (intersects[i].object.name || \n intersects[i].object.userData.isMarker))\n\t\t\t\t\treturn intersects[i];\n\t\t\t}\n\t\t}\n\t}\n\treturn undefined;\n}\n\nRendererModule.prototype.getAnnotationsFromObjects = function(objects) {\n var annotations = [];\n for (var i = 0; i < objects.length; i++) {\n \tvar zincObject = objects[i].userData;\n var annotation = undefined;\n if (zincObject) {\n if (zincObject.isGlyph || zincObject.isGlyphset) {\n var glyphset = zincObject;\n if (zincObject.isGlyph)\n glyphset = zincObject.getGlyphset();\n annotation = glyphset.userData ? glyphset.userData[0] : undefined;\n if (annotation && annotation.data) {\n if (objects[i].name && objects[i].name != \"\")\n annotation.data.id = objects[i].name;\n else\n annotation.data.id = glyphset.groupName;\n }\n } else {\n annotation = zincObject.userData ? zincObject.userData[0] : undefined;\n if (annotation && annotation.data){\n annotation.data.id = objects[i].name;\n }\n }\n }\n annotations[i] = annotation;\n }\n\treturn annotations;\n}\n\nRendererModule.prototype.setHighlightedByObjects = function(objects, propagateChanges) {\n var changed = this.graphicsHighlight.setHighlighted(objects);\n if (changed && propagateChanges) {\n var eventType = require(\"../utilities/eventNotifier\").EVENT_TYPE.HIGHLIGHTED;\n var annotations = this.getAnnotationsFromObjects(objects);\n this.publishChanges(annotations, eventType);\n }\n return changed;\n}\n\n\nRendererModule.prototype.setHighlightedByZincObject = function(\n zincObject, propagateChanges) {\n return this.setHighlightedByObjects([zincObject ? zincObject.morph : undefined], propagateChanges);\n}\n\nRendererModule.prototype.setupLiveCoordinates = function(zincObjects) {\n if (zincObjects && (zincObjects.length > 0)) {\n var boundingBox = this.scene.getBoundingBoxOfZincObjects(zincObjects);\n let newSelectedCenter = new THREE.Vector3();\n boundingBox.getCenter(newSelectedCenter);\n if (this.selectedCenter == undefined)\n this.selectedCenter = newSelectedCenter;\n else {\n this.selectedCenter.x = newSelectedCenter.x;\n this.selectedCenter.y = newSelectedCenter.y;\n }\n } else {\n this.selectedCenter = undefined;\n }\n}\n\nRendererModule.prototype.objectsToZincObjects = function(objects) {\n var zincObjects = [];\n for (var i = 0; i < objects.length; i++) {\n var zincObject = objects[i].userData;\n if (zincObject) {\n if (zincObject.isGlyph || zincObject.isGlyphset) {\n var glyphset = zincObject;\n if (zincObject.isGlyph)\n glyphset = zincObject.getGlyphset();\n zincObjects. push(glyphset);\n } else {\n zincObjects. push(zincObject);\n }\n }\n }\n return zincObjects;\n}\n\n\nRendererModule.prototype.setSelectedByObjects = function(\n objects, propagateChanges) {\n var changed = this.graphicsHighlight.setSelected(objects);\n if (changed) {\n var zincObjects = this.objectsToZincObjects(objects);\n this.setupLiveCoordinates(zincObjects);\n if (propagateChanges) {\n var eventType = require(\"../utilities/eventNotifier\").EVENT_TYPE.SELECTED;\n var annotations = this.getAnnotationsFromObjects(objects);\n this.publishChanges(annotations, eventType);\n }\n }\n return changed;\n}\n\nRendererModule.prototype.setSelectedByZincObject = function(\n zincObject, propagateChanges) {\n return this.setSelectedByObjects([zincObject ? zincObject.morph : undefined], propagateChanges);\n}\n\nvar addGlyphToArray = function(objects) {\n return function(glyph) {\n objects.push(glyph.getMesh());\n }\n}\n\nRendererModule.prototype.findObjectsByGroupName = function(groupName) {\n var geometries = this.scene.findGeometriesWithGroupName(groupName);\n var objects = [];\n for (var i = 0; i < geometries.length; i ++ ) {\n objects.push(geometries[i].morph);\n }\n var glyphsets = this.scene.findGlyphsetsWithGroupName(groupName);\n for (var i = 0; i < glyphsets.length; i ++ ) {\n glyphsets[i].forEachGlyph(addGlyphToArray(objects));\n }\n \n return objects;\n}\n\nRendererModule.prototype.setHighlightedByGroupName = function(groupName, propagateChanges) {\n var objects = this.findObjectsByGroupName(groupName);\n return this.setHighlightedByObjects(objects, propagateChanges);\n}\n\nRendererModule.prototype.setSelectedByGroupName = function(groupName, propagateChanges) {\n var objects = this.findObjectsByGroupName(groupName);\n return this.setSelectedByObjects(objects, propagateChanges);\n}\n\nRendererModule.prototype.changeBackgroundColour = function(backgroundColourString) {\n var colour = new THREE.Color(backgroundColourString);\n if (this.zincRenderer) {\n var internalRenderer = this.zincRenderer.getThreeJSRenderer();\n internalRenderer.setClearColor( colour, 1 );\n }\n}\n\nRendererModule.prototype.resetView = function() {\n if (this.zincRenderer)\n this.zincRenderer.resetView();\n}\n \nRendererModule.prototype.viewAll = function() {\n if (this.zincRenderer)\n this.zincRenderer.viewAll();\n}\n\n/**\n * Start the animation and let the renderer to processs with\n * time progression\n */\nRendererModule.prototype.playAnimation = function(flag) {\n if (this.zincRenderer)\n this.zincRenderer.playAnimation = flag;\n}\n\n/**\n* Set the speed of playback\n*/\nRendererModule.prototype.setPlayRate = function(value) {\n if (this.zincRenderer)\n this.zincRenderer.setPlayRate(value);\n}\n\n/**\n* Get the speed of playback\n*/\nRendererModule.prototype.getPlayRate = function(value) {\n if (this.zincRenderer)\n return this.zincRenderer.getPlayRate();\n else\n return 0.0;\n}\n \n /** Initialise everything in the renderer, including the 3D renderer,\n * and picker for the 3D renderer.\n * \n */\nRendererModule.prototype.initialiseRenderer = function(displayAreaIn) {\n if (this.zincRenderer === undefined || this.rendererContainer === undefined) {\n var returnedValue = createRenderer();\n this.zincRenderer = returnedValue[\"renderer\"];\n this.rendererContainer = returnedValue[\"container\"];\n }\n if (displayAreaIn) {\n this.displayArea = displayAreaIn;\n this.displayArea.appendChild( this.rendererContainer );\n if (this.zincRenderer) {\n this.zincRenderer.animate();\n if (this.toolTip === undefined)\n this.toolTip = new (require(\"../ui/tooltip\").ToolTip)(this.displayArea);\n }\n } \n}\n\nRendererModule.prototype.destroy = function() {\n if (this.zincRenderer) {\n this.zincRenderer.dispose();\n this.zincRenderer.getThreeJSRenderer().dispose();\n this.zincRenderer = undefined;\n }\n (require('./BaseModule').BaseModule).prototype.destroy.call( this );\n}\n \nexports.RendererModule = RendererModule;\n","module.exports = require(\"core-js/modules/es.array.splice\");","// extracted by mini-css-extract-plugin","module.exports = require(\"element-ui/lib/locale\");","module.exports = require(\"element-ui/lib/theme-chalk/option.css\");","module.exports = require(\"core-js/modules/es.object.to-string\");","module.exports = require(\"vue\");","module.exports = require(\"element-ui/lib/tabs\");","module.exports = require(\"core-js/modules/es.array.iterator\");","var THREE = require('zincjs').THREE;\n\n/**\n * This module manages highlighted and selected objects in 3D modules. \n * \n * @class\n * @returns {exports.GraphicsHighlight}\n */\nexports.GraphicsHighlight = function() {\n var currentHighlightedObjects = [];\n var currentSelectedObjects = [];\n this.highlightColour = 0x0000FF;\n this.selectColour = 0x00FF00;\n this.originalColour = 0x000000;\n var _this = this;\n\n var isDifferent = function(array1, array2) {\n if ((array1.length == 0) && (array2.length == 0))\n return false;\n \n for (var i = 0; i < array1.length; i++) {\n var matched = false;\n for (var j = 0; j < array2.length; j++) {\n if (array1[i] === array2[j]) {\n matched = true;\n }\n }\n if (!matched)\n return true;\n }\n for (var i = 0; i < array2.length; i++) {\n var matched = false;\n for (var j = 0; j < array1.length; j++) {\n if (array2[i] === array1[j]) {\n matched = true;\n }\n }\n if (!matched)\n return true;\n }\n return false;\n }\n \n var getUnmatchingObjects = function(objectsArray1, objectsArray2) {\n var unmatchingObjects = [];\n if (objectsArray2.length == 0)\n return objectsArray1;\n for (var i = 0; i < objectsArray1.length; i++) {\n var matched = false;\n for (var j = 0; j < objectsArray2.length; j++) {\n if (objectsArray1[i] === objectsArray2[j]) {\n matched = true;\n }\n }\n if (!matched)\n unmatchingObjects.push(objectsArray1[i]);\n }\n return unmatchingObjects;\n }\n \n this.setHighlighted = function(objects) {\n var previousHighlightedObjects = currentHighlightedObjects;\n _this.resetHighlighted();\n // Selected object cannot be highlighted\n var array = getUnmatchingObjects(objects, currentSelectedObjects);\n var fullList = getFullListOfObjects(array);\n for (var i = 0; i < fullList.length; i++) {\n if (fullList[i] && fullList[i].material && fullList[i].material.emissive)\n fullList[i].material.emissive.setHex(_this.highlightColour);\n }\n currentHighlightedObjects = array;\n return isDifferent(currentHighlightedObjects, previousHighlightedObjects);\n }\n\n this.setSelected = function(objects) {\n // first find highlighted object that are not selected\n var previousHSelectedObjects = currentSelectedObjects;\n var array = getUnmatchingObjects(currentHighlightedObjects, objects);\n currentHighlightedObjects = array;\n _this.resetSelected();\n var fullList = getFullListOfObjects(objects);\n for (var i = 0; i < fullList.length; i++) {\n \tif (fullList[i] && fullList[i].material && fullList[i].material.emissive)\n fullList[i].material.emissive.setHex(_this.selectColour);\n }\n currentSelectedObjects = objects;\n return isDifferent(currentSelectedObjects, previousHSelectedObjects);\n }\n\n var getFullListOfObjects = function(objects) {\n let fullList = [];\n for (var i = 0; i < objects.length; i++) {\n if (objects[i].material)\n fullList.push(objects[i]);\n }\n return fullList;\n }\n \n this.resetHighlighted = function() {\n let fullList = getFullListOfObjects(currentHighlightedObjects);\n for (var i = 0; i < fullList.length; i++) {\n if (fullList[i] && fullList[i].material) {\n if (fullList[i].material.emissive)\n fullList[i].material.emissive.setHex(_this.originalColour);\n if (fullList[i].material.depthFunc)\n fullList[i].material.depthFunc = THREE.LessEqualDepth;\n }\n }\n currentHighlightedObjects = [];\n }\n \n this.resetSelected = function() {\n let fullList = getFullListOfObjects(currentSelectedObjects);\n for (var i = 0; i < fullList.length; i++) {\n \tif (fullList[i] && fullList[i].material) {\n \t\tif (fullList[i].material.emissive)\n fullList[i].material.emissive.setHex(_this.originalColour);\n \t\tif (fullList[i].material.depthFunc)\n fullList[i].material.depthFunc = THREE.LessEqualDepth;\n \t}\n }\n currentSelectedObjects = [];\n }\n \n this.getSelected = function() {\n return currentSelectedObjects;\n }\n \n this.reset = function() {\n _this.resetSelected();\n _this.resetHighlighted();\n }\n}\n","module.exports = require(\"element-ui/lib/theme-chalk/icon.css\");","module.exports = require(\"core-js/modules/es.string.iterator\");","module.exports = require(\"zincjs\");","module.exports = require(\"element-ui/lib/popover\");","module.exports = require(\"element-ui/lib/theme-chalk/slider.css\");","module.exports = require(\"element-ui/lib/theme-chalk/tab-pane.css\");","module.exports = require(\"element-ui/lib/theme-chalk/base.css\");","module.exports = require(\"@soda/get-current-script\");","exports.annotation = function() {\n this.type = \"anatomical\";\n this.data = undefined;\n this.isAnnotation = true;\n}\n","module.exports = require(\"element-ui/lib/col\");","module.exports = require(\"element-ui/lib/theme-chalk/popover.css\");","module.exports = require(\"element-ui/lib/slider\");","module.exports = require(\"core-js/modules/es.array.includes\");","module.exports = require(\"element-ui/lib/loading\");","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TraditionalControls.vue?vue&type=style&index=1&lang=css&\"","module.exports = require(\"element-ui/lib/theme-chalk/container.css\");","module.exports = require(\"element-ui/lib/icon\");","// extracted by mini-css-extract-plugin","module.exports = require(\"element-ui/lib/checkbox\");","module.exports = require(\"core-js/modules/es.function.name\");","module.exports = require(\"core-js/modules/web.dom-collections.for-each\");","module.exports = require(\"core-js/modules/es.string.replace\");","module.exports = require(\"element-ui/lib/option\");","module.exports = require(\"broadcast-channel\");","// extracted by mini-css-extract-plugin","module.exports = require(\"core-js/modules/es.array.from\");","// extracted by mini-css-extract-plugin","// This file is imported into lib/wc client bundles.\n\nif (typeof window !== 'undefined') {\n var currentScript = window.document.currentScript\n if (process.env.NEED_CURRENTSCRIPT_POLYFILL) {\n var getCurrentScript = require('@soda/get-current-script')\n currentScript = getCurrentScript()\n\n // for backward compatibility, because previously we directly included the polyfill\n if (!('currentScript' in document)) {\n Object.defineProperty(document, 'currentScript', { get: getCurrentScript })\n }\n }\n\n var src = currentScript && currentScript.src.match(/(.+\\/)[^/]+\\.js(\\?.*)?$/)\n if (src) {\n __webpack_public_path__ = src[1] // eslint-disable-line\n }\n}\n\n// Indicate to webpack that this file can be concatenated\nexport default null\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"loading\",rawName:\"v-loading\",value:(_vm.loading),expression:\"loading\"}],ref:\"scaffoldContainer\",staticClass:\"scaffold-container\",attrs:{\"element-loading-text\":\"Loading...\",\"element-loading-spinner\":\"el-icon-loading\",\"element-loading-background\":\"rgba(0, 0, 0, 0.3)\"}},[_c('SvgSpriteColor'),_c('div',{ref:\"display\",staticStyle:{\"height\":\"100%\",\"width\":\"100%\"},attrs:{\"id\":\"organsDisplayArea\",\"tabindex\":\"-1\"},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&$event.keyCode!==66){ return null; }return _vm.backgroundChangeCallback($event)}}}),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.displayUI && !_vm.isTransitioning),expression:\"displayUI && !isTransitioning\"}]},[(_vm.displayWarning)?_c('el-popover',{ref:\"warningPopover\",attrs:{\"content\":_vm.warningMessage,\"placement\":\"right\",\"append-to-body\":false,\"trigger\":\"manual\",\"popper-class\":\"warning-popper right-popper non-selectable\"},model:{value:(_vm.hoverVisabilities[6].value),callback:function ($$v) {_vm.$set(_vm.hoverVisabilities[6], \"value\", $$v)},expression:\"hoverVisabilities[6].value\"}}):_vm._e(),(_vm.displayWarning)?_c('i',{directives:[{name:\"popover\",rawName:\"v-popover:warningPopover\",arg:\"warningPopover\"}],staticClass:\"el-icon-warning warning-icon\",on:{\"mouseover\":function($event){return _vm.showToolitip(6)},\"mouseout\":function($event){return _vm.hideToolitip(6)}}},[_c('span',{staticClass:\"warning-text\"},[_vm._v(\"Beta\")])]):_vm._e(),_c('el-popover',{ref:\"checkBoxPopover\",attrs:{\"content\":\"Change region visibility\",\"placement\":\"right\",\"append-to-body\":false,\"trigger\":\"manual\",\"popper-class\":\"scaffold-popper right-popper non-selectable\"},model:{value:(_vm.hoverVisabilities[5].value),callback:function ($$v) {_vm.$set(_vm.hoverVisabilities[5], \"value\", $$v)},expression:\"hoverVisabilities[5].value\"}}),_c('TraditionalControls',{directives:[{name:\"popover\",rawName:\"v-popover:checkBoxPopover\",arg:\"checkBoxPopover\"}],ref:\"traditionalControl\",attrs:{\"help-mode\":_vm.helpMode,\"module\":_vm.$module,\"show-colour-picker\":_vm.showColourPicker},on:{\"object-selected\":_vm.objectSelected,\"object-hovered\":_vm.objectHovered,\"drawer-toggled\":_vm.drawerToggled}}),_c('div',{staticClass:\"opacity-box\"},[_c('OpacityControls',{ref:\"opacityControl\"})],1),(_vm.sceneData.timeVarying)?_c('el-popover',{ref:\"sliderPopover\",attrs:{\"content\":\"Move the slider to animate the region\",\"placement\":\"top\",\"append-to-body\":false,\"trigger\":\"manual\",\"popper-class\":\"scaffold-popper top-popper non-selectable\"},model:{value:(_vm.hoverVisabilities[4].value),callback:function ($$v) {_vm.$set(_vm.hoverVisabilities[4], \"value\", $$v)},expression:\"hoverVisabilities[4].value\"}}):_vm._e(),(_vm.sceneData.timeVarying)?_c('div',{directives:[{name:\"popover\",rawName:\"v-popover:sliderPopover\",arg:\"sliderPopover\"}],staticClass:\"time-slider-container\",class:[ _vm.minimisedSlider ? 'minimised' : '', _vm.sliderPosition]},[_c('el-tabs',{attrs:{\"type\":\"card\"}},[_c('el-tab-pane',{attrs:{\"label\":\"Animate scaffold\"}},[_c('el-row',{staticClass:\"tab-content\"},[(_vm.isPlaying)?_c('SvgIcon',{staticClass:\"icon-button video-button\",attrs:{\"icon\":\"pause\"},nativeOn:{\"click\":function($event){return _vm.play(false)}}}):_c('SvgIcon',{staticClass:\"video-button icon-button\",attrs:{\"icon\":\"play\"},nativeOn:{\"click\":function($event){return _vm.play(true)}}}),_c('el-slider',{staticClass:\"slider\",attrs:{\"min\":0,\"max\":_vm.timeMax,\"value\":_vm.sceneData.currentTime / 100 * _vm.timeMax,\"step\":0.1,\"tooltip-class\":\"time-slider-tooltip\",\"format-tooltip\":_vm.formatTooltip,\"marks\":_vm.timeStamps},on:{\"input\":function($event){return _vm.timeChange($event)}}})],1)],1),_c('el-tab-pane',{attrs:{\"label\":\"Animation data\"}},[_c('el-row',{staticClass:\"tab-content\"},[_c('div',{staticClass:\"animation-data\"},[_vm._v(\" Original duration: \"),_c('div',{staticClass:\"purple\"},[_vm._v(\" \"+_vm._s(_vm.orginalDuration)+\" \")])]),_c('div',{staticClass:\"animation-data\"},[_vm._v(\" Animation duration: \"),_c('div',{staticClass:\"purple\"},[_vm._v(\" \"+_vm._s(_vm.animateDuration)+\" \")])]),_c('div',{staticClass:\"animation-data\"},[_vm._v(\" Playback speed \"),_c('el-select',{staticClass:\"select-box\",attrs:{\"popper-append-to-body\":true,\"value\":_vm.currentSpeed,\"placeholder\":\"Select\",\"popper-class\":\"scaffold_viewer_dropdown\"},on:{\"change\":function($event){return _vm.speedChanged($event)}}},_vm._l((_vm.playSpeed),function(item){return _c('el-option',{key:item.value,attrs:{\"label\":item.label,\"value\":item.value}})}),1)],1)])],1)],1)],1):_vm._e(),_c('div',{staticClass:\"bottom-right-control\"},[_c('el-popover',{attrs:{\"content\":\"Zoom in\",\"placement\":\"left\",\"append-to-body\":false,\"trigger\":\"manual\",\"popper-class\":\"scaffold-popper left-popper non-selectable\"},model:{value:(_vm.hoverVisabilities[0].value),callback:function ($$v) {_vm.$set(_vm.hoverVisabilities[0], \"value\", $$v)},expression:\"hoverVisabilities[0].value\"}},[_c('SvgIcon',{staticClass:\"icon-button zoomIn\",attrs:{\"slot\":\"reference\",\"icon\":\"zoomIn\"},nativeOn:{\"click\":function($event){return _vm.zoomIn()},\"mouseover\":function($event){return _vm.showToolitip(0)},\"mouseout\":function($event){return _vm.hideToolitip(0)}},slot:\"reference\"})],1),_c('el-popover',{attrs:{\"content\":\"Zoom out\",\"placement\":\"top-end\",\"append-to-body\":false,\"trigger\":\"manual\",\"popper-class\":\"scaffold-popper popper-zoomout non-selectable\"},model:{value:(_vm.hoverVisabilities[1].value),callback:function ($$v) {_vm.$set(_vm.hoverVisabilities[1], \"value\", $$v)},expression:\"hoverVisabilities[1].value\"}},[_c('SvgIcon',{staticClass:\"icon-button zoomOut\",attrs:{\"slot\":\"reference\",\"icon\":\"zoomOut\"},nativeOn:{\"click\":function($event){return _vm.zoomOut()},\"mouseover\":function($event){return _vm.showToolitip(1)},\"mouseout\":function($event){return _vm.hideToolitip(1)}},slot:\"reference\"})],1),_c('el-popover',{attrs:{\"placement\":\"top\",\"append-to-body\":false,\"trigger\":\"manual\",\"popper-class\":\"scaffold-popper non-selectable\"},model:{value:(_vm.hoverVisabilities[2].value),callback:function ($$v) {_vm.$set(_vm.hoverVisabilities[2], \"value\", $$v)},expression:\"hoverVisabilities[2].value\"}},[_c('div',[_vm._v(\" Fit to \"),_c('br'),_vm._v(\" window \")]),_c('SvgIcon',{staticClass:\"icon-button fitWindow\",attrs:{\"slot\":\"reference\",\"icon\":\"fitWindow\"},nativeOn:{\"click\":function($event){return _vm.fitWindow()},\"mouseover\":function($event){return _vm.showToolitip(2)},\"mouseout\":function($event){return _vm.hideToolitip(2)}},slot:\"reference\"})],1)],1),_c('el-popover',{ref:\"backgroundPopover\",attrs:{\"placement\":\"top-start\",\"width\":\"128\",\"append-to-body\":false,\"trigger\":\"click\",\"popper-class\":\"background-popper non-selectable\"}},[_c('el-row',{staticClass:\"backgroundText\"},[_vm._v(\" Change background \")]),_c('el-row',{staticClass:\"backgroundChooser\"},_vm._l((_vm.availableBackground),function(item){return _c('div',{key:item,class:['backgroundChoice', item, item == _vm.currentBackground ? 'active' :''],on:{\"click\":function($event){return _vm.backgroundChangeCallback(item)}}})}),0)],1),_c('el-popover',{attrs:{\"content\":\"Change background color\",\"placement\":\"right\",\"append-to-body\":false,\"trigger\":\"manual\",\"popper-class\":\"scaffold-popper right-popper non-selectable\"},model:{value:(_vm.hoverVisabilities[3].value),callback:function ($$v) {_vm.$set(_vm.hoverVisabilities[3], \"value\", $$v)},expression:\"hoverVisabilities[3].value\"}},[_c('SvgIcon',{directives:[{name:\"popover\",rawName:\"v-popover:backgroundPopover\",arg:\"backgroundPopover\"}],staticClass:\"icon-button background-colour\",class:{ open: _vm.drawerOpen, close: !_vm.drawerOpen },attrs:{\"slot\":\"reference\",\"icon\":\"changeBckgd\"},nativeOn:{\"mouseover\":function($event){return _vm.showToolitip(3)},\"mouseout\":function($event){return _vm.hideToolitip(3)}},slot:\"reference\"})],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.material!=undefined)?_c('div',{ref:\"control\",staticClass:\"opacity-control\"},[_c('el-drawer',{staticClass:\"drawer-content\",attrs:{\"custom-class\":\"my-drawer\",\"visible\":_vm.drawerOpen,\"append-to-body\":false,\"modal-append-to-body\":false,\"size\":\"300\",\"with-header\":false,\"wrapper-closable\":false,\"modal\":false},on:{\"update:visible\":function($event){_vm.drawerOpen=$event}}},[(_vm.drawerOpen)?_c('div',{staticClass:\"tab-button close\",on:{\"click\":_vm.toggleDrawer}},[_c('i',{staticClass:\"el-icon-arrow-right\"})]):_vm._e(),_c('el-container',{staticClass:\"opacity-container\"},[_c('el-header',{staticClass:\"header\",attrs:{\"height\":\"37px\"}},[_c('div',[_vm._v(\"Opacity\")])]),_c('el-main',{staticClass:\"main\"},[_c('div',{staticClass:\"block\"},[_c('span',{staticClass:\"display\"},[_vm._v(_vm._s(_vm.displayString))]),_c('el-slider',{staticClass:\"my-slider\",attrs:{\"step\":0.01,\"min\":0,\"max\":1,\"format-tooltip\":_vm.formatTooltip,\"show-tooltip\":false},model:{value:(_vm.material.opacity),callback:function ($$v) {_vm.$set(_vm.material, \"opacity\", $$v)},expression:\"material.opacity\"}})],1)])],1)],1),(!_vm.drawerOpen)?_c('div',{staticClass:\"tab-button open\",on:{\"click\":_vm.toggleDrawer}},[_c('i',{staticClass:\"el-icon-arrow-left\"})]):_vm._e()],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div\n v-if=\"material!=undefined\"\n ref=\"control\"\n class=\"opacity-control\"\n >\n <el-drawer\n custom-class=\"my-drawer\"\n class=\"drawer-content\"\n :visible.sync=\"drawerOpen\"\n :append-to-body=\"false\"\n :modal-append-to-body=\"false\"\n size=\"300\"\n :with-header=\"false\"\n :wrapper-closable=\"false\"\n :modal=\"false\"\n >\n <div\n v-if=\"drawerOpen\"\n class=\"tab-button close\"\n @click=\"toggleDrawer\"\n >\n <i class=\"el-icon-arrow-right\" />\n </div>\n <el-container class=\"opacity-container\">\n <el-header\n height=\"37px\"\n class=\"header\"\n >\n <div>Opacity</div>\n </el-header>\n <el-main class=\"main\">\n <div class=\"block\">\n <span class=\"display\">{{ displayString }}</span>\n <el-slider\n v-model=\"material.opacity\"\n class=\"my-slider\"\n :step=\"0.01\"\n :min=\"0\"\n :max=\"1\"\n :format-tooltip=\"formatTooltip\"\n :show-tooltip=\"false\"\n />\n </div>\n </el-main>\n </el-container>\n </el-drawer>\n <div\n v-if=\"!drawerOpen\"\n class=\"tab-button open\"\n @click=\"toggleDrawer\"\n >\n <i class=\"el-icon-arrow-left\" />\n </div>\n </div>\n</template>\n\n<script>\n/* eslint-disable no-alert, no-console */\nimport Vue from \"vue\";\nimport { Container, Drawer, Header, Icon, Main, Slider } from \"element-ui\";\nimport lang from \"element-ui/lib/locale/lang/en\";\nimport locale from \"element-ui/lib/locale\";\n\nlocale.use(lang);\nVue.use(Container);\nVue.use(Drawer);\nVue.use(Header);\nVue.use(Icon);\nVue.use(Main);\nVue.use(Slider);\n\n/**\n * A component to control the opacity of the target object.\n */\nexport default {\n name: \"OpacityControls\",\n data: function() {\n return {\n displayString: \"100%\",\n material: undefined,\n drawerOpen: true\n };\n },\n watch: {\n \"material.opacity\": function() {\n if (this.material) {\n this._zincobject.setAlpha(this.material.opacity);\n }\n }\n },\n mounted: function() {\n this._zincobject = undefined;\n },\n methods: {\n formatTooltip(val) {\n this.displayString = Math.floor(100 * val + 0.5) + \"%\";\n return this.displayString;\n },\n toggleDrawer: function() {\n this.drawerOpen = !this.drawerOpen;\n },\n setObject(object) {\n if (object) this.material = object.morph.material;\n else this.material = undefined;\n this._zincobject = object;\n }\n }\n};\n</script>\n\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\n<style scoped lang=\"scss\">\n@import \"~element-ui/packages/theme-chalk/src/container\";\n@import \"~element-ui/packages/theme-chalk/src/drawer\";\n@import \"~element-ui/packages/theme-chalk/src/slider\";\n\n.opacity-control {\n text-align: left;\n width:300px;\n}\n\n.header {\n color: #606266;\n line-height: 1;\n padding: 9px 17px 0 15px;\n border-bottom: 1px solid #ebeef5;\n font-size: 14px;\n}\n\n.display {\n width: 44px;\n}\n\n.icon {\n right: 17px;\n position: absolute;\n top: 10px;\n}\n\n.main {\n font-size: 13px;\n padding: 20px 17px 0 15px;\n}\n\n.block {\n left: 40px;\n position: absolute;\n top: 57px;\n width: 200px;\n}\n\n.my-slider {\n position: absolute;\n width: 109px;\n top: -12px;\n left: 50px;\n pointer-events: auto;\n}\n\n.opacity-container {\n width: 224px;\n height: 93px;\n border-radius: 4px;\n border: solid 1px #d8dce6;\n background-color: #fff;\n}\n\n::v-deep .el-slider__bar {\n background-color: $app-primary-color;\n}\n\n.drawer-content {\n position: relative;\n height: 93px;\n pointer-events: none;\n}\n\n::v-deep .my-drawer {\n background: rgba(0, 0, 0, 0);\n box-shadow: none;\n}\n\n::v-deep .my-drawer .el-drawer__body {\n height: 93px;\n}\n\n.tab-button {\n width: 20px;\n height: 40px;\n z-index: 8;\n right: 0px;\n \n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.06);\n border: solid 1px #e4e7ed;\n background-color: #FFFFFF;\n text-align: center;\n vertical-align: middle;\n cursor: pointer;\n pointer-events: auto;\n //transition: bottom 0.3s;\n\n &.close {\n float: left;\n flex: 1;\n border-right: 0;\n margin-top: 26px;\n }\n\n &.open {\n position: absolute;\n bottom:26px;\n }\n\n i {\n margin-top: 12px;\n color: $app-primary-color;\n transform: scaleY(2.5);\n }\n}\n\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OpacityControls.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OpacityControls.vue?vue&type=script&lang=js&\"","/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nexport default function normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () {\n injectStyles.call(\n this,\n (options.functional ? this.parent : this).$root.$options.shadowRoot\n )\n }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functional component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n","import { render, staticRenderFns } from \"./OpacityControls.vue?vue&type=template&id=4c00a30f&scoped=true&\"\nimport script from \"./OpacityControls.vue?vue&type=script&lang=js&\"\nexport * from \"./OpacityControls.vue?vue&type=script&lang=js&\"\nimport style0 from \"./OpacityControls.vue?vue&type=style&index=0&id=4c00a30f&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4c00a30f\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"traditional-location\",class:{ open: _vm.drawerOpen, close: !_vm.drawerOpen }},[_c('div',{staticClass:\"traditional-container\"},[_c('el-row',[_c('el-col',{attrs:{\"span\":12}},[_c('div',{staticClass:\"regions-display-text\"},[_vm._v(\" Regions \")])]),_c('el-col',{attrs:{\"span\":12}},[_c('el-checkbox',{staticClass:\"all-checkbox\",attrs:{\"indeterminate\":_vm.isIndeterminate},on:{\"change\":_vm.handleCheckAllChange},model:{value:(_vm.checkAll),callback:function ($$v) {_vm.checkAll=$$v},expression:\"checkAll\"}},[_vm._v(\" Display all \")])],1)],1),_c('el-checkbox-group',{staticClass:\"checkbox-group\",attrs:{\"size\":\"small\"},on:{\"change\":_vm.handleCheckedItemsChange},model:{value:(_vm.checkedItems),callback:function ($$v) {_vm.checkedItems=$$v},expression:\"checkedItems\"}},[_c('div',{staticClass:\"checkbox-group-inner\"},_vm._l((_vm.sortedPrimitiveGroups),function(item){return _c('el-row',{key:item,attrs:{\"label\":item}},[_c('div',{staticClass:\"checkbox-container\"},[_c('el-checkbox',{staticClass:\"my-checkbox\",class:{ activeItem: _vm.activeRegion === item, \n hoverItem: _vm.hoverRegion === item },attrs:{\"label\":item,\"checked\":true},on:{\"change\":function($event){return _vm.visibilityToggle(item, $event)}},nativeOn:{\"click\":function($event){return _vm.itemClicked(item, $event)},\"mouseover\":function($event){return _vm.checkboxHover(item)}}},[_c('el-color-picker',{class:{ 'show-picker' : _vm.showColourPicker },attrs:{\"value\":_vm.getColour(item),\"size\":\"small\",\"popper-class\":_vm.myPopperClass},on:{\"change\":function($event){return _vm.setColour(item, $event)}}}),_vm._v(\" \"+_vm._s(item)+\" \")],1)],1)])}),1)])],1),_c('div',{staticClass:\"drawer-button\",class:{ open: _vm.drawerOpen, close: !_vm.drawerOpen },on:{\"click\":_vm.toggleDrawer}},[_c('i',{staticClass:\"el-icon-arrow-left\"})])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","import arrayLikeToArray from \"./arrayLikeToArray\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}","import arrayLikeToArray from \"./arrayLikeToArray\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import arrayWithoutHoles from \"./arrayWithoutHoles\";\nimport iterableToArray from \"./iterableToArray\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray\";\nimport nonIterableSpread from \"./nonIterableSpread\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","<template>\n <div\n class=\"traditional-location\"\n :class=\"{ open: drawerOpen, close: !drawerOpen }\"\n >\n <div class=\"traditional-container\">\n <el-row>\n <el-col :span=\"12\">\n <div class=\"regions-display-text\">\n Regions\n </div>\n </el-col>\n <el-col :span=\"12\">\n <el-checkbox\n v-model=\"checkAll\"\n class=\"all-checkbox\"\n :indeterminate=\"isIndeterminate\"\n @change=\"handleCheckAllChange\"\n >\n Display all\n </el-checkbox>\n </el-col>\n </el-row>\n <el-checkbox-group\n v-model=\"checkedItems\"\n size=\"small\"\n class=\"checkbox-group\"\n @change=\"handleCheckedItemsChange\"\n >\n <div class=\"checkbox-group-inner\">\n <el-row\n v-for=\"item in sortedPrimitiveGroups\"\n :key=\"item\"\n :label=\"item\"\n >\n <div class=\"checkbox-container\">\n <el-checkbox\n class=\"my-checkbox\"\n :label=\"item\"\n :checked=\"true\"\n :class=\"{ activeItem: activeRegion === item, \n hoverItem: hoverRegion === item }\"\n @click.native=\"itemClicked(item, $event)\"\n @change=\"visibilityToggle(item, $event)\"\n @mouseover.native=\"checkboxHover(item)\"\n >\n <el-color-picker\n :class=\"{ 'show-picker' : showColourPicker }\"\n :value=\"getColour(item)\"\n size=\"small\"\n :popper-class=\"myPopperClass\"\n @change=\"setColour(item, $event)\"\n />\n {{ item }}\n </el-checkbox>\n </div>\n </el-row>\n </div>\n </el-checkbox-group>\n </div>\n <div\n class=\"drawer-button\"\n :class=\"{ open: drawerOpen, close: !drawerOpen }\"\n @click=\"toggleDrawer\"\n >\n <i class=\"el-icon-arrow-left\" />\n </div>\n </div>\n</template>\n\n<script>\n/* eslint-disable no-alert, no-console */\nimport Vue from \"vue\";\nimport { Checkbox, CheckboxGroup, ColorPicker, Row } from \"element-ui\";\nimport lang from \"element-ui/lib/locale/lang/en\";\nimport locale from \"element-ui/lib/locale\";\n\nconst orderBy = require(\"lodash/orderBy\");\nconst uniq = require(\"lodash/uniq\");\nlocale.use(lang);\nVue.use(Checkbox);\nVue.use(CheckboxGroup);\nVue.use(ColorPicker);\nVue.use(Row);\n\n/**\n * A vue component for toggling visibility of various regions.\n */\nexport default {\n name: \"TraditionalControls\",\n props: {\n /**\n * @ignore\n */\n module: {\n type: Object,\n default: undefined\n },\n /**\n * Enable/disable colour picker\n */\n showColourPicker: Boolean\n },\n data: function() {\n return {\n checkAll: true,\n isIndeterminate: false,\n checkedItems: [],\n sortedPrimitiveGroups: [],\n activeRegion: \"\",\n hoverRegion: \"\",\n myPopperClass: \"hide-scaffold-colour-popup\",\n drawerOpen: true\n };\n },\n watch: {\n showColourPicker: {\n immediate: true,\n handler: function() {\n if (this.showColourPicker) this.myPopperClass = \"showPicker\";\n else this.myPopperClass = \"hide-scaffold-colour-popup\";\n }\n }\n },\n created: function() {\n let tmpArray = this.module.sceneData.geometries.concat(\n this.module.sceneData.lines\n );\n tmpArray = tmpArray.concat(this.module.sceneData.glyphsets);\n tmpArray = uniq(tmpArray.concat(this.module.sceneData.pointset));\n this.sortedPrimitiveGroups = orderBy(tmpArray);\n this.module.addOrganPartAddedCallback(this.organsAdded);\n this.module.graphicsHighlight.selectColour = 0x444444;\n },\n destroyed: function() {\n this.sortedPrimitiveGroups = undefined;\n },\n methods: {\n /**\n * This is called when a new organ is read into the scene.\n */\n organsAdded: function(name) {\n if (name && name != \"\") {\n let tmpArray = uniq(this.sortedPrimitiveGroups.concat([name]));\n tmpArray = orderBy(tmpArray);\n const index = tmpArray.indexOf(undefined);\n if (index > -1) {\n tmpArray.splice(index, 1);\n }\n this.sortedPrimitiveGroups = tmpArray;\n }\n },\n /**\n * Select a region by its name.\n */\n changeActiveByName: function(name) {\n let targetObject = this.getFirstZincObjectWithGroupName(name);\n if (targetObject && targetObject.getVisibility()) {\n this.activeRegion = name;\n /**\n * Triggers when an item has been selected.\n *\n * @property {object} target selected object.\n */\n this.$emit(\"object-selected\", targetObject);\n } else {\n this.removeActive();\n }\n this.removeHover();\n },\n /**\n * Hover a region by its name.\n */\n changeHoverByName: function(name) {\n let targetObject = this.getFirstZincObjectWithGroupName(name);\n if (targetObject) {\n this.hoverRegion = name;\n /**\n * Triggers when an item has been hovered over.\n *\n * @property {object} target hovered object.\n */\n this.$emit(\"object-hovered\", targetObject);\n } else {\n this.removeHover();\n }\n },\n /**\n * Unselect the current selected region.\n */\n removeActive: function() {\n this.activeRegion = \"\";\n this.$emit(\"object-selected\", undefined);\n },\n /**\n * Unselect the current hover region.\n */\n removeHover: function() {\n this.hoverRegion = \"\";\n this.$emit(\"object-hovered\", undefined);\n },\n /**\n * Reset the controls.\n */\n clear: function() {\n this.sortedPrimitiveGroups = [];\n this.checkedItems = [];\n this.checkAll = true;\n this.isIndeterminate = false;\n this.activeRegion = \"\";\n this.hoverRegion = \"\";\n this.$emit(\"object-selected\", undefined);\n },\n getFirstZincObjectWithGroupName: function(name) {\n if (this.module && this.module.scene) {\n let array = this.module.scene.findGeometriesWithGroupName(name);\n if (array.length > 0) return array[0];\n array = this.module.scene.findGlyphsetsWithGroupName(name);\n if (array.length > 0) return array[0];\n array = this.module.scene.findLinesWithGroupName(name);\n if (array.length > 0) return array[0];\n array = this.module.scene.findPointsetsWithGroupName(name);\n if (array.length > 0) return array[0];\n }\n return undefined;\n },\n getColour: function(name) {\n let graphic = this.getFirstZincObjectWithGroupName(name);\n if (graphic) {\n let hex = graphic.getColourHex();\n if (hex) return \"#\" + hex;\n }\n return \"#FFFFFF\";\n },\n setColour: function(name, value) {\n let graphic = this.getFirstZincObjectWithGroupName(name);\n if (graphic) {\n let hexString = value.replace(\"#\", \"0x\");\n graphic.setColourHex(hexString);\n }\n },\n checkboxHover: function(name) {\n this.changeHoverByName(name);\n },\n itemClicked: function(name, event) {\n if (\n !(\n event.target.classList.contains(\"el-checkbox__inner\") ||\n event.target.classList.contains(\"el-checkbox__original\")\n )\n ) {\n this.changeActiveByName(name);\n event.preventDefault();\n }\n },\n handleCheckedItemsChange: function() {\n let unnamed = this.checkedItems.includes(undefined) ? true: false;\n let checkedCount = this.checkedItems.length;\n if (unnamed)\n checkedCount--;\n this.checkAll = checkedCount === this.sortedPrimitiveGroups.length;\n this.isIndeterminate =\n checkedCount > 0 && checkedCount < this.sortedPrimitiveGroups.length;\n },\n handleCheckAllChange(val) {\n this.checkedItems = val ? [...this.sortedPrimitiveGroups] : [];\n this.isIndeterminate = false;\n for (let i = 0; i < this.sortedPrimitiveGroups.length; i++) {\n this.visibilityToggle(this.sortedPrimitiveGroups[i], this.checkAll);\n }\n },\n viewAll: function() {\n this.module.viewAll();\n },\n visibilityToggle: function(item, event) {\n this.module.changeOrganPartsVisibility(item, event);\n if (event == false) {\n if (this.activeRegion === item) {\n this.removeActive();\n }\n if (this.hoverRegion === item) {\n this.removeHover();\n }\n }\n },\n toggleDrawer: function() {\n this.drawerOpen = !this.drawerOpen;\n this.$emit(\"drawer-toggled\", this.drawerOpen);\n },\n getState: function() {\n if (this.checkAll) {\n return { checkAll: true };\n }\n let checkedItems = [...this.checkedItems];\n const index = checkedItems.indexOf(undefined);\n if (index > -1) {\n checkedItems.splice(index, 1);\n }\n return { checkedItems: checkedItems };\n },\n setState: function(state) {\n if (state) {\n if (state.checkAll) {\n this.checkedItems = [...this.sortedPrimitiveGroups];\n for (let i = 0; i < this.sortedPrimitiveGroups.length; i++) {\n this.module.changeOrganPartsVisibility(\n this.sortedPrimitiveGroups[i],\n true\n );\n }\n } else if (state.checkedItems) { \n this.checkedItems = [...state.checkedItems];\n for (let i = 0; i < this.sortedPrimitiveGroups.length; i++) {\n\n let visible = this.checkedItems.includes(\n this.sortedPrimitiveGroups[i]);\n this.module.changeOrganPartsVisibility(\n this.sortedPrimitiveGroups[i],\n visible\n );\n }\n }\n }\n this.handleCheckedItemsChange();\n }\n }\n};\n</script>\n\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\n<style scoped lang=\"scss\">\n@import \"~element-ui/packages/theme-chalk/src/checkbox\";\n@import \"~element-ui/packages/theme-chalk/src/checkbox-group\";\n@import \"~element-ui/packages/theme-chalk/src/color-picker\";\n@import \"~element-ui/packages/theme-chalk/src/row\";\n\n.checkbox-container {\n display: flex;\n cursor: pointer;\n}\n\n.traditional-location {\n position: absolute;\n bottom: 0px;\n transition: all 1s ease;\n\n &:focus{\n outline: none;\n }\n &.open {\n left: 0px;\n .traditional-container {\n opacity: 1;\n }\n }\n &.close {\n left: -298px;\n .traditional-container {\n pointer-events:none;\n opacity: 0;\n }\n }\n}\n\n.traditional-container {\n transition: all 1s ease;\n float: left;\n padding-left: 16px;\n padding-right: 18px;\n max-height: calc(100% - 154px);\n text-align: left;\n overflow: none;\n border: 1px solid rgb(220, 223, 230);\n padding-top: 7px;\n padding-bottom: 16px;\n background: #ffffff;\n}\n\n.regions-display-text {\n width: 59px;\n height: 20px;\n color: rgb(48, 49, 51);\n font-size: 14px;\n font-weight: normal;\n line-height: 20px;\n margin-left: 8px;\n}\n\n.all-checkbox {\n float: right;\n}\n\n.checkbox-group {\n width: 260px;\n border: 1px solid rgb(144, 147, 153);\n border-radius: 4px;\n background: #ffffff;\n margin-top: 6px;\n}\n\n.checkbox-group-inner {\n padding: 18px;\n max-height: 240px;\n min-height: 130px;\n overflow: auto;\n scrollbar-color: #c0c4cc rgba(1, 1, 1, 0);\n scrollbar-width: thin;\n\n &::-webkit-scrollbar {\n width: 4px;\n }\n\n &::-webkit-scrollbar-thumb {\n border-radius: 10px;\n box-shadow: inset 0 0 6px #c0c4cc;\n }\n}\n\n::v-deep .el-checkbox__input {\n &.is-indeterminate, &.is-checked {\n .el-checkbox__inner {\n background-color: $app-primary-color;\n border-color: $app-primary-color;\n }\n }\n}\n\n::v-deep .el-color-picker__color {\n border: 1px solid $app-primary-color;\n}\n\n::v-deep .el-checkbox__label {\n padding-left: 5px;\n color: $app-primary-color !important;\n font-size: 12px;\n font-weight: 500;\n letter-spacing: 0px;\n line-height: 14px;\n}\n\n.activeItem {\n background-color: #bbb !important;\n}\n\n.my-checkbox {\n background-color: #fff;\n width: 100%;\n\n ::v-deep .el-color-picker {\n height: 16px !important;\n top: 3px;\n }\n\n ::v-deep .el-color-picker__trigger {\n margin-left: 8px;\n margin-right: 8px;\n padding: 0px;\n height: 16px;\n width: 16px;\n border: 0px;\n }\n\n}\n\n.hoverItem {\n background-color: #eee !important;\n}\n\n::v-deep .el-color-picker__icon {\n &.el-icon-arrow-down {\n display: none;\n }\n}\n\n::v-deep .show-picker {\n .el-color-picker__icon {\n &.el-icon-arrow-down {\n display: block;\n }\n }\n}\n\n::v-deep .my-drawer {\n background: rgba(0, 0, 0, 0);\n box-shadow: none;\n}\n\n.drawer {\n ::v-deep .el-drawer:focus {\n outline: none;\n }\n}\n\n.open-drawer {\n width: 20px;\n height: 40px;\n z-index: 8;\n position: absolute;\n left: 0px;\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.06);\n border: solid 1px #e4e7ed;\n background-color: #f7faff;\n text-align: center;\n vertical-align: middle;\n cursor: pointer;\n pointer-events: auto;\n}\n\n.drawer-button {\n float: left;\n width: 20px;\n height: 40px;\n z-index: 8;\n margin-top: calc(50% - 52px);\n border: solid 1px #e4e7ed;\n border-left: 0;\n background-color: #ffffff;\n text-align: center;\n vertical-align: middle;\n cursor: pointer;\n pointer-events: auto;\n}\n\n.drawer-button {\n i {\n margin-top: 12px;\n color: $app-primary-color;\n transition-delay: 0.9s;\n }\n &.open {\n i {\n transform: rotate(0deg) scaleY(2.5);\n }\n }\n &.close {\n i {\n transform: rotate(180deg) scaleY(2.5); \n }\n }\n}\n\n.drawer-button.open i {\n transform: rotate(0deg) scaleY(2.5);\n}\n\n.drawer-button.close i {\n transform: rotate(180deg) scaleY(2.5);\n}\n</style>\n\n<style>\n.hide-scaffold-colour-popup {\n display: none;\n}\n</style>\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TraditionalControls.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TraditionalControls.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TraditionalControls.vue?vue&type=template&id=b034523c&scoped=true&\"\nimport script from \"./TraditionalControls.vue?vue&type=script&lang=js&\"\nexport * from \"./TraditionalControls.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TraditionalControls.vue?vue&type=style&index=0&id=b034523c&scoped=true&lang=scss&\"\nimport style1 from \"./TraditionalControls.vue?vue&type=style&index=1&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b034523c\",\n null\n \n)\n\nexport default component.exports","<template>\n <div\n ref=\"scaffoldContainer\"\n v-loading=\"loading\"\n class=\"scaffold-container\"\n element-loading-text=\"Loading...\"\n element-loading-spinner=\"el-icon-loading\"\n element-loading-background=\"rgba(0, 0, 0, 0.3)\"\n >\n <SvgSpriteColor />\n <div\n id=\"organsDisplayArea\"\n ref=\"display\"\n tabindex=\"-1\"\n style=\"height:100%;width:100%;\"\n @keydown.66=\"backgroundChangeCallback\"\n />\n <div v-show=\"displayUI && !isTransitioning\">\n <el-popover\n v-if=\"displayWarning\"\n ref=\"warningPopover\"\n v-model=\"hoverVisabilities[6].value\"\n :content=\"warningMessage\"\n placement=\"right\"\n :append-to-body=\"false\"\n trigger=\"manual\"\n popper-class=\"warning-popper right-popper non-selectable\"\n />\n <i\n v-if=\"displayWarning\"\n v-popover:warningPopover\n class=\"el-icon-warning warning-icon\"\n @mouseover=\"showToolitip(6)\"\n @mouseout=\"hideToolitip(6)\"\n >\n <span class=\"warning-text\">Beta</span>\n </i>\n <el-popover\n ref=\"checkBoxPopover\"\n v-model=\"hoverVisabilities[5].value\"\n content=\"Change region visibility\"\n placement=\"right\"\n :append-to-body=\"false\"\n trigger=\"manual\"\n popper-class=\"scaffold-popper right-popper non-selectable\"\n />\n <TraditionalControls\n ref=\"traditionalControl\"\n v-popover:checkBoxPopover\n :help-mode=\"helpMode\"\n :module=\"$module\"\n :show-colour-picker=\"showColourPicker\"\n @object-selected=\"objectSelected\"\n @object-hovered=\"objectHovered\"\n @drawer-toggled=\"drawerToggled\"\n />\n <div class=\"opacity-box\">\n <OpacityControls ref=\"opacityControl\" />\n </div>\n <el-popover\n v-if=\"sceneData.timeVarying\"\n ref=\"sliderPopover\"\n v-model=\"hoverVisabilities[4].value\"\n content=\"Move the slider to animate the region\"\n placement=\"top\"\n :append-to-body=\"false\"\n trigger=\"manual\"\n popper-class=\"scaffold-popper top-popper non-selectable\"\n />\n <div\n v-if=\"sceneData.timeVarying\"\n v-popover:sliderPopover\n class=\"time-slider-container\"\n :class=\"[ minimisedSlider ? 'minimised' : '', sliderPosition]\"\n >\n <el-tabs type=\"card\">\n <el-tab-pane label=\"Animate scaffold\">\n <el-row class=\"tab-content\">\n <SvgIcon\n v-if=\"isPlaying\"\n icon=\"pause\"\n class=\"icon-button video-button\"\n @click.native=\"play(false)\"\n />\n <SvgIcon\n v-else\n icon=\"play\"\n class=\"video-button icon-button\"\n @click.native=\"play(true)\"\n />\n <el-slider\n :min=\"0\"\n :max=\"timeMax\"\n :value=\"sceneData.currentTime / 100 * timeMax\"\n :step=\"0.1\"\n tooltip-class=\"time-slider-tooltip\"\n class=\"slider\"\n :format-tooltip=\"formatTooltip\"\n :marks=\"timeStamps\"\n @input=\"timeChange($event)\"\n />\n </el-row>\n </el-tab-pane>\n <el-tab-pane label=\"Animation data\">\n <el-row class=\"tab-content\">\n <div class=\"animation-data\">\n Original duration:\n <div class=\"purple\">\n {{ orginalDuration }}\n </div>\n </div>\n <div class=\"animation-data\">\n Animation duration:\n <div class=\"purple\">\n {{ animateDuration }}\n </div>\n </div>\n <div class=\"animation-data\">\n Playback speed\n <el-select\n :popper-append-to-body=\"true\"\n :value=\"currentSpeed\"\n placeholder=\"Select\"\n class=\"select-box\"\n popper-class=\"scaffold_viewer_dropdown\"\n @change=\"speedChanged($event)\"\n >\n <el-option\n v-for=\"item in playSpeed\"\n :key=\"item.value\"\n :label=\"item.label\"\n :value=\"item.value\"\n />\n </el-select>\n </div>\n </el-row>\n </el-tab-pane>\n </el-tabs>\n </div>\n <div class=\"bottom-right-control\">\n <el-popover\n v-model=\"hoverVisabilities[0].value\"\n content=\"Zoom in\"\n placement=\"left\"\n :append-to-body=\"false\"\n trigger=\"manual\"\n popper-class=\"scaffold-popper left-popper non-selectable\"\n >\n <SvgIcon\n slot=\"reference\"\n icon=\"zoomIn\"\n class=\"icon-button zoomIn\"\n @click.native=\"zoomIn()\"\n @mouseover.native=\"showToolitip(0)\"\n @mouseout.native=\"hideToolitip(0)\"\n />\n </el-popover>\n <el-popover\n v-model=\"hoverVisabilities[1].value\"\n content=\"Zoom out\"\n placement=\"top-end\"\n :append-to-body=\"false\"\n trigger=\"manual\"\n popper-class=\"scaffold-popper popper-zoomout non-selectable\"\n >\n <SvgIcon\n slot=\"reference\"\n icon=\"zoomOut\"\n class=\"icon-button zoomOut\"\n @click.native=\"zoomOut()\"\n @mouseover.native=\"showToolitip(1)\"\n @mouseout.native=\"hideToolitip(1)\"\n />\n </el-popover>\n <el-popover\n v-model=\"hoverVisabilities[2].value\"\n placement=\"top\"\n :append-to-body=\"false\"\n trigger=\"manual\"\n popper-class=\"scaffold-popper non-selectable\"\n >\n <div>\n Fit to\n <br>\n window\n </div>\n <SvgIcon\n slot=\"reference\"\n icon=\"fitWindow\"\n class=\"icon-button fitWindow\"\n @click.native=\"fitWindow()\"\n @mouseover.native=\"showToolitip(2)\"\n @mouseout.native=\"hideToolitip(2)\"\n />\n </el-popover>\n </div>\n <el-popover\n ref=\"backgroundPopover\"\n placement=\"top-start\"\n width=\"128\"\n :append-to-body=\"false\"\n trigger=\"click\"\n popper-class=\"background-popper non-selectable\"\n >\n <el-row class=\"backgroundText\">\n Change background\n </el-row>\n <el-row class=\"backgroundChooser\">\n <div\n v-for=\"item in availableBackground\"\n :key=\"item\"\n :class=\"['backgroundChoice', item, item == currentBackground ? 'active' :'']\"\n @click=\"backgroundChangeCallback(item)\"\n />\n </el-row>\n </el-popover>\n <el-popover\n v-model=\"hoverVisabilities[3].value\"\n content=\"Change background color\"\n placement=\"right\"\n :append-to-body=\"false\"\n trigger=\"manual\"\n popper-class=\"scaffold-popper right-popper non-selectable\"\n >\n <SvgIcon\n slot=\"reference\"\n v-popover:backgroundPopover\n icon=\"changeBckgd\"\n class=\"icon-button background-colour\"\n :class=\"{ open: drawerOpen, close: !drawerOpen }\"\n @mouseover.native=\"showToolitip(3)\"\n @mouseout.native=\"hideToolitip(3)\"\n />\n </el-popover>\n </div>\n </div>\n</template>\n\n<script>\n/* eslint-disable no-alert, no-console */\nimport Vue from \"vue\";\nimport OpacityControls from \"./OpacityControls\";\nimport TraditionalControls from \"./TraditionalControls\";\nimport { SvgIcon, SvgSpriteColor } from \"@abi-software/svg-sprite\";\n\nimport {\n Col,\n Loading,\n Option,\n Popover,\n Row,\n Select,\n Slider,\n TabPane,\n Tabs\n} from \"element-ui\";\nimport lang from \"element-ui/lib/locale/lang/en\";\nimport locale from \"element-ui/lib/locale\";\n\nlocale.use(lang);\nVue.use(Col);\nVue.use(Loading.directive);\nVue.use(Option);\nVue.use(Popover);\nVue.use(Row);\nVue.use(Select);\nVue.use(Slider);\nVue.use(TabPane);\nVue.use(Tabs);\n\nconst OrgansViewer = require(\"physiomeportal/src/modules/organsRenderer\")\n .OrgansViewer;\nconst EventNotifier = require(\"physiomeportal/src/utilities/eventNotifier\")\n .EventNotifier;\n\n/**\n * A vue component of the scaffold viewer.\n *\n * @requires ./OpacityControls.vue\n * @requires ./TraditionalControls.vue\n */\nexport default {\n name: \"ScaffoldVuer\",\n components: {\n OpacityControls,\n SvgIcon,\n SvgSpriteColor,\n TraditionalControls\n },\n props: {\n /**\n * URL of the zincjs metadata. This value will be ignored if a valid\n * state prop is also provided.\n * If the url needs to be updated with state present, please use\n * the setURL method.\n */\n url: {\n type: String,\n default: \"\"\n },\n /**\n * Show the colour control of set to true.\n */\n showColourPicker: {\n type: Boolean,\n default: false\n },\n /**\n * Flag to show/hide the UI.\n */\n displayUI: {\n type: Boolean,\n default: true\n },\n /**\n * Display all graphics at start.\n *\n * This setting only works when traditional is set to false.\n */\n displayAtStartUp: {\n type: Boolean,\n default: true\n },\n /**\n * Use for toggling the help tooltips.\n */\n helpMode: {\n type: Boolean,\n default: false\n },\n /**\n * Use for show/display beta warning icon.\n */\n displayWarning: {\n type: Boolean,\n default: true\n },\n /**\n * Warning message for the hovered over text\n * on the warning icon.\n */\n warningMessage: {\n type: String,\n default: \"Beta feature - under active development\"\n },\n /**\n * Show/hide pickable markers for regions.\n */\n displayMarkers: {\n type: Boolean,\n default: true\n },\n /**\n * Show/hide minimap.\n */\n displayMinimap: {\n type: Boolean,\n default: false\n },\n /**\n * Settings for minimap position, size and alignment.\n */\n minimapSettings: {\n type: Object,\n default: function() {\n return {\n x_offset: 16,\n y_offset: 16,\n width: 128,\n height: 128,\n align: \"top-right\"\n };\n }\n },\n /**\n * State containing state of the scaffold.\n */\n state: {\n type: Object,\n default: undefined\n },\n /**\n * Optional prop for the name of the region to focus on,\n * this option is ignored if state or viewURL is also provided.\n */\n region: {\n type: String,\n default: \"\"\n },\n /**\n * Optional prop for an URL of containing information of a viewport.\n * This option is ignored if state is also provided.\n * It will use the provided URL as base if a relative parth is provided.\n */\n viewURL: {\n type: String,\n default: \"\"\n },\n /**\n * Settings for turning on/off rendering\n */\n render: {\n type: Boolean,\n default: true\n }\n },\n data: function() {\n return {\n sceneData: this.$module.sceneData,\n isPlaying: false,\n /**\n * This is set when scene is transitioning.\n */\n isTransitioning: false,\n tooltipAppendToBody: false,\n hoverVisabilities: [\n { value: false },\n { value: false },\n { value: false },\n { value: false },\n { value: false },\n { value: false },\n { value: false }\n ],\n inHelp: false,\n loading: false,\n duration: 3000,\n drawerOpen: true,\n currentBackground: \"white\",\n availableBackground: [\"white\", \"lightskyblue\", \"black\"],\n minimisedSlider: false,\n sliderPosition: \"\",\n timeMax: 100,\n orginalDuration: \"\",\n animateDuration: \"6secs\",\n playSpeed: [\n {\n value: 0.1,\n label: \"0.1x\"\n },\n {\n value: 0.5,\n label: \"0.5x\"\n },\n {\n value: 1,\n label: \"1x\"\n },\n {\n value: 2,\n label: \"2x\"\n },\n {\n value: 5,\n label: \"5x\"\n },\n {\n value: 10,\n label: \"10x\"\n }\n ],\n currentSpeed: 1,\n timeStamps: {}\n };\n },\n watch: {\n url: {\n handler: function(newValue) {\n if (this.state === undefined || this.state.url === undefined)\n this.setURL(newValue);\n },\n immediate: true\n },\n region: {\n handler: function(region) {\n if (!(this.state || this.viewURL)) this.setFocusedRegion(region);\n },\n immediate: true\n },\n state: {\n handler: function(state) {\n this.setState(state);\n },\n immediate: true,\n deep: true\n },\n viewURL: {\n handler: function(viewURL) {\n this.updateViewURL(viewURL);\n },\n immediate: true\n },\n helpMode: function(val) {\n this.setHelpMode(val);\n },\n displayMarkers: function(val) {\n this.$module.scene.displayMarkers = val;\n },\n displayMinimap: function(val) {\n this.$module.scene.displayMinimap = val;\n },\n \"sceneData.currentTime\": function() {\n /**\n * Triggers when scene time changes.\n *\n * @property {number} time Current build-in time of scene.\n * of selected object.\n */\n this.$emit(\"timeChanged\", this.sceneData.currentTime);\n },\n duration: function() {\n this.$module.scene.setDuration(this.duration);\n },\n minimapSettings: {\n deep: true,\n handler: \"updateMinimapScissor\"\n },\n render: function(val) {\n this.toggleRendering(val);\n }\n },\n beforeCreate: function() {\n this.$module = new OrgansViewer();\n this.isReady = false;\n this.selectedObject = undefined;\n this.hoveredObject = undefined;\n this.currentBackground = \"white\";\n this._currentURL = undefined;\n this.availableBackground = [\"white\", \"black\", \"lightskyblue\"];\n },\n mounted: function() {\n let eventNotifier = new EventNotifier();\n eventNotifier.subscribe(this, this.eventNotifierCallback);\n this.$module.addNotifier(eventNotifier);\n this.$module.addOrganPartAddedCallback(this.organsAdded);\n this.$module.initialiseRenderer(this.$refs.display);\n this.toggleRendering(this.render);\n this.$module.toolTip = undefined;\n this.ro = new ResizeObserver(this.adjustLayout).observe(\n this.$refs.scaffoldContainer\n );\n this.defaultRate = this.$module.getPlayRate();\n },\n beforeDestroy: function() {\n if (this.ro) this.ro.disconnect();\n this.$module.destroy();\n this.$module = undefined;\n },\n methods: {\n /**\n * This is called when a new organ is read into the scene.\n */\n organsAdded: function() {\n this.loading = false;\n },\n /**\n * This is called when Change backgspeedround colour button\n * is pressed an causes the backgrouColornd colour to be changed\n * to one of the three preset colour: white, black and\n * lightskyblue.\n */\n backgroundChangeCallback: function(colour) {\n this.currentBackground = colour;\n this.$module.zincRenderer\n .getThreeJSRenderer()\n .setClearColor(this.currentBackground, 1);\n },\n /**\n * This is called by captueeScreenshot and after the last render\n * loop, it download a screenshot of the current scene with no UI.\n */\n captureScreenshotCallback: function() {\n //Remove the callback, only needs to happen once\n this.$module.zincRenderer.removePostRenderCallbackFunction(\n this.captureID\n );\n let screenshot = this.$module.zincRenderer\n .getThreeJSRenderer()\n .domElement.toDataURL(\"image/png\");\n let hrefElement = document.createElement(\"a\");\n document.body.append(hrefElement);\n if (!this.captureFilename) hrefElement.download = `screenshot.png`;\n else hrefElement.download = this.captureFilename;\n hrefElement.href = screenshot;\n hrefElement.click();\n hrefElement.remove();\n },\n /**\n * Function for capturing a screenshot of the current rendering.\n *\n * @param {String} filename filename given to the screenshot.\n *\n * @public\n */\n captureScreenshot: function(filename) {\n this.captureFilename = filename;\n this.captureID = this.$module.zincRenderer.addPostRenderCallbackFunction(\n this.captureScreenshotCallback\n );\n },\n formatTooltip(val) {\n if (this.timeMax >= 1000) {\n if (val) {\n let sec = ((val % 60000) / 1000).toFixed(2) + \"s\";\n let min = val > 60000 ? (val / 60000).toFixed(0) + \"m \" : \"\";\n return min + sec;\n }\n }\n return val ? val.toFixed(2) + \" ms\" : \"0 ms\";\n },\n /**\n * Function to reset the view to default.\n * Also called when the associated button is pressed.\n *\n * @public\n */\n fitWindow: function() {\n if (this.$module.scene) {\n this.$module.scene.viewAll();\n }\n },\n /**\n * Function to zoom in.\n * Also called when the associated button is pressed.\n *\n * @public\n */\n zoomIn: function() {\n if (this.$module.scene) {\n this.$module.scene.changeZoomByScrollRateUnit(-1);\n }\n },\n /**\n * Function to zoom out.\n * Also called when the associated button is pressed.\n *\n * @public\n */\n zoomOut: function() {\n if (this.$module.scene) {\n this.$module.scene.changeZoomByScrollRateUnit(1);\n }\n },\n /**\n * Function to change the current play speed.\n *\n * @public\n */\n speedChanged: function(speed) {\n this.currentSpeed = speed;\n this.$module.setPlayRate(this.defaultRate * this.currentSpeed);\n },\n /**\n * Function used to stop the free spin\n *\n * @public\n */\n stopFreeSpin: function() {\n let cameracontrol = this.$module.scene.getZincCameraControls();\n cameracontrol.stopAutoTumble();\n this.isTransitioning = false;\n },\n /**\n * Focus on named region\n */\n viewRegion: function(name) {\n if (name && name != \"\" && this.$module.scene) {\n let objects = this.$module.scene.findObjectsWithGroupName(name);\n let box = this.$module.scene.getBoundingBoxOfZincObjects(objects);\n if (box) {\n this.$module.scene.viewAllWithBoundingBox(box);\n }\n }\n },\n setFocusedRegion: function(name) {\n if (name) {\n if (this.isReady) {\n this.viewRegion(name);\n } else {\n this.$module.setFinishDownloadCallback(\n this.setURLFinishCallback({ region: name })\n );\n }\n }\n },\n updateViewURL: function(viewURL) {\n if (viewURL) {\n if (this.isReady) {\n const url = new URL(viewURL, this.url);\n this.$module.scene.loadViewURL(url);\n } else {\n this.$module.setFinishDownloadCallback(\n this.setURLFinishCallback({ viewURL: viewURL })\n );\n }\n }\n },\n /**\n * Function used to rotate the scene.\n * Also called when the associated button is pressed.\n *\n * @public\n */\n freeSpin: function() {\n if (this.$module.scene) {\n let cameracontrol = this.$module.scene.getZincCameraControls();\n this.isTransitioning = true;\n cameracontrol.enableAutoTumble();\n cameracontrol.autoTumble([1.0, 0.0], Math.PI, true);\n setTimeout(this.stopFreeSpin, 4000);\n }\n },\n /**\n * Callback when a region is selected/highlighted.\n * It will also update other controls.\n */\n eventNotifierCallback: function(event) {\n if (event.eventType == 1) {\n if (this.$refs.traditionalControl) {\n if (event.identifiers[0]) {\n let id = event.identifiers[0].data.id\n ? event.identifiers[0].data.id\n : event.identifiers[0].data.group;\n this.$refs.traditionalControl.changeActiveByName(id);\n } else {\n this.$refs.traditionalControl.removeActive();\n }\n }\n /**\n * Triggers when an object has been selected\n *\n * @property {array} identifiers array of identifiers\n * of selected object.\n */\n this.$emit(\"scaffold-selected\", event.identifiers);\n } else if (event.eventType == 2) {\n if (this.$refs.traditionalControl) {\n if (event.identifiers[0]) {\n let id = event.identifiers[0].data.id\n ? event.identifiers[0].data.id\n : event.identifiers[0].data.group;\n this.$refs.traditionalControl.changeHoverByName(id);\n } else this.$refs.traditionalControl.removeHover();\n }\n /**\n * Triggers when an object has been highlighted\n *\n * @property {array} identifiers array of identifiers\n * of highlighted object.\n */\n this.$emit(\"scaffold-highlighted\", event.identifiers);\n }\n },\n /**\n * Get the coordinates of the current selected region.\n *\n * @public\n */\n getCoordinatesOfSelected: function() {\n if (this.selectedObject) {\n return this.$module.scene.getObjectsScreenXY([this.selectedObject]);\n }\n return undefined;\n },\n /**\n * Return an object containing the window coordinates of the\n * current selected region which will be updated after each render\n * loop.\n *\n * @public\n */\n getDynamicSelectedCoordinates: function() {\n return this.$module.selectedScreenCoordinates;\n },\n /**\n * Callback when time is changed through the UI.\n */\n timeChange: function(event) {\n let normalizedTime = (event / this.timeMax) * 100;\n if (normalizedTime != this.sceneData.currentTime)\n this.$module.updateTime(normalizedTime);\n },\n /**\n * A callback used by children components. Set the selected zinc object\n *\n * @param {object} object Zinc object\n */\n objectSelected: function(object) {\n if (object !== this.selectedObject) {\n this.selectedObject = object;\n this.$refs.opacityControl.setObject(this.selectedObject);\n if (object) this.$module.setSelectedByZincObject(object, true);\n else this.$module.setSelectedByObjects([], true);\n }\n },\n /**\n * A callback used by children components. Set the highlighted zinc object\n *\n * @param {object} object Zinc object\n */\n objectHovered: function(object) {\n if (object !== this.hoveredObject) {\n this.hoveredObject = object;\n if (object) this.$module.setHighlightedByZincObject(object, true);\n else this.$module.setHighlightedByObjects([], true);\n }\n },\n /**\n * Set the selected by name.\n *\n * @param {name} name Name of the region\n */\n changeActiveByName: function(name) {\n this.$refs.traditionalControl.changeActiveByName(name);\n if (name === undefined)\n this.$refs.traditionalControl.removeActive();\n },\n /**\n * Set the highlighted by name.\n *\n * @param {name} name Name of the region\n */\n changeHighlightedByName: function(name) {\n this.$refs.traditionalControl.changeHoverByName(name);\n if (name === undefined)\n this.$refs.traditionalControl.removeHover();\n },\n /**\n * Start the animation.\n *\n * @param {object} object Zinc object\n */\n play: function(flag) {\n this.$module.playAnimation(flag);\n this.isPlaying = flag;\n },\n /**\n * Function to toggle on/off overlay help.\n */\n setHelpMode: function(helpMode) {\n if (helpMode) {\n this.inHelp = true;\n this.hoverVisabilities.forEach(item => {\n item.value = true;\n });\n } else {\n this.inHelp = false;\n this.hoverVisabilities.forEach(item => {\n item.value = false;\n });\n }\n },\n /**\n * This is called when mouse cursor enters supported elements\n * with help tootltips.\n */\n showToolitip: function(tooltipNumber) {\n if (!this.inHelp) {\n this.tooltipWait = setTimeout(() => {\n this.hoverVisabilities[tooltipNumber].value = true;\n }, 500);\n }\n },\n /**\n * This is called when mouse cursor exits supported element..\n */\n hideToolitip: function(tooltipNumber) {\n if (!this.inHelp) {\n this.hoverVisabilities[tooltipNumber].value = false;\n clearTimeout(this.tooltipWait);\n }\n },\n /**\n * Called when minimap settings has changed. Pass the\n * parameters to ZincJS and marked it for update.\n */\n updateMinimapScissor: function() {\n Object.keys(this.minimapSettings).forEach(key => {\n this.$module.scene.minimapScissor[key] = this.minimapSettings[key];\n });\n this.$module.scene.minimapScissor.updateRequired = true;\n },\n updateSettingsfromScene: function() {\n this.currentSpeed = 1;\n this.$module.setPlayRate(this.defaultRate);\n this.orginalDuration = this.$module.scene.getMetadataTag(\n \"OriginalDuration\"\n );\n this.animateDuration = this.$module.scene.getMetadataTag(\"Duration\");\n let timeStamps = this.$module.scene.getMetadataTag(\"TimeStamps\");\n this.timeStamps = {};\n for (const key in timeStamps) {\n this.timeStamps[timeStamps[key]] = key;\n }\n this.timeMax = this.$module.scene.getDuration();\n },\n setURLFinishCallback: function(options) {\n return () => {\n if (options) {\n if (options.viewport) {\n this.$module.scene\n .getZincCameraControls()\n .setCurrentCameraSettings(options.viewport);\n } else if (options.viewURL && options.viewURL !== \"\") {\n const url = new URL(options.viewURL, this.url);\n this.$module.scene.loadViewURL(url);\n } else if (options.region && options.region !== \"\") {\n this.viewRegion(options.region);\n }\n if (options.visibility) {\n // Some UIs may not be ready at this time.\n this.$nextTick(() => {\n this.$refs.traditionalControl.setState(options.visibility);\n });\n }\n }\n this.updateSettingsfromScene();\n this.$module.updateTime(0.01);\n this.$module.updateTime(0);\n this.$module.unsetFinishDownloadCallback();\n this.isReady = true;\n };\n },\n /**\n * Function used for getting the current states of the scene. This exported states\n * can be imported using the importStates method.\n *\n * @public\n */\n getState: function() {\n let state = {\n url: this._currentURL,\n viewport: undefined,\n visibility: undefined\n };\n if (this.$refs.traditionalControl)\n state.visibility = this.$refs.traditionalControl.getState();\n if (this.$module.scene) {\n let zincCameraControls = this.$module.scene.getZincCameraControls();\n state.viewport = zincCameraControls.getCurrentViewport();\n }\n return state;\n },\n /**\n * Function used for importing the states of the scene. This exported states\n * can be imported using the read states method.\n *\n * @public\n */\n setState: function(state) {\n if (state) {\n if (state.url && state.url !== this._currentURL) {\n this.setURLAndState(state.url, {\n viewport: state.viewport,\n visibility: state.visibility\n });\n } else {\n if (state.viewport || state.visibility) {\n if (this.isReady && this.$module.scene) {\n if (state.viewport)\n this.$module.scene\n .getZincCameraControls()\n .setCurrentCameraSettings(state.viewport);\n if (state.visibility)\n this.$refs.traditionalControl.setState(state.visibility);\n } else {\n this.$module.setFinishDownloadCallback(\n this.setURLFinishCallback({\n viewport: state.viewport,\n visibility: state.visibility\n })\n );\n }\n }\n }\n }\n },\n exportGLTF: function(binary) {\n return this.$module.scene.exportGLTF(binary);\n },\n /**\n * Function used for reading in new scaffold metadata and a custom\n * viewport. This function will ignore the state prop and\n * read in the new url.\n *\n * @public\n */\n setURLAndState: function(newValue, state) {\n if (newValue != this._currentURL) {\n let viewport = state && state.viewport ? state.viewport : undefined;\n let visibility =\n state && state.visibility ? state.visibility : undefined;\n this._currentURL = newValue;\n if (this.$refs.traditionalControl)\n this.$refs.traditionalControl.clear();\n this.loading = true;\n this.isReady = false;\n this.$module.setFinishDownloadCallback(\n this.setURLFinishCallback({\n viewport: viewport,\n region: this.region,\n viewURL: this.viewURL,\n visibility: visibility\n })\n );\n this.$module.loadOrgansFromURL(\n newValue,\n undefined,\n undefined,\n \"scene\",\n undefined\n );\n this.$module.scene.displayMarkers = this.displayMarkers;\n this.$module.scene.displayMinimap = this.displayMinimap;\n this.updateMinimapScissor();\n }\n },\n /**\n * Function used for reading in new scaffold metadata. This function will ignore\n * the state prop and read in the new url.\n *\n * @public\n */\n setURL: function(newValue) {\n this.setURLAndState(newValue, undefined);\n },\n /**\n * Callback when drawer is toggled.\n *\n */\n drawerToggled: function(flag) {\n this.drawerOpen = flag;\n this.adjustLayout();\n },\n /**\n * Callback using ResizeObserver.\n \n */\n adjustLayout: function() {\n let width = this.$refs.scaffoldContainer.clientWidth;\n this.minimisedSlider = width < 812;\n if (this.minimisedSlider) {\n this.sliderPosition = this.drawerOpen ? \"right\" : \"left\";\n } else {\n this.sliderPosition = \"\";\n }\n },\n toggleRendering: function(flag) {\n if (this.$module.zincRenderer) {\n if (flag) {\n this.$module.zincRenderer.animate();\n } else {\n this.$module.zincRenderer.stopAnimate();\n }\n }\n },\n forceResize: function() {\n if (this.$module.zincRenderer) {\n this.$module.zincRenderer.onWindowResize();\n }\n }\n }\n};\n</script>\n\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\n<style scoped lang=\"scss\">\n@import \"~element-ui/packages/theme-chalk/src/col\";\n@import \"~element-ui/packages/theme-chalk/src/loading\";\n@import \"~element-ui/packages/theme-chalk/src/option\";\n@import \"~element-ui/packages/theme-chalk/src/popover\";\n@import \"~element-ui/packages/theme-chalk/src/row\";\n@import \"~element-ui/packages/theme-chalk/src/select\";\n@import \"~element-ui/packages/theme-chalk/src/slider\";\n@import \"~element-ui/packages/theme-chalk/src/tabs\";\n@import \"~element-ui/packages/theme-chalk/src/tab-pane\";\n\n.warning-icon {\n position: absolute;\n top: 15px;\n left: 37px;\n text-align: left;\n font-size: 25px;\n color: $warning;\n\n &:hover {\n cursor: pointer;\n }\n}\n\n.warning-text {\n font-size: 15px;\n vertical-align: 5px;\n}\n\n::v-deep .warning-popper {\n padding: 9px 10px;\n min-width: 150px;\n font-size: 12px;\n color: #fff;\n background-color: $warning;\n\n &.right-popper {\n .popper__arrow {\n &::after {\n border-right-color: $warning !important;\n }\n }\n }\n}\n\n#organsDisplayArea {\n &:focus {\n outline: none !important;\n border: 0px;\n }\n}\n\n.scaffold-container {\n height: 100%;\n width: 100%;\n position: relative;\n}\n\n.time-slider-container {\n text-align: left;\n position: absolute;\n right: 155px;\n width: calc(100% - 530px);\n bottom: 16px;\n transition: all 1s ease;\n outline: none;\n\n &.minimised {\n width: calc(40%);\n }\n\n &.left {\n right: 155px;\n width: calc(100% - 250px);\n }\n\n &.right {\n right: 8px;\n bottom: 54px;\n }\n}\n\n.slider-display-text {\n height: 20px;\n color: rgb(48, 49, 51);\n font-size: 14px;\n font-weight: normal;\n line-height: 20px;\n padding-left: 8px;\n text-shadow: -1px -1px #fff, 1px -1px #fff, -1px 1px #fff, 1px -1px #fff;\n}\n\n.tab-content {\n display: flex;\n height: 34px;\n padding-top: 8px;\n font-size: 14px;\n}\n\n.tab-content ::v-deep .el-slider__marks-text {\n margin-top: 12px;\n margin-left: 8px;\n font-size: 10px;\n}\n\n.tab-content ::v-deep .el-slider__stop {\n width: 10px;\n height: 10px;\n top: -1px;\n border: solid 1px $app-primary-color;\n}\n\n.animation-data {\n margin-left: 8px;\n line-height: 26px;\n display: flex;\n\n :not(:first-child) {\n margin-left: 8px;\n }\n .purple {\n padding-left: 2px;\n color: $app-primary-color;\n }\n}\n.slider {\n margin-left: 30px;\n width: calc(100% - 88px);\n margin-top: -7px;\n\n ::v-deep .el-slider__runway {\n height: 10px;\n margin: 14px 0;\n }\n\n ::v-deep .el-slider__button-wrapper {\n top: -13px;\n }\n}\n\n.zoomOut {\n padding-left: 8px;\n}\n\n.fitWindow {\n padding-left: 8px;\n}\n\n::v-deep .non-selectable {\n user-select: none;\n}\n\n::v-deep .background-popper {\n padding: 5px 12px;\n background-color: #ffffff;\n border: 1px solid $app-primary-color;\n box-shadow: 0px 2px 12px 0px rgba(0, 0, 0, 0.06);\n height: 72px;\n width: 128px;\n min-width: 128px;\n\n &.el-popper[x-placement^=\"top\"] {\n .popper__arrow {\n border-top-color: $app-primary-color !important;\n &:after {\n border-top-color: #fff !important;\n }\n }\n }\n}\n\n.background-colour {\n bottom: 16px;\n position: absolute;\n transition: all 1s ease;\n\n &.open {\n left: 322px;\n }\n\n &.close {\n left: 24px;\n }\n}\n\n.backgroundText {\n color: rgb(48, 49, 51);\n font-size: 14px;\n font-weight: normal;\n line-height: 20px;\n}\n\n.backgroundChooser {\n display: flex;\n margin-top: 16px;\n}\n\n.backgroundChoice {\n width: 20px;\n height: 20px;\n border: 1px solid rgb(144, 147, 153);\n margin-left: 20px;\n\n &.active {\n border: 2px solid $app-primary-color;\n }\n\n &:hover {\n cursor: pointer;\n }\n\n &.white {\n background-color: white;\n margin-left: 10px;\n }\n\n &.black {\n background-color: black;\n }\n\n &.lightskyblue {\n background-color: lightskyblue;\n }\n}\n\n.icon-button {\n height: 24px !important;\n width: 24px !important;\n\n &:hover {\n cursor: pointer;\n }\n}\n\n.bottom-right-control {\n position: absolute;\n right: 16px;\n bottom: 16px;\n}\n\n.video-button {\n margin-left: 8px;\n}\n\n.time-slider-container {\n ::v-deep .el-tabs__header {\n margin: 0px;\n border-bottom: 1px solid rgb(144, 147, 153);\n }\n\n .el-row {\n margin-bottom: 5px;\n }\n\n ::v-deep .el-tabs__content {\n border-left: 1px solid rgb(144, 147, 153);\n border-bottom: 1px solid rgb(144, 147, 153);\n border-right: 1px solid rgb(144, 147, 153);\n border-radius: 0px 0px 4px 4px;\n background-color: white;\n }\n\n ::v-deep .el-tabs--card {\n > .el-tabs__header {\n .el-tabs__nav {\n border: 1px solid rgb(144, 147, 153);\n border-bottom: none;\n border-radius: 4px 4px 0px 0px;\n background-color: white;\n }\n\n .el-tabs__item {\n height: 24px;\n line-height: 24px;\n padding: 0 8px !important;\n border-bottom: 1px solid;\n border-left: 1px solid rgb(144, 147, 153);\n &:first-child {\n border-left: none;\n }\n &.is-active {\n border-bottom: 1px solid white;\n color: rgb(48, 49, 51);\n }\n &:hover {\n color: $app-primary-color;\n }\n }\n }\n }\n}\n\n::v-deep .scaffold-popper {\n padding: 6px 4px;\n font-size: 12px;\n color: rgb(48, 49, 51);\n background-color: #f3ecf6;\n border: 1px solid $app-primary-color;\n white-space: nowrap;\n min-width: unset;\n pointer-events: none;\n\n &.left-popper {\n .popper__arrow {\n border-left-color: $app-primary-color !important;\n &:after {\n border-left-color: #f3ecf6 !important;\n }\n }\n }\n\n &.right-popper {\n .popper__arrow {\n border-right-color: $app-primary-color !important;\n &:after {\n border-right-color: #f3ecf6 !important;\n }\n }\n }\n\n &.el-popper[x-placement^=\"top\"] {\n .popper__arrow {\n border-top-color: $app-primary-color !important;\n &:after {\n border-top-color: #f3ecf6 !important;\n }\n }\n }\n}\n\n::v-deep .el-slider__button {\n border: 2px solid $app-primary-color;\n}\n\n::v-deep .el-slider__bar {\n background-color: $app-primary-color;\n height: 10px;\n}\n\n::v-deep .el-loading-spinner {\n i, .el-loading-text {\n color: $app-primary-color;\n }\n}\n\n::v-deep .popper-zoomout {\n padding-right: 11px;\n left: -21px !important;\n .popper__arrow {\n left: 53px !important;\n }\n}\n\n.select-box {\n width: 57px;\n border-radius: 4px;\n border: 1px solid rgb(144, 147, 153);\n background-color: var(--white);\n font-weight: 500;\n color: rgb(48, 49, 51);\n margin-left: 8px;\n\n ::v-deep .el-input__inner {\n color: $app-primary-color;\n height: 22px;\n padding-left: 8px;\n padding-right: 8px;\n border: none;\n font-family: \"Asap\", sans-serif;\n line-height: 22px;\n }\n\n ::v-deep .el-input,\n ::v-deep .el-input__icon {\n line-height: 22px;\n }\n}\n</style>\n\n<style lang=\"scss\">\n.time-slider-tooltip {\n padding: 6px 4px !important;\n font-family: \"Asap\", sans-serif;\n font-size: 12px !important;\n color: rgb(48, 49, 51) !important;\n background-color: #f3ecf6 !important;\n border: 1px solid $app-primary-color !important;\n white-space: nowrap !important;\n min-width: unset !important;\n}\n\n.scaffold_viewer_dropdown .el-select-dropdown__item {\n white-space: nowrap;\n text-align: left;\n font-family: \"Asap\", sans-serif;\n}\n\n.opacity-box {\n right: 0px;\n bottom:200px;\n position:absolute;\n}\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ScaffoldVuer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ScaffoldVuer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ScaffoldVuer.vue?vue&type=template&id=1b66f0b7&scoped=true&\"\nimport script from \"./ScaffoldVuer.vue?vue&type=script&lang=js&\"\nexport * from \"./ScaffoldVuer.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ScaffoldVuer.vue?vue&type=style&index=0&id=1b66f0b7&scoped=true&lang=scss&\"\nimport style1 from \"./ScaffoldVuer.vue?vue&type=style&index=1&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1b66f0b7\",\n null\n \n)\n\nexport default component.exports","// The Vue build version to load with the `import` command\n// (runtime-only or standalone) has been set in webpack.base.conf with an alias.\nimport ScaffoldVuer from \"./ScaffoldVuer.vue\";\n\nexport {\n ScaffoldVuer\n};\n","import './setPublicPath'\nexport * from '~entry'\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ScaffoldVuer.vue?vue&type=style&index=0&id=1b66f0b7&scoped=true&lang=scss&\"","module.exports = require(\"core-js/modules/es.string.includes\");","module.exports = require(\"element-ui/lib/theme-chalk/row.css\");"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"sources":["webpack://scaffoldvuer/webpack/universalModuleDefinition","webpack://scaffoldvuer/webpack/bootstrap","webpack://scaffoldvuer/external \"core-js/modules/es.symbol.iterator\"","webpack://scaffoldvuer/external \"element-ui/lib/checkbox-group\"","webpack://scaffoldvuer/external \"element-ui/lib/theme-chalk/checkbox-group.css\"","webpack://scaffoldvuer/external \"element-ui/lib/select\"","webpack://scaffoldvuer/external \"element-ui/lib/theme-chalk/select.css\"","webpack://scaffoldvuer/./node_modules/physiomeportal/src/utilities/WebGL.js","webpack://scaffoldvuer/external \"core-js/modules/es.array.for-each\"","webpack://scaffoldvuer/./node_modules/physiomeportal/src/shaders/varyingTexture.vs","webpack://scaffoldvuer/external \"core-js/modules/es.array.concat\"","webpack://scaffoldvuer/external \"element-ui/lib/container\"","webpack://scaffoldvuer/external \"core-js/modules/web.dom-collections.iterator\"","webpack://scaffoldvuer/external \"element-ui/lib/main\"","webpack://scaffoldvuer/external \"core-js/modules/es.object.keys\"","webpack://scaffoldvuer/./src/components/OpacityControls.vue?cbe9","webpack://scaffoldvuer/external \"core-js/modules/web.url\"","webpack://scaffoldvuer/external \"element-ui/lib/theme-chalk/loading.css\"","webpack://scaffoldvuer/external \"element-ui/lib/header\"","webpack://scaffoldvuer/external \"element-ui/lib/theme-chalk/tabs.css\"","webpack://scaffoldvuer/external \"core-js/modules/es.number.to-fixed\"","webpack://scaffoldvuer/external \"element-ui/lib/tab-pane\"","webpack://scaffoldvuer/external \"element-ui/lib/theme-chalk/color-picker.css\"","webpack://scaffoldvuer/external \"element-ui/lib/drawer\"","webpack://scaffoldvuer/./node_modules/physiomeportal/src/modules/BaseModule.js","webpack://scaffoldvuer/external \"@abi-software/svg-sprite\"","webpack://scaffoldvuer/external \"element-ui/lib/color-picker\"","webpack://scaffoldvuer/external \"element-ui/lib/theme-chalk/drawer.css\"","webpack://scaffoldvuer/external \"lodash/uniq\"","webpack://scaffoldvuer/./node_modules/physiomeportal/src/shaders/varyingTexture.fs","webpack://scaffoldvuer/./src/components/ScaffoldVuer.vue?f0fd","webpack://scaffoldvuer/external \"element-ui/lib/theme-chalk/header.css\"","webpack://scaffoldvuer/external \"core-js/modules/es.symbol.description\"","webpack://scaffoldvuer/external \"core-js/modules/es.regexp.exec\"","webpack://scaffoldvuer/./node_modules/physiomeportal/src/utilities/eventNotifier.js","webpack://scaffoldvuer/external \"element-ui/lib/theme-chalk/checkbox.css\"","webpack://scaffoldvuer/./src/components/OpacityControls.vue?e8dc","webpack://scaffoldvuer/external \"core-js/modules/es.regexp.to-string\"","webpack://scaffoldvuer/external \"core-js/modules/es.symbol\"","webpack://scaffoldvuer/./src/components/ScaffoldVuer.vue?7756","webpack://scaffoldvuer/external \"core-js/modules/es.array.slice\"","webpack://scaffoldvuer/./node_modules/physiomeportal/src/modules/organsRenderer.js","webpack://scaffoldvuer/external \"lodash/orderBy\"","webpack://scaffoldvuer/external \"core-js/modules/es.array.index-of\"","webpack://scaffoldvuer/external \"element-ui/lib/locale/lang/en\"","webpack://scaffoldvuer/external \"element-ui/lib/row\"","webpack://scaffoldvuer/./node_modules/physiomeportal/src/varyingTexCoordsReader.js","webpack://scaffoldvuer/external \"element-ui/lib/theme-chalk/col.css\"","webpack://scaffoldvuer/external \"element-ui/lib/theme-chalk/main.css\"","webpack://scaffoldvuer/./node_modules/physiomeportal/src/ui/tooltip.js","webpack://scaffoldvuer/./node_modules/physiomeportal/src/modules/RendererModule.js","webpack://scaffoldvuer/external \"core-js/modules/es.array.splice\"","webpack://scaffoldvuer/./src/components/ScaffoldVuer.vue?832c","webpack://scaffoldvuer/external \"element-ui/lib/locale\"","webpack://scaffoldvuer/external \"element-ui/lib/theme-chalk/option.css\"","webpack://scaffoldvuer/external \"core-js/modules/es.object.to-string\"","webpack://scaffoldvuer/external \"vue\"","webpack://scaffoldvuer/external \"element-ui/lib/tabs\"","webpack://scaffoldvuer/external \"core-js/modules/es.array.iterator\"","webpack://scaffoldvuer/./node_modules/physiomeportal/src/utilities/graphicsHighlight.js","webpack://scaffoldvuer/external \"element-ui/lib/theme-chalk/icon.css\"","webpack://scaffoldvuer/external \"core-js/modules/es.string.iterator\"","webpack://scaffoldvuer/external \"zincjs\"","webpack://scaffoldvuer/./src/components/TraditionalControls.vue?a419","webpack://scaffoldvuer/external \"element-ui/lib/popover\"","webpack://scaffoldvuer/external \"element-ui/lib/theme-chalk/slider.css\"","webpack://scaffoldvuer/./src/components/ScaffoldVuer.vue?0525","webpack://scaffoldvuer/external \"element-ui/lib/theme-chalk/tab-pane.css\"","webpack://scaffoldvuer/external \"element-ui/lib/theme-chalk/base.css\"","webpack://scaffoldvuer/external \"@soda/get-current-script\"","webpack://scaffoldvuer/./node_modules/physiomeportal/src/utilities/annotation.js","webpack://scaffoldvuer/external \"element-ui/lib/col\"","webpack://scaffoldvuer/external \"element-ui/lib/theme-chalk/popover.css\"","webpack://scaffoldvuer/external \"element-ui/lib/slider\"","webpack://scaffoldvuer/external \"core-js/modules/es.array.includes\"","webpack://scaffoldvuer/external \"element-ui/lib/loading\"","webpack://scaffoldvuer/./src/components/TraditionalControls.vue?54dd","webpack://scaffoldvuer/external \"element-ui/lib/theme-chalk/container.css\"","webpack://scaffoldvuer/external \"element-ui/lib/icon\"","webpack://scaffoldvuer/./node_modules/physiomeportal/src/styles/tooltip.css?ab35","webpack://scaffoldvuer/external \"element-ui/lib/checkbox\"","webpack://scaffoldvuer/external \"core-js/modules/es.function.name\"","webpack://scaffoldvuer/external \"core-js/modules/web.dom-collections.for-each\"","webpack://scaffoldvuer/external \"core-js/modules/es.string.replace\"","webpack://scaffoldvuer/external \"element-ui/lib/option\"","webpack://scaffoldvuer/external \"broadcast-channel\"","webpack://scaffoldvuer/./src/components/TraditionalControls.vue?7470","webpack://scaffoldvuer/external \"core-js/modules/es.array.from\"","webpack://scaffoldvuer/./src/components/TraditionalControls.vue?1801","webpack://scaffoldvuer/./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js","webpack://scaffoldvuer/./src/components/ScaffoldVuer.vue?95e3","webpack://scaffoldvuer/./src/components/OpacityControls.vue?a3fc","webpack://scaffoldvuer/src/components/OpacityControls.vue","webpack://scaffoldvuer/./src/components/OpacityControls.vue?c7a4","webpack://scaffoldvuer/./node_modules/vue-loader/lib/runtime/componentNormalizer.js","webpack://scaffoldvuer/./src/components/OpacityControls.vue","webpack://scaffoldvuer/./src/components/TraditionalControls.vue?36a5","webpack://scaffoldvuer/./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","webpack://scaffoldvuer/./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","webpack://scaffoldvuer/./node_modules/@babel/runtime/helpers/esm/iterableToArray.js","webpack://scaffoldvuer/./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","webpack://scaffoldvuer/./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","webpack://scaffoldvuer/./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","webpack://scaffoldvuer/src/components/TraditionalControls.vue","webpack://scaffoldvuer/./src/components/TraditionalControls.vue?54bd","webpack://scaffoldvuer/./src/components/TraditionalControls.vue","webpack://scaffoldvuer/src/components/ScaffoldVuer.vue","webpack://scaffoldvuer/./src/components/ScaffoldVuer.vue?13bd","webpack://scaffoldvuer/./src/components/ScaffoldVuer.vue","webpack://scaffoldvuer/./src/components/index.js","webpack://scaffoldvuer/./node_modules/@vue/cli-service/lib/commands/build/entry-lib-no-default.js","webpack://scaffoldvuer/external \"core-js/modules/es.string.includes\"","webpack://scaffoldvuer/external \"element-ui/lib/theme-chalk/row.css\""],"names":["_arrayLikeToArray","arr","len","length","i","arr2","Array","_arrayWithoutHoles","isArray","arrayLikeToArray","_iterableToArray","iter","Symbol","iterator","Object","from","_unsupportedIterableToArray","o","minLen","n","prototype","toString","call","slice","constructor","name","test","_nonIterableSpread","TypeError","_toConsumableArray","arrayWithoutHoles","iterableToArray","unsupportedIterableToArray","nonIterableSpread"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;QCVA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;;AClFA,+D;;;;;;;ACAA,0D;;;;;;;ACAA,0E;;;;;;;ACAA,kD;;;;;;;ACAA,kE;;;;;;;ACAA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA,GAAG;;AAEH;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;AACA;;AAEA,GAAG;;AAEH;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,GAAG;;AAEH;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;;;;;;;AC7FA,8D;;;;;;;ACAA,wCAAwC,iCAAiC,gCAAgC,4BAA4B,wBAAwB,uBAAuB,oBAAoB,4BAA4B,4BAA4B,sBAAsB,sBAAsB,uBAAuB,0BAA0B,mBAAmB,iBAAiB,aAAa,sFAAsF,gEAAgE,oFAAoF,kHAAkH,qEAAqE,gDAAgD,KAAK,G;;;;;;;ACAp2B,4D;;;;;;;ACAA,qD;;;;;;;ACAA,yE;;;;;;;ACAA,gD;;;;;;;ACAA,2D;;;;;;;;ACAA;AAAA;AAAA;;;;;;;;ACAA,oD;;;;;;;ACAA,mE;;;;;;;ACAA,kD;;;;;;;ACAA,gE;;;;;;;ACAA,+D;;;;;;;ACAA,oD;;;;;;;ACAA,wE;;;;;;;ACAA,kD;;;;;;;ACAA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,0BAA0B;AAC7C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uBAAuB,mBAAO,CAAC,MAAmB;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,mBAAmB,0BAA0B;AAC7C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,gCAAgC;AACjD;AACA;AACA,oBAAoB,mBAAO,CAAC,MAA4B;AACxD;AACA,oC;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,0BAA0B;AAC3C;AACA;;AAEA;AACA,C;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,C;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;ACnHA,qD;;;;;;;ACAA,wD;;;;;;;ACAA,kE;;;;;;;ACAA,wC;;;;;;;ACAA,wCAAwC,0BAA0B,mBAAmB,iBAAiB,2CAA2C,KAAK,G;;;;;;;;ACAtJ;AAAA;AAAA;;;;;;;;ACAA,kE;;;;;;;ACAA,kE;;;;;;;ACAA,2D;;;;;;;ACAA,kBAAkB;;AAElB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,0BAA0B;AAC7C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,0BAA0B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,C;;AAEA;;;;;;;;ACnEA,oE;;;;;;;ACAA,uC;;;;;;;ACAA,gE;;;;;;;ACAA,sD;;;;;;;;ACAA;AAAA;AAAA;;;;;;;;ACAA,2D;;;;;;;ACAA,YAAY,mBAAO,CAAC,MAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA,eAAe,uBAAuB;AACtC;AACA,aAAa;AACb;AACA;AACA,GAAG,mBAAO,CAAC,MAAkB;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,iCAAiC;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,uBAAuB;AACzC;AACA;AACA;AACA;AACA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;AACA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,mBAAO,CAAC,MAA2B;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,0CAA0C;AAC9D;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,oCAAoC;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,wBAAwB,mBAAO,CAAC,MAAyB;AACzD,qBAAqB;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sBAAsB,uBAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,wBAAwB,kCAAkC;AAC1D;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,uC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB,uBAAuB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,wCAAwC,mBAAO,CAAC,MAAkB;AAClE;;;;;;;;ACjoBA,2C;;;;;;;ACAA,8D;;;;;;;ACAA,0D;;;;;;;ACAA,+C;;;;;;;ACAA,YAAY,mBAAO,CAAC,MAAQ;;AAE5B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc,gDAAgD;AAC9D,cAAc,gDAAgD;AAC9D,cAAc,gDAAgD;AAC9D,cAAc,gDAAgD;AAC9D,cAAc,wBAAwB;AACtC,YAAY,wBAAwB;AACpC,sBAAsB,gDAAgD;AACtE,0BAA0B,+CAA+C;AACzE,8BAA8B,0CAA0C;AACxE,iBAAiB,yCAAyC;AAC1D,SAAS,wBAAwB;AACjC,cAAc,wBAAwB;AACtC,UAAU;AACV,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;;AAGH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM,mBAAO,CAAC,MAA6B;AAC3C,MAAM,mBAAO,CAAC,MAA6B;AAC3C;AACA,mBAAmB,oBAAoB;AACvC;AACA;AACA;;;;;;;;ACrJA,+D;;;;;;;ACAA,gE;;;;;;;ACAA,mBAAO,CAAC,MAAuB;;AAE/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,uBAAuB;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;;;;;;;;ACtDA,YAAY,mBAAO,CAAC,MAAQ;;AAE5B;AACA,aAAa,oBAAoB;AACjC,WAAW,OAAO;AAClB,aAAa;AACb;AACA;AACA,cAAc,mBAAO,CAAC,MAAoB;AAC1C;AACA;AACA;AACA;AACA,eAAe,mBAAO,CAAC,MAAQ;AAC/B;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA,GAAG,mBAAO,CAAC,MAAc;AACzB;AACA;AACA;AACA;AACA,gCAAgC,mBAAO,CAAC,MAAgC;AACxE;AACA;AACA;AACA;;AAEA,0CAA0C,mBAAO,CAAC,MAAc;;AAEhE;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,uBAAuB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,mBAAO,CAAC,MAA4B;AACxD;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,oBAAoB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mBAAO,CAAC,MAA4B;AAC1D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,uBAAuB;AACxC;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAO,CAAC,MAAe;AACnD;AACA,G;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,mBAAO,CAAC,MAAc;AACzB;;AAEA;;;;;;;;ACxQA,4D;;;;;;;ACAA,uC;;;;;;;ACAA,kD;;;;;;;ACAA,kE;;;;;;;ACAA,gE;;;;;;;ACAA,gC;;;;;;;ACAA,gD;;;;;;;ACAA,8D;;;;;;;ACAA,YAAY,mBAAO,CAAC,MAAQ;;AAE5B;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,mBAAmB,mBAAmB;AACtC;AACA,qBAAqB,mBAAmB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,mBAAmB;AACtC;AACA,qBAAqB,mBAAmB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,0BAA0B;AAC7C;AACA,qBAAqB,0BAA0B;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;AA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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACiED;AACA;AAEA;AACA;;AAEA;;AACA;;AACA;AACA;AACA;AACA;AACA;AAEA;;;;AAGA;AACA,6BADA;AAEA;AACA;;;AAGA;AACA,kBADA;AAEA;AAFA,KAJA;;AAQA;;;AAGA;AAXA,GAFA;AAeA;AACA;AACA,oBADA;AAEA,4BAFA;AAGA,sBAHA;AAIA,+BAJA;AAKA,sBALA;AAMA,qBANA;AAOA,iDAPA;AAQA;AARA;AAUA,GA1BA;AA2BA;AACA;AACA,qBADA;AAEA;AACA,0EACA;AACA;AALA;AADA,GA3BA;AAoCA;AACA,2DACA,2BADA;AAGA;AACA;AACA;AACA;AACA;AACA,GA7CA;AA8CA;AACA;AACA,GAhDA;AAiDA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;;AACA;AACA;AACA,KAdA;;AAeA;;;AAGA;AACA;;AACA;AACA;AACA;AACA,OAHA,MAGA;AACA;AACA;;AACA;AACA,KA3BA;;AA4BA;;;AAGA;AACA;;AACA;AACA;AACA;AACA,OAHA,MAGA;AACA;AACA;AACA,KAvCA;;AAwCA;;;AAGA;AACA;AACA;AACA,KA9CA;;AA+CA;;;AAGA;AACA;AACA;AACA,KArDA;;AAsDA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAjEA;AAkEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA,KA9EA;AA+EA;AACA;;AACA;AACA;AACA;AACA;;AACA;AACA,KAtFA;AAuFA;AACA;;AACA;AACA;AACA;AACA;AACA,KA7FA;AA8FA;AACA;AACA,KAhGA;AAiGA;AACA,UACA,EACA,yDACA,wDAFA,CADA,EAKA;AACA;AACA;AACA;AACA,KA3GA;AA4GA;AACA;AACA;AACA,mBACA;AACA;AACA,6BACA,oEADA;AAEA,KApHA;AAqHA,wBArHA,gCAqHA,GArHA,EAqHA;AACA;AACA;;AACA;AACA;AACA;AACA,KA3HA;AA4HA;AAC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;AAIA,qBAJA;AAKA;AALA,KAdA;AAqBA;AACA;AACA;AACA,OAHA;AAIA;AAJA,KArBA;AA2BA;AACA;AACA,KA7BA;AA8BA;AACA;AACA,KAhCA;AAiCA;AACA;AACA,KAnCA;AAoCA;AACA;;;;;;AAMA;AACA,KA5CA;AA6CA;AACA;AACA,KA/CA;AAgDA;AACA,gBADA;AAEA;AAFA,KAhDA;AAoDA;AACA;AACA;AAtDA,GAxLA;AAgPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAxPA;AAyPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DACA,4BADA;AAGA;AACA,GArQA;AAsQA;AACA;AACA;AACA;AACA,GA1QA;AA2QA;AACA;;;AAGA;AACA;AACA,KANA;;AAOA;;;;;;AAMA;AACA;AACA,gCACA,kBADA,GAEA,aAFA,CAEA,sBAFA,EAEA,CAFA;AAGA,KAlBA;;AAmBA;;;;AAIA;AACA;AACA,iEACA,cADA;AAGA,iDACA,kBADA,GAEA,UAFA,CAEA,SAFA,CAEA,WAFA;AAGA;AACA;AACA,8EACA;AACA;AACA;AACA;AACA,KAtCA;;AAuCA;;;;;;;AAOA;AACA;AACA,+EACA,8BADA;AAGA,KAnDA;AAoDA,iBApDA,yBAoDA,GApDA,EAoDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA,KA7DA;;AA8DA;;;;;;AAMA;AACA;AACA;AACA;AACA,KAxEA;;AAyEA;;;;;;AAMA;AACA;AACA;AACA;AACA,KAnFA;;AAoFA;;;;;;AAMA;AACA;AACA;AACA;AACA,KA9FA;;AA+FA;;;;;AAKA;AACA;AACA;AACA,KAvGA;;AAwGA;;;;;AAKA;AACA;AACA;AACA;AACA,KAjHA;;AAkHA;;;AAGA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA,KA7HA;AA8HA;AACA;AACA;AACA;AACA,SAFA,MAEA;AACA,iDACA;AAAA;AAAA,YADA;AAGA;AACA;AACA,KAxIA;AAyIA;AACA;AACA;AACA;AACA;AACA,SAHA,MAGA;AACA,iDACA;AAAA;AAAA,YADA;AAGA;AACA;AACA,KApJA;;AAqJA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAnKA;;AAoKA;;;;AAIA;AACA;AACA;AACA;AACA,oDACA,4BADA,GAEA,+BAFA;AAGA;AACA,WALA,MAKA;AACA;AACA;AACA;AACA;;;;;;;;AAMA;AACA,OAlBA,MAkBA;AACA;AACA;AACA,qDACA,4BADA,GAEA,+BAFA;;AAGA;AACA,WALA,MAKA;AACA;AACA;;;;;;;;AAMA;AACA;AACA,KA5MA;;AA6MA;;;;;AAKA;AACA;AACA;AACA;;AACA;AACA,KAvNA;;AAwNA;;;;;;;AAOA;AACA;AACA,KAjOA;;AAkOA;;;AAGA;AACA;AACA,wDACA;AACA,KAzOA;;AA0OA;;;;;AAKA;AACA;AACA;AACA;AACA,iFACA;AACA;AACA,KAtPA;;AAuPA;;;;;AAKA;AACA;AACA;AACA,oFACA;AACA;AACA,KAlQA;;AAmQA;;;;;AAKA;AACA,8BACA,sDADA,KAGA;AACA,KA7QA;;AA8QA;;;;;AAKA;AACA,8BACA,qDADA,KAGA;AACA,KAxRA;;AAyRA;;;;;AAKA;AACA;AACA;AACA,KAjSA;;AAkSA;;;AAGA;AACA;AACA;AACA;AACA;AACA,SAFA;AAGA,OALA,MAKA;AACA;AACA;AACA;AACA,SAFA;AAGA;AACA,KAjTA;;AAkTA;;;;AAIA;AAAA;;AACA;AACA;AACA;AACA,SAFA,EAEA,GAFA;AAGA;AACA,KA5TA;;AA6TA;;;AAGA;AACA;AACA;AACA;AACA;AACA,KArUA;;AAsUA;;;;AAIA;AAAA;;AACA;AACA;AACA,OAFA;AAGA;AACA,KA/UA;AAgVA;AACA;AACA;AACA,+DACA,kBADA;AAGA;AACA;AACA;;AACA;AACA;AACA;;AACA;AACA,KA7VA;AA8VA;AAAA;;AACA;AACA;AACA;AACA,iCACA,qBADA,GAEA,wBAFA,CAEA,gBAFA;AAGA,WAJA,MAIA;AACA;;AACA;AACA,WAHA,MAGA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA,aAFA;AAGA;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;AACA,OAxBA;AAyBA,KAxXA;;AAyXA;;;;;;AAMA;AACA;AACA,6BADA;AAEA,2BAFA;AAGA;AAHA;AAKA,yCACA;;AACA;AACA;AACA;AACA;;AACA;AACA,KA5YA;;AA6YA;;;;;;AAMA;AACA;AACA;AACA;AACA,oCADA;AAEA;AAFA;AAIA,SALA,MAKA;AACA;AACA;AACA,kCACA,mBACA,qBADA,GAEA,wBAFA,CAEA,cAFA;AAGA,oCACA;AACA,aAPA,MAOA;AACA,qDACA;AACA,wCADA;AAEA;AAFA,gBADA;AAMA;AACA;AACA;AACA;AACA,KA9aA;AA+aA;AACA;AACA,KAjbA;;AAkbA;;;;;;;AAOA;AACA;AACA;AACA,yBACA,wDADA;AAEA;AACA,2CACA;AACA;AACA;AACA,+CACA;AACA,4BADA;AAEA,6BAFA;AAGA,+BAHA;AAIA;AAJA,UADA;AAQA,uCACA,QADA,EAEA,SAFA,EAGA,SAHA,EAIA,OAJA,EAKA,SALA;AAOA;AACA;AACA;AACA;AACA,KAtdA;;AAudA;;;;;;AAMA;AACA;AACA,KA/dA;;AAgeA;;;;AAIA;AACA;AACA;AACA,KAveA;;AAweA;;;;AAIA;AACA;AACA;;AACA;AACA;AACA,OAFA,MAEA;AACA;AACA;AACA,KApfA;AAqfA;AACA;AACA;AACA;AACA,SAFA,MAEA;AACA;AACA;AACA;AACA,KA7fA;AA8fA;AACA;AACA;AACA;AACA;AAlgBA;AA3QA,G;;ACzRsU,CAAgB,wHAAG,EAAC,C;;;;;;;;ACAnP;AACvC;AACL;AACsC;AACxB;;;AAGzE;AAC0F;AAC1F,IAAI,sBAAS,GAAG,kBAAU;AAC1B,EAAE,+CAAM;AACR,EAAE,MAAM;AACR,EAAE,eAAe;AACjB;AACA;AACA;AACA;;AAEA;;AAEe,uEAAS,Q;;ACpBxB;AACA;AACA;;;ACFwB;AACF;;;;;;;;ACDtB,+D;;;;;;;ACAA,+D","file":"scaffoldvuer.umd.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"scaffoldvuer\"] = factory();\n\telse\n\t\troot[\"scaffoldvuer\"] = factory();\n})((typeof self !== 'undefined' ? self : this), function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"fae3\");\n","module.exports = require(\"core-js/modules/es.symbol.iterator\");","module.exports = require(\"element-ui/lib/checkbox-group\");","module.exports = require(\"element-ui/lib/theme-chalk/checkbox-group.css\");","module.exports = require(\"element-ui/lib/select\");","module.exports = require(\"element-ui/lib/theme-chalk/select.css\");","/**\n * @author alteredq / http://alteredqualia.com/\n * @author mr.doob / http://mrdoob.com/\n */\n\nexports.WEBGL = {\n\n\tisWebGLAvailable: function () {\n\n\t\ttry {\n\n\t\t\tvar canvas = document.createElement( 'canvas' );\n\t\t\treturn !! ( window.WebGLRenderingContext && ( canvas.getContext( 'webgl' ) || canvas.getContext( 'experimental-webgl' ) ) );\n\n\t\t} catch ( e ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t},\n\n\tisWebGL2Available: function () {\n\n\t\ttry {\n\n\t\t\tvar canvas = document.createElement( 'canvas' );\n\t\t\treturn !! ( window.WebGL2RenderingContext && canvas.getContext( 'webgl2' ) );\n\n\t\t} catch ( e ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t},\n\n\tgetWebGLErrorMessage: function () {\n\n\t\treturn this.getErrorMessage( 1 );\n\n\t},\n\n\tgetWebGL2ErrorMessage: function () {\n\n\t\treturn this.getErrorMessage( 2 );\n\n\t},\n\n\tgetErrorMessage: function ( version ) {\n\n\t\tvar names = {\n\t\t\t1: 'WebGL',\n\t\t\t2: 'WebGL 2'\n\t\t};\n\n\t\tvar contexts = {\n\t\t\t1: window.WebGLRenderingContext,\n\t\t\t2: window.WebGL2RenderingContext\n\t\t};\n\n\t\tvar message = 'This module requires <a href=\"http://khronos.org/webgl/wiki/Getting_a_WebGL_Implementation\" style=\"color:#008\">$1</a> support but your $0 does not seem to support it.';\n\n\t\tvar element = document.createElement( 'div' );\n\t\telement.id = 'webglmessage';\n\t\telement.style.fontFamily = 'monospace';\n\t\telement.style.fontSize = '20px';\n\t\telement.style.fontWeight = 'normal';\n\t\telement.style.textAlign = 'center';\n\t\telement.style.background = '#fff';\n\t\telement.style.color = '#000';\n\t\telement.style.padding = '1.5em';\n\t\telement.style.width = '400px';\n\t\telement.style.margin = '5em auto 0';\n\n\t\tif ( contexts[ version ] ) {\n\n\t\t\tmessage = message.replace( '$0', 'graphics card' );\n\n\t\t} else {\n\n\t\t\tmessage = message.replace( '$0', 'browser' );\n\n\t\t}\n\n\t\tmessage = message.replace( '$1', names[ version ] );\n\n\t\telement.innerHTML = message;\n\n\t\treturn element;\n\n\t}\n\n};\n","module.exports = require(\"core-js/modules/es.array.for-each\");","module.exports = \"precision highp float;\\n\\nuniform mat4 modelViewMatrix;\\nuniform mat4 projectionMatrix;\\n\\nattribute vec3 position;\\nattribute vec3 normal;\\nattribute vec3 color;\\nattribute vec2 uv;\\nattribute vec3 position_1;\\nattribute vec3 position_2;\\nattribute vec2 uv_1;\\nattribute vec2 uv_2;\\n\\nuniform float time;\\nuniform float slide_pos;\\nvarying vec2 vUv;\\n\\nvoid main() {\\n\\tvUv = uv;\\n\\t\\n\\tvec3 transformed_xi1 = position * vec3(1.0 - time) + position_1 * vec3(time);\\n\\t\\n\\tvec3 xi0_time_1 = vec3(position_1.x, position_1.y, 0.0);\\n\\tvec3 transformed_xi0 = position_2 * vec3(1.0 - time) + xi0_time_1 * vec3(time);\\n\\n\\tvec3 transformed = vec3(transformed_xi0) * vec3(1.0 - slide_pos) + vec3(transformed_xi1) * vec3(slide_pos);\\n\\t\\n\\tvec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\\n\\tgl_Position = projectionMatrix * mvPosition;\\n\\n}\\n\"","module.exports = require(\"core-js/modules/es.array.concat\");","module.exports = require(\"element-ui/lib/container\");","module.exports = require(\"core-js/modules/web.dom-collections.iterator\");","module.exports = require(\"element-ui/lib/main\");","module.exports = require(\"core-js/modules/es.object.keys\");","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OpacityControls.vue?vue&type=style&index=0&id=4c00a30f&scoped=true&lang=scss&\"","module.exports = require(\"core-js/modules/web.url\");","module.exports = require(\"element-ui/lib/theme-chalk/loading.css\");","module.exports = require(\"element-ui/lib/header\");","module.exports = require(\"element-ui/lib/theme-chalk/tabs.css\");","module.exports = require(\"core-js/modules/es.number.to-fixed\");","module.exports = require(\"element-ui/lib/tab-pane\");","module.exports = require(\"element-ui/lib/theme-chalk/color-picker.css\");","module.exports = require(\"element-ui/lib/drawer\");","var MODULE_CHANGE = { ALL: 0, DESTROYED: 1, NAME_CHANGED: 2, SETTINGS_CHANGED: 3 };\n\nvar BaseModule = function() {\n this.typeName = \"Base Module\";\n this.instanceName = \"default\";\n this.onChangedCallbacks = [];\n this.messageFunction = undefined;\n /** Notifier handle for informing other modules of any changes **/\n this.eventNotifiers = [];\n this.broadcastChannels = {};\n}\n\nBaseModule.prototype.setName = function(name) {\n if (name && this.instanceName !== name) {\n this.instanceName = name;\n var callbackArray = this.onChangedCallbacks.slice();\n for (var i = 0; i < callbackArray.length; i++) {\n callbackArray[i]( this, MODULE_CHANGE.NAME_CHANGED );\n }\n }\n}\n\nBaseModule.prototype.addBroadcastChannels = function(ChannelName) {\n\tif (ChannelName in this.broadcastChannels)\n\t\treturn false;\n\tvar newChannel = new (require('broadcast-channel')).default(ChannelName);\n\tthis.broadcastChannels[ChannelName] = newChannel;\n\treturn true;\n}\n\nBaseModule.prototype.removeBroadcastChannels = function(ChannelName) {\n\tif (ChannelName in this.broadcastChannels) {\n\t\tthis.broadcastChannels[ChannelName].close();\n\t\tdelete broadcastChannels[ChannelName];\n\t}\n\t\n}\n\nBaseModule.prototype.settingsChanged = function() {\n\tvar callbackArray = this.onChangedCallbacks.slice();\n for (var i = 0; i < callbackArray.length; i++) {\n callbackArray[i]( this, MODULE_CHANGE.SETTINGS_CHANGED );\n }\n}\n\nBaseModule.prototype.exportSettings = function() {\n\t var settings = {};\n\t settings.dialog = this.typeName;\n\t settings.name = this.instanceName;\n\t return settings;\n}\n\nBaseModule.prototype.importSettings = function(settings) {\n\tif (settings.dialog == this.typeName) {\n\t\tthis.setName(settings.name);\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nBaseModule.prototype.publishChanges = function(annotations, eventType) {\n for (var i = 0; i < this.eventNotifiers.length; i++) {\n this.eventNotifiers[i].publish(this, eventType, annotations);\n }\n if (eventType === require(\"../utilities/eventNotifier\").EVENT_TYPE.SELECTED) {\n\t if (annotations && annotations[0]) {\n\t\t var annotation = annotations[0];\t \n\t\t var data = {action: \"query-data\", resource: annotation.data.id, data: annotation.data, sender: this.instanceName};\n\t\t for (var key in this.broadcastChannels) {\n\t\t\t this.broadcastChannels[key].postMessage(data);\n\t\t }\n\t }\n }\n}\n\nBaseModule.prototype.setMessageFunction = function(functionIn) {\n this.messageFunction = functionIn;\n}\n\nBaseModule.prototype.displayMessage = function(message) {\n if (this.messageFunction)\n\t this.messageFunction(message);\n}\n\nBaseModule.prototype.getName = function() {\n return this.instanceName;\n}\n\nBaseModule.prototype.destroy = function() {\n //Make a temorary copy as the array may be altered during the loop\n var callbackArray = this.onChangedCallbacks.slice();\n for (var i = 0; i < callbackArray.length; i++) {\n callbackArray[i]( this, MODULE_CHANGE.DESTROYED );\n }\n\n delete this;\n} \n\nBaseModule.prototype.addChangedCallback = function(callback) {\n if (this.onChangedCallbacks.includes(callback) == false)\n this.onChangedCallbacks.push(callback);\n}\n\nBaseModule.prototype.removeChangedCallback = function(callback) {\n var index = this.onChangedCallbacks.indexOf(callback);\n if (index > -1) {\n this.onChangedCallbacks.splice(index, 1);\n }\n} \n\nBaseModule.prototype.addNotifier = function(eventNotifier) {\n this.eventNotifiers.push(eventNotifier);\n}\n\nexports.BaseModule = BaseModule;\nexports.MODULE_CHANGE = MODULE_CHANGE;\n","module.exports = require(\"@abi-software/svg-sprite\");","module.exports = require(\"element-ui/lib/color-picker\");","module.exports = require(\"element-ui/lib/theme-chalk/drawer.css\");","module.exports = require(\"lodash/uniq\");","module.exports = \"precision highp float;\\nuniform sampler2D myTex;\\nvarying vec2 vUv;\\n\\nvoid main() {\\n\\tgl_FragColor = texture2D( myTex, vUv );\\n\\n}\\n\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ScaffoldVuer.vue?vue&type=style&index=0&id=cc8106d6&scoped=true&lang=scss&\"","module.exports = require(\"element-ui/lib/theme-chalk/header.css\");","module.exports = require(\"core-js/modules/es.symbol.description\");","module.exports = require(\"core-js/modules/es.regexp.exec\");","var EVENT_TYPE = { ALL: 0, SELECTED: 1, HIGHLIGHTED: 2 };\n\nvar SelectionEvent = function(eventTypeIn, identifiersIn) {\n this.eventType = eventTypeIn;\n this.identifiers = identifiersIn;\n}\n\nvar returnFullID = function(sourceId) {\n //return full annotations with all different name\n}\n \nvar Subscription = function(subscriberIn, callbackIn, eventType) {\n this.targetedID = [];\n var subscriber = subscriberIn;\n if (eventType === undefined)\n this.targetEventType = EVENT_TYPE.ALL;\n else\n this.targetEventType = eventType;\n var callback = callbackIn;\n \n var _this = this;\n \n this.getEventType = function() {\n return eventType;\n }\n \n this.notify = function(source, eventType, ids) {\n if (source !== subscriber && (_this.targetEventType === EVENT_TYPE.ALL ||\n _this.targetEventType === eventType)) {\n //should support different type of id e.g lyph, name, fmas...\n //need a function that finds all relavant ids\n var event = new SelectionEvent(eventType, ids);\n callback(event);\n }\n }\n}\n\nexports.EventNotifier = function() {\n var events = [];\n var subscriptions = [];\n var _this = this;\n \n this.publish = function(source, eventType, id) {\n for (var i = 0; i < subscriptions.length;i++) {\n subscriptions[i].notify(source, eventType, id);\n }\n }\n \n this.subscribe = function(subscriber, callbackFunction, eventType) {\n if (typeof callbackFunction === \"function\") {\n var subscription = new Subscription(subscriber, callbackFunction, eventType);\n subscriptions.push(subscription);\n return subscription;\n }\n return undefined;\n }\n \n this.unsubscribe = function(subscription) {\n for (var i = 0; i < subscriptions.length;i++) {\n if (subscription === subscriptions[i]) {\n subscriptions.splice(i, 1);\n return;\n }\n }\n }\n} \n\nexports.EVENT_TYPE = EVENT_TYPE;\n","module.exports = require(\"element-ui/lib/theme-chalk/checkbox.css\");","// extracted by mini-css-extract-plugin","module.exports = require(\"core-js/modules/es.regexp.to-string\");","module.exports = require(\"core-js/modules/es.symbol\");","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ScaffoldVuer.vue?vue&type=style&index=1&lang=scss&\"","module.exports = require(\"core-js/modules/es.array.slice\");","var THREE = require('zincjs').THREE;\n// Current model's associate data, data fields, external link, nerve map\n// informations,\n// these are proived in the organsFileMap array.\nvar OrgansSceneData = function() {\n this.currentName = \"\";\n this.currentSystem = \"\";\n this.currentPart = \"\";\n this.currentSpecies = \"\";\n this.metaURL = \"\";\n this.viewURL = \"\";\n this.geometries = [];\n this.lines = [];\n this.glyphsets = [];\n this.pointsets = [];\n this.currentTime = 0.0;\n this.timeVarying = false;\n // Current model's associate data, data fields, external link, nerve map\n\t// informations,\n this.nerveMap = undefined;\n this.nerveMapIsActive = false;\n}\n\n/**\n * Viewer of 3D-organs models. Users can toggle on/off different views. Data is\n * displayed instead if models are not available.\n * \n * @class\n * @param {PJP.ModelsLoader}\n * ModelsLoaderIn - defined in modelsLoade.js, providing locations of\n * files.\n * @param {String}\n * PanelName - Id of the target element to create the\n * {@link PJP.OrgansViewer} on.\n * @author Alan Wu\n * @returns {PJP.OrgansViewer}\n */\nvar OrgansViewer = function(ModelsLoaderIn) {\n (require('./RendererModule').RendererModule).call(this);\n\tvar pickerScene = undefined;\n\tvar nerveMapScene = undefined;\n\tthis.sceneData = new OrgansSceneData();\n\tvar timeChangedCallbacks = new Array();\n\tvar sceneChangedCallbacks = new Array();\n var organPartAddedCallbacks = new Array();\n var finishDownloadCallback = undefined;\n\tvar layoutUpdateRequiredCallbacks = new Array();\n\tvar modelsLoader = ModelsLoaderIn;\n\tvar _this = this;\n\t_this.typeName = \"Organ Viewer\";\n\t\n\tthis.getSceneData = function() {\n\t return _this.sceneData;\n\t}\n\n\t/**\n\t * Used to update internal timer in scene when time slider has changed.\n\t */\n\tthis.updateTime = function(value) {\n let duration = 6000;\n if (_this.scene)\n duration = _this.scene.getDuration();\n var actualTime = value / 100.0 * duration;\n\t\tif (!_this.sceneData.nerveMapIsActive) {\n\t\t\tif (pickerScene)\n\t\t\t\tpickerScene.setMorphsTime(actualTime);\n\t\t\tif (_this.scene)\n\t\t\t\t_this.scene.setMorphsTime(actualTime);\n\t\t} else if (nerveMapScene) {\n\t\t\t\tnerveMapScene.setMorphsTime(actualTime);\n\t\t\t\tif (_this.sceneData.nerveMap && _this.sceneData.nerveMap.additionalReader)\n\t\t\t\t\t_this.sceneData.nerveMap.additionalReader.setTime(value / 100.0);\n\t\t}\n\t\t_this.sceneData.currentTime = value;\n\t}\n\t\n\t/**\n\t * Update the time slider and other renderers/scenes when time has changed.\n\t */\n\tvar preRenderTimeUpdate = function() {\n let duration = 3000;\n if (_this.scene)\n duration = _this.scene.getDuration();\n\t\tvar currentTime = _this.zincRenderer.getCurrentTime();\n\t\tfor (var i = 0; i < timeChangedCallbacks.length;i++) {\n\t\t\ttimeChangedCallbacks[i](currentTime);\n\t\t}\n\t\tif (!_this.sceneData.nerveMapIsActive && pickerScene)\n\t\t\tpickerScene.setMorphsTime(currentTime);\n\t\tif (_this.sceneData.nerveMap && _this.sceneData.nerveMap.additionalReader)\n _this.sceneData.nerveMap.additionalReader.setTime(currentTime / \n duration);\n\t\t_this.sceneData.currentTime = currentTime / duration * 100.0;\n }\n \n var postRenderSelectedCoordinatesUpdate = function() {\n if (_this.selectedCenter) {\n const vector = new THREE.Vector3();\n vector.copy(_this.selectedCenter);\n var coord = _this.scene.vectorToScreenXY(vector);\n _this.selectedScreenCoordinates.x = coord.x;\n _this.selectedScreenCoordinates.y = coord.y;\n }\n }\n\t\n\tvar preRenderUpdateCallback = function() {\n\t\treturn function() {\n preRenderTimeUpdate();\n\t\t}\n }\n \n var postRenderUpdateCallback = function() {\n\t\treturn function() {\n postRenderSelectedCoordinatesUpdate();\n\t\t}\n\t}\n\t\n\t /**\n\t\t * Add a callback which will be called when time has changed\n\t\t */\n\tthis.addTimeChangedCallback = function(callback) {\n\t if (typeof(callback === \"function\"))\n\t timeChangedCallbacks.push(callback);\n\t}\n\t\n\tthis.setTexturePos = function(value) {\n\t\tif (_this.sceneData.nerveMap && _this.sceneData.nerveMap.additionalReader)\n\t\t\t_this.sceneData.nerveMap.additionalReader.setSliderPos(value);\n\t}\n\t\n\t this.addLayoutUpdateRequiredCallback = function(callback) {\n\t if (typeof(callback === \"function\")) {\n\t layoutUpdateRequiredCallbacks.push(callback);\n\t }\n\t }\n\t\n\tthis.addSceneChangedCallback = function(callback) {\n\t if (typeof(callback === \"function\")) {\n\t sceneChangedCallbacks.push(callback);\n\t }\n\t}\n\t\n\tthis.addOrganPartAddedCallback = function(callback) {\n if (typeof(callback === \"function\"))\n organPartAddedCallbacks.push(callback);\n }\n\n this.setFinishDownloadCallback = function(callback) {\n if (typeof(callback === \"function\"))\n finishDownloadCallback = callback;\n }\n\n this.unsetFinishDownloadCallback = function() {\n finishDownloadCallback = undefined;\n }\n\n this.getNamedObjectsToScreenCoordinates = function(name, camera) {\n var vector = new THREE.Vector3();\n vector.setFromMatrixPosition( obj.matrixWorld );\n var widthHalf = (width/2);\n var heightHalf = (height/2);\n vector.project(camera);\n vector.x = ( vector.x * widthHalf ) + widthHalf;\n vector.y = - ( vector.y * heightHalf ) + heightHalf;\n return vector;\n }\n\n var getIdObjectFromIntersect = function(intersected) {\n var id = undefined;\n var intersectedObject = undefined;\n if (intersected !== undefined) {\n if (intersected.object.userData && \n intersected.object.userData.isMarker) {\n intersectedObject = intersected.object.userData.parent.morph;\n } else {\n intersectedObject = intersected.object;\n }\n if (intersectedObject) {\n if (intersectedObject.name) {\n id = intersectedObject.name;\n } else {\n var annotations = _this.getAnnotationsFromObjects(\n [intersectedObject]);\n if (annotations && annotations[0]) {\n id = annotations[0].data.group;\n }\n }\n }\n }\n return {\"id\":id, \"object\":intersectedObject};\n }\n\t \n\t/**\n\t * Callback function when a pickable object has been picked. It will then\n\t * call functions in tissueViewer and cellPanel to show corresponding\n\t * informations.\n\t * \n\t * @callback\n\t */\n\tvar _pickingCallback = function() {\n\t\treturn function(intersects, window_x, window_y) {\n var intersected = _this.getIntersectedObject(intersects);\n var idObject = getIdObjectFromIntersect(intersected);\n if (idObject.id) {\n if (_this.toolTip !== undefined) {\n _this.toolTip.setText(idObject.id);\n _this.toolTip.show(window_x, window_y);\n }\n _this.displayMessage(idObject.object.name + \" selected.\");\n\n if (idObject.object.userData.isGlyph) {\n if (idObject.object.name)\n _this.setSelectedByObjects([idObject.object], true);\n else\n _this.setSelectedByZincObject(idObject.object.userData.getGlyphset(), true);\n } else {\n _this.setSelectedByObjects([idObject.object], true);\n }\n return;\n } else {\n\t\t\t\tif (_this.toolTip !== undefined) {\n\t\t\t\t\t_this.toolTip.hide();\n\t\t\t\t}\n\t\t\t\t_this.setSelectedByObjects([], true);\n\t\t\t}\n\t\t}\n\t};\n\t\n\t/**\n\t * Callback function when a pickable object has been hovered over. It will\n\t * show objecty id/name as _this.toolTip text.\n\t * \n\t * @callback\n\t */\n\tvar _hoverCallback = function() {\n\t\treturn function(intersects, window_x, window_y) {\n var intersected = _this.getIntersectedObject(intersects);\n var idObject = getIdObjectFromIntersect(intersected);\n if (idObject.id) {\n _this.displayArea.style.cursor = \"pointer\";\n if (_this.toolTip !== undefined) {\n _this.toolTip.setText(idObject.id);\n _this.toolTip.show(window_x, window_y);\n }\n _this.setHighlightedByObjects([idObject.object], true);\n return;\n }\n else {\n if (_this.toolTip !== undefined) {\n\t\t\t\t\t_this.toolTip.hide();\n\t\t\t\t}\n\t\t\t\t_this.displayArea.style.cursor = \"auto\";\n\t\t\t\t_this.setHighlightedByObjects([], true);\n }\n\t\t}\n\t};\n\n\tvar changeOrganPartsVisibilityForScene = function(scene, name, value, type) {\n\t\tif (type == \"all\" || type == \"geometries\") {\n\t\t\tvar geometries = scene.findGeometriesWithGroupName(name);\n\t\t\tfor (var i = 0; i < geometries.length; i ++ ) {\n\t\t\t\tgeometries[i].setVisibility(value);\n\t\t\t}\n\t\t}\n\t\tif (type == \"all\" || type == \"glyphsets\") {\n\t\t\tvar glyphsets = scene.findGlyphsetsWithGroupName(name);\n\t\t\tfor (var i = 0; i < glyphsets.length; i ++ ) {\n\t\t\t\tglyphsets[i].setVisibility(value);\n\t\t\t}\n\t\t}\n\t\tif (type == \"all\" || type == \"pointsets\") {\n\t\t\tvar pointsets = scene.findPointsetsWithGroupName(name);\n\t\t\tfor (var i = 0; i < pointsets.length; i ++ ) {\n\t\t\t\tpointsets[i].setVisibility(value);\n\t\t\t}\n\t\t}\n\t\tif (type == \"all\" || type == \"lines\") {\n\t\t\tvar lines = scene.findLinesWithGroupName(name);\n\t\t\tfor (var i = 0; i < lines.length; i ++ ) {\n\t\t\t\tlines[i].setVisibility(value);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Change visibility for parts of the current scene.\n\t */\n\tthis.changeGeometriesVisibility = function(name, value) {\n\t\tchangeOrganPartsVisibilityForScene(_this.scene, name, value, 'geometries');\n\t\tif (pickerScene)\n\t\t\tchangeOrganPartsVisibilityForScene(pickerScene, name, value, 'geometries');\n\t}\n\n\t/**\n\t * Change visibility for parts of the current scene.\n\t */\n\tthis.changeGlyphsetsVisibility = function(name, value) {\n\t\tchangeOrganPartsVisibilityForScene(_this.scene, name, value, 'glyphsets');\n\t\tif (pickerScene)\n\t\t\tchangeOrganPartsVisibilityForScene(pickerScene, name, value, 'glyphsets');\n\t}\n\n\t/**\n\t * Change visibility for parts of the current scene.\n\t */\n\tthis.changeLinesVisibility = function(name, value) {\n\t\tchangeOrganPartsVisibilityForScene(_this.scene, name, value, 'lines');\n\t\tif (pickerScene)\n\t\t\tchangeOrganPartsVisibilityForScene(pickerScene, name, value, 'lines');\n\t}\n\n\t/**\n\t * Change visibility for parts of the current scene.\n\t */\n\tthis.changePointsetsVisibility = function(name, value) {\n\t\tchangeOrganPartsVisibilityForScene(_this.scene, name, value, 'pointsets');\n\t\tif (pickerScene)\n\t\t\tchangeOrganPartsVisibilityForScene(pickerScene, name, value, 'pointsets');\n }\n \t\t\t\n\t/**\n\t * Change visibility for parts of the current scene.\n\t */\n\tthis.changeOrganPartsVisibility = function(name, value, typeIn) {\n\t\tvar type = \"all\";\n\t\tif (typeIn !== undefined)\n\t\t\ttype = typeIn;\n\t\tchangeOrganPartsVisibilityForScene(_this.scene, name, value, type);\n\t\tif (pickerScene)\n\t\t\tchangeOrganPartsVisibilityForScene(pickerScene, name, value, type);\n\t}\n\t\n\tthis.changeOrganPartsVisibilityCallback = function(name) {\n\t\treturn function(value) {\n\t\t\t_this.changeOrganPartsVisibility(name, value);\n\t\t}\n\t}\n\t\n\t/**\n\t * Change some of the ZincGeometry property for never map geometry\n\t * \n\t * @callback\n\t */\n\tvar _addNerveMapGeometryCallback = function(GroupName) {\n\t\treturn function(geometry) {\n\t\t\tgeometry.groupName = GroupName;\n\t\t\tif (imageCombiner && geometry.morph && geometry.morph.material.map) {\n\t\t\t\tgeometry.morph.material.map = new THREE.Texture(imageCombiner.getCombinedImage());\n\t\t\t\tgeometry.morph.material.map.needsUpdate = true;\n\t\t\t\tgeometry.morph.material.needsUpdate = true;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * Read in the nerve map models onto the primary renderer when nerve map has\n\t * been toggled on.\n\t */\n\tvar setupNerveMapPrimaryRenderer = function() {\n\t\tvar sceneName = _this.sceneData.currentName + \"_nervemap\";\n\t\tnerveMapScene = _this.zincRenderer.getSceneByName(sceneName);\n\t\tif (nerveMapScene == undefined) {\n\t\t\tvar downloadPath = modelsLoader.getOrgansDirectoryPrefix() + \"/\" + _this.sceneData.nerveMap.threed.meta;\n\t\t\tnerveMapScene = _this.zincRenderer.createScene(sceneName);\n\t\t\tnerveMapScene.loadMetadataURL(downloadPath, _addNerveMapGeometryCallback(\"threed\"));\n\t\t\tif (_this.sceneData.nerveMap.threed.view !== undefined)\n\t\t\t\tnerveMapScene.loadViewURL(modelsLoader.getOrgansDirectoryPrefix() + \"/\" + _this.sceneData.nerveMap.threed.view);\n\t\t\telse {\n\t\t\t\tnerveMapScene.loadViewURL(modelsLoader.getBodyDirectoryPrefix() + \"/body_view.json\");\n\t\t\t}\n\t\t\tnerveMapScene.ambient.intensity = 8.0;\n\t\t\tnerveMapScene.directionalLight.intensity = 0;\n\t\t\tvar zincCameraControl = nerveMapScene.getZincCameraControls();\n\t\t\tzincCameraControl.setMouseButtonAction(\"AUXILIARY\", \"ZOOM\");\n\t\t\tzincCameraControl.setMouseButtonAction(\"SECONDARY\", \"PAN\");\n\t\t\t_this.sceneData.nerveMap.additionalReader = new (require(\"../varyingTexCoordsReader\").VaryingTexCoordsReader)(nerveMapScene);\n\t\t\tvar urlsArray = [ modelsLoader.getOrgansDirectoryPrefix() + \"/digestive/stomach/nerve_map/3d/xi1_time_0.json\",\n\t\t\t modelsLoader.getOrgansDirectoryPrefix() + \"/digestive/stomach/nerve_map/3d/xi1_time_1.json\",\n\t\t\t modelsLoader.getOrgansDirectoryPrefix() + \"/digestive/stomach/nerve_map/3d/xi0_time_0.json\"];\n\t\t\t_this.sceneData.nerveMap.additionalReader.loadURLsIntoBufferGeometry(urlsArray);\n\t\t}\n\t\t_this.zincRenderer.setCurrentScene(nerveMapScene);\n\t\t_this.graphicsHighlight.reset();\n\t}\n\t\n\tvar activateAdditionalNerveMapRenderer = function() {\n\t for (var i = 0; i < layoutUpdateRequiredCallbacks.length;i++) {\n\t layoutUpdateRequiredCallbacks[i](false, true);\n\t }\n\t}\n\t\n\t/**\n\t * Nerve map has been toggled on/off, change organs renderer layput.\n\t */\n\tthis.changeNerveMapVisibility = function() {\n\t\t_this.sceneData.nerveMapIsActive = !_this.sceneData.nerveMapIsActive;\n\t\tif (_this.sceneData.nerveMapIsActive)\n\t\t\tsetupNerveMapPrimaryRenderer();\n\t\telse {\n\t\t\t_this.zincRenderer.setCurrentScene(_this.scene);\n\t\t\t_this.graphicsHighlight.reset();\n\t\t}\n\t\tactivateAdditionalNerveMapRenderer();\n\t}\n\t\n\tthis.changeBackgroundColour = function(backgroundColourString) {\n\t\tvar colour = new THREE.Color(backgroundColourString);\n\t\tif (_this.zincRenderer) {\n\t\t\tvar internalRenderer = _this.zincRenderer.getThreeJSRenderer();\n\t\t\tinternalRenderer.setClearColor( colour, 1 );\n\t\t}\n\t}\n\n\tvar addOrganPartToSceneData = function(zincObject) {\n\t\tif (zincObject.groupName) {\n\t\t\tif (zincObject.isGeometry) {\n\t\t\t\tif (!_this.sceneData.geometries.includes(zincObject.groupName)) {\n\t\t\t\t\t_this.sceneData.geometries.push(zincObject.groupName);\n\t\t\t\t}\n\t\t\t} else if (zincObject.isGlyphset) {\n\t\t\t\tif (!_this.sceneData.glyphsets.includes(zincObject.groupName)) {\n\t\t\t\t\t_this.sceneData.glyphsets.push(zincObject.groupName);\n\t\t\t\t}\n\t\t\t} else if (zincObject.isLines) {\n\t\t\t\tif (!_this.sceneData.lines.includes(zincObject.groupName)) {\n\t\t\t\t\t_this.sceneData.lines.push(zincObject.groupName);\n\t\t\t\t}\n\t\t\t} else if (zincObject.isPointset) {\n\t\t\t\tif (!_this.sceneData.pointsets.includes(zincObject.groupName)) {\n\t\t\t\t\t_this.sceneData.pointsets.push(zincObject.groupName);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tvar addOrganPart = function(systemName, partName, useDefautColour, zincObject) {\n for (var i = 0; i < organPartAddedCallbacks.length;i++) {\n organPartAddedCallbacks[i](zincObject.groupName, _this.scene.isTimeVarying(), zincObject);\n }\n if (useDefautColour)\n modelsLoader.setGeometryColour(zincObject, systemName, partName);\n addOrganPartToSceneData(zincObject);\n\t\tif (zincObject.groupName) {\n\t\t\t_this.displayMessage(zincObject.groupName + \" loaded.\");\n\t\t} else {\n\t\t\t_this.displayMessage(\"Resource loaded.\");\n\t\t}\n\t\tvar annotation = new (require('../utilities/annotation').annotation)();\n\t\tannotation.data = {species:_this.sceneData.currentSpecies, system:systemName, part:partName, group:zincObject.groupName};\n\t\tzincObject.userData = [annotation];\n\t}\n\n\t /**\n\t\t * New organs geometry has been added to the scene, add UIs and make\n\t\t * sure the viewport is correct.\n\t\t */\n\t var _addOrganPartCallback = function(systemName, partName, useDefautColour) {\n\t return function(zincObject) {\n\t \taddOrganPart(systemName, partName, useDefautColour, zincObject);\n\t }\n\t }\n\t \n\t var downloadCompletedCallback = function() {\n\t\t return function() {\n\t\t\t _this.settingsChanged();\n\t\t\t _this.sceneData.timeVarying = _this.scene.isTimeVarying();\n _this.displayMessage(\"All resources loaded.\");\n if (finishDownloadCallback)\n finishDownloadCallback();\n\t\t }\n\t }\n\t \n\t var singleItemDownloadCompletedCallback = function(systemName, partName, useDefautColour) {\n\t\t return function(geometry) {\n\t\t \taddOrganPart(systemName, partName, useDefautColour, geometry);\n\t\t \t_this.settingsChanged();\n\t\t }\n\t }\n\t \n\t /**\n\t\t * Toggle data field displays. Data fields displays flow/pressure and <button @click=\"play\">Play</button>\n\t\t * other activities of the organs.\n\t\t */\n\t this.updateFieldvisibility = function(dataFields, value) {\n for ( var i = 0; i < dataFields.length; i ++ ) {\n if (value != i) {\n var geometryName = dataFields[i].PartName;\n _this.changeOrganPartsVisibility(geometryName, false);\n }\n }\n if (value > -1) {\n var partName = dataFields[value].PartName;\n if ((_this.scene.findGeometriesWithGroupName(partName).length > 0) ||\n (_this.scene.findGlyphsetsWithGroupName(partName).length > 0)) {\n _this.changeOrganPartsVisibility(partName, true);\n } else {\n var partDetails = getOrganDetails(dataFields[value].SystemName, partName);\n if (partDetails != undefined) {\n _this.scene.loadMetadataURL(modelsLoader.getOrgansDirectoryPrefix() + \"/\" + partDetails.meta);\n }\n }\n\t }\n\t }\n\t \n\t /**\n\t\t * Return an array containing name(s) of species that also contains the\n\t\t * currently displayed organs.\n\t\t * \n\t\t * @returns {Array} containing species name\n\t\t */\n\t this.getAvailableSpecies = function(currentSpecies, currentSystem, currentPart) {\n\t var availableSpecies = new Array();\n\t availableSpecies.push(\"none\");\n\t var keysArray = Object.keys(organsFileMap);\n\t for (index in keysArray) {\n\t var species = keysArray[index];\n\t if (species != currentSpecies) {\n\t if (organsFileMap[species].hasOwnProperty(currentSystem) &&\n\t organsFileMap[species][currentSystem].hasOwnProperty(currentPart)) {\n\t availableSpecies.push(species);\n\t }\n\t }\n\t }\n\t return availableSpecies;\n\t }\n\t \n\t var setSceneData = function(speciesName, systemName, partName, organsDetails) {\n _this.sceneData.nerveMapIsActive = false;\n _this.sceneData.nerveMap = undefined;\n _this.sceneData.metaURL = \"\";\n _this.sceneData.viewURL = \"\";\n _this.sceneData.currentSpecies = speciesName;\n _this.sceneData.currentSystem = systemName;\n\t\t\t_this.sceneData.currentPart = partName;\n\t\t\t_this.sceneData.currentTime = 0.0;\n\t\t\t_this.sceneData.geometries.splice(0);\n\t\t\t_this.sceneData.lines.splice(0);\n\t\t\t_this.sceneData.glyphsets.splice(0);\n\t\t\t_this.sceneData.pointsets.splice(0);\n\t\t\t_this.sceneData.timeVarying = false;\n // This is used as title\n var name = \"\";\n if (speciesName)\n name = speciesName + \"/\";\n if (systemName)\n name = systemName + \"/\";\n if (partName)\n name = partName;\n _this.sceneData.currentName = name;\n\t }\n\n\t this.loadOrgansFromURL = function(url, speciesName, systemName, partName, viewURL) {\n\t\t if (_this.zincRenderer) {\n\t\t\t if (partName && (_this.sceneData.metaURL !== url)) {\n\t\t\t setSceneData(speciesName, systemName, partName, undefined);\n\t\t\t var name = _this.sceneData.currentName;\n\t\t\t var organScene = _this.zincRenderer.getSceneByName(name);\n\t\t\t if (organScene) {\n\t\t\t \t organScene.clearAll();\n\t\t\t } else {\n\t\t\t \t organScene = _this.zincRenderer.createScene(name);\n\t\t\t }\n\t\t\t for (var i = 0; i < sceneChangedCallbacks.length;i++) {\n\t\t\t \t sceneChangedCallbacks[i](_this.sceneData);\n\t\t\t }\n\t\t\t if (viewURL && viewURL != \"\") {\n\t\t\t \t _this.sceneData.viewURL = viewURL;\n\t\t\t\t organScene.loadViewURL(_this.sceneData.viewURL);\n\t\t\t } else\n\t\t\t \t _this.sceneData.viewURL = undefined;\n\t\t\t _this.sceneData.metaURL = url;\n\t\t\t _this.displayMessage(\"Downloading...\");\n\t\t\t organScene.loadMetadataURL(url, _addOrganPartCallback(systemName, partName, false),\n\t\t\t \t downloadCompletedCallback());\t \n\t\t\t _this.scene = organScene;\n\t\t\t _this.zincRenderer.setCurrentScene(organScene);\n\t\t\t _this.graphicsHighlight.reset();\n\t\t\t var zincCameraControl = organScene.getZincCameraControls();\n\t\t\t zincCameraControl.enableRaycaster(organScene, _pickingCallback(), _hoverCallback());\n\t\t\t zincCameraControl.setMouseButtonAction(\"AUXILIARY\", \"ZOOM\");\n\t\t\t zincCameraControl.setMouseButtonAction(\"SECONDARY\", \"PAN\");\n\t\t\t }\n\t\t }\n\t }\n\t \t \n\t this.alignCameraWithSelectedObject = function(transitionTime) {\n\t var objects = _this.graphicsHighlight.getSelected();\n\t if (objects && objects[0] && objects[0].userData) {\n\t _this.scene.alignObjectToCameraView(objects[0].userData, transitionTime);\n\t }\n\t }\n\t \n\t this.exportSettings = function() {\n\t\t var settings = {};\n\t\t settings.name = _this.instanceName;\n\t\t if (_this.sceneData.currentSystem)\n\t\t\t settings.system = _this.sceneData.currentSystem;\n\t\t if (_this.sceneData.currentSpecies)\n\t\t\t settings.species = _this.sceneData.currentSpecies;\n\t\t if (_this.sceneData.currentPart)\n\t\t\t settings.part = _this.sceneData.currentPart;\n\t\t settings.metaURL = _this.sceneData.metaURL;\n\t\t if (_this.sceneData.viewURL)\n\t\t\t settings.viewURL = _this.sceneData.viewURL;\n\t\t settings.dialog = \"Organ Viewer\";\n\t\t return settings;\n\t }\n\t \n\t this.importSettings = function(settings) {\n\t\t if (settings && (settings.dialog == this.typeName)) {\n\t\t\t _this.setName(settings.name);\n\t\t\t if (settings.metaURL !== undefined && settings.metaURL != \"\") {\n\t\t\t\t _this.loadOrgansFromURL(settings.metaURL, settings.species,\n\t\t\t\t\tsettings.system, settings.part, settings.viewURL);\n\t\t\t } else {\n\t\t\t\t _this.loadOrgans(settings.species, settings.system, settings.part);\n\t\t\t }\n\t\t\t return true;\n\t\t }\n\t\t return false;\n\t }\n\t\t\n\t/**\n\t * initialise loading of the html layout for the organs panel, this is\n\t * called when the {@link PJP.OrgansViewer} is created.\n\t * \n\t * @async\n\t */\n\t var initialise = function() {\n\t _this.initialiseRenderer(undefined);\n\t if (_this.zincRenderer) {\n _this.zincRenderer.addPreRenderCallbackFunction(preRenderUpdateCallback());\n _this.zincRenderer.addPostRenderCallbackFunction(postRenderUpdateCallback());\n }\n }\n\t \n\tinitialise();\n\n}\n\nOrgansViewer.prototype = Object.create((require('./RendererModule').RendererModule).prototype);\nexports.OrgansViewer = OrgansViewer;\n","module.exports = require(\"lodash/orderBy\");","module.exports = require(\"core-js/modules/es.array.index-of\");","module.exports = require(\"element-ui/lib/locale/lang/en\");","module.exports = require(\"element-ui/lib/row\");","var THREE = require('zincjs').THREE;\n\nexports.VaryingTexCoordsReader = function(sceneIn) {\n\t\n\tvar _this = this;\n\tvar finishCallbackFunction = undefined;\n\tvar bufferGeometry = undefined;\n\tvar zincGeometry = undefined;\n\tvar numberOfInputs = 0;\n\tvar completedInputs = 0;\n\tvar scene = sceneIn;\n\tvar currentMap = undefined;\n\tvar textureLoader = new THREE.TextureLoader();\n\tvar texture = new textureLoader.load( 'models/organsViewerModels/digestive/stomach/nerve_map/texture/ratstomach_innervation_square.png' );\n\ttexture.wrapS = THREE.RepeatWrapping;\n\ttexture.wrapT = THREE.RepeatWrapping;\n\ttexture.format = THREE.RGBFormat;\n\t\n\tvar shadersUniforms = THREE.UniformsUtils.merge( [\n\t {\n\t\tambient : { type: \"c\", value: new THREE.Color( 0x000000 ) },\n\t\tdiffuse : { type: \"c\", value: new THREE.Color( 0xffffff ) },\n\t\temissive : { type: \"c\", value: new THREE.Color( 0xbbbbbb ) },\n\t\tspecular : { type: \"c\", value: new THREE.Color( 0x111111 ) },\n\t\tshininess: { type: \"f\", value: 100 },\n\t\topacity: { type: \"f\", value: 1.0 },\n\t\tambientLightColor: { type: \"c\", value: new THREE.Color( 0xF0F0F0 ) },\n\t\tdirectionalLightColor: { type: \"c\", value: new THREE.Color( 0x555555) },\n\t\tdirectionalLightDirection: { type: \"v3\", value: new THREE.Vector3() },\n\t\toffsetRepeat: { value: new THREE.Vector4( 0, 0, 1, 1 ) },\n\t\ttime: { type: \"f\", value: 0.0 },\n\t\tslide_pos: { type: \"f\", value: 1.0 },\n\t\tmyTex: {type: 't', value: null}\n\t} ] );\n\n\tvar addGeometryIntoBufferGeometry = function(order, geometry)\n\t{\n\t\tvar arrayLength = geometry.faces.length * 3 * 3;\n\t\tvar positions = new Float32Array( arrayLength );\n\t\tvar colors = new Float32Array( arrayLength );\n\t\tvar normals = new Float32Array( arrayLength );\n\t\tvar texCoords = new Float32Array( geometry.faces.length * 3 * 2 );\n\t\tif (bufferGeometry === undefined)\n\t\t\tbufferGeometry = new THREE.BufferGeometry();\n\t\t\n\t\tgeometry.faces.forEach( function ( face, index ) {\n\t\t\tpositions[ index * 9 + 0 ] = geometry.vertices[ face.a ].x;\n\t\t\tpositions[ index * 9 + 1 ] = geometry.vertices[ face.a ].y;\n\t\t\tpositions[ index * 9 + 2 ] = geometry.vertices[ face.a ].z;\n\t\t\tpositions[ index * 9 + 3 ] = geometry.vertices[ face.b ].x;\n\t\t\tpositions[ index * 9 + 4 ] = geometry.vertices[ face.b ].y;\n\t\t\tpositions[ index * 9 + 5 ] = geometry.vertices[ face.b ].z;\n\t\t\tpositions[ index * 9 + 6 ] = geometry.vertices[ face.c ].x;\n\t\t\tpositions[ index * 9 + 7 ] = geometry.vertices[ face.c ].y;\n\t\t\tpositions[ index * 9 + 8 ] = geometry.vertices[ face.c ].z;\n\t\t\n\t\t\tnormals[ index * 9 + 0 ] = face.vertexNormals[0].x;\n\t\t\tnormals[ index * 9 + 1 ] = face.vertexNormals[0].y;\n\t\t\tnormals[ index * 9 + 2 ] = face.vertexNormals[0].z;\n\t\t\tnormals[ index * 9 + 3 ] = face.vertexNormals[1].x;\n\t\t\tnormals[ index * 9 + 4 ] = face.vertexNormals[1].y;\n\t\t\tnormals[ index * 9 + 5 ] = face.vertexNormals[1].z;\n\t\t\tnormals[ index * 9 + 6 ] = face.vertexNormals[2].x;\n\t\t\tnormals[ index * 9 + 7 ] = face.vertexNormals[2].y;\n\t\t\tnormals[ index * 9 + 8 ] = face.vertexNormals[2].z;\n\t\t\t\n\t\t\ttexCoords[ index * 6 + 0] = geometry.faceVertexUvs[ 0 ][index][0].x;\n\t\t\ttexCoords[ index * 6 + 1] = geometry.faceVertexUvs[ 0 ][index][0].y;\n\t\t\ttexCoords[ index * 6 + 2] = geometry.faceVertexUvs[ 0 ][index][1].x;\n\t\t\ttexCoords[ index * 6 + 3] = geometry.faceVertexUvs[ 0 ][index][1].y;\n\t\t\ttexCoords[ index * 6 + 4] = geometry.faceVertexUvs[ 0 ][index][2].x;\n\t\t\ttexCoords[ index * 6 + 5] = geometry.faceVertexUvs[ 0 ][index][2].y;\n\t\t} );\n\t\t\n\t\t\n\t\tif (order == 0) {\n\t\t\tbufferGeometry.addAttribute( \"position\", new THREE.BufferAttribute( positions, 3) );\n\t\t\tbufferGeometry.addAttribute( \"normal\", new THREE.BufferAttribute( normals, 3 ) );\n\t\t\tbufferGeometry.addAttribute( \"uv\", new THREE.BufferAttribute( texCoords, 2 ) );\n\t\t} else {\n\t\t\tvar positionStr = \"position_\" + order;\n\t\t\tvar normalStr = \"normal_\" + order;\n\t\t\tvar uvsStr = \"uv_\" + order;\n\t\t\tbufferGeometry.addAttribute( positionStr, new THREE.BufferAttribute( positions, 3) );\n\t\t\tbufferGeometry.addAttribute( normalStr, new THREE.BufferAttribute( normals, 3 ) );\n\t\t\tbufferGeometry.addAttribute( uvsStr, new THREE.BufferAttribute( texCoords, 2 ) );\n\t\t}\n\n\t}\n\t\n\tvar meshReady = function(bufferGeometryIn, shaderText, material){\n\t\tvar shaderMaterial = new THREE.RawShaderMaterial( {\n\t\t\tvertexShader: shaderText[0],\n\t\t\tfragmentShader: shaderText[1],\n\t\t\tuniforms: shadersUniforms\n\t\t} );\n\t\tshaderMaterial.uniforms.myTex.value = texture;\n\t\tshaderMaterial.side = THREE.DoubleSide;\n\t\tshaderMaterial.depthTest = true;\n\t\tshaderMaterial.needsUpdate = true;\n\t\tshaderMaterial.map = texture;\n\t\tshaderMaterial.uniforms.myTex.value.needsUpdate = true;\n\t\tshaderMaterial.opacity = 1.0;\n\t\tzincGeometry = scene.addZincGeometry(bufferGeometryIn, 30001, undefined, undefined, false, false, true, undefined, shaderMaterial);\n\t\tzincGeometry.groupName = \"varyingTexture\";\n\t}\n\t\n\tvar myLoader = function(order, shaderText) {\n\t return function(geometry, materials){\n\t \tvar material = 0;\n\t \taddGeometryIntoBufferGeometry(order, geometry);\n\t \tcompletedInputs++;\n\t \tif (completedInputs == numberOfInputs) {\n\t \t\tmeshReady(bufferGeometry, shaderText, material);\n\t \t\tif (finishCallbackFunction != undefined && (typeof finishCallbackFunction == 'function'))\n\t \t\t\tfinishCallbackFunction(bufferGeometry);\n\t \t}\n\t }\n\t}\n\t\n\tthis.setSliderPos = function(pos) {\n\t\tif (zincGeometry)\n\t\t\tzincGeometry.morph.material.uniforms.slide_pos.value = pos;\n\t}\n\t\n\tthis.setTime = function(time) {\n\t\tif (zincGeometry) {\n\t\t\tzincGeometry.morph.material.uniforms.time.value = time;\n\t\t}\n\t}\n\t\n\tthis.setTexture = function(textureIn) {\n\t\tif (zincGeometry) {\n\t\t\tzincGeometry.morph.material.uniforms.myTex.value = textureIn;\n\t\t\tzincGeometry.morph.material.uniforms.myTex.value.needsUpdate = true;\n\t\t}\n\t}\n\t\n\tthis.loadURLsIntoBufferGeometry = function(urls, finishCallback, progressCallback, errorCallback) {\n\t\tvar loader = new THREE.JSONLoader( true );\n numberOfInputs = urls.length;\n finishCallbackFunction = finishCallback;\n var shaderText = [\n require('./shaders/varyingTexture.vs'),\n require('./shaders/varyingTexture.fs')\n ];\n for (var i = 0; i < numberOfInputs; i++)\n loader.load( urls[i], myLoader(i, shaderText), progressCallback, errorCallback);\n\t}\n}\n","module.exports = require(\"element-ui/lib/theme-chalk/col.css\");","module.exports = require(\"element-ui/lib/theme-chalk/main.css\");","require(\"../styles/tooltip.css\");\n\nexports.ToolTip = function(container) {\n var tooltipcontainerElement = undefined;\n var tipElement = undefined;\n var tiptextElement = undefined;\n var template = '<div class=\"mptooltip\" id=\"tip\"><span class=\"mptooltiptext\" id=\"tiptext\"> Tooltip text</span></div>';\n var _this = this;\n \n /**\n * Show tool tip on the specified windows coordinates.\n * @param {Number} x - Style sheet with the same title.\n * @param {Number} y - selector string to match.\n */\n this.show = function(x, y) {\n \ttooltipcontainerElement.style.left = x +\"px\";\n \ttooltipcontainerElement.style.top = (y - 20) + \"px\";\n \ttipElement.style.visibility = \"visible\";\n \ttipElement.style.opacity = 1;\n \ttiptextElement.style.visibility = \"visible\";\n \ttiptextElement.style.opacity = 1;\n }\n \n this.hide = function() {\n \ttipElement.style.visibility = \"hidden\";\n \ttipElement.style.opacity = 0;\n \ttiptextElement.style.visibility = \"hidden\";\n \ttiptextElement.style.opacity = 0;\n }\n \n /**\n * Change the tooltip text.\n * @param {String} text - Text to update the tooltip to.\n */\n this.setText = function(text) {\n \ttiptextElement.innerHTML = text;\n }\n\n var setupToolTipContainer = function() {\n tooltipcontainerElement = document.createElement(\"div\");\n tooltipcontainerElement.id = \"tooltipcontainer\";\n tooltipcontainerElement.innerHTML = template;\n /*\n for (i = 0; i < childNodes.length; i++) {\n parent[0].appendChild(childNodes[i]);\n }\n */\n tipElement = tooltipcontainerElement.querySelector(\"#tip\");\n tiptextElement = tooltipcontainerElement.querySelector(\"#tiptext\");\n container.appendChild(tooltipcontainerElement);\n \n }\n \n setupToolTipContainer();\n}\n\n","var THREE = require('zincjs').THREE;\n\n/**\n * Create a {@link Zinc.Renderer} on the dom element with corresponding elementID.\n * @param {String} elementID - id of the target dom element.\n * @returns {Zinc.Renderer}\n */\nvar createRenderer = function () {\n var WEBGL = require('../utilities/WebGL').WEBGL;\n var localContainer = document.createElement( 'div' );\n var localRenderer = undefined;;\n localContainer.style.height = \"100%\";\n if (WEBGL.isWebGLAvailable()) {\n var Zinc = require('zincjs');\n var localRenderer = new Zinc.Renderer(localContainer, window);\n Zinc.defaultMaterialColor = 0xFFFF9C;\n localRenderer.initialiseVisualisation();\n localRenderer.playAnimation = false;\n } else {\n var warning = WEBGL.getWebGLErrorMessage();\n localContainer.appendChild(warning);\n }\n return {\"renderer\":localRenderer, \"container\":localContainer};\n}\n\nvar RendererModule = function() {\n (require('./BaseModule').BaseModule).call(this);\n this.scene = undefined;\n this.toolTip = undefined;\n this.rendererContainer = undefined;\n this.displayArea = undefined;\n this.graphicsHighlight = new (require(\"../utilities/graphicsHighlight\").GraphicsHighlight)();\n this.zincRenderer = null;\n this.selectedScreenCoordinates = new THREE.Vector3();\n this.selectedCenter = undefined;\n}\n\nRendererModule.prototype = Object.create((require('./BaseModule').BaseModule).prototype);\n\n/**\n * This function will get the the first intersected object with name or\n * the first glyph object with name.\n */\nRendererModule.prototype.getIntersectedObject = function(intersects) {\n\tif (intersects) {\n\t\tfor (var i = 0; i < intersects.length; i++) {\n\t\t\tif (intersects[i] !== undefined) {\n\t\t\t\tif (intersects[i].object &&\n intersects[i].object.userData && \n intersects[i].object.userData.isZincObject && \n (intersects[i].object.name || \n intersects[i].object.userData.isMarker))\n\t\t\t\t\treturn intersects[i];\n\t\t\t}\n\t\t}\n\t}\n\treturn undefined;\n}\n\nRendererModule.prototype.getAnnotationsFromObjects = function(objects) {\n var annotations = [];\n for (var i = 0; i < objects.length; i++) {\n \tvar zincObject = objects[i].userData;\n var annotation = undefined;\n if (zincObject) {\n if (zincObject.isGlyph || zincObject.isGlyphset) {\n var glyphset = zincObject;\n if (zincObject.isGlyph)\n glyphset = zincObject.getGlyphset();\n annotation = glyphset.userData ? glyphset.userData[0] : undefined;\n if (annotation && annotation.data) {\n if (objects[i].name && objects[i].name != \"\")\n annotation.data.id = objects[i].name;\n else\n annotation.data.id = glyphset.groupName;\n }\n } else {\n annotation = zincObject.userData ? zincObject.userData[0] : undefined;\n if (annotation && annotation.data){\n annotation.data.id = objects[i].name;\n }\n }\n }\n annotations[i] = annotation;\n }\n\treturn annotations;\n}\n\nRendererModule.prototype.setHighlightedByObjects = function(objects, propagateChanges) {\n var changed = this.graphicsHighlight.setHighlighted(objects);\n if (changed && propagateChanges) {\n var eventType = require(\"../utilities/eventNotifier\").EVENT_TYPE.HIGHLIGHTED;\n var annotations = this.getAnnotationsFromObjects(objects);\n this.publishChanges(annotations, eventType);\n }\n return changed;\n}\n\n\nRendererModule.prototype.setHighlightedByZincObject = function(\n zincObject, propagateChanges) {\n return this.setHighlightedByObjects([zincObject ? zincObject.morph : undefined], propagateChanges);\n}\n\nRendererModule.prototype.setupLiveCoordinates = function(zincObjects) {\n if (zincObjects && (zincObjects.length > 0)) {\n var boundingBox = this.scene.getBoundingBoxOfZincObjects(zincObjects);\n let newSelectedCenter = new THREE.Vector3();\n boundingBox.getCenter(newSelectedCenter);\n if (this.selectedCenter == undefined)\n this.selectedCenter = newSelectedCenter;\n else {\n this.selectedCenter.x = newSelectedCenter.x;\n this.selectedCenter.y = newSelectedCenter.y;\n }\n } else {\n this.selectedCenter = undefined;\n }\n}\n\nRendererModule.prototype.objectsToZincObjects = function(objects) {\n var zincObjects = [];\n for (var i = 0; i < objects.length; i++) {\n var zincObject = objects[i].userData;\n if (zincObject) {\n if (zincObject.isGlyph || zincObject.isGlyphset) {\n var glyphset = zincObject;\n if (zincObject.isGlyph)\n glyphset = zincObject.getGlyphset();\n zincObjects. push(glyphset);\n } else {\n zincObjects. push(zincObject);\n }\n }\n }\n return zincObjects;\n}\n\n\nRendererModule.prototype.setSelectedByObjects = function(\n objects, propagateChanges) {\n var changed = this.graphicsHighlight.setSelected(objects);\n if (changed) {\n var zincObjects = this.objectsToZincObjects(objects);\n this.setupLiveCoordinates(zincObjects);\n if (propagateChanges) {\n var eventType = require(\"../utilities/eventNotifier\").EVENT_TYPE.SELECTED;\n var annotations = this.getAnnotationsFromObjects(objects);\n this.publishChanges(annotations, eventType);\n }\n }\n return changed;\n}\n\nRendererModule.prototype.setSelectedByZincObject = function(\n zincObject, propagateChanges) {\n return this.setSelectedByObjects([zincObject ? zincObject.morph : undefined], propagateChanges);\n}\n\nvar addGlyphToArray = function(objects) {\n return function(glyph) {\n objects.push(glyph.getMesh());\n }\n}\n\nRendererModule.prototype.findObjectsByGroupName = function(groupName) {\n var geometries = this.scene.findGeometriesWithGroupName(groupName);\n var objects = [];\n for (var i = 0; i < geometries.length; i ++ ) {\n objects.push(geometries[i].morph);\n }\n var glyphsets = this.scene.findGlyphsetsWithGroupName(groupName);\n for (var i = 0; i < glyphsets.length; i ++ ) {\n glyphsets[i].forEachGlyph(addGlyphToArray(objects));\n }\n \n return objects;\n}\n\nRendererModule.prototype.setHighlightedByGroupName = function(groupName, propagateChanges) {\n var objects = this.findObjectsByGroupName(groupName);\n return this.setHighlightedByObjects(objects, propagateChanges);\n}\n\nRendererModule.prototype.setSelectedByGroupName = function(groupName, propagateChanges) {\n var objects = this.findObjectsByGroupName(groupName);\n return this.setSelectedByObjects(objects, propagateChanges);\n}\n\nRendererModule.prototype.changeBackgroundColour = function(backgroundColourString) {\n var colour = new THREE.Color(backgroundColourString);\n if (this.zincRenderer) {\n var internalRenderer = this.zincRenderer.getThreeJSRenderer();\n internalRenderer.setClearColor( colour, 1 );\n }\n}\n\nRendererModule.prototype.resetView = function() {\n if (this.zincRenderer)\n this.zincRenderer.resetView();\n}\n \nRendererModule.prototype.viewAll = function() {\n if (this.zincRenderer)\n this.zincRenderer.viewAll();\n}\n\n/**\n * Start the animation and let the renderer to processs with\n * time progression\n */\nRendererModule.prototype.playAnimation = function(flag) {\n if (this.zincRenderer)\n this.zincRenderer.playAnimation = flag;\n}\n\n/**\n* Set the speed of playback\n*/\nRendererModule.prototype.setPlayRate = function(value) {\n if (this.zincRenderer)\n this.zincRenderer.setPlayRate(value);\n}\n\n/**\n* Get the speed of playback\n*/\nRendererModule.prototype.getPlayRate = function(value) {\n if (this.zincRenderer)\n return this.zincRenderer.getPlayRate();\n else\n return 0.0;\n}\n \n /** Initialise everything in the renderer, including the 3D renderer,\n * and picker for the 3D renderer.\n * \n */\nRendererModule.prototype.initialiseRenderer = function(displayAreaIn) {\n if (this.zincRenderer === undefined || this.rendererContainer === undefined) {\n var returnedValue = createRenderer();\n this.zincRenderer = returnedValue[\"renderer\"];\n this.rendererContainer = returnedValue[\"container\"];\n }\n if (displayAreaIn) {\n this.displayArea = displayAreaIn;\n this.displayArea.appendChild( this.rendererContainer );\n if (this.zincRenderer) {\n this.zincRenderer.animate();\n if (this.toolTip === undefined)\n this.toolTip = new (require(\"../ui/tooltip\").ToolTip)(this.displayArea);\n }\n } \n}\n\nRendererModule.prototype.destroy = function() {\n if (this.zincRenderer) {\n this.zincRenderer.dispose();\n this.zincRenderer.getThreeJSRenderer().dispose();\n this.zincRenderer = undefined;\n }\n (require('./BaseModule').BaseModule).prototype.destroy.call( this );\n}\n \nexports.RendererModule = RendererModule;\n","module.exports = require(\"core-js/modules/es.array.splice\");","// extracted by mini-css-extract-plugin","module.exports = require(\"element-ui/lib/locale\");","module.exports = require(\"element-ui/lib/theme-chalk/option.css\");","module.exports = require(\"core-js/modules/es.object.to-string\");","module.exports = require(\"vue\");","module.exports = require(\"element-ui/lib/tabs\");","module.exports = require(\"core-js/modules/es.array.iterator\");","var THREE = require('zincjs').THREE;\n\n/**\n * This module manages highlighted and selected objects in 3D modules. \n * \n * @class\n * @returns {exports.GraphicsHighlight}\n */\nexports.GraphicsHighlight = function() {\n var currentHighlightedObjects = [];\n var currentSelectedObjects = [];\n this.highlightColour = 0x0000FF;\n this.selectColour = 0x00FF00;\n this.originalColour = 0x000000;\n var _this = this;\n\n var isDifferent = function(array1, array2) {\n if ((array1.length == 0) && (array2.length == 0))\n return false;\n \n for (var i = 0; i < array1.length; i++) {\n var matched = false;\n for (var j = 0; j < array2.length; j++) {\n if (array1[i] === array2[j]) {\n matched = true;\n }\n }\n if (!matched)\n return true;\n }\n for (var i = 0; i < array2.length; i++) {\n var matched = false;\n for (var j = 0; j < array1.length; j++) {\n if (array2[i] === array1[j]) {\n matched = true;\n }\n }\n if (!matched)\n return true;\n }\n return false;\n }\n \n var getUnmatchingObjects = function(objectsArray1, objectsArray2) {\n var unmatchingObjects = [];\n if (objectsArray2.length == 0)\n return objectsArray1;\n for (var i = 0; i < objectsArray1.length; i++) {\n var matched = false;\n for (var j = 0; j < objectsArray2.length; j++) {\n if (objectsArray1[i] === objectsArray2[j]) {\n matched = true;\n }\n }\n if (!matched)\n unmatchingObjects.push(objectsArray1[i]);\n }\n return unmatchingObjects;\n }\n \n this.setHighlighted = function(objects) {\n var previousHighlightedObjects = currentHighlightedObjects;\n _this.resetHighlighted();\n // Selected object cannot be highlighted\n var array = getUnmatchingObjects(objects, currentSelectedObjects);\n var fullList = getFullListOfObjects(array);\n for (var i = 0; i < fullList.length; i++) {\n if (fullList[i] && fullList[i].material && fullList[i].material.emissive)\n fullList[i].material.emissive.setHex(_this.highlightColour);\n }\n currentHighlightedObjects = array;\n return isDifferent(currentHighlightedObjects, previousHighlightedObjects);\n }\n\n this.setSelected = function(objects) {\n // first find highlighted object that are not selected\n var previousHSelectedObjects = currentSelectedObjects;\n var array = getUnmatchingObjects(currentHighlightedObjects, objects);\n currentHighlightedObjects = array;\n _this.resetSelected();\n var fullList = getFullListOfObjects(objects);\n for (var i = 0; i < fullList.length; i++) {\n \tif (fullList[i] && fullList[i].material && fullList[i].material.emissive)\n fullList[i].material.emissive.setHex(_this.selectColour);\n }\n currentSelectedObjects = objects;\n return isDifferent(currentSelectedObjects, previousHSelectedObjects);\n }\n\n var getFullListOfObjects = function(objects) {\n let fullList = [];\n for (var i = 0; i < objects.length; i++) {\n if (objects[i].material)\n fullList.push(objects[i]);\n }\n return fullList;\n }\n \n this.resetHighlighted = function() {\n let fullList = getFullListOfObjects(currentHighlightedObjects);\n for (var i = 0; i < fullList.length; i++) {\n if (fullList[i] && fullList[i].material) {\n if (fullList[i].material.emissive)\n fullList[i].material.emissive.setHex(_this.originalColour);\n if (fullList[i].material.depthFunc)\n fullList[i].material.depthFunc = THREE.LessEqualDepth;\n }\n }\n currentHighlightedObjects = [];\n }\n \n this.resetSelected = function() {\n let fullList = getFullListOfObjects(currentSelectedObjects);\n for (var i = 0; i < fullList.length; i++) {\n \tif (fullList[i] && fullList[i].material) {\n \t\tif (fullList[i].material.emissive)\n fullList[i].material.emissive.setHex(_this.originalColour);\n \t\tif (fullList[i].material.depthFunc)\n fullList[i].material.depthFunc = THREE.LessEqualDepth;\n \t}\n }\n currentSelectedObjects = [];\n }\n \n this.getSelected = function() {\n return currentSelectedObjects;\n }\n \n this.reset = function() {\n _this.resetSelected();\n _this.resetHighlighted();\n }\n}\n","module.exports = require(\"element-ui/lib/theme-chalk/icon.css\");","module.exports = require(\"core-js/modules/es.string.iterator\");","module.exports = require(\"zincjs\");","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TraditionalControls.vue?vue&type=style&index=0&id=b0ace276&scoped=true&lang=scss&\"","module.exports = require(\"element-ui/lib/popover\");","module.exports = require(\"element-ui/lib/theme-chalk/slider.css\");","// extracted by mini-css-extract-plugin","module.exports = require(\"element-ui/lib/theme-chalk/tab-pane.css\");","module.exports = require(\"element-ui/lib/theme-chalk/base.css\");","module.exports = require(\"@soda/get-current-script\");","exports.annotation = function() {\n this.type = \"anatomical\";\n this.data = undefined;\n this.isAnnotation = true;\n}\n","module.exports = require(\"element-ui/lib/col\");","module.exports = require(\"element-ui/lib/theme-chalk/popover.css\");","module.exports = require(\"element-ui/lib/slider\");","module.exports = require(\"core-js/modules/es.array.includes\");","module.exports = require(\"element-ui/lib/loading\");","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TraditionalControls.vue?vue&type=style&index=1&lang=css&\"","module.exports = require(\"element-ui/lib/theme-chalk/container.css\");","module.exports = require(\"element-ui/lib/icon\");","// extracted by mini-css-extract-plugin","module.exports = require(\"element-ui/lib/checkbox\");","module.exports = require(\"core-js/modules/es.function.name\");","module.exports = require(\"core-js/modules/web.dom-collections.for-each\");","module.exports = require(\"core-js/modules/es.string.replace\");","module.exports = require(\"element-ui/lib/option\");","module.exports = require(\"broadcast-channel\");","// extracted by mini-css-extract-plugin","module.exports = require(\"core-js/modules/es.array.from\");","// extracted by mini-css-extract-plugin","// This file is imported into lib/wc client bundles.\n\nif (typeof window !== 'undefined') {\n var currentScript = window.document.currentScript\n if (process.env.NEED_CURRENTSCRIPT_POLYFILL) {\n var getCurrentScript = require('@soda/get-current-script')\n currentScript = getCurrentScript()\n\n // for backward compatibility, because previously we directly included the polyfill\n if (!('currentScript' in document)) {\n Object.defineProperty(document, 'currentScript', { get: getCurrentScript })\n }\n }\n\n var src = currentScript && currentScript.src.match(/(.+\\/)[^/]+\\.js(\\?.*)?$/)\n if (src) {\n __webpack_public_path__ = src[1] // eslint-disable-line\n }\n}\n\n// Indicate to webpack that this file can be concatenated\nexport default null\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"loading\",rawName:\"v-loading\",value:(_vm.loading),expression:\"loading\"}],ref:\"scaffoldContainer\",staticClass:\"scaffold-container\",attrs:{\"element-loading-text\":\"Loading...\",\"element-loading-spinner\":\"el-icon-loading\",\"element-loading-background\":\"rgba(0, 0, 0, 0.3)\"}},[_c('SvgSpriteColor'),_c('div',{ref:\"display\",staticStyle:{\"height\":\"100%\",\"width\":\"100%\"},attrs:{\"id\":\"organsDisplayArea\",\"tabindex\":\"-1\"},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&$event.keyCode!==66){ return null; }return _vm.backgroundChangeCallback($event)}}}),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.displayUI && !_vm.isTransitioning),expression:\"displayUI && !isTransitioning\"}]},[(_vm.displayWarning)?_c('el-popover',{ref:\"warningPopover\",attrs:{\"content\":_vm.warningMessage,\"placement\":\"right\",\"append-to-body\":false,\"trigger\":\"manual\",\"popper-class\":\"warning-popper right-popper non-selectable\"},model:{value:(_vm.hoverVisabilities[6].value),callback:function ($$v) {_vm.$set(_vm.hoverVisabilities[6], \"value\", $$v)},expression:\"hoverVisabilities[6].value\"}}):_vm._e(),(_vm.displayWarning)?_c('i',{directives:[{name:\"popover\",rawName:\"v-popover:warningPopover\",arg:\"warningPopover\"}],staticClass:\"el-icon-warning warning-icon\",on:{\"mouseover\":function($event){return _vm.showToolitip(6)},\"mouseout\":function($event){return _vm.hideToolitip(6)}}},[_c('span',{staticClass:\"warning-text\"},[_vm._v(\"Beta\")])]):_vm._e(),_c('el-popover',{ref:\"checkBoxPopover\",attrs:{\"content\":\"Change region visibility\",\"placement\":\"right\",\"append-to-body\":false,\"trigger\":\"manual\",\"popper-class\":\"scaffold-popper right-popper non-selectable\"},model:{value:(_vm.hoverVisabilities[5].value),callback:function ($$v) {_vm.$set(_vm.hoverVisabilities[5], \"value\", $$v)},expression:\"hoverVisabilities[5].value\"}}),_c('TraditionalControls',{directives:[{name:\"popover\",rawName:\"v-popover:checkBoxPopover\",arg:\"checkBoxPopover\"}],ref:\"traditionalControl\",attrs:{\"help-mode\":_vm.helpMode,\"module\":_vm.$module,\"show-colour-picker\":_vm.showColourPicker},on:{\"object-selected\":_vm.objectSelected,\"object-hovered\":_vm.objectHovered,\"drawer-toggled\":_vm.drawerToggled}}),_c('div',{staticClass:\"opacity-box\"},[_c('OpacityControls',{ref:\"opacityControl\"})],1),(_vm.sceneData.timeVarying)?_c('el-popover',{ref:\"sliderPopover\",attrs:{\"content\":\"Move the slider to animate the region\",\"placement\":\"top\",\"append-to-body\":false,\"trigger\":\"manual\",\"popper-class\":\"scaffold-popper top-popper non-selectable\"},model:{value:(_vm.hoverVisabilities[4].value),callback:function ($$v) {_vm.$set(_vm.hoverVisabilities[4], \"value\", $$v)},expression:\"hoverVisabilities[4].value\"}}):_vm._e(),(_vm.sceneData.timeVarying)?_c('div',{directives:[{name:\"popover\",rawName:\"v-popover:sliderPopover\",arg:\"sliderPopover\"}],staticClass:\"time-slider-container\",class:[ _vm.minimisedSlider ? 'minimised' : '', _vm.sliderPosition]},[_c('el-tabs',{attrs:{\"type\":\"card\"}},[_c('el-tab-pane',{attrs:{\"label\":\"Animate scaffold\"}},[_c('el-row',{staticClass:\"tab-content\"},[(_vm.isPlaying)?_c('SvgIcon',{staticClass:\"icon-button video-button\",attrs:{\"icon\":\"pause\"},nativeOn:{\"click\":function($event){return _vm.play(false)}}}):_c('SvgIcon',{staticClass:\"video-button icon-button\",attrs:{\"icon\":\"play\"},nativeOn:{\"click\":function($event){return _vm.play(true)}}}),_c('el-slider',{staticClass:\"slider\",attrs:{\"min\":0,\"max\":_vm.timeMax,\"value\":_vm.sceneData.currentTime / 100 * _vm.timeMax,\"step\":0.1,\"tooltip-class\":\"time-slider-tooltip\",\"format-tooltip\":_vm.formatTooltip,\"marks\":_vm.timeStamps},on:{\"input\":function($event){return _vm.timeChange($event)}}})],1)],1),_c('el-tab-pane',{attrs:{\"label\":\"Animation data\"}},[_c('el-row',{staticClass:\"tab-content\"},[_c('div',{staticClass:\"animation-data\"},[_vm._v(\" Original duration: \"),_c('div',{staticClass:\"purple\"},[_vm._v(\" \"+_vm._s(_vm.orginalDuration)+\" \")])]),_c('div',{staticClass:\"animation-data\"},[_vm._v(\" Animation duration: \"),_c('div',{staticClass:\"purple\"},[_vm._v(\" \"+_vm._s(_vm.animateDuration)+\" \")])]),_c('div',{staticClass:\"animation-data\"},[_vm._v(\" Playback speed \"),_c('el-select',{staticClass:\"select-box\",attrs:{\"popper-append-to-body\":true,\"value\":_vm.currentSpeed,\"placeholder\":\"Select\",\"popper-class\":\"scaffold_viewer_dropdown\"},on:{\"change\":function($event){return _vm.speedChanged($event)}}},_vm._l((_vm.playSpeed),function(item){return _c('el-option',{key:item.value,attrs:{\"label\":item.label,\"value\":item.value}})}),1)],1)])],1)],1)],1):_vm._e(),_c('div',{staticClass:\"bottom-right-control\"},[_c('el-popover',{attrs:{\"content\":\"Zoom in\",\"placement\":\"left\",\"append-to-body\":false,\"trigger\":\"manual\",\"popper-class\":\"scaffold-popper left-popper non-selectable\"},model:{value:(_vm.hoverVisabilities[0].value),callback:function ($$v) {_vm.$set(_vm.hoverVisabilities[0], \"value\", $$v)},expression:\"hoverVisabilities[0].value\"}},[_c('SvgIcon',{staticClass:\"icon-button zoomIn\",attrs:{\"slot\":\"reference\",\"icon\":\"zoomIn\"},nativeOn:{\"click\":function($event){return _vm.zoomIn()},\"mouseover\":function($event){return _vm.showToolitip(0)},\"mouseout\":function($event){return _vm.hideToolitip(0)}},slot:\"reference\"})],1),_c('el-popover',{attrs:{\"content\":\"Zoom out\",\"placement\":\"top-end\",\"append-to-body\":false,\"trigger\":\"manual\",\"popper-class\":\"scaffold-popper popper-zoomout non-selectable\"},model:{value:(_vm.hoverVisabilities[1].value),callback:function ($$v) {_vm.$set(_vm.hoverVisabilities[1], \"value\", $$v)},expression:\"hoverVisabilities[1].value\"}},[_c('SvgIcon',{staticClass:\"icon-button zoomOut\",attrs:{\"slot\":\"reference\",\"icon\":\"zoomOut\"},nativeOn:{\"click\":function($event){return _vm.zoomOut()},\"mouseover\":function($event){return _vm.showToolitip(1)},\"mouseout\":function($event){return _vm.hideToolitip(1)}},slot:\"reference\"})],1),_c('el-popover',{attrs:{\"placement\":\"top\",\"append-to-body\":false,\"trigger\":\"manual\",\"popper-class\":\"scaffold-popper non-selectable\"},model:{value:(_vm.hoverVisabilities[2].value),callback:function ($$v) {_vm.$set(_vm.hoverVisabilities[2], \"value\", $$v)},expression:\"hoverVisabilities[2].value\"}},[_c('div',[_vm._v(\" Fit to \"),_c('br'),_vm._v(\" window \")]),_c('SvgIcon',{staticClass:\"icon-button fitWindow\",attrs:{\"slot\":\"reference\",\"icon\":\"fitWindow\"},nativeOn:{\"click\":function($event){return _vm.fitWindow()},\"mouseover\":function($event){return _vm.showToolitip(2)},\"mouseout\":function($event){return _vm.hideToolitip(2)}},slot:\"reference\"})],1)],1),_c('el-popover',{ref:\"backgroundPopover\",attrs:{\"placement\":\"top-start\",\"width\":\"128\",\"append-to-body\":false,\"trigger\":\"click\",\"popper-class\":\"background-popper non-selectable\"}},[_c('el-row',{staticClass:\"backgroundText\"},[_vm._v(\" Change background \")]),_c('el-row',{staticClass:\"backgroundChooser\"},_vm._l((_vm.availableBackground),function(item){return _c('div',{key:item,class:['backgroundChoice', item, item == _vm.currentBackground ? 'active' :''],on:{\"click\":function($event){return _vm.backgroundChangeCallback(item)}}})}),0)],1),_c('el-popover',{attrs:{\"content\":\"Change background color\",\"placement\":\"right\",\"append-to-body\":false,\"trigger\":\"manual\",\"popper-class\":\"scaffold-popper right-popper non-selectable\"},model:{value:(_vm.hoverVisabilities[3].value),callback:function ($$v) {_vm.$set(_vm.hoverVisabilities[3], \"value\", $$v)},expression:\"hoverVisabilities[3].value\"}},[_c('SvgIcon',{directives:[{name:\"popover\",rawName:\"v-popover:backgroundPopover\",arg:\"backgroundPopover\"}],staticClass:\"icon-button background-colour\",class:{ open: _vm.drawerOpen, close: !_vm.drawerOpen },attrs:{\"slot\":\"reference\",\"icon\":\"changeBckgd\"},nativeOn:{\"mouseover\":function($event){return _vm.showToolitip(3)},\"mouseout\":function($event){return _vm.hideToolitip(3)}},slot:\"reference\"})],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.material!=undefined)?_c('div',{ref:\"control\",staticClass:\"opacity-control\"},[_c('el-drawer',{staticClass:\"drawer-content\",attrs:{\"custom-class\":\"my-drawer\",\"visible\":_vm.drawerOpen,\"append-to-body\":false,\"modal-append-to-body\":false,\"size\":\"300\",\"with-header\":false,\"wrapper-closable\":false,\"modal\":false},on:{\"update:visible\":function($event){_vm.drawerOpen=$event}}},[(_vm.drawerOpen)?_c('div',{staticClass:\"tab-button close\",on:{\"click\":_vm.toggleDrawer}},[_c('i',{staticClass:\"el-icon-arrow-right\"})]):_vm._e(),_c('el-container',{staticClass:\"opacity-container\"},[_c('el-header',{staticClass:\"header\",attrs:{\"height\":\"37px\"}},[_c('div',[_vm._v(\"Opacity\")])]),_c('el-main',{staticClass:\"main\"},[_c('div',{staticClass:\"block\"},[_c('span',{staticClass:\"display\"},[_vm._v(_vm._s(_vm.displayString))]),_c('el-slider',{staticClass:\"my-slider\",attrs:{\"step\":0.01,\"min\":0,\"max\":1,\"format-tooltip\":_vm.formatTooltip,\"show-tooltip\":false},model:{value:(_vm.material.opacity),callback:function ($$v) {_vm.$set(_vm.material, \"opacity\", $$v)},expression:\"material.opacity\"}})],1)])],1)],1),(!_vm.drawerOpen)?_c('div',{staticClass:\"tab-button open\",on:{\"click\":_vm.toggleDrawer}},[_c('i',{staticClass:\"el-icon-arrow-left\"})]):_vm._e()],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div\n v-if=\"material!=undefined\"\n ref=\"control\"\n class=\"opacity-control\"\n >\n <el-drawer\n custom-class=\"my-drawer\"\n class=\"drawer-content\"\n :visible.sync=\"drawerOpen\"\n :append-to-body=\"false\"\n :modal-append-to-body=\"false\"\n size=\"300\"\n :with-header=\"false\"\n :wrapper-closable=\"false\"\n :modal=\"false\"\n >\n <div\n v-if=\"drawerOpen\"\n class=\"tab-button close\"\n @click=\"toggleDrawer\"\n >\n <i class=\"el-icon-arrow-right\" />\n </div>\n <el-container class=\"opacity-container\">\n <el-header\n height=\"37px\"\n class=\"header\"\n >\n <div>Opacity</div>\n </el-header>\n <el-main class=\"main\">\n <div class=\"block\">\n <span class=\"display\">{{ displayString }}</span>\n <el-slider\n v-model=\"material.opacity\"\n class=\"my-slider\"\n :step=\"0.01\"\n :min=\"0\"\n :max=\"1\"\n :format-tooltip=\"formatTooltip\"\n :show-tooltip=\"false\"\n />\n </div>\n </el-main>\n </el-container>\n </el-drawer>\n <div\n v-if=\"!drawerOpen\"\n class=\"tab-button open\"\n @click=\"toggleDrawer\"\n >\n <i class=\"el-icon-arrow-left\" />\n </div>\n </div>\n</template>\n\n<script>\n/* eslint-disable no-alert, no-console */\nimport Vue from \"vue\";\nimport { Container, Drawer, Header, Icon, Main, Slider } from \"element-ui\";\nimport lang from \"element-ui/lib/locale/lang/en\";\nimport locale from \"element-ui/lib/locale\";\n\nlocale.use(lang);\nVue.use(Container);\nVue.use(Drawer);\nVue.use(Header);\nVue.use(Icon);\nVue.use(Main);\nVue.use(Slider);\n\n/**\n * A component to control the opacity of the target object.\n */\nexport default {\n name: \"OpacityControls\",\n data: function() {\n return {\n displayString: \"100%\",\n material: undefined,\n drawerOpen: true\n };\n },\n watch: {\n \"material.opacity\": function() {\n if (this.material) {\n this._zincobject.setAlpha(this.material.opacity);\n }\n }\n },\n mounted: function() {\n this._zincobject = undefined;\n },\n methods: {\n formatTooltip(val) {\n this.displayString = Math.floor(100 * val + 0.5) + \"%\";\n return this.displayString;\n },\n toggleDrawer: function() {\n this.drawerOpen = !this.drawerOpen;\n },\n setObject(object) {\n if (object) this.material = object.morph.material;\n else this.material = undefined;\n this._zincobject = object;\n }\n }\n};\n</script>\n\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\n<style scoped lang=\"scss\">\n@import \"~element-ui/packages/theme-chalk/src/container\";\n@import \"~element-ui/packages/theme-chalk/src/drawer\";\n@import \"~element-ui/packages/theme-chalk/src/slider\";\n\n.opacity-control {\n text-align: left;\n width:300px;\n}\n\n.header {\n color: #606266;\n line-height: 1;\n padding: 9px 17px 0 15px;\n border-bottom: 1px solid #ebeef5;\n font-size: 14px;\n}\n\n.display {\n width: 44px;\n}\n\n.icon {\n right: 17px;\n position: absolute;\n top: 10px;\n}\n\n.main {\n font-size: 13px;\n padding: 20px 17px 0 15px;\n}\n\n.block {\n left: 40px;\n position: absolute;\n top: 57px;\n width: 200px;\n}\n\n.my-slider {\n position: absolute;\n width: 109px;\n top: -12px;\n left: 50px;\n pointer-events: auto;\n}\n\n.opacity-container {\n width: 224px;\n height: 93px;\n border-radius: 4px;\n border: solid 1px #d8dce6;\n background-color: #fff;\n}\n\n::v-deep .el-slider__bar {\n background-color: $app-primary-color;\n}\n\n.drawer-content {\n position: relative;\n height: 93px;\n pointer-events: none;\n}\n\n::v-deep .my-drawer {\n background: rgba(0, 0, 0, 0);\n box-shadow: none;\n}\n\n::v-deep .my-drawer .el-drawer__body {\n height: 93px;\n}\n\n.tab-button {\n width: 20px;\n height: 40px;\n z-index: 8;\n right: 0px;\n \n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.06);\n border: solid 1px #e4e7ed;\n background-color: #FFFFFF;\n text-align: center;\n vertical-align: middle;\n cursor: pointer;\n pointer-events: auto;\n //transition: bottom 0.3s;\n\n &.close {\n float: left;\n flex: 1;\n border-right: 0;\n margin-top: 26px;\n }\n\n &.open {\n position: absolute;\n bottom:26px;\n }\n\n i {\n margin-top: 12px;\n color: $app-primary-color;\n transform: scaleY(2.5);\n }\n}\n\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OpacityControls.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OpacityControls.vue?vue&type=script&lang=js&\"","/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nexport default function normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () {\n injectStyles.call(\n this,\n (options.functional ? this.parent : this).$root.$options.shadowRoot\n )\n }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functional component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n","import { render, staticRenderFns } from \"./OpacityControls.vue?vue&type=template&id=4c00a30f&scoped=true&\"\nimport script from \"./OpacityControls.vue?vue&type=script&lang=js&\"\nexport * from \"./OpacityControls.vue?vue&type=script&lang=js&\"\nimport style0 from \"./OpacityControls.vue?vue&type=style&index=0&id=4c00a30f&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4c00a30f\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"traditional-location\",class:{ open: _vm.drawerOpen, close: !_vm.drawerOpen }},[_c('div',{staticClass:\"traditional-container\"},[_c('el-row',[_c('el-col',{attrs:{\"span\":12}},[_c('div',{staticClass:\"regions-display-text\"},[_vm._v(\" Regions \")])]),_c('el-col',{attrs:{\"span\":12}},[_c('el-checkbox',{staticClass:\"all-checkbox\",attrs:{\"indeterminate\":_vm.isIndeterminate},on:{\"change\":_vm.handleCheckAllChange},model:{value:(_vm.checkAll),callback:function ($$v) {_vm.checkAll=$$v},expression:\"checkAll\"}},[_vm._v(\" Display all \")])],1)],1),_c('el-checkbox-group',{staticClass:\"checkbox-group\",attrs:{\"size\":\"small\"},on:{\"change\":_vm.handleCheckedItemsChange},model:{value:(_vm.checkedItems),callback:function ($$v) {_vm.checkedItems=$$v},expression:\"checkedItems\"}},[_c('div',{staticClass:\"checkbox-group-inner\"},_vm._l((_vm.sortedPrimitiveGroups),function(item){return _c('el-row',{key:item,attrs:{\"label\":item}},[_c('div',{staticClass:\"checkbox-container\"},[_c('el-checkbox',{staticClass:\"my-checkbox\",class:{ activeItem: _vm.activeRegion === item, \n hoverItem: _vm.hoverRegion === item },attrs:{\"label\":item,\"checked\":true},on:{\"change\":function($event){return _vm.visibilityToggle(item, $event)}},nativeOn:{\"click\":function($event){return _vm.itemClicked(item, $event)},\"mouseover\":function($event){return _vm.checkboxHover(item)}}},[_c('el-color-picker',{class:{ 'show-picker' : _vm.showColourPicker },attrs:{\"value\":_vm.getColour(item),\"size\":\"small\",\"popper-class\":_vm.myPopperClass},on:{\"change\":function($event){return _vm.setColour(item, $event)}}}),_vm._v(\" \"+_vm._s(item)+\" \")],1)],1)])}),1)])],1),_c('div',{staticClass:\"drawer-button\",class:{ open: _vm.drawerOpen, close: !_vm.drawerOpen },on:{\"click\":_vm.toggleDrawer}},[_c('i',{staticClass:\"el-icon-arrow-left\"})])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","import arrayLikeToArray from \"./arrayLikeToArray\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}","import arrayLikeToArray from \"./arrayLikeToArray\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import arrayWithoutHoles from \"./arrayWithoutHoles\";\nimport iterableToArray from \"./iterableToArray\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray\";\nimport nonIterableSpread from \"./nonIterableSpread\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","<template>\n <div\n class=\"traditional-location\"\n :class=\"{ open: drawerOpen, close: !drawerOpen }\"\n >\n <div class=\"traditional-container\">\n <el-row>\n <el-col :span=\"12\">\n <div class=\"regions-display-text\">\n Regions\n </div>\n </el-col>\n <el-col :span=\"12\">\n <el-checkbox\n v-model=\"checkAll\"\n class=\"all-checkbox\"\n :indeterminate=\"isIndeterminate\"\n @change=\"handleCheckAllChange\"\n >\n Display all\n </el-checkbox>\n </el-col>\n </el-row>\n <el-checkbox-group\n v-model=\"checkedItems\"\n size=\"small\"\n class=\"checkbox-group\"\n @change=\"handleCheckedItemsChange\"\n >\n <div class=\"checkbox-group-inner\">\n <el-row\n v-for=\"item in sortedPrimitiveGroups\"\n :key=\"item\"\n :label=\"item\"\n >\n <div class=\"checkbox-container\">\n <el-checkbox\n class=\"my-checkbox\"\n :label=\"item\"\n :checked=\"true\"\n :class=\"{ activeItem: activeRegion === item, \n hoverItem: hoverRegion === item }\"\n @click.native=\"itemClicked(item, $event)\"\n @change=\"visibilityToggle(item, $event)\"\n @mouseover.native=\"checkboxHover(item)\"\n >\n <el-color-picker\n :class=\"{ 'show-picker' : showColourPicker }\"\n :value=\"getColour(item)\"\n size=\"small\"\n :popper-class=\"myPopperClass\"\n @change=\"setColour(item, $event)\"\n />\n {{ item }}\n </el-checkbox>\n </div>\n </el-row>\n </div>\n </el-checkbox-group>\n </div>\n <div\n class=\"drawer-button\"\n :class=\"{ open: drawerOpen, close: !drawerOpen }\"\n @click=\"toggleDrawer\"\n >\n <i class=\"el-icon-arrow-left\" />\n </div>\n </div>\n</template>\n\n<script>\n/* eslint-disable no-alert, no-console */\nimport Vue from \"vue\";\nimport { Checkbox, CheckboxGroup, ColorPicker, Row } from \"element-ui\";\nimport lang from \"element-ui/lib/locale/lang/en\";\nimport locale from \"element-ui/lib/locale\";\n\nconst orderBy = require(\"lodash/orderBy\");\nconst uniq = require(\"lodash/uniq\");\nlocale.use(lang);\nVue.use(Checkbox);\nVue.use(CheckboxGroup);\nVue.use(ColorPicker);\nVue.use(Row);\n\n/**\n * A vue component for toggling visibility of various regions.\n */\nexport default {\n name: \"TraditionalControls\",\n props: {\n /**\n * @ignore\n */\n module: {\n type: Object,\n default: undefined\n },\n /**\n * Enable/disable colour picker\n */\n showColourPicker: Boolean\n },\n data: function() {\n return {\n checkAll: true,\n isIndeterminate: false,\n checkedItems: [],\n sortedPrimitiveGroups: [],\n activeRegion: \"\",\n hoverRegion: \"\",\n myPopperClass: \"hide-scaffold-colour-popup\",\n drawerOpen: true\n };\n },\n watch: {\n showColourPicker: {\n immediate: true,\n handler: function() {\n if (this.showColourPicker) this.myPopperClass = \"showPicker\";\n else this.myPopperClass = \"hide-scaffold-colour-popup\";\n }\n }\n },\n created: function() {\n let tmpArray = this.module.sceneData.geometries.concat(\n this.module.sceneData.lines\n );\n tmpArray = tmpArray.concat(this.module.sceneData.glyphsets);\n tmpArray = uniq(tmpArray.concat(this.module.sceneData.pointset));\n this.sortedPrimitiveGroups = orderBy(tmpArray);\n this.module.addOrganPartAddedCallback(this.organsAdded);\n this.module.graphicsHighlight.selectColour = 0x444444;\n },\n destroyed: function() {\n this.sortedPrimitiveGroups = undefined;\n },\n methods: {\n /**\n * This is called when a new organ is read into the scene.\n */\n organsAdded: function(name) {\n if (name && name != \"\") {\n let tmpArray = uniq(this.sortedPrimitiveGroups.concat([name]));\n tmpArray = orderBy(tmpArray);\n const index = tmpArray.indexOf(undefined);\n if (index > -1) {\n tmpArray.splice(index, 1);\n }\n this.sortedPrimitiveGroups = tmpArray;\n }\n },\n /**\n * Select a region by its name.\n */\n changeActiveByName: function(name, propagate) {\n let targetObject = this.getFirstZincObjectWithGroupName(name);\n if (targetObject && targetObject.getVisibility()) {\n this.activeRegion = name;\n this.$emit(\"object-selected\", targetObject, propagate);\n } else {\n this.removeActive(propagate);\n }\n this.removeHover(propagate);\n },\n /**\n * Hover a region by its name.\n */\n changeHoverByName: function(name, propagate) {\n let targetObject = this.getFirstZincObjectWithGroupName(name);\n if (targetObject) {\n this.hoverRegion = name;\n this.$emit(\"object-hovered\", targetObject, propagate);\n } else {\n this.removeHover(propagate);\n }\n },\n /**\n * Unselect the current selected region.\n */\n removeActive: function(propagate) {\n this.activeRegion = \"\";\n this.$emit(\"object-selected\", undefined, propagate);\n },\n /**\n * Unselect the current hover region.\n */\n removeHover: function(propagate) {\n this.hoverRegion = \"\";\n this.$emit(\"object-hovered\", undefined, propagate);\n },\n /**\n * Reset the controls.\n */\n clear: function() {\n this.sortedPrimitiveGroups = [];\n this.checkedItems = [];\n this.checkAll = true;\n this.isIndeterminate = false;\n this.activeRegion = \"\";\n this.hoverRegion = \"\";\n this.$emit(\"object-selected\", undefined);\n },\n getFirstZincObjectWithGroupName: function(name) {\n if (this.module && this.module.scene) {\n let array = this.module.scene.findGeometriesWithGroupName(name);\n if (array.length > 0) return array[0];\n array = this.module.scene.findGlyphsetsWithGroupName(name);\n if (array.length > 0) return array[0];\n array = this.module.scene.findLinesWithGroupName(name);\n if (array.length > 0) return array[0];\n array = this.module.scene.findPointsetsWithGroupName(name);\n if (array.length > 0) return array[0];\n }\n return undefined;\n },\n getColour: function(name) {\n let graphic = this.getFirstZincObjectWithGroupName(name);\n if (graphic) {\n let hex = graphic.getColourHex();\n if (hex) return \"#\" + hex;\n }\n return \"#FFFFFF\";\n },\n setColour: function(name, value) {\n let graphic = this.getFirstZincObjectWithGroupName(name);\n if (graphic) {\n let hexString = value.replace(\"#\", \"0x\");\n graphic.setColourHex(hexString);\n }\n },\n checkboxHover: function(name) {\n this.changeHoverByName(name, true);\n },\n itemClicked: function(name, event) {\n if (\n !(\n event.target.classList.contains(\"el-checkbox__inner\") ||\n event.target.classList.contains(\"el-checkbox__original\")\n )\n ) {\n this.changeActiveByName(name, true);\n event.preventDefault();\n }\n },\n handleCheckedItemsChange: function() {\n let unnamed = this.checkedItems.includes(undefined) ? true: false;\n let checkedCount = this.checkedItems.length;\n if (unnamed)\n checkedCount--;\n this.checkAll = checkedCount === this.sortedPrimitiveGroups.length;\n this.isIndeterminate =\n checkedCount > 0 && checkedCount < this.sortedPrimitiveGroups.length;\n },\n handleCheckAllChange(val) {\n this.checkedItems = val ? [...this.sortedPrimitiveGroups] : [];\n this.isIndeterminate = false;\n for (let i = 0; i < this.sortedPrimitiveGroups.length; i++) {\n this.visibilityToggle(this.sortedPrimitiveGroups[i], this.checkAll);\n }\n },\n viewAll: function() {\n this.module.viewAll();\n },\n visibilityToggle: function(item, event) {\n this.module.changeOrganPartsVisibility(item, event);\n if (event == false) {\n if (this.activeRegion === item) {\n this.removeActive(true);\n }\n if (this.hoverRegion === item) {\n this.removeHover(true);\n }\n }\n },\n toggleDrawer: function() {\n this.drawerOpen = !this.drawerOpen;\n this.$emit(\"drawer-toggled\", this.drawerOpen);\n },\n getState: function() {\n if (this.checkAll) {\n return { checkAll: true };\n }\n let checkedItems = [...this.checkedItems];\n const index = checkedItems.indexOf(undefined);\n if (index > -1) {\n checkedItems.splice(index, 1);\n }\n return { checkedItems: checkedItems };\n },\n setState: function(state) {\n if (state) {\n if (state.checkAll) {\n this.checkedItems = [...this.sortedPrimitiveGroups];\n for (let i = 0; i < this.sortedPrimitiveGroups.length; i++) {\n this.module.changeOrganPartsVisibility(\n this.sortedPrimitiveGroups[i],\n true\n );\n }\n } else if (state.checkedItems) { \n this.checkedItems = [...state.checkedItems];\n for (let i = 0; i < this.sortedPrimitiveGroups.length; i++) {\n\n let visible = this.checkedItems.includes(\n this.sortedPrimitiveGroups[i]);\n this.module.changeOrganPartsVisibility(\n this.sortedPrimitiveGroups[i],\n visible\n );\n }\n }\n }\n this.handleCheckedItemsChange();\n }\n }\n};\n</script>\n\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\n<style scoped lang=\"scss\">\n@import \"~element-ui/packages/theme-chalk/src/checkbox\";\n@import \"~element-ui/packages/theme-chalk/src/checkbox-group\";\n@import \"~element-ui/packages/theme-chalk/src/color-picker\";\n@import \"~element-ui/packages/theme-chalk/src/row\";\n\n.checkbox-container {\n display: flex;\n cursor: pointer;\n}\n\n.traditional-location {\n position: absolute;\n bottom: 0px;\n transition: all 1s ease;\n\n &:focus{\n outline: none;\n }\n &.open {\n left: 0px;\n .traditional-container {\n opacity: 1;\n }\n }\n &.close {\n left: -298px;\n .traditional-container {\n pointer-events:none;\n opacity: 0;\n }\n }\n}\n\n.traditional-container {\n transition: all 1s ease;\n float: left;\n padding-left: 16px;\n padding-right: 18px;\n max-height: calc(100% - 154px);\n text-align: left;\n overflow: none;\n border: 1px solid rgb(220, 223, 230);\n padding-top: 7px;\n padding-bottom: 16px;\n background: #ffffff;\n}\n\n.regions-display-text {\n width: 59px;\n height: 20px;\n color: rgb(48, 49, 51);\n font-size: 14px;\n font-weight: normal;\n line-height: 20px;\n margin-left: 8px;\n}\n\n.all-checkbox {\n float: right;\n}\n\n.checkbox-group {\n width: 260px;\n border: 1px solid rgb(144, 147, 153);\n border-radius: 4px;\n background: #ffffff;\n margin-top: 6px;\n}\n\n.checkbox-group-inner {\n padding: 18px;\n max-height: 240px;\n min-height: 130px;\n overflow: auto;\n scrollbar-color: #c0c4cc rgba(1, 1, 1, 0);\n scrollbar-width: thin;\n\n &::-webkit-scrollbar {\n width: 4px;\n }\n\n &::-webkit-scrollbar-thumb {\n border-radius: 10px;\n box-shadow: inset 0 0 6px #c0c4cc;\n }\n}\n\n::v-deep .el-checkbox__input {\n &.is-indeterminate, &.is-checked {\n .el-checkbox__inner {\n background-color: $app-primary-color;\n border-color: $app-primary-color;\n }\n }\n}\n\n::v-deep .el-color-picker__color {\n border: 1px solid $app-primary-color;\n}\n\n::v-deep .el-checkbox__label {\n padding-left: 5px;\n color: $app-primary-color !important;\n font-size: 12px;\n font-weight: 500;\n letter-spacing: 0px;\n line-height: 14px;\n}\n\n.activeItem {\n background-color: #bbb !important;\n}\n\n.my-checkbox {\n background-color: #fff;\n width: 100%;\n\n ::v-deep .el-color-picker {\n height: 16px !important;\n top: 3px;\n }\n\n ::v-deep .el-color-picker__trigger {\n margin-left: 8px;\n margin-right: 8px;\n padding: 0px;\n height: 16px;\n width: 16px;\n border: 0px;\n }\n\n}\n\n.hoverItem {\n background-color: #eee !important;\n}\n\n::v-deep .el-color-picker__icon {\n &.el-icon-arrow-down {\n display: none;\n }\n}\n\n::v-deep .show-picker {\n .el-color-picker__icon {\n &.el-icon-arrow-down {\n display: block;\n }\n }\n}\n\n::v-deep .my-drawer {\n background: rgba(0, 0, 0, 0);\n box-shadow: none;\n}\n\n.drawer {\n ::v-deep .el-drawer:focus {\n outline: none;\n }\n}\n\n.open-drawer {\n width: 20px;\n height: 40px;\n z-index: 8;\n position: absolute;\n left: 0px;\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.06);\n border: solid 1px #e4e7ed;\n background-color: #f7faff;\n text-align: center;\n vertical-align: middle;\n cursor: pointer;\n pointer-events: auto;\n}\n\n.drawer-button {\n float: left;\n width: 20px;\n height: 40px;\n z-index: 8;\n margin-top: calc(50% - 52px);\n border: solid 1px #e4e7ed;\n border-left: 0;\n background-color: #ffffff;\n text-align: center;\n vertical-align: middle;\n cursor: pointer;\n pointer-events: auto;\n}\n\n.drawer-button {\n i {\n margin-top: 12px;\n color: $app-primary-color;\n transition-delay: 0.9s;\n }\n &.open {\n i {\n transform: rotate(0deg) scaleY(2.5);\n }\n }\n &.close {\n i {\n transform: rotate(180deg) scaleY(2.5); \n }\n }\n}\n\n.drawer-button.open i {\n transform: rotate(0deg) scaleY(2.5);\n}\n\n.drawer-button.close i {\n transform: rotate(180deg) scaleY(2.5);\n}\n</style>\n\n<style>\n.hide-scaffold-colour-popup {\n display: none;\n}\n</style>\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TraditionalControls.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TraditionalControls.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TraditionalControls.vue?vue&type=template&id=b0ace276&scoped=true&\"\nimport script from \"./TraditionalControls.vue?vue&type=script&lang=js&\"\nexport * from \"./TraditionalControls.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TraditionalControls.vue?vue&type=style&index=0&id=b0ace276&scoped=true&lang=scss&\"\nimport style1 from \"./TraditionalControls.vue?vue&type=style&index=1&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b0ace276\",\n null\n \n)\n\nexport default component.exports","<template>\n <div\n ref=\"scaffoldContainer\"\n v-loading=\"loading\"\n class=\"scaffold-container\"\n element-loading-text=\"Loading...\"\n element-loading-spinner=\"el-icon-loading\"\n element-loading-background=\"rgba(0, 0, 0, 0.3)\"\n >\n <SvgSpriteColor />\n <div\n id=\"organsDisplayArea\"\n ref=\"display\"\n tabindex=\"-1\"\n style=\"height:100%;width:100%;\"\n @keydown.66=\"backgroundChangeCallback\"\n />\n <div v-show=\"displayUI && !isTransitioning\">\n <el-popover\n v-if=\"displayWarning\"\n ref=\"warningPopover\"\n v-model=\"hoverVisabilities[6].value\"\n :content=\"warningMessage\"\n placement=\"right\"\n :append-to-body=\"false\"\n trigger=\"manual\"\n popper-class=\"warning-popper right-popper non-selectable\"\n />\n <i\n v-if=\"displayWarning\"\n v-popover:warningPopover\n class=\"el-icon-warning warning-icon\"\n @mouseover=\"showToolitip(6)\"\n @mouseout=\"hideToolitip(6)\"\n >\n <span class=\"warning-text\">Beta</span>\n </i>\n <el-popover\n ref=\"checkBoxPopover\"\n v-model=\"hoverVisabilities[5].value\"\n content=\"Change region visibility\"\n placement=\"right\"\n :append-to-body=\"false\"\n trigger=\"manual\"\n popper-class=\"scaffold-popper right-popper non-selectable\"\n />\n <TraditionalControls\n ref=\"traditionalControl\"\n v-popover:checkBoxPopover\n :help-mode=\"helpMode\"\n :module=\"$module\"\n :show-colour-picker=\"showColourPicker\"\n @object-selected=\"objectSelected\"\n @object-hovered=\"objectHovered\"\n @drawer-toggled=\"drawerToggled\"\n />\n <div class=\"opacity-box\">\n <OpacityControls ref=\"opacityControl\" />\n </div>\n <el-popover\n v-if=\"sceneData.timeVarying\"\n ref=\"sliderPopover\"\n v-model=\"hoverVisabilities[4].value\"\n content=\"Move the slider to animate the region\"\n placement=\"top\"\n :append-to-body=\"false\"\n trigger=\"manual\"\n popper-class=\"scaffold-popper top-popper non-selectable\"\n />\n <div\n v-if=\"sceneData.timeVarying\"\n v-popover:sliderPopover\n class=\"time-slider-container\"\n :class=\"[ minimisedSlider ? 'minimised' : '', sliderPosition]\"\n >\n <el-tabs type=\"card\">\n <el-tab-pane label=\"Animate scaffold\">\n <el-row class=\"tab-content\">\n <SvgIcon\n v-if=\"isPlaying\"\n icon=\"pause\"\n class=\"icon-button video-button\"\n @click.native=\"play(false)\"\n />\n <SvgIcon\n v-else\n icon=\"play\"\n class=\"video-button icon-button\"\n @click.native=\"play(true)\"\n />\n <el-slider\n :min=\"0\"\n :max=\"timeMax\"\n :value=\"sceneData.currentTime / 100 * timeMax\"\n :step=\"0.1\"\n tooltip-class=\"time-slider-tooltip\"\n class=\"slider\"\n :format-tooltip=\"formatTooltip\"\n :marks=\"timeStamps\"\n @input=\"timeChange($event)\"\n />\n </el-row>\n </el-tab-pane>\n <el-tab-pane label=\"Animation data\">\n <el-row class=\"tab-content\">\n <div class=\"animation-data\">\n Original duration:\n <div class=\"purple\">\n {{ orginalDuration }}\n </div>\n </div>\n <div class=\"animation-data\">\n Animation duration:\n <div class=\"purple\">\n {{ animateDuration }}\n </div>\n </div>\n <div class=\"animation-data\">\n Playback speed\n <el-select\n :popper-append-to-body=\"true\"\n :value=\"currentSpeed\"\n placeholder=\"Select\"\n class=\"select-box\"\n popper-class=\"scaffold_viewer_dropdown\"\n @change=\"speedChanged($event)\"\n >\n <el-option\n v-for=\"item in playSpeed\"\n :key=\"item.value\"\n :label=\"item.label\"\n :value=\"item.value\"\n />\n </el-select>\n </div>\n </el-row>\n </el-tab-pane>\n </el-tabs>\n </div>\n <div class=\"bottom-right-control\">\n <el-popover\n v-model=\"hoverVisabilities[0].value\"\n content=\"Zoom in\"\n placement=\"left\"\n :append-to-body=\"false\"\n trigger=\"manual\"\n popper-class=\"scaffold-popper left-popper non-selectable\"\n >\n <SvgIcon\n slot=\"reference\"\n icon=\"zoomIn\"\n class=\"icon-button zoomIn\"\n @click.native=\"zoomIn()\"\n @mouseover.native=\"showToolitip(0)\"\n @mouseout.native=\"hideToolitip(0)\"\n />\n </el-popover>\n <el-popover\n v-model=\"hoverVisabilities[1].value\"\n content=\"Zoom out\"\n placement=\"top-end\"\n :append-to-body=\"false\"\n trigger=\"manual\"\n popper-class=\"scaffold-popper popper-zoomout non-selectable\"\n >\n <SvgIcon\n slot=\"reference\"\n icon=\"zoomOut\"\n class=\"icon-button zoomOut\"\n @click.native=\"zoomOut()\"\n @mouseover.native=\"showToolitip(1)\"\n @mouseout.native=\"hideToolitip(1)\"\n />\n </el-popover>\n <el-popover\n v-model=\"hoverVisabilities[2].value\"\n placement=\"top\"\n :append-to-body=\"false\"\n trigger=\"manual\"\n popper-class=\"scaffold-popper non-selectable\"\n >\n <div>\n Fit to\n <br>\n window\n </div>\n <SvgIcon\n slot=\"reference\"\n icon=\"fitWindow\"\n class=\"icon-button fitWindow\"\n @click.native=\"fitWindow()\"\n @mouseover.native=\"showToolitip(2)\"\n @mouseout.native=\"hideToolitip(2)\"\n />\n </el-popover>\n </div>\n <el-popover\n ref=\"backgroundPopover\"\n placement=\"top-start\"\n width=\"128\"\n :append-to-body=\"false\"\n trigger=\"click\"\n popper-class=\"background-popper non-selectable\"\n >\n <el-row class=\"backgroundText\">\n Change background\n </el-row>\n <el-row class=\"backgroundChooser\">\n <div\n v-for=\"item in availableBackground\"\n :key=\"item\"\n :class=\"['backgroundChoice', item, item == currentBackground ? 'active' :'']\"\n @click=\"backgroundChangeCallback(item)\"\n />\n </el-row>\n </el-popover>\n <el-popover\n v-model=\"hoverVisabilities[3].value\"\n content=\"Change background color\"\n placement=\"right\"\n :append-to-body=\"false\"\n trigger=\"manual\"\n popper-class=\"scaffold-popper right-popper non-selectable\"\n >\n <SvgIcon\n slot=\"reference\"\n v-popover:backgroundPopover\n icon=\"changeBckgd\"\n class=\"icon-button background-colour\"\n :class=\"{ open: drawerOpen, close: !drawerOpen }\"\n @mouseover.native=\"showToolitip(3)\"\n @mouseout.native=\"hideToolitip(3)\"\n />\n </el-popover>\n </div>\n </div>\n</template>\n\n<script>\n/* eslint-disable no-alert, no-console */\nimport Vue from \"vue\";\nimport OpacityControls from \"./OpacityControls\";\nimport TraditionalControls from \"./TraditionalControls\";\nimport { SvgIcon, SvgSpriteColor } from \"@abi-software/svg-sprite\";\n\nimport {\n Col,\n Loading,\n Option,\n Popover,\n Row,\n Select,\n Slider,\n TabPane,\n Tabs\n} from \"element-ui\";\nimport lang from \"element-ui/lib/locale/lang/en\";\nimport locale from \"element-ui/lib/locale\";\n\nlocale.use(lang);\nVue.use(Col);\nVue.use(Loading.directive);\nVue.use(Option);\nVue.use(Popover);\nVue.use(Row);\nVue.use(Select);\nVue.use(Slider);\nVue.use(TabPane);\nVue.use(Tabs);\n\nconst OrgansViewer = require(\"physiomeportal/src/modules/organsRenderer\")\n .OrgansViewer;\nconst EventNotifier = require(\"physiomeportal/src/utilities/eventNotifier\")\n .EventNotifier;\n\n/**\n * A vue component of the scaffold viewer.\n *\n * @requires ./OpacityControls.vue\n * @requires ./TraditionalControls.vue\n */\nexport default {\n name: \"ScaffoldVuer\",\n components: {\n OpacityControls,\n SvgIcon,\n SvgSpriteColor,\n TraditionalControls\n },\n props: {\n /**\n * URL of the zincjs metadata. This value will be ignored if a valid\n * state prop is also provided.\n * If the url needs to be updated with state present, please use\n * the setURL method.\n */\n url: {\n type: String,\n default: \"\"\n },\n /**\n * Show the colour control of set to true.\n */\n showColourPicker: {\n type: Boolean,\n default: false\n },\n /**\n * Flag to show/hide the UI.\n */\n displayUI: {\n type: Boolean,\n default: true\n },\n /**\n * Display all graphics at start.\n *\n * This setting only works when traditional is set to false.\n */\n displayAtStartUp: {\n type: Boolean,\n default: true\n },\n /**\n * Use for toggling the help tooltips.\n */\n helpMode: {\n type: Boolean,\n default: false\n },\n /**\n * Use for show/display beta warning icon.\n */\n displayWarning: {\n type: Boolean,\n default: true\n },\n /**\n * Warning message for the hovered over text\n * on the warning icon.\n */\n warningMessage: {\n type: String,\n default: \"Beta feature - under active development\"\n },\n /**\n * Show/hide pickable markers for regions.\n */\n displayMarkers: {\n type: Boolean,\n default: true\n },\n /**\n * Show/hide minimap.\n */\n displayMinimap: {\n type: Boolean,\n default: false\n },\n /**\n * Settings for minimap position, size and alignment.\n */\n minimapSettings: {\n type: Object,\n default: function() {\n return {\n x_offset: 16,\n y_offset: 16,\n width: 128,\n height: 128,\n align: \"top-right\"\n };\n }\n },\n /**\n * State containing state of the scaffold.\n */\n state: {\n type: Object,\n default: undefined\n },\n /**\n * Optional prop for the name of the region to focus on,\n * this option is ignored if state or viewURL is also provided.\n */\n region: {\n type: String,\n default: \"\"\n },\n /**\n * Optional prop for an URL of containing information of a viewport.\n * This option is ignored if state is also provided.\n * It will use the provided URL as base if a relative parth is provided.\n */\n viewURL: {\n type: String,\n default: \"\"\n },\n /**\n * Settings for turning on/off rendering\n */\n render: {\n type: Boolean,\n default: true\n }\n },\n data: function() {\n return {\n sceneData: this.$module.sceneData,\n isPlaying: false,\n /**\n * This is set when scene is transitioning.\n */\n isTransitioning: false,\n tooltipAppendToBody: false,\n hoverVisabilities: [\n { value: false },\n { value: false },\n { value: false },\n { value: false },\n { value: false },\n { value: false },\n { value: false }\n ],\n inHelp: false,\n loading: false,\n duration: 3000,\n drawerOpen: true,\n currentBackground: \"white\",\n availableBackground: [\"white\", \"lightskyblue\", \"black\"],\n minimisedSlider: false,\n sliderPosition: \"\",\n timeMax: 100,\n orginalDuration: \"\",\n animateDuration: \"6secs\",\n playSpeed: [\n {\n value: 0.1,\n label: \"0.1x\"\n },\n {\n value: 0.5,\n label: \"0.5x\"\n },\n {\n value: 1,\n label: \"1x\"\n },\n {\n value: 2,\n label: \"2x\"\n },\n {\n value: 5,\n label: \"5x\"\n },\n {\n value: 10,\n label: \"10x\"\n }\n ],\n currentSpeed: 1,\n timeStamps: {}\n };\n },\n watch: {\n url: {\n handler: function(newValue) {\n if (this.state === undefined || this.state.url === undefined)\n this.setURL(newValue);\n },\n immediate: true\n },\n region: {\n handler: function(region) {\n if (!(this.state || this.viewURL)) this.setFocusedRegion(region);\n },\n immediate: true\n },\n state: {\n handler: function(state) {\n this.setState(state);\n },\n immediate: true,\n deep: true\n },\n viewURL: {\n handler: function(viewURL) {\n this.updateViewURL(viewURL);\n },\n immediate: true\n },\n helpMode: function(val) {\n this.setHelpMode(val);\n },\n displayMarkers: function(val) {\n this.$module.scene.displayMarkers = val;\n },\n displayMinimap: function(val) {\n this.$module.scene.displayMinimap = val;\n },\n \"sceneData.currentTime\": function() {\n /**\n * Triggers when scene time changes.\n *\n * @property {number} time Current build-in time of scene.\n * of selected object.\n */\n this.$emit(\"timeChanged\", this.sceneData.currentTime);\n },\n duration: function() {\n this.$module.scene.setDuration(this.duration);\n },\n minimapSettings: {\n deep: true,\n handler: \"updateMinimapScissor\"\n },\n render: function(val) {\n this.toggleRendering(val);\n }\n },\n beforeCreate: function() {\n this.$module = new OrgansViewer();\n this.isReady = false;\n this.selectedObject = undefined;\n this.hoveredObject = undefined;\n this.currentBackground = \"white\";\n this._currentURL = undefined;\n this.availableBackground = [\"white\", \"black\", \"lightskyblue\"];\n },\n mounted: function() {\n let eventNotifier = new EventNotifier();\n eventNotifier.subscribe(this, this.eventNotifierCallback);\n this.$module.addNotifier(eventNotifier);\n this.$module.addOrganPartAddedCallback(this.organsAdded);\n this.$module.initialiseRenderer(this.$refs.display);\n this.toggleRendering(this.render);\n this.$module.toolTip = undefined;\n this.ro = new ResizeObserver(this.adjustLayout).observe(\n this.$refs.scaffoldContainer\n );\n this.defaultRate = this.$module.getPlayRate();\n },\n beforeDestroy: function() {\n if (this.ro) this.ro.disconnect();\n this.$module.destroy();\n this.$module = undefined;\n },\n methods: {\n /**\n * This is called when a new organ is read into the scene.\n */\n organsAdded: function() {\n this.loading = false;\n },\n /**\n * This is called when Change backgspeedround colour button\n * is pressed an causes the backgrouColornd colour to be changed\n * to one of the three preset colour: white, black and\n * lightskyblue.\n */\n backgroundChangeCallback: function(colour) {\n this.currentBackground = colour;\n this.$module.zincRenderer\n .getThreeJSRenderer()\n .setClearColor(this.currentBackground, 1);\n },\n /**\n * This is called by captueeScreenshot and after the last render\n * loop, it download a screenshot of the current scene with no UI.\n */\n captureScreenshotCallback: function() {\n //Remove the callback, only needs to happen once\n this.$module.zincRenderer.removePostRenderCallbackFunction(\n this.captureID\n );\n let screenshot = this.$module.zincRenderer\n .getThreeJSRenderer()\n .domElement.toDataURL(\"image/png\");\n let hrefElement = document.createElement(\"a\");\n document.body.append(hrefElement);\n if (!this.captureFilename) hrefElement.download = `screenshot.png`;\n else hrefElement.download = this.captureFilename;\n hrefElement.href = screenshot;\n hrefElement.click();\n hrefElement.remove();\n },\n /**\n * Function for capturing a screenshot of the current rendering.\n *\n * @param {String} filename filename given to the screenshot.\n *\n * @public\n */\n captureScreenshot: function(filename) {\n this.captureFilename = filename;\n this.captureID = this.$module.zincRenderer.addPostRenderCallbackFunction(\n this.captureScreenshotCallback\n );\n },\n formatTooltip(val) {\n if (this.timeMax >= 1000) {\n if (val) {\n let sec = ((val % 60000) / 1000).toFixed(2) + \"s\";\n let min = val > 60000 ? (val / 60000).toFixed(0) + \"m \" : \"\";\n return min + sec;\n }\n }\n return val ? val.toFixed(2) + \" ms\" : \"0 ms\";\n },\n /**\n * Function to reset the view to default.\n * Also called when the associated button is pressed.\n *\n * @public\n */\n fitWindow: function() {\n if (this.$module.scene) {\n this.$module.scene.viewAll();\n }\n },\n /**\n * Function to zoom in.\n * Also called when the associated button is pressed.\n *\n * @public\n */\n zoomIn: function() {\n if (this.$module.scene) {\n this.$module.scene.changeZoomByScrollRateUnit(-1);\n }\n },\n /**\n * Function to zoom out.\n * Also called when the associated button is pressed.\n *\n * @public\n */\n zoomOut: function() {\n if (this.$module.scene) {\n this.$module.scene.changeZoomByScrollRateUnit(1);\n }\n },\n /**\n * Function to change the current play speed.\n *\n * @public\n */\n speedChanged: function(speed) {\n this.currentSpeed = speed;\n this.$module.setPlayRate(this.defaultRate * this.currentSpeed);\n },\n /**\n * Function used to stop the free spin\n *\n * @public\n */\n stopFreeSpin: function() {\n let cameracontrol = this.$module.scene.getZincCameraControls();\n cameracontrol.stopAutoTumble();\n this.isTransitioning = false;\n },\n /**\n * Focus on named region\n */\n viewRegion: function(name) {\n if (name && name != \"\" && this.$module.scene) {\n let objects = this.$module.scene.findObjectsWithGroupName(name);\n let box = this.$module.scene.getBoundingBoxOfZincObjects(objects);\n if (box) {\n this.$module.scene.viewAllWithBoundingBox(box);\n }\n }\n },\n setFocusedRegion: function(name) {\n if (name) {\n if (this.isReady) {\n this.viewRegion(name);\n } else {\n this.$module.setFinishDownloadCallback(\n this.setURLFinishCallback({ region: name })\n );\n }\n }\n },\n updateViewURL: function(viewURL) {\n if (viewURL) {\n if (this.isReady) {\n const url = new URL(viewURL, this.url);\n this.$module.scene.loadViewURL(url);\n } else {\n this.$module.setFinishDownloadCallback(\n this.setURLFinishCallback({ viewURL: viewURL })\n );\n }\n }\n },\n /**\n * Function used to rotate the scene.\n * Also called when the associated button is pressed.\n *\n * @public\n */\n freeSpin: function() {\n if (this.$module.scene) {\n let cameracontrol = this.$module.scene.getZincCameraControls();\n this.isTransitioning = true;\n cameracontrol.enableAutoTumble();\n cameracontrol.autoTumble([1.0, 0.0], Math.PI, true);\n setTimeout(this.stopFreeSpin, 4000);\n }\n },\n /**\n * Callback when a region is selected/highlighted.\n * It will also update other controls.\n */\n eventNotifierCallback: function(event) {\n if (event.eventType == 1) {\n if (this.$refs.traditionalControl) {\n if (event.identifiers[0]) {\n let id = event.identifiers[0].data.id\n ? event.identifiers[0].data.id\n : event.identifiers[0].data.group;\n this.$refs.traditionalControl.changeActiveByName(id, true);\n } else {\n this.$refs.traditionalControl.removeActive(true);\n }\n }\n /**\n * Triggers when an object has been selected\n *\n * @property {array} identifiers array of identifiers\n * of selected object.\n */\n this.$emit(\"scaffold-selected\", event.identifiers);\n } else if (event.eventType == 2) {\n if (this.$refs.traditionalControl) {\n if (event.identifiers[0]) {\n let id = event.identifiers[0].data.id\n ? event.identifiers[0].data.id\n : event.identifiers[0].data.group;\n this.$refs.traditionalControl.changeHoverByName(id, true);\n } else this.$refs.traditionalControl.removeHover(true);\n }\n /**\n * Triggers when an object has been highlighted\n *\n * @property {array} identifiers array of identifiers\n * of highlighted object.\n */\n this.$emit(\"scaffold-highlighted\", event.identifiers);\n }\n },\n /**\n * Get the coordinates of the current selected region.\n *\n * @public\n */\n getCoordinatesOfSelected: function() {\n if (this.selectedObject) {\n return this.$module.scene.getObjectsScreenXY([this.selectedObject]);\n }\n return undefined;\n },\n /**\n * Return an object containing the window coordinates of the\n * current selected region which will be updated after each render\n * loop.\n *\n * @public\n */\n getDynamicSelectedCoordinates: function() {\n return this.$module.selectedScreenCoordinates;\n },\n /**\n * Callback when time is changed through the UI.\n */\n timeChange: function(event) {\n let normalizedTime = (event / this.timeMax) * 100;\n if (normalizedTime != this.sceneData.currentTime)\n this.$module.updateTime(normalizedTime);\n },\n /**\n * A callback used by children components. Set the selected zinc object\n *\n * @param {object} object Zinc object\n */\n objectSelected: function(object, propagate) {\n if (object !== this.selectedObject) {\n this.selectedObject = object;\n this.$refs.opacityControl.setObject(this.selectedObject);\n if (object) this.$module.setSelectedByZincObject(object, propagate);\n else this.$module.setSelectedByObjects([], propagate);\n }\n },\n /**\n * A callback used by children components. Set the highlighted zinc object\n *\n * @param {object} object Zinc object\n */\n objectHovered: function(object, propagate) {\n if (object !== this.hoveredObject) {\n this.hoveredObject = object;\n if (object) this.$module.setHighlightedByZincObject(object, propagate);\n else this.$module.setHighlightedByObjects([], propagate);\n }\n },\n /**\n * Set the selected by name.\n *\n * @param {name} name Name of the region\n */\n changeActiveByName: function(name, propagate) {\n if (name === undefined)\n this.$refs.traditionalControl.removeActive(propagate);\n else\n this.$refs.traditionalControl.changeActiveByName(name, propagate);\n },\n /**\n * Set the highlighted by name.\n *\n * @param {name} name Name of the region\n */\n changeHighlightedByName: function(name, propagate) {\n if (name === undefined)\n this.$refs.traditionalControl.removeHover(propagate);\n else\n this.$refs.traditionalControl.changeHoverByName(name, propagate);\n },\n /**\n * Start the animation.\n *\n * @param {object} object Zinc object\n */\n play: function(flag) {\n this.$module.playAnimation(flag);\n this.isPlaying = flag;\n },\n /**\n * Function to toggle on/off overlay help.\n */\n setHelpMode: function(helpMode) {\n if (helpMode) {\n this.inHelp = true;\n this.hoverVisabilities.forEach(item => {\n item.value = true;\n });\n } else {\n this.inHelp = false;\n this.hoverVisabilities.forEach(item => {\n item.value = false;\n });\n }\n },\n /**\n * This is called when mouse cursor enters supported elements\n * with help tootltips.\n */\n showToolitip: function(tooltipNumber) {\n if (!this.inHelp) {\n this.tooltipWait = setTimeout(() => {\n this.hoverVisabilities[tooltipNumber].value = true;\n }, 500);\n }\n },\n /**\n * This is called when mouse cursor exits supported element..\n */\n hideToolitip: function(tooltipNumber) {\n if (!this.inHelp) {\n this.hoverVisabilities[tooltipNumber].value = false;\n clearTimeout(this.tooltipWait);\n }\n },\n /**\n * Called when minimap settings has changed. Pass the\n * parameters to ZincJS and marked it for update.\n */\n updateMinimapScissor: function() {\n Object.keys(this.minimapSettings).forEach(key => {\n this.$module.scene.minimapScissor[key] = this.minimapSettings[key];\n });\n this.$module.scene.minimapScissor.updateRequired = true;\n },\n updateSettingsfromScene: function() {\n this.currentSpeed = 1;\n this.$module.setPlayRate(this.defaultRate);\n this.orginalDuration = this.$module.scene.getMetadataTag(\n \"OriginalDuration\"\n );\n this.animateDuration = this.$module.scene.getMetadataTag(\"Duration\");\n let timeStamps = this.$module.scene.getMetadataTag(\"TimeStamps\");\n this.timeStamps = {};\n for (const key in timeStamps) {\n this.timeStamps[timeStamps[key]] = key;\n }\n this.timeMax = this.$module.scene.getDuration();\n },\n setURLFinishCallback: function(options) {\n return () => {\n if (options) {\n if (options.viewport) {\n this.$module.scene\n .getZincCameraControls()\n .setCurrentCameraSettings(options.viewport);\n } else if (options.viewURL && options.viewURL !== \"\") {\n const url = new URL(options.viewURL, this.url);\n this.$module.scene.loadViewURL(url);\n } else if (options.region && options.region !== \"\") {\n this.viewRegion(options.region);\n }\n if (options.visibility) {\n // Some UIs may not be ready at this time.\n this.$nextTick(() => {\n this.$refs.traditionalControl.setState(options.visibility);\n });\n }\n }\n this.updateSettingsfromScene();\n this.$module.updateTime(0.01);\n this.$module.updateTime(0);\n this.$module.unsetFinishDownloadCallback();\n this.isReady = true;\n };\n },\n /**\n * Function used for getting the current states of the scene. This exported states\n * can be imported using the importStates method.\n *\n * @public\n */\n getState: function() {\n let state = {\n url: this._currentURL,\n viewport: undefined,\n visibility: undefined\n };\n if (this.$refs.traditionalControl)\n state.visibility = this.$refs.traditionalControl.getState();\n if (this.$module.scene) {\n let zincCameraControls = this.$module.scene.getZincCameraControls();\n state.viewport = zincCameraControls.getCurrentViewport();\n }\n return state;\n },\n /**\n * Function used for importing the states of the scene. This exported states\n * can be imported using the read states method.\n *\n * @public\n */\n setState: function(state) {\n if (state) {\n if (state.url && state.url !== this._currentURL) {\n this.setURLAndState(state.url, {\n viewport: state.viewport,\n visibility: state.visibility\n });\n } else {\n if (state.viewport || state.visibility) {\n if (this.isReady && this.$module.scene) {\n if (state.viewport)\n this.$module.scene\n .getZincCameraControls()\n .setCurrentCameraSettings(state.viewport);\n if (state.visibility)\n this.$refs.traditionalControl.setState(state.visibility);\n } else {\n this.$module.setFinishDownloadCallback(\n this.setURLFinishCallback({\n viewport: state.viewport,\n visibility: state.visibility\n })\n );\n }\n }\n }\n }\n },\n exportGLTF: function(binary) {\n return this.$module.scene.exportGLTF(binary);\n },\n /**\n * Function used for reading in new scaffold metadata and a custom\n * viewport. This function will ignore the state prop and\n * read in the new url.\n *\n * @public\n */\n setURLAndState: function(newValue, state) {\n if (newValue != this._currentURL) {\n let viewport = state && state.viewport ? state.viewport : undefined;\n let visibility =\n state && state.visibility ? state.visibility : undefined;\n this._currentURL = newValue;\n if (this.$refs.traditionalControl)\n this.$refs.traditionalControl.clear();\n this.loading = true;\n this.isReady = false;\n this.$module.setFinishDownloadCallback(\n this.setURLFinishCallback({\n viewport: viewport,\n region: this.region,\n viewURL: this.viewURL,\n visibility: visibility\n })\n );\n this.$module.loadOrgansFromURL(\n newValue,\n undefined,\n undefined,\n \"scene\",\n undefined\n );\n this.$module.scene.displayMarkers = this.displayMarkers;\n this.$module.scene.displayMinimap = this.displayMinimap;\n this.updateMinimapScissor();\n }\n },\n /**\n * Function used for reading in new scaffold metadata. This function will ignore\n * the state prop and read in the new url.\n *\n * @public\n */\n setURL: function(newValue) {\n this.setURLAndState(newValue, undefined);\n },\n /**\n * Callback when drawer is toggled.\n *\n */\n drawerToggled: function(flag) {\n this.drawerOpen = flag;\n this.adjustLayout();\n },\n /**\n * Callback using ResizeObserver.\n \n */\n adjustLayout: function() {\n let width = this.$refs.scaffoldContainer.clientWidth;\n this.minimisedSlider = width < 812;\n if (this.minimisedSlider) {\n this.sliderPosition = this.drawerOpen ? \"right\" : \"left\";\n } else {\n this.sliderPosition = \"\";\n }\n },\n toggleRendering: function(flag) {\n if (this.$module.zincRenderer) {\n if (flag) {\n this.$module.zincRenderer.animate();\n } else {\n this.$module.zincRenderer.stopAnimate();\n }\n }\n },\n forceResize: function() {\n if (this.$module.zincRenderer) {\n this.$module.zincRenderer.onWindowResize();\n }\n }\n }\n};\n</script>\n\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\n<style scoped lang=\"scss\">\n@import \"~element-ui/packages/theme-chalk/src/col\";\n@import \"~element-ui/packages/theme-chalk/src/loading\";\n@import \"~element-ui/packages/theme-chalk/src/option\";\n@import \"~element-ui/packages/theme-chalk/src/popover\";\n@import \"~element-ui/packages/theme-chalk/src/row\";\n@import \"~element-ui/packages/theme-chalk/src/select\";\n@import \"~element-ui/packages/theme-chalk/src/slider\";\n@import \"~element-ui/packages/theme-chalk/src/tabs\";\n@import \"~element-ui/packages/theme-chalk/src/tab-pane\";\n\n.warning-icon {\n position: absolute;\n top: 15px;\n left: 37px;\n text-align: left;\n font-size: 25px;\n color: $warning;\n\n &:hover {\n cursor: pointer;\n }\n}\n\n.warning-text {\n font-size: 15px;\n vertical-align: 5px;\n}\n\n::v-deep .warning-popper {\n padding: 9px 10px;\n min-width: 150px;\n font-size: 12px;\n color: #fff;\n background-color: $warning;\n\n &.right-popper {\n .popper__arrow {\n &::after {\n border-right-color: $warning !important;\n }\n }\n }\n}\n\n#organsDisplayArea {\n &:focus {\n outline: none !important;\n border: 0px;\n }\n}\n\n.scaffold-container {\n height: 100%;\n width: 100%;\n position: relative;\n}\n\n.time-slider-container {\n text-align: left;\n position: absolute;\n right: 155px;\n width: calc(100% - 530px);\n bottom: 16px;\n transition: all 1s ease;\n outline: none;\n\n &.minimised {\n width: calc(40%);\n }\n\n &.left {\n right: 155px;\n width: calc(100% - 250px);\n }\n\n &.right {\n right: 8px;\n bottom: 54px;\n }\n}\n\n.slider-display-text {\n height: 20px;\n color: rgb(48, 49, 51);\n font-size: 14px;\n font-weight: normal;\n line-height: 20px;\n padding-left: 8px;\n text-shadow: -1px -1px #fff, 1px -1px #fff, -1px 1px #fff, 1px -1px #fff;\n}\n\n.tab-content {\n display: flex;\n height: 34px;\n padding-top: 8px;\n font-size: 14px;\n}\n\n.tab-content ::v-deep .el-slider__marks-text {\n margin-top: 12px;\n margin-left: 8px;\n font-size: 10px;\n}\n\n.tab-content ::v-deep .el-slider__stop {\n width: 10px;\n height: 10px;\n top: -1px;\n border: solid 1px $app-primary-color;\n}\n\n.animation-data {\n margin-left: 8px;\n line-height: 26px;\n display: flex;\n\n :not(:first-child) {\n margin-left: 8px;\n }\n .purple {\n padding-left: 2px;\n color: $app-primary-color;\n }\n}\n.slider {\n margin-left: 30px;\n width: calc(100% - 88px);\n margin-top: -7px;\n\n ::v-deep .el-slider__runway {\n height: 10px;\n margin: 14px 0;\n }\n\n ::v-deep .el-slider__button-wrapper {\n top: -13px;\n }\n}\n\n.zoomOut {\n padding-left: 8px;\n}\n\n.fitWindow {\n padding-left: 8px;\n}\n\n::v-deep .non-selectable {\n user-select: none;\n}\n\n::v-deep .background-popper {\n padding: 5px 12px;\n background-color: #ffffff;\n border: 1px solid $app-primary-color;\n box-shadow: 0px 2px 12px 0px rgba(0, 0, 0, 0.06);\n height: 72px;\n width: 128px;\n min-width: 128px;\n\n &.el-popper[x-placement^=\"top\"] {\n .popper__arrow {\n border-top-color: $app-primary-color !important;\n &:after {\n border-top-color: #fff !important;\n }\n }\n }\n}\n\n.background-colour {\n bottom: 16px;\n position: absolute;\n transition: all 1s ease;\n\n &.open {\n left: 322px;\n }\n\n &.close {\n left: 24px;\n }\n}\n\n.backgroundText {\n color: rgb(48, 49, 51);\n font-size: 14px;\n font-weight: normal;\n line-height: 20px;\n}\n\n.backgroundChooser {\n display: flex;\n margin-top: 16px;\n}\n\n.backgroundChoice {\n width: 20px;\n height: 20px;\n border: 1px solid rgb(144, 147, 153);\n margin-left: 20px;\n\n &.active {\n border: 2px solid $app-primary-color;\n }\n\n &:hover {\n cursor: pointer;\n }\n\n &.white {\n background-color: white;\n margin-left: 10px;\n }\n\n &.black {\n background-color: black;\n }\n\n &.lightskyblue {\n background-color: lightskyblue;\n }\n}\n\n.icon-button {\n height: 24px !important;\n width: 24px !important;\n\n &:hover {\n cursor: pointer;\n }\n}\n\n.bottom-right-control {\n position: absolute;\n right: 16px;\n bottom: 16px;\n}\n\n.video-button {\n margin-left: 8px;\n}\n\n.time-slider-container {\n ::v-deep .el-tabs__header {\n margin: 0px;\n border-bottom: 1px solid rgb(144, 147, 153);\n }\n\n .el-row {\n margin-bottom: 5px;\n }\n\n ::v-deep .el-tabs__content {\n border-left: 1px solid rgb(144, 147, 153);\n border-bottom: 1px solid rgb(144, 147, 153);\n border-right: 1px solid rgb(144, 147, 153);\n border-radius: 0px 0px 4px 4px;\n background-color: white;\n }\n\n ::v-deep .el-tabs--card {\n > .el-tabs__header {\n .el-tabs__nav {\n border: 1px solid rgb(144, 147, 153);\n border-bottom: none;\n border-radius: 4px 4px 0px 0px;\n background-color: white;\n }\n\n .el-tabs__item {\n height: 24px;\n line-height: 24px;\n padding: 0 8px !important;\n border-bottom: 1px solid;\n border-left: 1px solid rgb(144, 147, 153);\n &:first-child {\n border-left: none;\n }\n &.is-active {\n border-bottom: 1px solid white;\n color: rgb(48, 49, 51);\n }\n &:hover {\n color: $app-primary-color;\n }\n }\n }\n }\n}\n\n::v-deep .scaffold-popper {\n padding: 6px 4px;\n font-size: 12px;\n color: rgb(48, 49, 51);\n background-color: #f3ecf6;\n border: 1px solid $app-primary-color;\n white-space: nowrap;\n min-width: unset;\n pointer-events: none;\n\n &.left-popper {\n .popper__arrow {\n border-left-color: $app-primary-color !important;\n &:after {\n border-left-color: #f3ecf6 !important;\n }\n }\n }\n\n &.right-popper {\n .popper__arrow {\n border-right-color: $app-primary-color !important;\n &:after {\n border-right-color: #f3ecf6 !important;\n }\n }\n }\n\n &.el-popper[x-placement^=\"top\"] {\n .popper__arrow {\n border-top-color: $app-primary-color !important;\n &:after {\n border-top-color: #f3ecf6 !important;\n }\n }\n }\n}\n\n::v-deep .el-slider__button {\n border: 2px solid $app-primary-color;\n}\n\n::v-deep .el-slider__bar {\n background-color: $app-primary-color;\n height: 10px;\n}\n\n::v-deep .el-loading-spinner {\n i, .el-loading-text {\n color: $app-primary-color;\n }\n}\n\n::v-deep .popper-zoomout {\n padding-right: 11px;\n left: -21px !important;\n .popper__arrow {\n left: 53px !important;\n }\n}\n\n.select-box {\n width: 57px;\n border-radius: 4px;\n border: 1px solid rgb(144, 147, 153);\n background-color: var(--white);\n font-weight: 500;\n color: rgb(48, 49, 51);\n margin-left: 8px;\n\n ::v-deep .el-input__inner {\n color: $app-primary-color;\n height: 22px;\n padding-left: 8px;\n padding-right: 8px;\n border: none;\n font-family: \"Asap\", sans-serif;\n line-height: 22px;\n }\n\n ::v-deep .el-input,\n ::v-deep .el-input__icon {\n line-height: 22px;\n }\n}\n</style>\n\n<style lang=\"scss\">\n.time-slider-tooltip {\n padding: 6px 4px !important;\n font-family: \"Asap\", sans-serif;\n font-size: 12px !important;\n color: rgb(48, 49, 51) !important;\n background-color: #f3ecf6 !important;\n border: 1px solid $app-primary-color !important;\n white-space: nowrap !important;\n min-width: unset !important;\n}\n\n.scaffold_viewer_dropdown .el-select-dropdown__item {\n white-space: nowrap;\n text-align: left;\n font-family: \"Asap\", sans-serif;\n}\n\n.opacity-box {\n right: 0px;\n bottom:200px;\n position:absolute;\n}\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ScaffoldVuer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ScaffoldVuer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ScaffoldVuer.vue?vue&type=template&id=cc8106d6&scoped=true&\"\nimport script from \"./ScaffoldVuer.vue?vue&type=script&lang=js&\"\nexport * from \"./ScaffoldVuer.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ScaffoldVuer.vue?vue&type=style&index=0&id=cc8106d6&scoped=true&lang=scss&\"\nimport style1 from \"./ScaffoldVuer.vue?vue&type=style&index=1&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"cc8106d6\",\n null\n \n)\n\nexport default component.exports","// The Vue build version to load with the `import` command\n// (runtime-only or standalone) has been set in webpack.base.conf with an alias.\nimport ScaffoldVuer from \"./ScaffoldVuer.vue\";\n\nexport {\n ScaffoldVuer\n};\n","import './setPublicPath'\nexport * from '~entry'\n","module.exports = require(\"core-js/modules/es.string.includes\");","module.exports = require(\"element-ui/lib/theme-chalk/row.css\");"],"sourceRoot":""}
|