-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathimjoy-loader.min.js
More file actions
2 lines (2 loc) · 24.9 KB
/
imjoy-loader.min.js
File metadata and controls
2 lines (2 loc) · 24.9 KB
1
2
!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define("imjoyLoader",[],n):"object"==typeof exports?exports.imjoyLoader=n():e.imjoyLoader=n()}(window,(function(){return function(e){var n={};function i(o){if(n[o])return n[o].exports;var t=n[o]={i:o,l:!1,exports:{}};return e[o].call(t.exports,t,t.exports,i),t.l=!0,t.exports}return i.m=e,i.c=n,i.d=function(e,n,o){i.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:o})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,n){if(1&n&&(e=i(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(i.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var t in e)i.d(o,t,function(n){return e[n]}.bind(null,t));return o},i.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(n,"a",n),n},i.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},i.p="",i(i.s=19)}([,,function(e,n,i){"use strict";i.d(n,"a",(function(){return w})),i.d(n,"b",(function(){return p}));var o=i(20),t=i.n(o),s=i(21),r=i.n(s),a=i(22),l=i.n(a),d=i(23),c=i.n(d);function w(e){return new Promise((n,i)=>{const o=document.createElement("script");o.src=e,o.addEventListener("load",n),o.addEventListener("error",()=>{document.head.removeChild(o),i("Error loading script: "+e)}),o.addEventListener("abort",()=>i("Script loading aborted.")),document.head.appendChild(o)})}function m(e){e=e.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");var n=new RegExp("[\\?&]"+e+"=([^&#]*)").exec(location.search);return null===n?"":decodeURIComponent(n[1].replace(/\+/g," "))}async function p(e){let n;await w("https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.min.js"),await w("https://imjoy-team.github.io/vue-js-modal/index.js"),function(e){const n=document.createElement("link");n.setAttribute("rel","stylesheet"),n.setAttribute("type","text/css"),n.setAttribute("href",e),document.getElementsByTagName("head")[0].appendChild(n)}("https://imjoy-team.github.io/vue-js-modal/styles.css"),await w("https://cdn.jsdelivr.net/npm/@oeway/vue-window@2.4.1-a/lib/index.js");const i={showDialog:(e,n,i)=>((i=i||{}).dialog=!0,o.pm.createWindow(e,n,i)),createWindow:(n,i,t)=>(t=t||{},e.window_manager_container||(t.dialog=!0),o.pm.createWindow(n,i,t)),showSnackbar(e,i,o){n.showSnackbar(i,o)},showMessage(e,i){n.showSnackbar(i,5)},showStatus(e,i){n.showSnackbar(i,5)},showProgress(e,i){(i=i||0)<1&&(i*=100),n.progress=i,n.$forceUpdate()}};if((e=e||{}).imjoy_api)for(let n of Object.keys(e.imjoy_api))i[n]=e.imjoy_api[n];const o=new((await loadImJoyCore(e)).ImJoy)({imjoy_api:i,expose_api:e.expose_api,client_id:e.client_id,default_base_frame:e.default_base_frame,default_rpc_base_url:e.default_rpc_base_url,debug:e.debug,flags:e.flags||[],engine_selector:e.engine_selector});let s,a,d;if(await o.start(e),console.log("ImJoy Core started successfully!"),Vue.use(window["vue-js-modal"].default),Vue.use(window.VueWindow),e.main_container?s="string"==typeof e.main_container?document.getElementById(e.main_container):e.main_container:(s=document.createElement("div"),document.body.appendChild(s)),s.style.visibility="hidden",s.innerHTML=r.a,document.head.insertAdjacentHTML("beforeend",`<style>${t.a}</style>`),e.window_manager_container){let i;i="string"==typeof e.window_manager_container?document.getElementById(e.window_manager_container):e.window_manager_container,i.innerHTML=c.a,a=new Vue({el:i,data:{type:e.window_manager_type||"standard",windowSizePosChanging:!1,windowStyle:e.window_style||{},showEmpty:e.show_empty_window||!1,showWindowTitle:e.show_window_title||!1,windows:[],activeWindow:null},watch:{windowSizePosChanging:function(e){n.$emit("window-size-pos-changing",e)}},methods:{closeWindow(e){this.windowSizePosChanging=!1,e.hidden=!0,this.$forceUpdate(),e.close()}}})}if(e.menu_container){let n;n="string"==typeof e.menu_container?document.getElementById(e.menu_container):e.menu_container,n.innerHTML=l.a,n.style.minHeight="30px",d=new Vue({el:n,data:{menuPos:e.menu_pos||"right",menuStyle:e.menu_style||{"z-index":999},activeWindow:null,closeWindow:null,showAboutImJoy:null,extraMenuItems:[],loadedPlugins:[],allWindows:[],showContent:!0},mounted(){this.menuStyle=this.menuStyle||{},this.menuStyle.float="left"===this.menuPos?"left":"right"},methods:{menuClicked(){this.showContent=!1,this.$forceUpdate(),setTimeout(()=>{this.showContent=!0,this.$forceUpdate()},0)}}})}return n=new Vue({el:s,data:{dialogWindows:[],selectedDialogWindow:null,selectedWindowsStack:[],selectedRegularWindow:null,fullscreen:!1,loading:!1,snackBarContent:!1,snackBarTimer:null,progress:0,loadedPlugins:[],allWindows:[],extraMenuItems:[],showProgressBar:e.show_progress_bar,showLoaderCallback:e.show_loader,showWindows:e.show_windows},mounted(){this.$el.style.visibility="visible",o.event_bus.on("close_window",e=>{this.closeWindow(e),this.$forceUpdate()}),o.event_bus.on("add_window",e=>{this.allWindows.push(e),this.addWindow(e)}),this.imjoy=o,e.process_url_query&&this.processURLQuery(),d&&(d.closeWindow=e=>{this.closeWindow(e)},e.hide_about_imjoy||(d.showAboutImJoy=()=>{o.api.showDialog({src:"https://imjoy.io/docs/",passive:!0})}))},computed:{regularWindows:function(){return this.allWindows.filter(e=>!this.dialogWindows.includes(e)&&!e.inline)}},watch:{regularWindows:function(e){a&&(a.windows=e,a.$forceUpdate())},selectedRegularWindow:function(n){a&&(a.activeWindow=n,a.$forceUpdate()),d&&"simple"===e.window_manager_type&&(d.activeWindow=n,d.$forceUpdate())},extraMenuItems:function(e){d&&(d.extraMenuItems=e,d.$forceUpdate())},allWindows:function(e){d&&(d.allWindows=e,d.$forceUpdate())},loadedPlugins:function(e){d&&(d.loadedPlugins=e,d.$forceUpdate())}},methods:{async processURLQuery(){const e=m("engine"),n=m("plugin")||m("p"),i=m("binder");if(e){const n=m("token"),i=m("name");await this.setupPluginEngine(e,n,i)}if(i){const e=m("name"),n=m("spec");await this.setupBinderEngine(i,n,e)}n&&this.loadPlugin(n).then(e=>{let n,i={},o={};n=m("data"),n&&(o=JSON.parse(n)),n=m("config"),n&&(i=JSON.parse(n)),this.runPlugin(e,i,o)})},runPlugin:async(e,n,i)=>(!n&&e.config.ui&&e.config.ui.indexOf("{")>-1&&(n=await o.pm.imjoy_api.showDialog(e,e.config)),i=i||{},await e.api.run({config:n,data:i})),async setupPluginEngine(e,n,i){try{console.log("Loading Jupyter-Engine-Manager from Gist..."),o.em.getFactory("Jupyter-Engine")||(await o.pm.reloadPluginRecursively({uri:"https://imjoy-team.github.io/jupyter-engine-manager/Jupyter-Engine-Manager.imjoy.html"}),console.log("Jupyter-Engine-Manager loaded."),await o.em.unregister("https://mybinder.org"));const t=o.em.getFactory("Jupyter-Engine");await t.addEngine({name:i,url:e,nbUrl:e+"?token="+n}),console.log("plugin engine added:",e)}catch(e){console.error(e),alert("Failed to connect to the engine: "+e)}},async setupBinderEngine(e,n,i){try{console.log("Loading Jupyter-Engine-Manager from Gist..."),o.em.getFactory("MyBinder-Engine")||(await o.pm.reloadPluginRecursively({uri:"https://imjoy-team.github.io/jupyter-engine-manager/Jupyter-Engine-Manager.imjoy.html"}),console.log("Jupyter-Engine-Manager loaded."),await o.em.unregister("https://mybinder.org"));const t=o.em.getFactory("MyBinder-Engine");await t.addEngine({name:i,spec:n,url:e}),console.log("Binder engine added:",e)}catch(e){console.error(e),alert("Failed to connect to the engine: "+e)}},async loadPlugin(e){try{this.loading=!0;const n=await o.pm.reloadPluginRecursively({uri:e});return this.loadedPlugins.push(n),this.showSnackbar(`Plugin ${n.name} successfully loaded.`),n}finally{this.loading=!1}},addMenuItem(e){this.extraMenuItems.push(e),this.$forceUpdate()},removeMenuItem(e){const n=this.extraMenuItems.filter(n=>n.label===e)[0],i=this.extraMenuItems.indexOf(n);i>=0&&this.extraMenuItems.splice(i,1)},showSnackbar(e,n){this.snackBarTimer&&clearTimeout(this.snackBarTimer),n=n||3,this.snackBarContent=e,this.$forceUpdate(),this.snackBarTimer=setTimeout(()=>{this.snackBarContent=null,this.snackBarTimer=null,this.$forceUpdate()},1e3*n)},showLoader(e){this.showLoaderCallback?this.showLoaderCallback(e):this.loading=e,this.$forceUpdate()},addWindow(e){e.api=e.api||{};const n=document.getElementById(e.window_id);if(n)return e.window_style&&Object.assign(n.style,e.window_style),e.inline=!0,void(e.api.show=e.show=()=>{n.scrollIntoView()});if(e.dialog)this.dialogWindows.push(e),this.selectedDialogWindow&&this.selectedWindowsStack.push(this.selectedDialogWindow),this.selectedDialogWindow=e,e.fullscreen||e.standalone?this.fullscreen=!0:this.fullscreen=!1,this.$modal.show("window-modal-dialog"),this.$forceUpdate(),e.api.show=e.show=()=>{this.selectedDialogWindow=e,this.$modal.show("window-modal-dialog"),o.wm.selectWindow(e),e.api.emit("show")},e.api.hide=e.hide=()=>{this.selectedDialogWindow===e&&this.$modal.hide("window-modal-dialog"),e.api.emit("hide")},setTimeout(()=>{try{e.show()}catch(e){console.error(e)}},500);else{this.selectedRegularWindow=e,setTimeout(()=>{e.fullscreen||e.standalone?e.sizeState="maximized":e.sizeState="normal",this.$forceUpdate()},0);const n=this;e.api.show=e.show=()=>{e.sizeState="restore",n.selectedRegularWindow=e,n.$forceUpdate(),o.wm.selectWindow(e),e.api.emit("show")}}},showWindow(e){e.fullscreen||e.standalone?this.fullscreen=!0:this.fullscreen=!1,e&&(this.selectedDialogWindow=e),this.$modal.show("window-modal-dialog")},closeWindow(e){let n=this.dialogWindows.indexOf(e);n>=0&&this.dialogWindows.splice(n,1),n=this.allWindows.indexOf(e),n>=0&&this.allWindows.splice(n,1),e===this.selectedDialogWindow&&(this.selectedDialogWindow=this.selectedWindowsStack.pop()),this.selectedDialogWindow||this.$modal.hide("window-modal-dialog"),e===this.selectedRegularWindow&&(this.regularWindows.length>0?this.selectedRegularWindow=this.regularWindows[this.regularWindows.length-1]||null:this.selectedRegularWindow=null),this.$forceUpdate()},minimizeWindow(){this.$modal.hide("window-modal-dialog")},maximizeWindow(){this.fullscreen=!this.fullscreen}}}),n}},,,,,,,function(e,n){(function(n){e.exports=n}).call(this,{})},function(e){e.exports=JSON.parse('{"b":"0.14.5","a":{"ajv":"^6.9.1","axios":"^0.21.1","dompurify":"^2.0.8","file-saver":"^1.3.3","imjoy-rpc":"^0.5.9","js-yaml":"^3.13.1","lodash":"^4.17.15","lz-string":"^1.4.4","minibus":"^3.1.0","pouchdb-browser":"^7.2.2","socket.io-client":"^2.3.0","spark-md5":"^3.0.0"}}')},,,,,,,,,function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,"loadImJoyCore",(function(){return loadImJoyCore})),__webpack_require__.d(__webpack_exports__,"latest_rpc_version",(function(){return latest_rpc_version})),__webpack_require__.d(__webpack_exports__,"loadImJoyRPC",(function(){return loadImJoyRPC})),__webpack_require__.d(__webpack_exports__,"loadImJoyRPCSocketIO",(function(){return loadImJoyRPCSocketIO}));var _package_json__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(10),_package_json__WEBPACK_IMPORTED_MODULE_0___namespace=__webpack_require__.t(10,1),_imjoyBasicApp_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(2);__webpack_require__.d(__webpack_exports__,"loadImJoyBasicApp",(function(){return _imjoyBasicApp_js__WEBPACK_IMPORTED_MODULE_1__.b}));var _getParams=function(e){var n={},i=document.createElement("a");i.href=e;for(var o=i.search.substring(1).split("&"),t=0;t<o.length;t++){var s=o[t].split("=");n[s[0]]=decodeURIComponent(s[1])}return n};function loadImJoyCore(config){return config=config||{},new Promise(async(resolve,reject)=>{try{var baseUrl=config.base_url;if(!baseUrl){const e=config.version||"latest";baseUrl=`https://cdn.jsdelivr.net/npm/imjoy-core@${e}/dist/`}if(delete window.imjoyCore,config.debug?await Object(_imjoyBasicApp_js__WEBPACK_IMPORTED_MODULE_1__.a)(baseUrl+"imjoy-core.js"):await Object(_imjoyBasicApp_js__WEBPACK_IMPORTED_MODULE_1__.a)(baseUrl+"imjoy-core.min.js"),window.imjoyCore){const e=window.imjoyCore;delete window.imjoyCore,resolve(e)}else"function"==typeof define&&__webpack_require__(9)?eval("require")(["imjoyCore"],resolve):reject("Failed to import imjoy-core.")}catch(e){reject(e)}})}const _rpc_registry={},latest_rpc_version=_package_json__WEBPACK_IMPORTED_MODULE_0__.a["imjoy-rpc"].replace(/[^\d.-]/g,""),_rpc_api_versions={"0.2.0":{from:"0.1.10",to:"0.1.17",skips:[]},"0.2.1":{from:"0.1.18",to:"0.2.5",skips:[]},"0.2.2":{from:"0.2.6",to:"0.2.6",skips:[]},"0.2.3":{from:"0.2.7",to:latest_rpc_version,skips:["0.2.9","0.2.15","0.2.16","0.2.18","0.2.23","0.2.24","0.2.25"]}};function findRPCVersionByAPIVersion(e,n){if(!e||!e.includes("."))return;let i=Object.keys(_rpc_registry);if(_rpc_api_versions[e]){if(i.length<=0||n)return _rpc_api_versions[e].to;o=(e,n)=>e.map(e=>e.replace(/\d+/g,e=>+e+1e5*n)),i=o(o(i,1).sort(),-1);for(let n of i.reverse())if(_rpc_registry[n].API_VERSION===e)return n;return _rpc_api_versions[e].to}return null;var o}function loadImJoyRPC(config){return config=config||{},new Promise((resolve,reject)=>{var baseUrl=config.base_url;let version=config.version;if(!baseUrl)if(config.version)baseUrl=`https://cdn.jsdelivr.net/npm/imjoy-rpc@${config.version}/dist/`;else if(config.api_version){if(version=findRPCVersionByAPIVersion(config.api_version,!0),!version)return void reject(Error("Cannot find a version of imjoy-rpc that supports api v"+config.api_version));baseUrl=`https://cdn.jsdelivr.net/npm/imjoy-rpc@${version}/dist/`}else baseUrl="https://cdn.jsdelivr.net/npm/imjoy-rpc@latest/dist/",version="latest",console.info(`Using imjoy-rpc library from ${baseUrl}.`);if(version&&_rpc_registry[version])return console.info(`Using cached imjoy-rpc library v${version}.`),void resolve(_rpc_registry[version]);let rpc_url=baseUrl+"imjoy-rpc.min.js";function checkAndCacheLib(e){if(version&&"latest"!==version&&version!==e.VERSION)throw new Error(`imjoy-rpc version mismatch ${version} != ${e.VERSION}`);if(config.api_version&&config.api_version!==e.API_VERSION)throw new Error(`imjoy-rpc api version mismatch ${config.api_version} != ${e.API_VERSION}`);_rpc_registry[e.VERSION]=e}config.debug&&(rpc_url=baseUrl+"imjoy-rpc.js"),delete window.imjoyRPC,Object(_imjoyBasicApp_js__WEBPACK_IMPORTED_MODULE_1__.a)(rpc_url).then(()=>{if(window.imjoyRPC){const e=window.imjoyRPC;delete window.imjoyRPC;try{checkAndCacheLib(e),resolve(e)}catch(e){reject(e)}}else{if("function"!=typeof define||!__webpack_require__(9))return void reject("Failed to import imjoy-rpc.");eval("require")(["imjoyRPC"],e=>{try{checkAndCacheLib(e),resolve(e)}catch(e){reject(e)}})}}).catch(reject)})}function loadImJoyRPCSocketIO(config){return config=config||{},new Promise((resolve,reject)=>{var baseUrl=config.base_url;let version=config.version;if(!baseUrl)if(config.version)baseUrl=`https://cdn.jsdelivr.net/npm/imjoy-rpc-socketio@${config.version}/dist/`;else if(config.api_version){if(version=findRPCVersionByAPIVersion(config.api_version,!0),!version)return void reject(Error("Cannot find a version of imjoy-rpc-socketio that supports api v"+config.api_version));baseUrl=`https://cdn.jsdelivr.net/npm/imjoy-rpc-socketio@${version}/dist/`}else baseUrl="https://cdn.jsdelivr.net/npm/imjoy-rpc-socketio@latest/dist/",version="latest",console.info(`Using imjoy-rpc-socketio library from ${baseUrl}.`);let rpc_url=baseUrl+"imjoy-rpc-socketio.min.js";config.debug&&(rpc_url=baseUrl+"imjoy-rpc-socketio.js"),delete window.imjoyRPCSocketIO,Object(_imjoyBasicApp_js__WEBPACK_IMPORTED_MODULE_1__.a)(rpc_url).then(()=>{if(window.imjoyRPCSocketIO){const e=window.imjoyRPCSocketIO;delete window.imjoyRPCSocketIO,resolve(e)}else"function"==typeof define&&__webpack_require__(9)?eval("require")(["imjoyRPCSocketIO"],resolve):reject("Failed to import imjoy-rpc-socketio.")}).catch(reject)})}async function loadImJoyRPCByQueryString(){const e=_getParams(window.location);return await loadImJoyRPC(e)}window.loadImJoyRPCByQueryString=loadImJoyRPCByQueryString,window.loadImJoyRPC=loadImJoyRPC,window.loadImJoyRPCSocketIO=loadImJoyRPCSocketIO,window.loadImJoyCore=loadImJoyCore,window.loadImJoyBasicApp=_imjoyBasicApp_js__WEBPACK_IMPORTED_MODULE_1__.b},function(e,n){e.exports=".vm--modal {\n max-height: 100% !important;\n max-width: 100% !important;\n}\n\n.imjoy-inline-window {\n width: 100%;\n height: 600px;\n}\n\n.imjoy-progress-border > div {\n background-color: #448aff;\n height: 3px;\n}\n\n.imjoy-progress-border {\n top: 0;\n left: 0;\n position: absolute;\n width: 100%;\n height: 3px;\n}\n\n.imjoy-noselect {\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\nbody {\n margin: 0px;\n}\n.imjoy-dialog-control {\n padding: 0px;\n line-height: 10px;\n height: 23px;\n width: 25px;\n border: 0px;\n font-size: 1rem;\n position: absolute;\n color: white;\n top: 1px;\n}\n\n.imjoy-dialog-control:focus {\n outline: none;\n}\n\n.imjoy-loader {\n position: fixed;\n top: 40%;\n left: 50%;\n transform: translate(-50%, -50%);\n transform: -webkit-translate(-50%, -50%);\n transform: -moz-translate(-50%, -50%);\n transform: -ms-translate(-50%, -50%);\n border: 10px solid #f3f3f3;\n /* Light grey */\n border-top: 10px solid #448aff;\n /* Blue */\n border-radius: 50%;\n width: 40px;\n height: 40px;\n animation: spin 2s linear infinite;\n}\n\n@keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n}\n\n/* The snackbar - position it at the bottom and in the middle of the screen */\n.imjoy-snackbar {\n font-family: Arial, Helvetica, sans-serif;\n visibility: hidden;\n /* Hidden by default. Visible on click */\n min-width: 250px;\n /* Set a default minimum width */\n background-color: #333333c2;\n /* Black background color */\n color: #fff;\n /* White text color */\n text-align: center;\n /* Centered text */\n border-radius: 5px;\n /* Rounded borders */\n padding: 16px;\n /* Padding */\n position: fixed;\n /* Sit on top of the screen */\n z-index: 9999;\n /* Add a z-index if needed */\n left: 50%;\n /* Center the snackbar */\n transform: translate(-50%, 0);\n bottom: 20px;\n /* 20px from the bottom */\n}\n\n.imjoy-window-title-bar {\n cursor: move;\n background-color: #448aff;\n color: white;\n text-align: center;\n height: 24px;\n}\n\n.imjoy-window-title {\n text-align: center;\n font-family: Arial, Helvetica, sans-serif;\n font-size: 16px;\n line-height: 23px;\n margin: 0px;\n}\n\n/* Show the snackbar when clicking on a button (class added with JavaScript) */\n.imjoy-snackbar.show-snackbar {\n visibility: visible;\n /* Show the snackbar */\n /* Add animation: Take 0.5 seconds to fade in and out the snackbar.\n However, delay the fade out process for 2.5 seconds */\n -webkit-animation: imjoy-fadein 0.5s;\n animation: imjoy-fadein 0.5s;\n}\n\n/* Animations to fade the snackbar in and out */\n@-webkit-keyframes imjoy-fadein {\n from {\n bottom: 0;\n opacity: 0;\n }\n\n to {\n bottom: 30px;\n opacity: 1;\n }\n}\n\n@keyframes imjoy-fadein {\n from {\n bottom: 0;\n opacity: 0;\n }\n\n to {\n bottom: 30px;\n opacity: 1;\n }\n}\n\n.imjoy-dropdown-btn {\n padding: 4px;\n font-size: 16px;\n border: none;\n cursor: pointer;\n}\n\n.imjoy-dropdown {\n position: relative;\n display: inline-block;\n}\n\n.imjoy-dropdown-content {\n display: none;\n position: absolute;\n right: 0;\n background-color: #f9f9f9;\n min-width: 200px;\n box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);\n z-index: 1;\n}\n\n.imjoy-dropdown-content a {\n font-family: Arial, Helvetica, sans-serif;\n color: black;\n padding: 6px 10px;\n text-decoration: none;\n display: block;\n}\n\n.imjoy-dropdown-content a:hover {\n background-color: #f1f1f1;\n}\n\n.imjoy-dropdown:hover .imjoy-dropdown-content {\n display: block;\n}\n\n.imjoy-window-container {\n width: 100%;\n height: 100%;\n}\n\n.imjoy-windows {\n position: relative;\n min-height: 100px;\n height: calc(100% - 30px);\n}\n\n.block-pointer-events {\n pointer-events: none;\n}\n"},function(e,n){e.exports='<div v-if="showLoader" class="imjoy-loader" v-show="loading"></div>\n<div v-if="showProgressBar" class="imjoy-progress-border" v-show="progress">\n <div :style="{width: progress+\'%\'}"></div>\n</div>\n<div\n v-show="snackBarContent"\n :class="{\'show-snackbar\': snackBarContent}"\n class="imjoy-snackbar"\n>\n {{snackBarContent}}\n</div>\n<modal\n name="window-modal-dialog"\n height="500px"\n style="max-height: 100%; max-width: 100%"\n :fullscreen="fullscreen"\n :resizable="true"\n draggable=".imjoy-drag-handle"\n :scrollable="true"\n>\n <div\n v-if="selectedDialogWindow"\n @dblclick="maximizeWindow()"\n class="imjoy-drag-handle imjoy-window-title-bar"\n >\n <span class="imjoy-noselect imjoy-window-title"\n >{{ selectedDialogWindow.name}}</span\n >\n <button\n @click="closeWindow(selectedDialogWindow)"\n class="imjoy-noselect imjoy-dialog-control"\n style="background:#ff0000c4;left:1px;"\n >\n x\n </button>\n <button\n @click="minimizeWindow()"\n class="imjoy-noselect imjoy-dialog-control"\n style="background:#00cdff61;left:28px;"\n >\n -\n </button>\n <button\n @click="maximizeWindow()"\n class="imjoy-noselect imjoy-dialog-control"\n style="background:#00cdff61;left:55px;"\n >\n {{fullscreen?\'=\': \'+\'}}\n </button>\n </div>\n <template v-for="wdialog in dialogWindows">\n <div\n :key="wdialog.window_id"\n v-show="wdialog === selectedDialogWindow"\n style="height: calc(100% - 18px);"\n >\n <div :id="wdialog.window_id" style="width: 100%;height: 100%;"></div>\n </div>\n </template>\n</modal>\n'},function(e,n){e.exports='<div class="imjoy-dropdown" :style="menuStyle">\n <a class="imjoy-dropdown-btn"\n ><img\n style="width:24px;"\n src="https://imjoy.io/static/img/imjoy-icon.svg"\n />\n </a>\n <div\n class="imjoy-dropdown-content"\n v-if="showContent"\n @click="menuClicked"\n :style="{left: menuPos===\'left\'? 0: null}"\n >\n <a\n href="#"\n v-for="item in extraMenuItems"\n :key="item.label"\n @click.prevent="item.callback()"\n >{{item.label}}</a\n >\n <hr\n style="margin: 0;border-style: solid;color: rgb(157 205 255 / 45%);"\n v-show="extraMenuItems.length>0 && loadedPlugins.length>0"\n />\n <a\n href="#"\n v-for="p in loadedPlugins"\n :key="p.id"\n @click.prevent="p.api.run()"\n >🧩 {{p.name}}</a\n >\n <hr\n style="margin: 0;border-style: solid;color: rgb(157 205 255 / 45%);"\n v-show="allWindows.length>0 && loadedPlugins.length>0"\n />\n <a href="#" v-if="showAboutImJoy" @click.prevent="showAboutImJoy()"\n >ℹ️ About ImJoy</a\n >\n <hr\n style="margin: 0;border-style: solid;color: rgb(157 205 255 / 45%);"\n v-show="allWindows.length>0 && loadedPlugins.length>0"\n />\n <a\n href="#"\n v-for="w in allWindows"\n :style="{\'background-color\': activeWindow===w?\'#adcafb78\':\'\', \'font-weight\': activeWindow===w? 600:300}"\n :key="w.id"\n @click.prevent="w.api.show()"\n >🔳 {{w.name}}</a\n >\n <a\n href="#"\n v-if="activeWindow && closeWindow"\n @click.prevent="closeWindow(activeWindow)"\n >❌ Close Window</a\n >\n </div>\n</div>\n'},function(e,n){e.exports='<template v-if="type===\'standard\'">\n <hsc-window-style-material>\n <hsc-window\n v-for="w in windows"\n :key="w.id"\n v-show="!w.hidden"\n :title="w.name"\n :minimize-style="{display: \'none\'}"\n :close-button="!w.disable_close"\n @close="closeWindow(w)"\n :size-state.sync="w.sizeState"\n :maximize-button="true"\n :resizable="true"\n :width="w.w*30"\n :height="w.h*30"\n :resizable="true"\n @resize-start="windowSizePosChanging = true"\n @resize-end="windowSizePosChanging = false"\n @move-start="windowSizePosChanging = true"\n @move-end="windowSizePosChanging = false"\n >\n <div\n :class="{\'block-pointer-events\': windowSizePosChanging }"\n :id="w.window_id"\n class="imjoy-window-container"\n ></div>\n </hsc-window>\n </hsc-window-style-material>\n</template>\n<template v-else>\n <div\n v-for="w in windows"\n v-show="w === activeWindow"\n :key="w.id"\n class="imjoy-windows"\n :style="windowStyle"\n >\n <div\n v-if="showWindowTitle"\n style="text-align: center;height:24px; background: #cacaca66;"\n >\n <span\n style="font-size:1rem;font-family: Arial, Helvetica, sans-serif;line-height: 24px;"\n >{{ w.name }}</span\n >\n </div>\n <div\n :id="w.window_id"\n class="imjoy-window-container"\n :style="{height: showWindowTitle?\'calc(100% - 24px)\': \'100%\'}"\n ></div>\n </div>\n</template>\n<div\n v-if="showEmpty && (!activeWindow || windows.length <= 0)"\n class="imjoy-windows"\n :style="windowStyle"\n>\n <img\n style="width:80px; position:absolute; left:50%; top: 50%; transform: translate(-50%, -50%);"\n src="https://imjoy.io/static/img/imjoy-icon.svg"\n />\n</div>\n'}])}));
//# sourceMappingURL=imjoy-loader.min.js.map