diff --git a/static/bundle.45a1f68eaef66c92e8b6.js b/static/bundle.d903ad7546455925ef5a.js similarity index 98% rename from static/bundle.45a1f68eaef66c92e8b6.js rename to static/bundle.d903ad7546455925ef5a.js index 8538c31..12e7854 100644 --- a/static/bundle.45a1f68eaef66c92e8b6.js +++ b/static/bundle.d903ad7546455925ef5a.js @@ -1,4 +1,4 @@ -!function(e){var t=window.webpackHotUpdate;window.webpackHotUpdate=function(e,n){!function(e,t){if(!x[e]||!y[e])return;for(var n in y[e]=!1,t)Object.prototype.hasOwnProperty.call(t,n)&&(h[n]=t[n]);0==--b&&0===v&&E()}(e,n),t&&t(e,n)};var n,i=!0,r="45a1f68eaef66c92e8b6",o={},a=[],s=[];function l(e){var t=z[e];if(!t)return M;var i=function(i){return t.hot.active?(z[i]?-1===z[i].parents.indexOf(e)&&z[i].parents.push(e):(a=[e],n=i),-1===t.children.indexOf(i)&&t.children.push(i)):(console.warn("[HMR] unexpected require("+i+") from disposed module "+e),a=[]),M(i)},r=function(e){return{configurable:!0,enumerable:!0,get:function(){return M[e]},set:function(t){M[e]=t}}};for(var o in M)Object.prototype.hasOwnProperty.call(M,o)&&"e"!==o&&"t"!==o&&Object.defineProperty(i,o,r(o));return i.e=function(e){return"ready"===d&&f("prepare"),v++,M.e(e).then(t,(function(e){throw t(),e}));function t(){v--,"prepare"===d&&(w[e]||C(e),0===v&&0===b&&E())}},i.t=function(e,t){return 1&t&&(e=i(e)),M.t(e,-2&t)},i}function c(t){var i={_acceptedDependencies:{},_declinedDependencies:{},_selfAccepted:!1,_selfDeclined:!1,_selfInvalidated:!1,_disposeHandlers:[],_main:n!==t,active:!0,accept:function(e,t){if(void 0===e)i._selfAccepted=!0;else if("function"==typeof e)i._selfAccepted=e;else if("object"==typeof e)for(var n=0;n=0&&i._disposeHandlers.splice(t,1)},invalidate:function(){switch(this._selfInvalidated=!0,d){case"idle":(h={})[t]=e[t],f("ready");break;case"ready":T(t);break;case"prepare":case"check":case"dispose":case"apply":(g=g||[]).push(t)}},check:A,apply:S,status:function(e){if(!e)return d;u.push(e)},addStatusHandler:function(e){u.push(e)},removeStatusHandler:function(e){var t=u.indexOf(e);t>=0&&u.splice(t,1)},data:o[t]};return n=void 0,i}var u=[],d="idle";function f(e){d=e;for(var t=0;t0;){var r=i.pop(),o=r.id,a=r.chain;if((u=z[o])&&(!u.hot._selfAccepted||u.hot._selfInvalidated)){if(u.hot._selfDeclined)return{type:"self-declined",chain:a,moduleId:o};if(u.hot._main)return{type:"unaccepted",chain:a,moduleId:o};for(var s=0;s ")),E.type){case"self-declined":i.onDeclined&&i.onDeclined(E),i.ignoreDeclined||(S=new Error("Aborted because of self decline: "+E.moduleId+P));break;case"declined":i.onDeclined&&i.onDeclined(E),i.ignoreDeclined||(S=new Error("Aborted because of declined dependency: "+E.moduleId+" in "+E.parentId+P));break;case"unaccepted":i.onUnaccepted&&i.onUnaccepted(E),i.ignoreUnaccepted||(S=new Error("Aborted because "+d+" is not accepted"+P));break;case"accepted":i.onAccepted&&i.onAccepted(E),T=!0;break;case"disposed":i.onDisposed&&i.onDisposed(E),D=!0;break;default:throw new Error("Unexception type "+E.type)}if(S)return f("abort"),Promise.reject(S);if(T)for(d in y[d]=h[d],b(w,E.outdatedModules),E.outdatedDependencies)Object.prototype.hasOwnProperty.call(E.outdatedDependencies,d)&&(v[d]||(v[d]=[]),b(v[d],E.outdatedDependencies[d]));D&&(b(w,[E.moduleId]),y[d]=A)}var F,I=[];for(l=0;l0;)if(d=L.pop(),u=z[d]){var B={},H=u.hot._disposeHandlers;for(c=0;c=0&&R.parents.splice(F,1))}}for(d in v)if(Object.prototype.hasOwnProperty.call(v,d)&&(u=z[d]))for(O=v[d],c=0;c=0&&u.children.splice(F,1);f("apply"),void 0!==m&&(r=m,m=void 0);for(d in h=void 0,y)Object.prototype.hasOwnProperty.call(y,d)&&(e[d]=y[d]);var j=null;for(d in v)if(Object.prototype.hasOwnProperty.call(v,d)&&(u=z[d])){O=v[d];var V=[];for(l=0;l=0&&i._disposeHandlers.splice(t,1)},invalidate:function(){switch(this._selfInvalidated=!0,d){case"idle":(h={})[t]=e[t],f("ready");break;case"ready":T(t);break;case"prepare":case"check":case"dispose":case"apply":(g=g||[]).push(t)}},check:A,apply:S,status:function(e){if(!e)return d;u.push(e)},addStatusHandler:function(e){u.push(e)},removeStatusHandler:function(e){var t=u.indexOf(e);t>=0&&u.splice(t,1)},data:o[t]};return n=void 0,i}var u=[],d="idle";function f(e){d=e;for(var t=0;t0;){var r=i.pop(),o=r.id,a=r.chain;if((u=z[o])&&(!u.hot._selfAccepted||u.hot._selfInvalidated)){if(u.hot._selfDeclined)return{type:"self-declined",chain:a,moduleId:o};if(u.hot._main)return{type:"unaccepted",chain:a,moduleId:o};for(var s=0;s ")),E.type){case"self-declined":i.onDeclined&&i.onDeclined(E),i.ignoreDeclined||(S=new Error("Aborted because of self decline: "+E.moduleId+P));break;case"declined":i.onDeclined&&i.onDeclined(E),i.ignoreDeclined||(S=new Error("Aborted because of declined dependency: "+E.moduleId+" in "+E.parentId+P));break;case"unaccepted":i.onUnaccepted&&i.onUnaccepted(E),i.ignoreUnaccepted||(S=new Error("Aborted because "+d+" is not accepted"+P));break;case"accepted":i.onAccepted&&i.onAccepted(E),T=!0;break;case"disposed":i.onDisposed&&i.onDisposed(E),D=!0;break;default:throw new Error("Unexception type "+E.type)}if(S)return f("abort"),Promise.reject(S);if(T)for(d in y[d]=h[d],b(w,E.outdatedModules),E.outdatedDependencies)Object.prototype.hasOwnProperty.call(E.outdatedDependencies,d)&&(v[d]||(v[d]=[]),b(v[d],E.outdatedDependencies[d]));D&&(b(w,[E.moduleId]),y[d]=A)}var F,I=[];for(l=0;l0;)if(d=L.pop(),u=z[d]){var B={},H=u.hot._disposeHandlers;for(c=0;c=0&&R.parents.splice(F,1))}}for(d in v)if(Object.prototype.hasOwnProperty.call(v,d)&&(u=z[d]))for(O=v[d],c=0;c=0&&u.children.splice(F,1);f("apply"),void 0!==m&&(r=m,m=void 0);for(d in h=void 0,y)Object.prototype.hasOwnProperty.call(y,d)&&(e[d]=y[d]);var j=null;for(d in v)if(Object.prototype.hasOwnProperty.call(v,d)&&(u=z[d])){O=v[d];var V=[];for(l=0;l=k},s=function(){},t.unstable_forceFrameRate=function(e){0>e||125>>1,r=e[i];if(!(void 0!==r&&0T(a,n))void 0!==l&&0>T(l,a)?(e[i]=l,e[s]=n,i=s):(e[i]=a,e[o]=n,i=o);else{if(!(void 0!==l&&0>T(l,n)))break e;e[i]=l,e[s]=n,i=s}}}return t}return null}function T(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var z=[],M=[],D=1,P=null,F=3,I=!1,N=!1,O=!1;function L(e){for(var t=S(M);null!==t;){if(null===t.callback)_(M);else{if(!(t.startTime<=e))break;_(M),t.sortIndex=t.expirationTime,E(z,t)}t=S(M)}}function B(e){if(O=!1,L(e),!N)if(null!==S(z))N=!0,i(H);else{var t=S(M);null!==t&&r(B,t.startTime-e)}}function H(e,n){N=!1,O&&(O=!1,o()),I=!0;var i=F;try{for(L(n),P=S(z);null!==P&&(!(P.expirationTime>n)||e&&!a());){var s=P.callback;if(null!==s){P.callback=null,F=P.priorityLevel;var l=s(P.expirationTime<=n);n=t.unstable_now(),"function"==typeof l?P.callback=l:P===S(z)&&_(z),L(n)}else _(z);P=S(z)}if(null!==P)var c=!0;else{var u=S(M);null!==u&&r(B,u.startTime-n),c=!1}return c}finally{P=null,F=i,I=!1}}function R(e){switch(e){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1e4;default:return 5e3}}var j=s;t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){N||I||(N=!0,i(H))},t.unstable_getCurrentPriorityLevel=function(){return F},t.unstable_getFirstCallbackNode=function(){return S(z)},t.unstable_next=function(e){switch(F){case 1:case 2:case 3:var t=3;break;default:t=F}var n=F;F=t;try{return e()}finally{F=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=j,t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=F;F=e;try{return t()}finally{F=n}},t.unstable_scheduleCallback=function(e,n,a){var s=t.unstable_now();if("object"==typeof a&&null!==a){var l=a.delay;l="number"==typeof l&&0s?(e.sortIndex=l,E(M,e),null===S(z)&&e===S(M)&&(O?o():O=!0,r(B,l-s))):(e.sortIndex=a,E(z,e),N||I||(N=!0,i(H))),e},t.unstable_shouldYield=function(){var e=t.unstable_now();L(e);var n=S(z);return n!==P&&null!==P&&null!==n&&null!==n.callback&&n.startTime<=e&&n.expirationTime0&&(i.state.activeIds=i.state.groups.get(0).activeIds),e.story&&(i.state.authorName=e.story.author_name),i.filePath=s.default.createRef(),i.dismissWarning=i.dismissWarning.bind(i),i.updateGroups=i.updateGroups.bind(i),i.openFileBrowser=i.openFileBrowser.bind(i),i.onFileSelected=i.onFileSelected.bind(i),i.openVisDataBrowser=i.openVisDataBrowser.bind(i),i.onVisDataSelected=i.onVisDataSelected.bind(i),i.interactor=i.interactor.bind(i),i.arrowClick=i.arrowClick.bind(i),i.lassoClick=i.lassoClick.bind(i),i.deleteArrow=i.deleteArrow.bind(i),i.deleteOverlay=i.deleteOverlay.bind(i),i.addArrowText=i.addArrowText.bind(i),i.boxClick=i.boxClick.bind(i),i.handleChange=i.handleChange.bind(i),i.handleSelect=i.handleSelect.bind(i),i.handleSelectStory=i.handleSelectStory.bind(i),i.handleSelectStoryMasks=i.handleSelectStoryMasks.bind(i),i.handleSelectVis=i.handleSelectVis.bind(i),i.handleStoryName=i.handleStoryName.bind(i),i.handleStoryText=i.handleStoryText.bind(i),i.handleArrowText=i.handleArrowText.bind(i),i.handleSampleText=i.handleSampleText.bind(i),i.handleSampleName=i.handleSampleName.bind(i),i.handleRotation=i.handleRotation.bind(i),i.handleArrowHide=i.handleArrowHide.bind(i),i.handleArrowAngle=i.handleArrowAngle.bind(i),i.handleStoryChange=i.handleStoryChange.bind(i),i.handleClusterChange=i.handleClusterChange.bind(i),i.handleClusterInsert=i.handleClusterInsert.bind(i),i.handleClusterRemove=i.handleClusterRemove.bind(i),i.handleStoryInsert=i.handleStoryInsert.bind(i),i.handleStoryRemove=i.handleStoryRemove.bind(i),i.handleAuthorName=i.handleAuthorName.bind(i),i.deleteStory=i.deleteStory.bind(i),i.deleteCluster=i.deleteCluster.bind(i),i.handleSelectGroup=i.handleSelectGroup.bind(i),i.handleViewport=i.handleViewport.bind(i),i.toggleTextEdit=i.toggleTextEdit.bind(i),i.toggleSampleInfo=i.toggleSampleInfo.bind(i),i.submitSampleInfo=i.submitSampleInfo.bind(i),i.toggleModal=i.toggleModal.bind(i),i.save=i.save.bind(i),i.share=i.share.bind(i),i.deleteActiveGroup=i.deleteActiveGroup.bind(i),i.showRenameModal=i.showRenameModal.bind(i),i.showAddGroupModal=i.showAddGroupModal.bind(i),i.handleGroupRename=i.handleGroupRename.bind(i),i.handleAddGroup=i.handleAddGroup.bind(i),i.getCreateLabel=i.getCreateLabel.bind(i),i.labelRGBA=i.labelRGBA.bind(i),i.defaultStory=i.defaultStory.bind(i),i.handleUpdateMask=i.handleUpdateMask.bind(i),i.handleMaskChange=i.handleMaskChange.bind(i),i.handleMaskInsert=i.handleMaskInsert.bind(i),i.handleMaskRemove=i.handleMaskRemove.bind(i),i.deleteMask=i.deleteMask.bind(i),i.openMaskBrowser=i.openMaskBrowser.bind(i),i.onMaskSelected=i.onMaskSelected.bind(i),i}var n,a;return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),r(t,[{key:"defaultStory",value:function(){var e=this.state,t=(e.stories,e.activeStory,e.activeGroup),n=e.viewport;return{text:"",name:"",masks:[],arrows:[],overlays:[],group:t,pan:[n?n.getCenter().x:.5,n?n.getCenter().y:.5],zoom:n?n.getZoom():1,visLabels:new Map([[0,{value:0,id:0,label:"VisScatterplot",colormapInvert:!1,data:"",x:"",y:"",cluster:-1,clusters:new Map([])}],[1,{value:1,id:1,label:"VisCanvasScatterplot",colormapInvert:!1,data:"",x:"",y:"",cluster:-1,clusters:new Map([])}],[2,{value:2,id:2,label:"VisMatrix",colormapInvert:!1,data:"",x:"",y:"",cluster:-1,clusters:new Map([])}],[3,{value:3,id:3,label:"VisBarChart",colormapInvert:!1,data:"",x:"",y:"",cluster:-1,clusters:new Map([])}]])}}},{key:"componentDidMount",value:function(){this.labelRGBA(),this.setMaskPathStatusPolling(!0)}},{key:"componentWillUnmount",value:function(){this.setMaskPathStatusPolling(!1)}},{key:"labelRGBA",value:function(){this.state.rgba&&this.setState({activeGroup:0,groups:new Map([[0,{value:0,label:"H&E",activeIds:[0,1],chanRender:new Map([[0,{id:0,value:0,color:[128,0,128],range:{min:0,max:65535},maxRange:65535,visible:!0}],[1,{id:1,value:1,color:[255,0,255],range:{min:0,max:65535},maxRange:65535,visible:!0}]])}]]),activeIds:[0,1],chanLabel:new Map([[0,{id:0,value:0,label:"Hematoxylin"}],[1,{id:1,value:1,label:"Eosin"}]])})}},{key:"handleViewport",value:function(e){var t=this.state,n=t.stories,i=t.activeStory,r=(t.activeGroup,n.get(i)||this.defaultStory());r.zoom=e.getZoom(),r.pan=[e.getCenter().x,e.getCenter().y];var o=new Map([].concat(E(n),E(new Map([[i,r]]))));this.setState({viewport:e}),this.state.textEdit&&this.setState({stories:o})}},{key:"handleStoryChange",value:function(e){var t=this.state,n=t.groups,i=t.stories,r=t.viewport,o=i.get(e)||this.defaultStory();if(o&&r){var a=new(Function.prototype.bind.apply(OpenSeadragon.Point,[null].concat(E(o.pan))));r.zoomTo(o.zoom),r.panTo(a)}if(this.setState({activeStory:e,activeVisLabel:{value:-1,id:-1,label:"",colormapInvert:!1,data:"",x:"",y:"",cluster:-1,clusters:new Map([])}}),o){var s=n.get(o.group);s&&this.setState({activeGroup:o.group,activeIds:s.activeIds})}}},{key:"handleClusterRemove",value:function(){var e=this.state.activeVisLabel;void 0===e.clusters.get(e.cluster)?this.deleteCluster():this.setState({deleteClusterModal:!0})}},{key:"deleteCluster",value:function(){var e=this.state.activeVisLabel,t=this.state.stories.get(this.state.activeStory)||this.defaultStory(),n=new Map([].concat(E(e.clusters)).filter((function(t){var n=o(t,2),i=n[0];n[1];return i!=e.cluster})).map((function(t){var n=o(t,2),i=n[0],r=n[1];return[in&&(i=!0),e.id})),chanRender:new Map([].concat(E(t.state.chanRender),E(new Map(e.channels.map((function(e){return[e.id,{color:D(e.color),range:{min:65535*e.min,max:65535*e.max},maxRange:65535,value:e.id,id:e.id,visible:!0}]})))))),label:e.label,value:r}]})));i?this.setState({error:"Unsupported case of dat file with excess channels"}):this.setState({groups:r})}},{key:"submitSampleInfo",value:function(){var e=this;fetch("http://127.0.0.1:2020/api/import/groups",{method:"POST",body:JSON.stringify({filepath:this.filePath.current.value}),headers:{"Content-Type":"application/json"}}).then((function(t){return t.ok?t.json():404==t.status?(e.setState({error:"Imported dat file is not found."}),null):(e.setState({error:"Imported dat file is invalid."}),null)})).then((function(t){t&&e.updateGroups(t.groups)}))}},{key:"toggleSampleInfo",value:function(){this.setState({sampleInfo:!this.state.sampleInfo});var e=!!this.filePath.current&&this.filePath.current.value;this.state.sampleInfo&&e&&this.submitSampleInfo()}},{key:"toggleTextEdit",value:function(e){var t=this.state,n=t.textEdit,i=t.activeStory;this.setState({textEdit:e,saveProgress:0,saveProgressMax:0}),n||this.handleStoryChange(i)}},{key:"showAddGroupModal",value:function(){this.setState({needNewGroup:!this.state.addGroupModal}),this.setState({addGroupModal:!this.state.addGroupModal})}},{key:"showRenameModal",value:function(){this.setState({renameModal:!this.state.renameModal})}},{key:"validateChannelGroupLabel",value:function(e){var t=this.state.groups,n=e&&S.test(e),i=-1==Array.from(t).map((function(e){var t=o(e,2);t[0];return t[1].label})).indexOf(e);return n&&i}},{key:"handleAddGroup",value:function(e){if(this.validateChannelGroupLabel(e.target.value)){this.setState({invalidChannelGroupName:!1});var t=this.state.groups;if(this.state.needNewGroup){var n=t.size,i={chanRender:this.state.chanRender,activeIds:this.state.activeIds,label:e.target.value,value:n},r=new Map([].concat(E(t),E(new Map([[n,i]]))));this.setState({needNewGroup:!1,groups:r,activeGroup:n})}else this.handleGroupRename(e)}else this.setState({invalidChannelGroupName:!0})}},{key:"handleGroupRename",value:function(e){if(this.validateChannelGroupLabel(e.target.value)){this.setState({invalidChannelGroupName:!1});var t=this.state.groups.get(this.state.activeGroup),n=new Map(this.state.groups);t.label=e.target.value,n.set(this.state.activeGroup,t),this.setState({groups:n})}else this.setState({invalidChannelGroupName:!0})}},{key:"deleteActiveGroup",value:function(){this.state.groups.delete(this.state.activeGroup);var e=new Map,t=!0,n=!1,i=void 0;try{for(var r,a=this.state.groups.entries()[Symbol.iterator]();!(t=(r=a.next()).done);t=!0){var s=r.value,l=o(s,2),c=l[0],u=l[1];c>this.state.activeGroup&&(c--,u.value--),e.set(c,u)}}catch(e){n=!0,i=e}finally{try{!t&&a.return&&a.return()}finally{if(n)throw i}}var d=this.state.activeGroup-1;d<0&&(d=0);var f=e.get(d),p=f?f.activeIds:[0,1];this.setState({groups:e,activeGroup:d,deleteGroupModal:!1,activeIds:p})}},{key:"handleSelectStory",value:function(e){this.handleStoryChange(e.value)}},{key:"handleSelectVis",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:new Map([]),a=this.state.stories.get(this.state.activeStory)||this.defaultStory(),s={colormapInvert:null!=r?r:e.colormapInvert,clusters:o?new Map([].concat(E(e.clusters),E(o))):e.clusters,cluster:o.size?o.keys().next().value:e.cluster,id:e.id,value:e.value,label:e.label,data:null!=t?t:e.data,x:null!=n?n:e.x,y:null!=i?i:e.y};a.visLabels=new Map([].concat(E(a.visLabels),E(new Map([[s.id,s]])))),this.setState({activeVisLabel:s,stories:new Map([].concat(E(this.state.stories),E(new Map([[this.state.activeStory,a]]))))})}},{key:"handleClusterChange",value:function(e){var t=this.state.stories.get(this.state.activeStory)||this.defaultStory(),n=this.state.activeVisLabel;n.clusters.get(e)&&(n.cluster=e,t.visLabels=new Map([].concat(E(t.visLabels),E(new Map([[n.id,n]])))),this.setState({activeVisLabel:n,stories:new Map([].concat(E(this.state.stories),E(new Map([[this.state.activeStory,t]]))))}))}},{key:"handleUpdateMask",value:function(e){var t=Math.max(0,this.state.activeMaskId);this.setState({activeMaskId:t,masks:new Map([].concat(E(this.state.masks),E(new Map([[t,e]]))))})}},{key:"handleMaskChange",value:function(e){this.setState({activeMaskId:e})}},{key:"handleMaskInsert",value:function(){var e=this.state.stories,t=this.state.activeMaskId+1,n={path:"",name:""+(t+1),color:D("#FFFFFF")},i=new Map([].concat(E([].concat(E(this.state.masks)).map((function(e){var n=o(e,2),i=n[0],r=n[1];return[i5&&void 0!==arguments[5])||arguments[5],s=this.state,l=s.chanRender,c=s.chanLabel,u=s.groups,d=s.activeGroup,f=u.get(d),p=i({},l.get(e));f&&(p=i({},f.chanRender.get(e)));var h=i({},c.get(e));t&&(p.color=t),n&&(p.range=n),null!==r&&(h.label=r),null!==o&&(p.visible=o);var m=new Map([].concat(E(c),E(new Map([[e,h]]))));if(this.setState({chanLabel:m}),f){var g=i({},f),b=new Map([].concat(E(f.chanRender),E(new Map([[e,p]]))));g.chanRender=b;var v=new Map([].concat(E(u),E(new Map([[d,g]]))));this.setState({groups:v})}var w=new Map([].concat(E(l),E(new Map([[e,p]]))));this.setState({chanRender:w,rangeSliderComplete:a})}},{key:"createMaskOutput",value:function(e){return Array.from(e.values()).map((function(e){var t=[{color:M(e.color),label:e.name}];return{label:e.name,path:e.path,channels:t}}))}},{key:"createGroupOutput",value:function(e,t){var n=this;return Array.from(e.values()).map((function(e){var i=e.activeIds.map((function(n){var i=e.chanRender.get(n);return{color:M(i.color),min:i.range.min/i.maxRange,max:i.range.max/i.maxRange,label:t.get(n).label,id:n}})),r=i;n.state.rgba&&(r=Array.from(n.RGBAChannels().values()).map((function(e){return{color:M(e.color),min:e.range.min/e.maxRange,max:e.range.max/e.maxRange,label:e.label,id:e.id}})));var o={label:e.label,channels:i,render:r};return e.id&&(o.id=e.id),e.uuid&&(o.uuid=e.uuid),o}))}},{key:"createStoryDefinition",value:function(e,t){var n={waypoints:e,groups:t,sample_info:{rotation:this.state.rotation,name:this.state.sampleName,text:this.state.sampleText},image_name:this.state.imageName,author_name:this.state.authorName};return this.state.storyUuid&&(n.uuid=this.state.storyUuid),this.state.img.uuid&&(n.imageUuid=this.state.img.uuid),n}},{key:"createWaypoints",value:function(e){var t=this.state,n=(t.masks,t.groups);return Array.from(e.values()).map((function(e){var t={name:e.name,text:e.text,pan:e.pan,zoom:e.zoom,masks:e.masks,arrows:e.arrows,overlays:e.overlays,group:n.get(e.group).label};return Array.from(e.visLabels.values()).forEach((function(e){e.value<2?""!=e.data&&(t[e.label]={data:e.data,axes:{x:e.x,y:e.y},clusters:{labels:Array.from(e.clusters.values()).map((function(e){return e.name})).join(","),reorder:Array.from(e.clusters.values()).map((function(e){return e.name})).join(","),colors:Array.from(e.clusters.values()).map((function(e){return M(e.color)})).join(",")}}):2==e.value?""!=e.data&&(t[e.label]={data:e.data,colormapInvert:e.colormapInvert}):""!=e.data&&(t[e.label]=e.data)})),t}))}},{key:"save",value:function(){var e=this,t=this.state,n=t.groups,i=t.masks,r=this.state,o=r.stories,a=r.chanLabel,s=this.state.img,l="cloud"===this.props.env,c=this.createMaskOutput(i),u=this.createGroupOutput(n,a),d=this.createWaypoints(o),f=this.createStoryDefinition(d,u);if(this.setState({saving:!0}),l)this.saveRenderingSettings(s.uuid,u).then((function(t){v.default.saveStory(f).then((function(t){e.setState({saving:!1,storyUuid:t.uuid})})).catch((function(t){console.error(t),e.setState({saving:!1})}))}));else{var p=fetch("http://localhost:2020/api/render",{method:"POST",body:JSON.stringify({masks:c,groups:u,waypoints:d,header:this.state.sampleText,rotation:this.state.rotation,image:{description:this.state.sampleName}}),headers:{"Content-Type":"application/json"}}),h=fetch("http://localhost:2020/api/save",{method:"POST",body:JSON.stringify({waypoints:d,groups:u,masks:c,sample_info:{rotation:this.state.rotation,name:this.state.sampleName,text:this.state.sampleText}}),headers:{"Content-Type":"application/json"}});this.setProgressPolling(!0),Promise.all([p,h]).then((function(t){e.setState({saving:!1}),e.setProgressPolling(!1),e.getSaveProgress()})).catch((function(t){console.error(t),e.setState({saving:!1}),e.setProgressPolling(!1)}))}}},{key:"saveRenderingSettings",value:function(e,t){var n=this;return v.default.createRenderingSettings(e,{groups:t}).then((function(e){var t=new Map(n.state.groups);e.groups.forEach((function(e,n){t.get(n).id=e.id,t.get(n).uuid=e.uuid})),n.setState({groups:t})})).catch((function(e){console.error(e),n.setState({saving:!1})}))}},{key:"setProgressPolling",value:function(e){var t=this;e?this.progressInterval=setInterval((function(){t.getSaveProgress()}),500):clearInterval(this.progressInterval)}},{key:"getSaveProgress",value:function(){var e=this;fetch("http://127.0.0.1:2020/api/render/progress").then((function(e){return e.json()})).then((function(t){t.progress>=t.max&&0!=t.max&&e.setState({saved:!0}),e.setState({saveProgress:t.progress,saveProgressMax:t.max})}))}},{key:"getCreateLabel",value:function(e){return this.validateChannelGroupLabel(e)?"Create Group: "+e:"Name contains invalid characters."}},{key:"openFileBrowser",value:function(){this.setState({showFileBrowser:!0})}},{key:"onFileSelected",value:function(e){this.setState({showFileBrowser:!1}),e&&e.path&&(this.filePath.current.value=e.path)}},{key:"openVisDataBrowser",value:function(){this.setState({showVisDataBrowser:!0})}},{key:"onVisDataSelected",value:function(e){this.setState({showVisDataBrowser:!1}),e&&e.path&&this.handleSelectVis(this.state.activeVisLabel,e.path)}},{key:"openMaskBrowser",value:function(){this.setState({showMaskBrowser:!0})}},{key:"fetchMaskPathStatus",value:(a=A(regeneratorRuntime.mark((function e(t){var n,i,r;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=encodeURIComponent(encodeURIComponent(t)),e.next=3,fetch("http://localhost:2020/api/validate/u32/"+n,{headers:{pragma:"no-cache","cache-control":"no-store"}});case 3:return i=e.sent,e.prev=4,r=(0,m.handleFetchErrors)(i),e.abrupt("return",r.json());case 9:return e.prev=9,e.t0=e.catch(4),console.error(e.t0),e.abrupt("return",{invalid:!0,ready:!1,path:""});case 13:case"end":return e.stop()}}),e,this,[[4,9]])}))),function(e){return a.apply(this,arguments)})},{key:"updateMaskPathStatus",value:(n=A(regeneratorRuntime.mark((function e(){var t,n,i,r,a,s,l,c,u,d;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=this.state,n=t.masks,i=t.maskPathStatus,r=[].concat(E(n)).map((function(e){var t=o(e,2);return t[0],t[1].path})),a=r.filter((function(e){var t=i.get(e);return!(t&&t.ready)})),e.t0=Map,e.next=6,Promise.all(a.map(this.fetchMaskPathStatus));case 6:e.t1=function(e,t){return[a[t],e]},e.t2=e.sent.map(e.t1),s=new e.t0(e.t2),l=a.filter((function(e){var t=s.get(e);return!t||t.invalid})),c=null,l.length&&(u=1===l.length?"":"s",d=[].concat(E(n)).reduce((function(e,t){var n=o(t,2),i=n[0],r=n[1];return l.includes(r.path)?""==e?"#"+(i+1):e+", #"+(i+1):e}),""),c=l.length+" invalid mask path"+u+": "+d),this.setState({error:c,maskPathStatus:new Map([].concat(E(i),E(s)))});case 13:case"end":return e.stop()}}),e,this)}))),function(){return n.apply(this,arguments)})},{key:"setMaskPathStatusPolling",value:function(e){var t=this;e?this.maskPathStatusInterval=setInterval((function(){t.updateMaskPathStatus()}),3e3):clearInterval(this.maskPathStatusInterval)}},{key:"onMaskSelected",value:function(e){this.setState({showMaskBrowser:!1});var t=this.state,n=t.masks,i=t.activeMaskId,r=n.get(i);void 0===r&&(r={color:[255,255,255],name:"",path:""}),e&&e.path&&this.handleUpdateMask({name:r.name,path:e.path,color:r.color})}},{key:"dismissWarning",value:function(){this.setState({warning:""})}},{key:"preview",value:function(){var e=this.state,t=e.groups,n=e.chanLabel,i=this.createGroupOutput(t,n),r=this.createWaypoints(this.state.stories),o=this.createStoryDefinition(r,i);this.props.onPreview(!0,o)}},{key:"setPublishStoryModal",value:function(e){this.setState({showPublishStoryModal:e})}},{key:"share",value:function(){var e=this,t=document.location.protocol+"//"+document.location.host+document.location.pathname+"?story="+this.state.storyUuid;navigator.clipboard&&navigator.clipboard.writeText(t),this.setState({shareTooltip:"Link copied to clipboard"}),setTimeout((function(){e.setState({shareTooltip:null})}),5e3)}},{key:"exit",value:function(){window.confirm("Close the story? Unsaved progress will be lost.")&&window.open("/","_self")}},{key:"renderWarning",value:function(){return this.state.warning?s.default.createElement("div",{className:"import-warning"},s.default.createElement("div",{className:"ui icon message"},s.default.createElement(w.FontAwesomeIcon,{className:"icon",icon:y.faExclamationCircle}),s.default.createElement("div",{className:"content"},s.default.createElement("div",{className:"header"},this.state.warning),s.default.createElement("button",{className:"ui button compact ml-1 mr-1",onClick:this.dismissWarning},"Dismiss")))):null}},{key:"renderErrors",value:function(){return this.state.error?s.default.createElement("div",{className:"import-errors"},s.default.createElement("div",{className:"ui icon message"},s.default.createElement(w.FontAwesomeIcon,{className:"icon",icon:y.faExclamationCircle}),s.default.createElement("div",{className:"content"},s.default.createElement("div",{className:"header"},this.state.error)))):null}},{key:"RGBAChannels",value:function(){return new Map([[0,{id:0,label:"Red",color:[255,0,0],range:{min:0,max:65535},maxRange:255}],[1,{id:1,label:"Green",color:[0,255,0],range:{min:0,max:65535},maxRange:255}],[2,{id:2,label:"Blue",color:[0,0,255],range:{min:0,max:65535},maxRange:255}]])}},{key:"render",value:function(){var e=this,t=this.state.rgba,n="cloud"===this.props.env,r=this.state.activeVisLabel,a=this.state,m=a.img,v=a.groups,k=a.chanLabel,A=a.textEdit,C=this.state,S=C.chanRender,_=C.activeIds,T=C.activeGroup,z=v.get(T),M=new Map(_.map((function(e){return[e,S.get(e)]})));z&&(M=new Map(_.map((function(e){return[e,z.chanRender.get(e)]}))));var D=new Map(_.map((function(e){return[e,k.get(e)]}))),P=new Map(_.map((function(e){return[e,i({},D.get(e),M.get(e))]}))),F=new Map([].concat(E(P)).filter((function(e){var t=o(e,2);t[0];return t[1].visible}))),I=F;t&&(I=this.RGBAChannels());var N=this.state.maskPathStatus,O=this.state,L=O.stories,B=O.activeStory,H=O.masks,R=O.activeMaskId,j=L.get(B)||this.defaultStory();F=new Map([].concat(E(F),E(new Map(j.masks.map((function(e){var t="mask_"+e,n=H.get(e);return n.range={max:16777215,min:0},n.u32=!0,n.key=encodeURIComponent(encodeURIComponent(n.path)),n.maxRange=16777215,n.visible=!0,n.value=t,n.label=t,n.id=t,[t,n]})).filter((function(e){var t=o(e,2),n=(t[0],t[1]),i=N.get(n.path);return!!i&&i.ready}))))));var V=j.visLabels,U=j.name,W=j.text,G=j.masks,Y=j.overlays,q=j.arrows,X=this.state.activeArrow,Q="";q.length>0&&(Q=q[X].text);var Z="";q.length>0&&(Z=q[X].angle);var K=!1;q.length>0&&(K=q[X].hide);var J=void 0;J=n?s.default.createElement(c.default,{className:"ImageView",img:m,channels:I,overlays:Y,arrows:q,handleViewport:this.handleViewport,interactor:this.interactor,rotation:this.state.rotation,rangeSliderComplete:this.state.rangeSliderComplete}):t?s.default.createElement(u.default,{className:"ImageView",img:m,channels:F,overlays:Y,arrows:q,handleViewport:this.handleViewport,interactor:this.interactor,rotation:this.state.rotation}):s.default.createElement(p.default,{className:"ImageView",img:m,channels:F,overlays:Y,arrows:q,handleViewport:this.handleViewport,interactor:this.interactor,rotation:this.state.rotation});var $="";null!=z&&($=s.default.createElement("button",{className:"ui button primary",onClick:this.save,disabled:this.state.saving,title:"Save story"},s.default.createElement(w.FontAwesomeIcon,{icon:y.faSave}),"  Save ",s.default.createElement(b.default,{animation:"border",size:12,color:"#FFFFFF",loading:this.state.saving})));var ee=s.default.createElement("button",{className:"ui button teal",onClick:function(){return e.preview()},title:"Preview story"},s.default.createElement(w.FontAwesomeIcon,{icon:y.faEye}),"  Preview"),te=s.default.createElement("button",{className:"ui button teal",onClick:function(){return e.share()},title:"Share story","data-tooltip":this.state.shareTooltip,"data-position":"bottom center"},s.default.createElement(w.FontAwesomeIcon,{icon:y.faShare}),"  Share"),ne=s.default.createElement("button",{className:"ui button primary",disabled:this.state.publishing,onClick:function(){return e.setPublishStoryModal(!0)},title:"Publish story"},s.default.createElement(w.FontAwesomeIcon,{icon:y.faBullhorn}),"  Publish ",s.default.createElement(b.default,{animation:"border",size:12,color:"#FFFFFF",loading:this.state.publishing}));"local"===this.props.env&&(ee=null,te=null,ne=null,this.state.saved&&(ee=s.default.createElement("button",{className:"ui button teal",onClick:function(){return window.open("/story")},title:"Preview story"},s.default.createElement(w.FontAwesomeIcon,{icon:y.faEye}),"  Preview"))),this.state.storyUuid||(te=null,ne=null);var ie=this.state.textEdit?"ui button":"ui button active",re=this.state.textEdit?"ui button active":"ui button",oe="";oe=t?s.default.createElement("span",{className:"ui buttons"},s.default.createElement("button",{className:"ui button",onClick:function(){return e.toggleSampleInfo()}},"Sample Info"),ee,te,$,ne):s.default.createElement("div",{className:"row"},s.default.createElement("span",{className:"ui buttons"},s.default.createElement("button",{className:"ui button",onClick:function(){return e.toggleSampleInfo()}},"Sample Info"),s.default.createElement("button",{className:ie,onClick:function(){return e.toggleTextEdit(!1)}},"Edit Groups"),s.default.createElement("button",{className:re,onClick:function(){return e.toggleTextEdit(!0)}},"Edit Story"),ee,te,$,ne));var ae="";return t||(ae=s.default.createElement("div",{className:"row"},s.default.createElement("div",{className:"col pr-0"},s.default.createElement("div",{className:"font-white mt-2"},"Channel Groups:"),s.default.createElement(l.default,{isClearable:!0,value:z,onChange:this.handleSelectGroup,options:Array.from(v.values()),formatCreateLabel:this.getCreateLabel})),s.default.createElement("div",{className:"col pl-0 pr-0 pt-3"},s.default.createElement("span",{className:"ui buttons"},this.renderAddGroupModal(),this.renderRenameModal())))),s.default.createElement("div",{className:"container-fluid Repo"},J,s.default.createElement(f.default,{toggle:this.toggleModal,show:this.state.showModal},s.default.createElement("button",{className:"ui button compact",onClick:this.handleArrowHide},K?"Show Arrow":"Hide Arrow"),s.default.createElement("form",{className:"ui form",onSubmit:this.toggleModal},s.default.createElement("input",{type:"text",placeholder:"Arrow Angle",value:Z,onChange:this.handleArrowAngle}),s.default.createElement("input",{type:"range",min:"0",max:"360",style:{width:"100%"},value:Z,onChange:this.handleArrowAngle}),s.default.createElement("textarea",{placeholder:"Arrow Description",value:Q,onChange:this.handleArrowText}))),s.default.createElement(f.default,{toggle:this.toggleSampleInfo,show:this.state.sampleInfo},s.default.createElement("form",{className:"ui form"},s.default.createElement("input",{type:"text",placeholder:"Sample Name",value:this.state.sampleName,onChange:this.handleSampleName}),s.default.createElement("textarea",{placeholder:"Sample Description",value:this.state.sampleText,onChange:this.handleSampleText}),s.default.createElement("input",{type:"text",placeholder:"Author Name",value:this.state.authorName,onChange:this.handleAuthorName}),s.default.createElement("div",{className:"field"},s.default.createElement("label",null,"Rotation (degrees)"),s.default.createElement("input",{type:"text",placeholder:"Rotation",value:this.state.rotation?this.state.rotation:"",onChange:this.handleRotation}),s.default.createElement("input",{type:"range",className:"image-rotation-range",min:"-180",max:"180",value:this.state.rotation,onChange:this.handleRotation,id:"myRange"})),s.default.createElement("div",{className:"ui action input"},s.default.createElement("input",{ref:this.filePath,className:"full-width-input",id:"filepath",name:"filepath",type:"text",placeholder:"Channel groups dat file"}),s.default.createElement("button",{type:"button",onClick:this.openFileBrowser,className:"ui button"},"Browse"),s.default.createElement(d.default,{open:this.state.showFileBrowser,close:this.onFileSelected,title:"Select a dat file",onFileSelected:this.onFileSelected,filter:["dat"]})))),s.default.createElement("div",{className:"row justify-content-between"},s.default.createElement("div",{className:"col-md-6 col-lg-6 col-xl-4 bg-trans"},oe,this.renderProgressBar(),s.default.createElement("div",{className:"pb-2"},ae),s.default.createElement(h.default,{minerva:n,rgba:this.state.rgba,stories:this.state.stories,addArrowText:this.addArrowText,deleteArrow:this.deleteArrow,deleteOverlay:this.deleteOverlay,drawType:this.state.drawType,arrowClick:this.arrowClick,lassoClick:this.lassoClick,boxClick:this.boxClick,handleChange:this.handleChange,handleSelect:this.handleSelect,handleSelectStory:this.handleSelectStory,handleSelectStoryMasks:this.handleSelectStoryMasks,chanLabel:k,activeChanLabel:D,activeChannels:P,textEdit:A,handleStoryName:this.handleStoryName,handleStoryText:this.handleStoryText,handleStoryChange:this.handleStoryChange,handleStoryInsert:this.handleStoryInsert,handleStoryRemove:this.handleStoryRemove,overlays:Y,arrows:q,storyName:U,storyText:W,storyMasks:G,activeStory:B,handleSelectVis:this.handleSelectVis,handleClusterChange:this.handleClusterChange,handleClusterInsert:this.handleClusterInsert,handleClusterRemove:this.handleClusterRemove,activeVisLabel:r,visLabels:V,showVisDataBrowser:this.state.showVisDataBrowser,openVisDataBrowser:this.openVisDataBrowser,onVisDataSelected:this.onVisDataSelected,masks:H,activeMaskId:R,maskPathStatus:N,handleUpdateMask:this.handleUpdateMask,handleMaskChange:this.handleMaskChange,handleMaskInsert:this.handleMaskInsert,handleMaskRemove:this.handleMaskRemove,showMaskBrowser:this.state.showMaskBrowser,openMaskBrowser:this.openMaskBrowser,onMaskSelected:this.onMaskSelected}),s.default.createElement(g.Confirm,{header:"Delete channel group",content:"Are you sure?",confirmButton:"Delete",size:"small",open:this.state.deleteGroupModal,onCancel:function(){e.setState({deleteGroupModal:!1})},onConfirm:this.deleteActiveGroup}),s.default.createElement(g.Confirm,{header:"Delete waypoint",content:"Are you sure?",confirmButton:"Delete",size:"small",open:this.state.deleteStoryModal,onCancel:function(){e.setState({deleteStoryModal:!1})},onConfirm:this.deleteStory}),s.default.createElement(g.Confirm,{header:"Delete cluster",content:"Are you sure?",confirmButton:"Delete",size:"small",open:this.state.deleteClusterModal,onCancel:function(){e.setState({deleteClusterModal:!1})},onConfirm:this.deleteCluster}),s.default.createElement(g.Confirm,{header:"Delete mask",content:"Are you sure?",confirmButton:"Delete",size:"small",open:this.state.deleteMaskModal,onCancel:function(){e.setState({deleteMaskModal:!1})},onConfirm:this.deleteMask})),this.renderWarning(),this.renderErrors(),this.renderExitButton(),s.default.createElement(x.default,{storyUuid:this.state.storyUuid,onClose:function(){return e.setPublishStoryModal(!1)},active:this.state.showPublishStoryModal})))}},{key:"renderAddGroupModal",value:function(){return s.default.createElement("div",{className:""},s.default.createElement("button",{className:"ui button compact ml-1 mr-1",onClick:this.showAddGroupModal},"Add Group"),s.default.createElement(f.default,{show:this.state.addGroupModal,toggle:this.showAddGroupModal},s.default.createElement("form",{className:"ui form",onSubmit:this.showAddGroupModal},s.default.createElement("label",{className:"ui label"},"Add group"),s.default.createElement(g.Popup,{trigger:s.default.createElement("input",{type:"text",onChange:this.handleAddGroup}),open:this.state.invalidChannelGroupName,content:"Channel group name must be unique and contain only letters, numbers, space, dash or underscore.",position:"top center"}))))}},{key:"renderRenameModal",value:function(){var e=this.state.groups.get(this.state.activeGroup);return e?s.default.createElement("div",{className:"all-pointer"},s.default.createElement("button",{className:"ui button compact",onClick:this.showRenameModal},"Rename"),s.default.createElement(f.default,{show:this.state.renameModal,toggle:this.showRenameModal},s.default.createElement("form",{className:"ui form",onSubmit:this.showRenameModal},s.default.createElement("label",{className:"ui label"},"Rename group"),s.default.createElement(g.Popup,{trigger:s.default.createElement("input",{type:"text",value:e.label,onChange:this.handleGroupRename}),open:this.state.invalidChannelGroupName,content:"Channel group name can contain only letters, numbers, space, dash or underscore.",position:"top center"})))):null}},{key:"renderProgressBar",value:function(){if(this.state.saveProgress<=0)return null;var e=Math.round(this.state.saveProgress/this.state.saveProgressMax*100);return s.default.createElement("div",{className:"row"},s.default.createElement("div",{className:"col"},s.default.createElement(g.Progress,{percent:e,color:"blue",progress:!0,autoSuccess:!0,active:!0})))}},{key:"renderExitButton",value:function(){return s.default.createElement("button",{type:"button",className:"ui button secondary exit-button",onClick:this.exit},"Close ",s.default.createElement(w.FontAwesomeIcon,{icon:y.faWindowClose}))}}]),t}(a.Component);t.default=P},function(e,t,n){"use strict";n.r(t),n.d(t,"defaultProps",(function(){return u})),n.d(t,"makeCreatableSelect",(function(){return d}));var i=n(0),r=n.n(i),o=(n(16),n(64),n(5),n(33)),a=n(97),s=(n(80),n(213),n(221));function l(){return(l=Object.assign||function(e){for(var t=1;tt?n[t]:void 0,p=c&&""!==c.angle?c.angle:60,h=61.4*Math.sin(p*Math.PI/180),m=61.4*Math.cos(p*Math.PI/180),g=2*m+200*Math.sign(Math.round(m))/2,b=2*h+50*Math.sign(Math.round(h))/2;c.hide&&(g=0,b=0);var v=f.default.div(o,m,h,p),w=f.default.div(a,g,b,200,50);return c.hide&&(v=f.default.div(s)),""===c.text&&(w=f.default.div(l)),u.default.createElement("div",{key:i},u.default.createElement(v,{id:i},u.default.createElement(d.default,null)),u.default.createElement(w,{id:r},c.text))}));return u.default.createElement("div",null,u.default.createElement("div",{ref:this.ImageViewRef,id:"ImageView"}),u.default.createElement("div",{className:"d-none"},A,C))}}]),t}(c.Component);t.default=w},function(e,t,n){"use strict"; + */var i,r,o,a,s;if("undefined"==typeof window||"function"!=typeof MessageChannel){var l=null,c=null,u=function(){if(null!==l)try{var e=t.unstable_now();l(!0,e),l=null}catch(e){throw setTimeout(u,0),e}},d=Date.now();t.unstable_now=function(){return Date.now()-d},i=function(e){null!==l?setTimeout(i,0,e):(l=e,setTimeout(u,0))},r=function(e,t){c=setTimeout(e,t)},o=function(){clearTimeout(c)},a=function(){return!1},s=t.unstable_forceFrameRate=function(){}}else{var f=window.performance,p=window.Date,h=window.setTimeout,m=window.clearTimeout;if("undefined"!=typeof console){var g=window.cancelAnimationFrame;"function"!=typeof window.requestAnimationFrame&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"),"function"!=typeof g&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills")}if("object"==typeof f&&"function"==typeof f.now)t.unstable_now=function(){return f.now()};else{var b=p.now();t.unstable_now=function(){return p.now()-b}}var v=!1,w=null,y=-1,x=5,k=0;a=function(){return t.unstable_now()>=k},s=function(){},t.unstable_forceFrameRate=function(e){0>e||125>>1,r=e[i];if(!(void 0!==r&&0T(a,n))void 0!==l&&0>T(l,a)?(e[i]=l,e[s]=n,i=s):(e[i]=a,e[o]=n,i=o);else{if(!(void 0!==l&&0>T(l,n)))break e;e[i]=l,e[s]=n,i=s}}}return t}return null}function T(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var z=[],M=[],D=1,P=null,F=3,I=!1,N=!1,O=!1;function L(e){for(var t=S(M);null!==t;){if(null===t.callback)_(M);else{if(!(t.startTime<=e))break;_(M),t.sortIndex=t.expirationTime,E(z,t)}t=S(M)}}function B(e){if(O=!1,L(e),!N)if(null!==S(z))N=!0,i(H);else{var t=S(M);null!==t&&r(B,t.startTime-e)}}function H(e,n){N=!1,O&&(O=!1,o()),I=!0;var i=F;try{for(L(n),P=S(z);null!==P&&(!(P.expirationTime>n)||e&&!a());){var s=P.callback;if(null!==s){P.callback=null,F=P.priorityLevel;var l=s(P.expirationTime<=n);n=t.unstable_now(),"function"==typeof l?P.callback=l:P===S(z)&&_(z),L(n)}else _(z);P=S(z)}if(null!==P)var c=!0;else{var u=S(M);null!==u&&r(B,u.startTime-n),c=!1}return c}finally{P=null,F=i,I=!1}}function R(e){switch(e){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1e4;default:return 5e3}}var j=s;t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){N||I||(N=!0,i(H))},t.unstable_getCurrentPriorityLevel=function(){return F},t.unstable_getFirstCallbackNode=function(){return S(z)},t.unstable_next=function(e){switch(F){case 1:case 2:case 3:var t=3;break;default:t=F}var n=F;F=t;try{return e()}finally{F=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=j,t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=F;F=e;try{return t()}finally{F=n}},t.unstable_scheduleCallback=function(e,n,a){var s=t.unstable_now();if("object"==typeof a&&null!==a){var l=a.delay;l="number"==typeof l&&0s?(e.sortIndex=l,E(M,e),null===S(z)&&e===S(M)&&(O?o():O=!0,r(B,l-s))):(e.sortIndex=a,E(z,e),N||I||(N=!0,i(H))),e},t.unstable_shouldYield=function(){var e=t.unstable_now();L(e);var n=S(z);return n!==P&&null!==P&&null!==n&&null!==n.callback&&n.startTime<=e&&n.expirationTime0&&(i.state.activeIds=i.state.groups.get(0).activeIds),e.story&&(i.state.authorName=e.story.author_name),i.filePath=s.default.createRef(),i.dismissWarning=i.dismissWarning.bind(i),i.updateGroups=i.updateGroups.bind(i),i.openFileBrowser=i.openFileBrowser.bind(i),i.onFileSelected=i.onFileSelected.bind(i),i.openVisDataBrowser=i.openVisDataBrowser.bind(i),i.onVisDataSelected=i.onVisDataSelected.bind(i),i.interactor=i.interactor.bind(i),i.arrowClick=i.arrowClick.bind(i),i.lassoClick=i.lassoClick.bind(i),i.deleteArrow=i.deleteArrow.bind(i),i.deleteOverlay=i.deleteOverlay.bind(i),i.addArrowText=i.addArrowText.bind(i),i.boxClick=i.boxClick.bind(i),i.handleChange=i.handleChange.bind(i),i.handleSelect=i.handleSelect.bind(i),i.handleSelectStory=i.handleSelectStory.bind(i),i.handleSelectStoryMasks=i.handleSelectStoryMasks.bind(i),i.handleSelectVis=i.handleSelectVis.bind(i),i.handleStoryName=i.handleStoryName.bind(i),i.handleStoryText=i.handleStoryText.bind(i),i.handleArrowText=i.handleArrowText.bind(i),i.handleSampleText=i.handleSampleText.bind(i),i.handleSampleName=i.handleSampleName.bind(i),i.handleRotation=i.handleRotation.bind(i),i.handleArrowHide=i.handleArrowHide.bind(i),i.handleArrowAngle=i.handleArrowAngle.bind(i),i.handleStoryChange=i.handleStoryChange.bind(i),i.handleClusterChange=i.handleClusterChange.bind(i),i.handleClusterInsert=i.handleClusterInsert.bind(i),i.handleClusterRemove=i.handleClusterRemove.bind(i),i.handleStoryInsert=i.handleStoryInsert.bind(i),i.handleStoryRemove=i.handleStoryRemove.bind(i),i.handleAuthorName=i.handleAuthorName.bind(i),i.deleteStory=i.deleteStory.bind(i),i.deleteCluster=i.deleteCluster.bind(i),i.handleSelectGroup=i.handleSelectGroup.bind(i),i.handleViewport=i.handleViewport.bind(i),i.toggleTextEdit=i.toggleTextEdit.bind(i),i.toggleSampleInfo=i.toggleSampleInfo.bind(i),i.submitSampleInfo=i.submitSampleInfo.bind(i),i.toggleModal=i.toggleModal.bind(i),i.save=i.save.bind(i),i.share=i.share.bind(i),i.publish=i.publish.bind(i),i.deleteActiveGroup=i.deleteActiveGroup.bind(i),i.showRenameModal=i.showRenameModal.bind(i),i.showAddGroupModal=i.showAddGroupModal.bind(i),i.handleGroupRename=i.handleGroupRename.bind(i),i.handleAddGroup=i.handleAddGroup.bind(i),i.getCreateLabel=i.getCreateLabel.bind(i),i.labelRGBA=i.labelRGBA.bind(i),i.defaultStory=i.defaultStory.bind(i),i.handleUpdateMask=i.handleUpdateMask.bind(i),i.handleMaskChange=i.handleMaskChange.bind(i),i.handleMaskInsert=i.handleMaskInsert.bind(i),i.handleMaskRemove=i.handleMaskRemove.bind(i),i.deleteMask=i.deleteMask.bind(i),i.openMaskBrowser=i.openMaskBrowser.bind(i),i.onMaskSelected=i.onMaskSelected.bind(i),i}var n,a;return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),r(t,[{key:"defaultStory",value:function(){var e=this.state,t=(e.stories,e.activeStory,e.activeGroup),n=e.viewport;return{text:"",name:"",masks:[],arrows:[],overlays:[],group:t,pan:[n?n.getCenter().x:.5,n?n.getCenter().y:.5],zoom:n?n.getZoom():1,visLabels:new Map([[0,{value:0,id:0,label:"VisScatterplot",colormapInvert:!1,data:"",x:"",y:"",cluster:-1,clusters:new Map([])}],[1,{value:1,id:1,label:"VisCanvasScatterplot",colormapInvert:!1,data:"",x:"",y:"",cluster:-1,clusters:new Map([])}],[2,{value:2,id:2,label:"VisMatrix",colormapInvert:!1,data:"",x:"",y:"",cluster:-1,clusters:new Map([])}],[3,{value:3,id:3,label:"VisBarChart",colormapInvert:!1,data:"",x:"",y:"",cluster:-1,clusters:new Map([])}]])}}},{key:"componentDidMount",value:function(){this.labelRGBA(),this.setMaskPathStatusPolling(!0)}},{key:"componentWillUnmount",value:function(){this.setMaskPathStatusPolling(!1)}},{key:"labelRGBA",value:function(){this.state.rgba&&this.setState({activeGroup:0,groups:new Map([[0,{value:0,label:"H&E",activeIds:[0,1],chanRender:new Map([[0,{id:0,value:0,color:[128,0,128],range:{min:0,max:65535},maxRange:65535,visible:!0}],[1,{id:1,value:1,color:[255,0,255],range:{min:0,max:65535},maxRange:65535,visible:!0}]])}]]),activeIds:[0,1],chanLabel:new Map([[0,{id:0,value:0,label:"Hematoxylin"}],[1,{id:1,value:1,label:"Eosin"}]])})}},{key:"handleViewport",value:function(e){var t=this.state,n=t.stories,i=t.activeStory,r=(t.activeGroup,n.get(i)||this.defaultStory());r.zoom=e.getZoom(),r.pan=[e.getCenter().x,e.getCenter().y];var o=new Map([].concat(E(n),E(new Map([[i,r]]))));this.setState({viewport:e}),this.state.textEdit&&this.setState({stories:o})}},{key:"handleStoryChange",value:function(e){var t=this.state,n=t.groups,i=t.stories,r=t.viewport,o=i.get(e)||this.defaultStory();if(o&&r){var a=new(Function.prototype.bind.apply(OpenSeadragon.Point,[null].concat(E(o.pan))));r.zoomTo(o.zoom),r.panTo(a)}if(this.setState({activeStory:e,activeVisLabel:{value:-1,id:-1,label:"",colormapInvert:!1,data:"",x:"",y:"",cluster:-1,clusters:new Map([])}}),o){var s=n.get(o.group);s&&this.setState({activeGroup:o.group,activeIds:s.activeIds})}}},{key:"handleClusterRemove",value:function(){var e=this.state.activeVisLabel;void 0===e.clusters.get(e.cluster)?this.deleteCluster():this.setState({deleteClusterModal:!0})}},{key:"deleteCluster",value:function(){var e=this.state.activeVisLabel,t=this.state.stories.get(this.state.activeStory)||this.defaultStory(),n=new Map([].concat(E(e.clusters)).filter((function(t){var n=o(t,2),i=n[0];n[1];return i!=e.cluster})).map((function(t){var n=o(t,2),i=n[0],r=n[1];return[in&&(i=!0),e.id})),chanRender:new Map([].concat(E(t.state.chanRender),E(new Map(e.channels.map((function(e){return[e.id,{color:D(e.color),range:{min:65535*e.min,max:65535*e.max},maxRange:65535,value:e.id,id:e.id,visible:!0}]})))))),label:e.label,value:r}]})));i?this.setState({error:"Unsupported case of dat file with excess channels"}):this.setState({groups:r})}},{key:"submitSampleInfo",value:function(){var e=this;fetch("http://127.0.0.1:2020/api/import/groups",{method:"POST",body:JSON.stringify({filepath:this.filePath.current.value}),headers:{"Content-Type":"application/json"}}).then((function(t){return t.ok?t.json():404==t.status?(e.setState({error:"Imported dat file is not found."}),null):(e.setState({error:"Imported dat file is invalid."}),null)})).then((function(t){t&&e.updateGroups(t.groups)}))}},{key:"toggleSampleInfo",value:function(){this.setState({sampleInfo:!this.state.sampleInfo});var e=!!this.filePath.current&&this.filePath.current.value;this.state.sampleInfo&&e&&this.submitSampleInfo()}},{key:"toggleTextEdit",value:function(e){var t=this.state,n=t.textEdit,i=t.activeStory;this.setState({textEdit:e,publishProgress:0,publishProgressMax:0}),n||this.handleStoryChange(i)}},{key:"showAddGroupModal",value:function(){this.setState({needNewGroup:!this.state.addGroupModal}),this.setState({addGroupModal:!this.state.addGroupModal})}},{key:"showRenameModal",value:function(){this.setState({renameModal:!this.state.renameModal})}},{key:"validateChannelGroupLabel",value:function(e){var t=this.state.groups,n=e&&S.test(e),i=-1==Array.from(t).map((function(e){var t=o(e,2);t[0];return t[1].label})).indexOf(e);return n&&i}},{key:"handleAddGroup",value:function(e){if(this.validateChannelGroupLabel(e.target.value)){this.setState({invalidChannelGroupName:!1});var t=this.state.groups;if(this.state.needNewGroup){var n=t.size,i={chanRender:this.state.chanRender,activeIds:this.state.activeIds,label:e.target.value,value:n},r=new Map([].concat(E(t),E(new Map([[n,i]]))));this.setState({needNewGroup:!1,groups:r,activeGroup:n})}else this.handleGroupRename(e)}else this.setState({invalidChannelGroupName:!0})}},{key:"handleGroupRename",value:function(e){if(this.validateChannelGroupLabel(e.target.value)){this.setState({invalidChannelGroupName:!1});var t=this.state.groups.get(this.state.activeGroup),n=new Map(this.state.groups);t.label=e.target.value,n.set(this.state.activeGroup,t),this.setState({groups:n})}else this.setState({invalidChannelGroupName:!0})}},{key:"deleteActiveGroup",value:function(){this.state.groups.delete(this.state.activeGroup);var e=new Map,t=!0,n=!1,i=void 0;try{for(var r,a=this.state.groups.entries()[Symbol.iterator]();!(t=(r=a.next()).done);t=!0){var s=r.value,l=o(s,2),c=l[0],u=l[1];c>this.state.activeGroup&&(c--,u.value--),e.set(c,u)}}catch(e){n=!0,i=e}finally{try{!t&&a.return&&a.return()}finally{if(n)throw i}}var d=this.state.activeGroup-1;d<0&&(d=0);var f=e.get(d),p=f?f.activeIds:[0,1];this.setState({groups:e,activeGroup:d,deleteGroupModal:!1,activeIds:p})}},{key:"handleSelectStory",value:function(e){this.handleStoryChange(e.value)}},{key:"handleSelectVis",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:new Map([]),a=this.state.stories.get(this.state.activeStory)||this.defaultStory(),s={colormapInvert:null!=r?r:e.colormapInvert,clusters:o?new Map([].concat(E(e.clusters),E(o))):e.clusters,cluster:o.size?o.keys().next().value:e.cluster,id:e.id,value:e.value,label:e.label,data:null!=t?t:e.data,x:null!=n?n:e.x,y:null!=i?i:e.y};a.visLabels=new Map([].concat(E(a.visLabels),E(new Map([[s.id,s]])))),this.setState({activeVisLabel:s,stories:new Map([].concat(E(this.state.stories),E(new Map([[this.state.activeStory,a]]))))})}},{key:"handleClusterChange",value:function(e){var t=this.state.stories.get(this.state.activeStory)||this.defaultStory(),n=this.state.activeVisLabel;n.clusters.get(e)&&(n.cluster=e,t.visLabels=new Map([].concat(E(t.visLabels),E(new Map([[n.id,n]])))),this.setState({activeVisLabel:n,stories:new Map([].concat(E(this.state.stories),E(new Map([[this.state.activeStory,t]]))))}))}},{key:"handleUpdateMask",value:function(e){var t=Math.max(0,this.state.activeMaskId);this.setState({activeMaskId:t,masks:new Map([].concat(E(this.state.masks),E(new Map([[t,e]]))))})}},{key:"handleMaskChange",value:function(e){this.setState({activeMaskId:e})}},{key:"handleMaskInsert",value:function(){var e=this.state.stories,t=this.state.activeMaskId+1,n={path:"",name:""+(t+1),color:D("#FFFFFF")},i=new Map([].concat(E([].concat(E(this.state.masks)).map((function(e){var n=o(e,2),i=n[0],r=n[1];return[i5&&void 0!==arguments[5])||arguments[5],s=this.state,l=s.chanRender,c=s.chanLabel,u=s.groups,d=s.activeGroup,f=u.get(d),p=i({},l.get(e));f&&(p=i({},f.chanRender.get(e)));var h=i({},c.get(e));t&&(p.color=t),n&&(p.range=n),null!==r&&(h.label=r),null!==o&&(p.visible=o);var m=new Map([].concat(E(c),E(new Map([[e,h]]))));if(this.setState({chanLabel:m}),f){var g=i({},f),b=new Map([].concat(E(f.chanRender),E(new Map([[e,p]]))));g.chanRender=b;var v=new Map([].concat(E(u),E(new Map([[d,g]]))));this.setState({groups:v})}var w=new Map([].concat(E(l),E(new Map([[e,p]]))));this.setState({chanRender:w,rangeSliderComplete:a})}},{key:"createMaskOutput",value:function(e){return Array.from(e.values()).map((function(e){var t=[{color:M(e.color),label:e.name}];return{label:e.name,path:e.path,channels:t}}))}},{key:"createGroupOutput",value:function(e,t){var n=this;return Array.from(e.values()).map((function(e){var i=e.activeIds.map((function(n){var i=e.chanRender.get(n);return{color:M(i.color),min:i.range.min/i.maxRange,max:i.range.max/i.maxRange,label:t.get(n).label,id:n}})),r=i;n.state.rgba&&(r=Array.from(n.RGBAChannels().values()).map((function(e){return{color:M(e.color),min:e.range.min/e.maxRange,max:e.range.max/e.maxRange,label:e.label,id:e.id}})));var o={label:e.label,channels:i,render:r};return e.id&&(o.id=e.id),e.uuid&&(o.uuid=e.uuid),o}))}},{key:"createStoryDefinition",value:function(e,t){var n={waypoints:e,groups:t,sample_info:{rotation:this.state.rotation,name:this.state.sampleName,text:this.state.sampleText},image_name:this.state.imageName,author_name:this.state.authorName};return this.state.storyUuid&&(n.uuid=this.state.storyUuid),this.state.img.uuid&&(n.imageUuid=this.state.img.uuid),n}},{key:"createWaypoints",value:function(e){var t=this.state,n=(t.masks,t.groups);return Array.from(e.values()).map((function(e){var t={name:e.name,text:e.text,pan:e.pan,zoom:e.zoom,masks:e.masks,arrows:e.arrows,overlays:e.overlays,group:n.get(e.group).label};return Array.from(e.visLabels.values()).forEach((function(e){e.value<2?""!=e.data&&(t[e.label]={data:e.data,axes:{x:e.x,y:e.y},clusters:{labels:Array.from(e.clusters.values()).map((function(e){return e.name})).join(","),reorder:Array.from(e.clusters.values()).map((function(e){return e.name})).join(","),colors:Array.from(e.clusters.values()).map((function(e){return M(e.color)})).join(",")}}):2==e.value?""!=e.data&&(t[e.label]={data:e.data,colormapInvert:e.colormapInvert}):""!=e.data&&(t[e.label]=e.data)})),t}))}},{key:"publish",value:function(){var e=this;if("cloud"===this.props.env)this.setPublishStoryModal(!0);else{var t=this.state,n=t.groups,i=t.masks,r=this.state,o=r.stories,a=r.chanLabel,s=(this.state.img,this.createMaskOutput(i)),l=this.createGroupOutput(n,a),c=this.createWaypoints(o);this.createStoryDefinition(c,l);this.setState({publishing:!0});var u=fetch("http://localhost:2020/api/render",{method:"POST",body:JSON.stringify({masks:s,groups:l,waypoints:c,header:this.state.sampleText,rotation:this.state.rotation,image:{description:this.state.sampleName}}),headers:{"Content-Type":"application/json"}});this.setProgressPolling(!0),u.then((function(t){e.setState({publishing:!1}),e.setProgressPolling(!1),e.getPublishProgress()})).catch((function(t){console.error(t),e.setState({publishing:!1}),e.setProgressPolling(!1)}))}}},{key:"save",value:function(){var e=this,t=this.state,n=t.groups,i=t.masks,r=this.state,o=r.stories,a=r.chanLabel,s=this.state.img,l="cloud"===this.props.env,c=this.createMaskOutput(i),u=this.createGroupOutput(n,a),d=this.createWaypoints(o),f=this.createStoryDefinition(d,u);if(this.setState({saving:!0}),l)this.saveRenderingSettings(s.uuid,u).then((function(t){v.default.saveStory(f).then((function(t){e.setState({saving:!1,storyUuid:t.uuid})})).catch((function(t){console.error(t),e.setState({saving:!1})}))}));else{var p=fetch("http://localhost:2020/api/save",{method:"POST",body:JSON.stringify({waypoints:d,groups:u,masks:c,sample_info:{rotation:this.state.rotation,name:this.state.sampleName,text:this.state.sampleText}}),headers:{"Content-Type":"application/json"}});p.then((function(t){setTimeout((function(){e.setState({saving:!1})}),3e3)})).catch((function(t){console.error(t),e.setState({saving:!1})}))}}},{key:"saveRenderingSettings",value:function(e,t){var n=this;return v.default.createRenderingSettings(e,{groups:t}).then((function(e){var t=new Map(n.state.groups);e.groups.forEach((function(e,n){t.get(n).id=e.id,t.get(n).uuid=e.uuid})),n.setState({groups:t})})).catch((function(e){console.error(e),n.setState({saving:!1})}))}},{key:"setProgressPolling",value:function(e){var t=this;e?this.progressInterval=setInterval((function(){t.getPublishProgress()}),500):clearInterval(this.progressInterval)}},{key:"getPublishProgress",value:function(){var e=this;fetch("http://127.0.0.1:2020/api/render/progress").then((function(e){return e.json()})).then((function(t){t.progress>=t.max&&0!=t.max&&e.setState({published:!0}),e.setState({publishProgress:t.progress,publishProgressMax:t.max})}))}},{key:"getCreateLabel",value:function(e){return this.validateChannelGroupLabel(e)?"Create Group: "+e:"Name contains invalid characters."}},{key:"openFileBrowser",value:function(){this.setState({showFileBrowser:!0})}},{key:"onFileSelected",value:function(e){this.setState({showFileBrowser:!1}),e&&e.path&&(this.filePath.current.value=e.path)}},{key:"openVisDataBrowser",value:function(){this.setState({showVisDataBrowser:!0})}},{key:"onVisDataSelected",value:function(e){this.setState({showVisDataBrowser:!1}),e&&e.path&&this.handleSelectVis(this.state.activeVisLabel,e.path)}},{key:"openMaskBrowser",value:function(){this.setState({showMaskBrowser:!0})}},{key:"fetchMaskPathStatus",value:(a=A(regeneratorRuntime.mark((function e(t){var n,i,r;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=encodeURIComponent(encodeURIComponent(t)),e.next=3,fetch("http://localhost:2020/api/validate/u32/"+n,{headers:{pragma:"no-cache","cache-control":"no-store"}});case 3:return i=e.sent,e.prev=4,r=(0,m.handleFetchErrors)(i),e.abrupt("return",r.json());case 9:return e.prev=9,e.t0=e.catch(4),console.error(e.t0),e.abrupt("return",{invalid:!0,ready:!1,path:""});case 13:case"end":return e.stop()}}),e,this,[[4,9]])}))),function(e){return a.apply(this,arguments)})},{key:"updateMaskPathStatus",value:(n=A(regeneratorRuntime.mark((function e(){var t,n,i,r,a,s,l,c,u,d;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=this.state,n=t.masks,i=t.maskPathStatus,r=[].concat(E(n)).map((function(e){var t=o(e,2);return t[0],t[1].path})),a=r.filter((function(e){var t=i.get(e);return!(t&&t.ready)})),e.t0=Map,e.next=6,Promise.all(a.map(this.fetchMaskPathStatus));case 6:e.t1=function(e,t){return[a[t],e]},e.t2=e.sent.map(e.t1),s=new e.t0(e.t2),l=a.filter((function(e){var t=s.get(e);return!t||t.invalid})),c=null,l.length&&(u=1===l.length?"":"s",d=[].concat(E(n)).reduce((function(e,t){var n=o(t,2),i=n[0],r=n[1];return l.includes(r.path)?""==e?"#"+(i+1):e+", #"+(i+1):e}),""),c=l.length+" invalid mask path"+u+": "+d),this.setState({error:c,maskPathStatus:new Map([].concat(E(i),E(s)))});case 13:case"end":return e.stop()}}),e,this)}))),function(){return n.apply(this,arguments)})},{key:"setMaskPathStatusPolling",value:function(e){var t=this;e?this.maskPathStatusInterval=setInterval((function(){t.updateMaskPathStatus()}),3e3):clearInterval(this.maskPathStatusInterval)}},{key:"onMaskSelected",value:function(e){this.setState({showMaskBrowser:!1});var t=this.state,n=t.masks,i=t.activeMaskId,r=n.get(i);void 0===r&&(r={color:[255,255,255],name:"",path:""}),e&&e.path&&this.handleUpdateMask({name:r.name,path:e.path,color:r.color})}},{key:"dismissWarning",value:function(){this.setState({warning:""})}},{key:"preview",value:function(){var e=this.state,t=e.groups,n=e.chanLabel,i=this.createGroupOutput(t,n),r=this.createWaypoints(this.state.stories),o=this.createStoryDefinition(r,i);this.props.onPreview(!0,o)}},{key:"setPublishStoryModal",value:function(e){this.setState({showPublishStoryModal:e})}},{key:"share",value:function(){var e=this,t=document.location.protocol+"//"+document.location.host+document.location.pathname+"?story="+this.state.storyUuid;navigator.clipboard&&navigator.clipboard.writeText(t),this.setState({shareTooltip:"Link copied to clipboard"}),setTimeout((function(){e.setState({shareTooltip:null})}),5e3)}},{key:"exit",value:function(){window.confirm("Close the story? Unsaved progress will be lost.")&&window.open("/","_self")}},{key:"renderWarning",value:function(){return this.state.warning?s.default.createElement("div",{className:"import-warning"},s.default.createElement("div",{className:"ui icon message"},s.default.createElement(w.FontAwesomeIcon,{className:"icon",icon:y.faExclamationCircle}),s.default.createElement("div",{className:"content"},s.default.createElement("div",{className:"header"},this.state.warning),s.default.createElement("button",{className:"ui button compact ml-1 mr-1",onClick:this.dismissWarning},"Dismiss")))):null}},{key:"renderErrors",value:function(){return this.state.error?s.default.createElement("div",{className:"import-errors"},s.default.createElement("div",{className:"ui icon message"},s.default.createElement(w.FontAwesomeIcon,{className:"icon",icon:y.faExclamationCircle}),s.default.createElement("div",{className:"content"},s.default.createElement("div",{className:"header"},this.state.error)))):null}},{key:"RGBAChannels",value:function(){return new Map([[0,{id:0,label:"Red",color:[255,0,0],range:{min:0,max:65535},maxRange:255}],[1,{id:1,label:"Green",color:[0,255,0],range:{min:0,max:65535},maxRange:255}],[2,{id:2,label:"Blue",color:[0,0,255],range:{min:0,max:65535},maxRange:255}]])}},{key:"render",value:function(){var e=this,t=this.state.rgba,n="cloud"===this.props.env,r=this.state.activeVisLabel,a=this.state,m=a.img,v=a.groups,k=a.chanLabel,A=a.textEdit,C=this.state,S=C.chanRender,_=C.activeIds,T=C.activeGroup,z=v.get(T),M=new Map(_.map((function(e){return[e,S.get(e)]})));z&&(M=new Map(_.map((function(e){return[e,z.chanRender.get(e)]}))));var D=new Map(_.map((function(e){return[e,k.get(e)]}))),P=new Map(_.map((function(e){return[e,i({},D.get(e),M.get(e))]}))),F=new Map([].concat(E(P)).filter((function(e){var t=o(e,2);t[0];return t[1].visible}))),I=F;t&&(I=this.RGBAChannels());var N=this.state.maskPathStatus,O=this.state,L=O.stories,B=O.activeStory,H=O.masks,R=O.activeMaskId,j=L.get(B)||this.defaultStory();F=new Map([].concat(E(F),E(new Map(j.masks.map((function(e){var t="mask_"+e,n=H.get(e);return n.range={max:16777215,min:0},n.u32=!0,n.key=encodeURIComponent(encodeURIComponent(n.path)),n.maxRange=16777215,n.visible=!0,n.value=t,n.label=t,n.id=t,[t,n]})).filter((function(e){var t=o(e,2),n=(t[0],t[1]),i=N.get(n.path);return!!i&&i.ready}))))));var V=j.visLabels,U=j.name,W=j.text,G=j.masks,Y=j.overlays,q=j.arrows,X=this.state.activeArrow,Q="";q.length>0&&(Q=q[X].text);var Z="";q.length>0&&(Z=q[X].angle);var K=!1;q.length>0&&(K=q[X].hide);var J=void 0;J=n?s.default.createElement(c.default,{className:"ImageView",img:m,channels:I,overlays:Y,arrows:q,handleViewport:this.handleViewport,interactor:this.interactor,rotation:this.state.rotation,rangeSliderComplete:this.state.rangeSliderComplete}):t?s.default.createElement(u.default,{className:"ImageView",img:m,channels:F,overlays:Y,arrows:q,handleViewport:this.handleViewport,interactor:this.interactor,rotation:this.state.rotation}):s.default.createElement(p.default,{className:"ImageView",img:m,channels:F,overlays:Y,arrows:q,handleViewport:this.handleViewport,interactor:this.interactor,rotation:this.state.rotation});var $=null,ee=null;null!=z&&($=s.default.createElement("button",{className:"ui button primary",onClick:this.save,disabled:this.state.saving,title:"Save story"},s.default.createElement(w.FontAwesomeIcon,{icon:y.faSave}),"  Save ",s.default.createElement(b.default,{animation:"border",size:12,color:"#FFFFFF",loading:this.state.saving})),ee=s.default.createElement("button",{className:"ui button primary",disabled:this.state.publishing,onClick:this.publish,title:"Publish story"},s.default.createElement(w.FontAwesomeIcon,{icon:y.faBullhorn}),"  Publish ",s.default.createElement(b.default,{animation:"border",size:12,color:"#FFFFFF",loading:this.state.publishing})));var te=s.default.createElement("button",{className:"ui button teal",onClick:function(){return e.preview()},title:"Preview story"},s.default.createElement(w.FontAwesomeIcon,{icon:y.faEye}),"  Preview"),ne=s.default.createElement("button",{className:"ui button teal",onClick:function(){return e.share()},title:"Share story","data-tooltip":this.state.shareTooltip,"data-position":"bottom center"},s.default.createElement(w.FontAwesomeIcon,{icon:y.faShare}),"  Share");"local"===this.props.env?(te=null,ne=null,this.state.published&&(te=s.default.createElement("button",{className:"ui button teal",onClick:function(){return window.open("/story")},title:"Preview story"},s.default.createElement(w.FontAwesomeIcon,{icon:y.faEye}),"  Preview"))):this.state.storyUuid||(ne=null,ee=null);var ie=this.state.textEdit?"ui button":"ui button active",re=this.state.textEdit?"ui button active":"ui button",oe="";oe=t?s.default.createElement("span",{className:"ui buttons"},s.default.createElement("button",{className:"ui button",onClick:function(){return e.toggleSampleInfo()}},"Sample Info"),te,ne,$,ee):s.default.createElement("div",{className:"row"},s.default.createElement("span",{className:"ui buttons"},s.default.createElement("button",{className:"ui button",onClick:function(){return e.toggleSampleInfo()}},"Sample Info"),s.default.createElement("button",{className:ie,onClick:function(){return e.toggleTextEdit(!1)}},"Edit Groups"),s.default.createElement("button",{className:re,onClick:function(){return e.toggleTextEdit(!0)}},"Edit Story"),te,ne,$,ee));var ae="";return t||(ae=s.default.createElement("div",{className:"row"},s.default.createElement("div",{className:"col pr-0"},s.default.createElement("div",{className:"font-white mt-2"},"Channel Groups:"),s.default.createElement(l.default,{isClearable:!0,value:z,onChange:this.handleSelectGroup,options:Array.from(v.values()),formatCreateLabel:this.getCreateLabel})),s.default.createElement("div",{className:"col pl-0 pr-0 pt-3"},s.default.createElement("span",{className:"ui buttons"},this.renderAddGroupModal(),this.renderRenameModal())))),s.default.createElement("div",{className:"container-fluid Repo"},J,s.default.createElement(f.default,{toggle:this.toggleModal,show:this.state.showModal},s.default.createElement("button",{className:"ui button compact",onClick:this.handleArrowHide},K?"Show Arrow":"Hide Arrow"),s.default.createElement("form",{className:"ui form",onSubmit:this.toggleModal},s.default.createElement("input",{type:"text",placeholder:"Arrow Angle",value:Z,onChange:this.handleArrowAngle}),s.default.createElement("input",{type:"range",min:"0",max:"360",style:{width:"100%"},value:Z,onChange:this.handleArrowAngle}),s.default.createElement("textarea",{placeholder:"Arrow Description",value:Q,onChange:this.handleArrowText}))),s.default.createElement(f.default,{toggle:this.toggleSampleInfo,show:this.state.sampleInfo},s.default.createElement("form",{className:"ui form"},s.default.createElement("input",{type:"text",placeholder:"Sample Name",value:this.state.sampleName,onChange:this.handleSampleName}),s.default.createElement("textarea",{placeholder:"Sample Description",value:this.state.sampleText,onChange:this.handleSampleText}),s.default.createElement("input",{type:"text",placeholder:"Author Name",value:this.state.authorName,onChange:this.handleAuthorName}),s.default.createElement("div",{className:"field"},s.default.createElement("label",null,"Rotation (degrees)"),s.default.createElement("input",{type:"text",placeholder:"Rotation",value:this.state.rotation?this.state.rotation:"",onChange:this.handleRotation}),s.default.createElement("input",{type:"range",className:"image-rotation-range",min:"-180",max:"180",value:this.state.rotation,onChange:this.handleRotation,id:"myRange"})),s.default.createElement("div",{className:"ui action input"},s.default.createElement("input",{ref:this.filePath,className:"full-width-input",id:"filepath",name:"filepath",type:"text",placeholder:"Channel groups dat file"}),s.default.createElement("button",{type:"button",onClick:this.openFileBrowser,className:"ui button"},"Browse"),s.default.createElement(d.default,{open:this.state.showFileBrowser,close:this.onFileSelected,title:"Select a dat file",onFileSelected:this.onFileSelected,filter:["dat"]})))),s.default.createElement("div",{className:"row justify-content-between"},s.default.createElement("div",{className:"col-md-6 col-lg-6 col-xl-4 bg-trans"},oe,this.renderProgressBar(),s.default.createElement("div",{className:"pb-2"},ae),s.default.createElement(h.default,{minerva:n,rgba:this.state.rgba,stories:this.state.stories,addArrowText:this.addArrowText,deleteArrow:this.deleteArrow,deleteOverlay:this.deleteOverlay,drawType:this.state.drawType,arrowClick:this.arrowClick,lassoClick:this.lassoClick,boxClick:this.boxClick,handleChange:this.handleChange,handleSelect:this.handleSelect,handleSelectStory:this.handleSelectStory,handleSelectStoryMasks:this.handleSelectStoryMasks,chanLabel:k,activeChanLabel:D,activeChannels:P,textEdit:A,handleStoryName:this.handleStoryName,handleStoryText:this.handleStoryText,handleStoryChange:this.handleStoryChange,handleStoryInsert:this.handleStoryInsert,handleStoryRemove:this.handleStoryRemove,overlays:Y,arrows:q,storyName:U,storyText:W,storyMasks:G,activeStory:B,handleSelectVis:this.handleSelectVis,handleClusterChange:this.handleClusterChange,handleClusterInsert:this.handleClusterInsert,handleClusterRemove:this.handleClusterRemove,activeVisLabel:r,visLabels:V,showVisDataBrowser:this.state.showVisDataBrowser,openVisDataBrowser:this.openVisDataBrowser,onVisDataSelected:this.onVisDataSelected,masks:H,activeMaskId:R,maskPathStatus:N,handleUpdateMask:this.handleUpdateMask,handleMaskChange:this.handleMaskChange,handleMaskInsert:this.handleMaskInsert,handleMaskRemove:this.handleMaskRemove,showMaskBrowser:this.state.showMaskBrowser,openMaskBrowser:this.openMaskBrowser,onMaskSelected:this.onMaskSelected}),s.default.createElement(g.Confirm,{header:"Delete channel group",content:"Are you sure?",confirmButton:"Delete",size:"small",open:this.state.deleteGroupModal,onCancel:function(){e.setState({deleteGroupModal:!1})},onConfirm:this.deleteActiveGroup}),s.default.createElement(g.Confirm,{header:"Delete waypoint",content:"Are you sure?",confirmButton:"Delete",size:"small",open:this.state.deleteStoryModal,onCancel:function(){e.setState({deleteStoryModal:!1})},onConfirm:this.deleteStory}),s.default.createElement(g.Confirm,{header:"Delete cluster",content:"Are you sure?",confirmButton:"Delete",size:"small",open:this.state.deleteClusterModal,onCancel:function(){e.setState({deleteClusterModal:!1})},onConfirm:this.deleteCluster}),s.default.createElement(g.Confirm,{header:"Delete mask",content:"Are you sure?",confirmButton:"Delete",size:"small",open:this.state.deleteMaskModal,onCancel:function(){e.setState({deleteMaskModal:!1})},onConfirm:this.deleteMask})),this.renderWarning(),this.renderErrors(),this.renderExitButton(),s.default.createElement(x.default,{storyUuid:this.state.storyUuid,onClose:function(){return e.setPublishStoryModal(!1)},active:this.state.showPublishStoryModal})))}},{key:"renderAddGroupModal",value:function(){return s.default.createElement("div",{className:""},s.default.createElement("button",{className:"ui button compact ml-1 mr-1",onClick:this.showAddGroupModal},"Add Group"),s.default.createElement(f.default,{show:this.state.addGroupModal,toggle:this.showAddGroupModal},s.default.createElement("form",{className:"ui form",onSubmit:this.showAddGroupModal},s.default.createElement("label",{className:"ui label"},"Add group"),s.default.createElement(g.Popup,{trigger:s.default.createElement("input",{type:"text",onChange:this.handleAddGroup}),open:this.state.invalidChannelGroupName,content:"Channel group name must be unique and contain only letters, numbers, space, dash or underscore.",position:"top center"}))))}},{key:"renderRenameModal",value:function(){var e=this.state.groups.get(this.state.activeGroup);return e?s.default.createElement("div",{className:"all-pointer"},s.default.createElement("button",{className:"ui button compact",onClick:this.showRenameModal},"Rename"),s.default.createElement(f.default,{show:this.state.renameModal,toggle:this.showRenameModal},s.default.createElement("form",{className:"ui form",onSubmit:this.showRenameModal},s.default.createElement("label",{className:"ui label"},"Rename group"),s.default.createElement(g.Popup,{trigger:s.default.createElement("input",{type:"text",value:e.label,onChange:this.handleGroupRename}),open:this.state.invalidChannelGroupName,content:"Channel group name can contain only letters, numbers, space, dash or underscore.",position:"top center"})))):null}},{key:"renderProgressBar",value:function(){if(this.state.publishProgress<=0)return null;var e=Math.round(this.state.publishProgress/this.state.publishProgressMax*100);return s.default.createElement("div",{className:"row"},s.default.createElement("div",{className:"col"},s.default.createElement(g.Progress,{percent:e,color:"blue",progress:!0,autoSuccess:!0,active:!0})))}},{key:"renderExitButton",value:function(){return s.default.createElement("button",{type:"button",className:"ui button secondary exit-button",onClick:this.exit},"Close ",s.default.createElement(w.FontAwesomeIcon,{icon:y.faWindowClose}))}}]),t}(a.Component);t.default=P},function(e,t,n){"use strict";n.r(t),n.d(t,"defaultProps",(function(){return u})),n.d(t,"makeCreatableSelect",(function(){return d}));var i=n(0),r=n.n(i),o=(n(16),n(64),n(5),n(33)),a=n(97),s=(n(80),n(213),n(221));function l(){return(l=Object.assign||function(e){for(var t=1;tt?n[t]:void 0,p=c&&""!==c.angle?c.angle:60,h=61.4*Math.sin(p*Math.PI/180),m=61.4*Math.cos(p*Math.PI/180),g=2*m+200*Math.sign(Math.round(m))/2,b=2*h+50*Math.sign(Math.round(h))/2;c.hide&&(g=0,b=0);var v=f.default.div(o,m,h,p),w=f.default.div(a,g,b,200,50);return c.hide&&(v=f.default.div(s)),""===c.text&&(w=f.default.div(l)),u.default.createElement("div",{key:i},u.default.createElement(v,{id:i},u.default.createElement(d.default,null)),u.default.createElement(w,{id:r},c.text))}));return u.default.createElement("div",null,u.default.createElement("div",{ref:this.ImageViewRef,id:"ImageView"}),u.default.createElement("div",{className:"d-none"},A,C))}}]),t}(c.Component);t.default=w},function(e,t,n){"use strict"; /** @license React v16.13.1 * react-is.production.min.js * diff --git a/static/index.html b/static/index.html index 6578b7d..92e9c34 100644 --- a/static/index.html +++ b/static/index.html @@ -1 +1 @@ -Minerva Author
\ No newline at end of file +Minerva Author