>>=v,p-=v),p<15&&(c+=k[n++]<>>=v=b>>>24,p-=v,!(16&(v=b>>>16&255))){if(0==(64&v)){b=m[(65535&b)+(c&(1<l){e.msg="invalid distance too far back",r.mode=30;break e}if(c>>>=v,p-=v,E>(v=a-o)){if((v=E-v)>u&&r.sane){e.msg="invalid distance too far back",r.mode=30;break e}if(x=0,S=d,0===h){if(x+=f-v,v2;)A[a++]=S[x++],A[a++]=S[x++],A[a++]=S[x++],w-=3;w&&(A[a++]=S[x++],w>1&&(A[a++]=S[x++]));}else{x=a-E;do{A[a++]=A[x++],A[a++]=A[x++],A[a++]=A[x++],w-=3;}while(w>2);w&&(A[a++]=A[x++],w>1&&(A[a++]=A[x++]));}break}}break}}while(n>3,c&=(1<<(p-=w<<3))-1,e.next_in=n,e.next_out=a,e.avail_in=n>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function ie(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=E,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new n.Buf32(ee),t.distcode=t.distdyn=new n.Buf32(te),t.sane=1,t.back=-1,p):_}function ae(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,ie(e)):_}function oe(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?_:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=r,n.wbits=t,ae(e))):_}function se(e,t){var r,i;return e?(i=new function(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new n.Buf16(320),this.work=new n.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0;},e.state=i,i.window=null,(r=oe(e,t))!==p&&(e.state=null),r):_}var le,fe,ue=!0;function he(e){if(ue){var t;for(le=new n.Buf32(512),fe=new n.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(s(f,e.lens,0,288,le,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;s(u,e.lens,0,32,fe,0,e.work,{bits:5}),ue=!1;}e.lencode=le,e.lenbits=9,e.distcode=fe,e.distbits=5;}function de(e,t,r,i){var a,o=e.state;return null===o.window&&(o.wsize=1<=o.wsize?(n.arraySet(o.window,t,r-o.wsize,o.wsize,0),o.wnext=0,o.whave=o.wsize):((a=o.wsize-o.wnext)>i&&(a=i),n.arraySet(o.window,t,r-i,a,o.wnext),(i-=a)?(n.arraySet(o.window,t,r-i,i,0),o.wnext=i,o.whave=o.wsize):(o.wnext+=a,o.wnext===o.wsize&&(o.wnext=0),o.whave>>8&255,r.check=a(r.check,Pe,2,0),se=0,le=0,r.mode=x;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&se)<<8)+(se>>8))%31){e.msg="incorrect header check",r.mode=X;break}if((15&se)!==w){e.msg="unknown compression method",r.mode=X;break}if(le-=4,Ee=8+(15&(se>>>=4)),0===r.wbits)r.wbits=Ee;else if(Ee>r.wbits){e.msg="invalid window size",r.mode=X;break}r.dmax=1<>8&1),512&r.flags&&(Pe[0]=255&se,Pe[1]=se>>>8&255,r.check=a(r.check,Pe,2,0)),se=0,le=0,r.mode=S;case S:for(;le<32;){if(0===ae)break e;ae--,se+=ee[re++]<>>8&255,Pe[2]=se>>>16&255,Pe[3]=se>>>24&255,r.check=a(r.check,Pe,4,0)),se=0,le=0,r.mode=k;case k:for(;le<16;){if(0===ae)break e;ae--,se+=ee[re++]<>8),512&r.flags&&(Pe[0]=255&se,Pe[1]=se>>>8&255,r.check=a(r.check,Pe,2,0)),se=0,le=0,r.mode=A;case A:if(1024&r.flags){for(;le<16;){if(0===ae)break e;ae--,se+=ee[re++]<>>8&255,r.check=a(r.check,Pe,2,0)),se=0,le=0;}else r.head&&(r.head.extra=null);r.mode=P;case P:if(1024&r.flags&&((ce=r.length)>ae&&(ce=ae),ce&&(r.head&&(Ee=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),n.arraySet(r.head.extra,ee,re,ce,Ee)),512&r.flags&&(r.check=a(r.check,ee,ce,re)),ae-=ce,re+=ce,r.length-=ce),r.length))break e;r.length=0,r.mode=T;case T:if(2048&r.flags){if(0===ae)break e;ce=0;do{Ee=ee[re+ce++],r.head&&Ee&&r.length<65536&&(r.head.name+=String.fromCharCode(Ee));}while(Ee&&ce>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=L;break;case I:for(;le<32;){if(0===ae)break e;ae--,se+=ee[re++]<>>=7&le,le-=7&le,r.mode=V;break}for(;le<3;){if(0===ae)break e;ae--,se+=ee[re++]<>>=1)){case 0:r.mode=B;break;case 1:if(he(r),r.mode=j,t===c){se>>>=2,le-=2;break e}break;case 2:r.mode=N;break;case 3:e.msg="invalid block type",r.mode=X;}se>>>=2,le-=2;break;case B:for(se>>>=7&le,le-=7≤le<32;){if(0===ae)break e;ae--,se+=ee[re++]<>>16^65535)){e.msg="invalid stored block lengths",r.mode=X;break}if(r.length=65535&se,se=0,le=0,r.mode=U,t===c)break e;case U:r.mode=M;case M:if(ce=r.length){if(ce>ae&&(ce=ae),ce>oe&&(ce=oe),0===ce)break e;n.arraySet(te,ee,re,ce,ie),ae-=ce,re+=ce,oe-=ce,ie+=ce,r.length-=ce;break}r.mode=L;break;case N:for(;le<14;){if(0===ae)break e;ae--,se+=ee[re++]<>>=5,le-=5,r.ndist=1+(31&se),se>>>=5,le-=5,r.ncode=4+(15&se),se>>>=4,le-=4,r.nlen>286||r.ndist>30){e.msg="too many length or distance symbols",r.mode=X;break}r.have=0,r.mode=z;case z:for(;r.have>>=3,le-=3;}for(;r.have<19;)r.lens[Te[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,Se={bits:r.lenbits},xe=s(l,r.lens,0,19,r.lencode,0,r.work,Se),r.lenbits=Se.bits,xe){e.msg="invalid code lengths set",r.mode=X;break}r.have=0,r.mode=Z;case Z:for(;r.have>>16&255,ye=65535&Ae,!((me=Ae>>>24)<=le);){if(0===ae)break e;ae--,se+=ee[re++]<>>=me,le-=me,r.lens[r.have++]=ye;else{if(16===ye){for(ke=me+2;le>>=me,le-=me,0===r.have){e.msg="invalid bit length repeat",r.mode=X;break}Ee=r.lens[r.have-1],ce=3+(3&se),se>>>=2,le-=2;}else if(17===ye){for(ke=me+3;le>>=me)),se>>>=3,le-=3;}else{for(ke=me+7;le>>=me)),se>>>=7,le-=7;}if(r.have+ce>r.nlen+r.ndist){e.msg="invalid bit length repeat",r.mode=X;break}for(;ce--;)r.lens[r.have++]=Ee;}}if(r.mode===X)break;if(0===r.lens[256]){e.msg="invalid code -- missing end-of-block",r.mode=X;break}if(r.lenbits=9,Se={bits:r.lenbits},xe=s(f,r.lens,0,r.nlen,r.lencode,0,r.work,Se),r.lenbits=Se.bits,xe){e.msg="invalid literal/lengths set",r.mode=X;break}if(r.distbits=6,r.distcode=r.distdyn,Se={bits:r.distbits},xe=s(u,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,Se),r.distbits=Se.bits,xe){e.msg="invalid distances set",r.mode=X;break}if(r.mode=j,t===c)break e;case j:r.mode=C;case C:if(ae>=6&&oe>=258){e.next_out=ie,e.avail_out=oe,e.next_in=re,e.avail_in=ae,r.hold=se,r.bits=le,o(e,ue),ie=e.next_out,te=e.output,oe=e.avail_out,re=e.next_in,ee=e.input,ae=e.avail_in,se=r.hold,le=r.bits,r.mode===L&&(r.back=-1);break}for(r.back=0;_e=(Ae=r.lencode[se&(1<>>16&255,ye=65535&Ae,!((me=Ae>>>24)<=le);){if(0===ae)break e;ae--,se+=ee[re++]<>be)])>>>16&255,ye=65535&Ae,!(be+(me=Ae>>>24)<=le);){if(0===ae)break e;ae--,se+=ee[re++]<>>=be,le-=be,r.back+=be;}if(se>>>=me,le-=me,r.back+=me,r.length=ye,0===_e){r.mode=G;break}if(32&_e){r.back=-1,r.mode=L;break}if(64&_e){e.msg="invalid literal/length code",r.mode=X;break}r.extra=15&_e,r.mode=q;case q:if(r.extra){for(ke=r.extra;le>>=r.extra,le-=r.extra,r.back+=r.extra;}r.was=r.length,r.mode=Y;case Y:for(;_e=(Ae=r.distcode[se&(1<>>16&255,ye=65535&Ae,!((me=Ae>>>24)<=le);){if(0===ae)break e;ae--,se+=ee[re++]<>be)])>>>16&255,ye=65535&Ae,!(be+(me=Ae>>>24)<=le);){if(0===ae)break e;ae--,se+=ee[re++]<>>=be,le-=be,r.back+=be;}if(se>>>=me,le-=me,r.back+=me,64&_e){e.msg="invalid distance code",r.mode=X;break}r.offset=ye,r.extra=15&_e,r.mode=W;case W:if(r.extra){for(ke=r.extra;le>>=r.extra,le-=r.extra,r.back+=r.extra;}if(r.offset>r.dmax){e.msg="invalid distance too far back",r.mode=X;break}r.mode=H;case H:if(0===oe)break e;if(ce=ue-oe,r.offset>ce){if((ce=r.offset-ce)>r.whave&&r.sane){e.msg="invalid distance too far back",r.mode=X;break}ce>r.wnext?(ce-=r.wnext,pe=r.wsize-ce):pe=r.wnext-ce,ce>r.length&&(ce=r.length),ge=r.window;}else ge=te,pe=ie-r.offset,ce=r.length;ce>oe&&(ce=oe),oe-=ce,r.length-=ce;do{te[ie++]=ge[pe++];}while(--ce);0===r.length&&(r.mode=C);break;case G:if(0===oe)break e;te[ie++]=r.length,oe--,r.mode=C;break;case V:if(r.wrap){for(;le<32;){if(0===ae)break e;ae--,se|=ee[re++]<=0;)e[t]=0;}var f=0,u=1,h=2,d=29,c=256,p=c+1+d,g=30,m=19,_=2*p+1,y=15,b=16,v=7,w=256,E=16,x=17,S=18,k=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],A=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],P=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],T=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],D=new Array(2*(p+2));l(D);var O=new Array(2*g);l(O);var I=new Array(512);l(I);var R=new Array(256);l(R);var L=new Array(d);l(L);var F,B,U,M=new Array(g);function N(e,t,r,n,i){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=n,this.max_length=i,this.has_stree=e&&e.length;}function z(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t;}function Z(e){return e<256?I[e]:I[256+(e>>>7)]}function j(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255;}function C(e,t,r){e.bi_valid>b-r?(e.bi_buf|=t<>b-e.bi_valid,e.bi_valid+=r-b):(e.bi_buf|=t<>>=1,r<<=1;}while(--t>0);return r>>>1}function W(e,t,r){var n,i,a=new Array(y+1),o=0;for(n=1;n<=y;n++)a[n]=o=o+r[n-1]<<1;for(i=0;i<=t;i++){var s=e[2*i+1];0!==s&&(e[2*i]=Y(a[s]++,s));}}function H(e){var t;for(t=0;t8?j(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0;}function V(e,t,r,n){var i=2*t,a=2*r;return e[i]>1;r>=1;r--)J(e,a,r);i=l;do{r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],J(e,a,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,a[2*i]=a[2*r]+a[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,a[2*r+1]=a[2*n+1]=i,e.heap[1]=i++,J(e,a,1);}while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,a,o,s,l=t.dyn_tree,f=t.max_code,u=t.stat_desc.static_tree,h=t.stat_desc.has_stree,d=t.stat_desc.extra_bits,c=t.stat_desc.extra_base,p=t.stat_desc.max_length,g=0;for(a=0;a<=y;a++)e.bl_count[a]=0;for(l[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<_;r++)(a=l[2*l[2*(n=e.heap[r])+1]+1]+1)>p&&(a=p,g++),l[2*n+1]=a,n>f||(e.bl_count[a]++,o=0,n>=c&&(o=d[n-c]),s=l[2*n],e.opt_len+=s*(a+o),h&&(e.static_len+=s*(u[2*n+1]+o)));if(0!==g){do{for(a=p-1;0===e.bl_count[a];)a--;e.bl_count[a]--,e.bl_count[a+1]+=2,e.bl_count[p]--,g-=2;}while(g>0);for(a=p;0!==a;a--)for(n=e.bl_count[a];0!==n;)(i=e.heap[--r])>f||(l[2*i+1]!==a&&(e.opt_len+=(a-l[2*i+1])*l[2*i],l[2*i+1]=a),n--);}}(e,t),W(a,f,e.bl_count);}function $(e,t,r){var n,i,a=-1,o=t[1],s=0,l=7,f=4;for(0===o&&(l=138,f=3),t[2*(r+1)+1]=65535,n=0;n<=r;n++)i=o,o=t[2*(n+1)+1],++s>=7;n0?(e.strm.data_type===s&&(e.strm.data_type=function(e){var t,r=4093624447;for(t=0;t<=31;t++,r>>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return a;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return o;for(t=32;t=3&&0===e.bl_tree[2*T[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),l=e.opt_len+3+7>>>3,(f=e.static_len+3+7>>>3)<=l&&(l=f)):l=f=r+5,r+4<=l&&-1!==t?te(e,t,r,n):e.strategy===i||f===l?(C(e,(u<<1)+(n?1:0),3),K(e,D,O)):(C(e,(h<<1)+(n?1:0),3),function(e,t,r,n){var i;for(C(e,t-257,5),C(e,r-1,5),C(e,n-4,4),i=0;i>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(R[r]+c+1)]++,e.dyn_dtree[2*Z(t)]++),e.last_lit===e.lit_bufsize-1},t._tr_align=function(e){C(e,u<<1,3),q(e,w,D),function(e){16===e.bi_valid?(j(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8);}(e);};},function(e,t,r){var n,i=r(8),a=r(50),o=r(28),s=r(27),l=r(49),f=0,u=1,h=3,d=4,c=5,p=0,g=1,m=-2,_=-3,y=-5,b=-1,v=1,w=2,E=3,x=4,S=0,k=2,A=8,P=9,T=15,D=8,O=286,I=30,R=19,L=2*O+1,F=15,B=3,U=258,M=U+B+1,N=32,z=42,Z=69,j=73,C=91,q=103,Y=113,W=666,H=1,G=2,V=3,J=4,K=3;function X(e,t){return e.msg=l[t],t}function $(e){return (e<<1)-(e>4?9:0)}function Q(e){for(var t=e.length;--t>=0;)e[t]=0;}function ee(e){var t=e.state,r=t.pending;r>e.avail_out&&(r=e.avail_out),0!==r&&(i.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0));}function te(e,t){a._tr_flush_block(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,ee(e.strm);}function re(e,t){e.pending_buf[e.pending++]=t;}function ne(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t;}function ie(e,t){var r,n,i=e.max_chain_length,a=e.strstart,o=e.prev_length,s=e.nice_match,l=e.strstart>e.w_size-M?e.strstart-(e.w_size-M):0,f=e.window,u=e.w_mask,h=e.prev,d=e.strstart+U,c=f[a+o-1],p=f[a+o];e.prev_length>=e.good_match&&(i>>=2),s>e.lookahead&&(s=e.lookahead);do{if(f[(r=t)+o]===p&&f[r+o-1]===c&&f[r]===f[a]&&f[++r]===f[a+1]){a+=2,r++;do{}while(f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&ao){if(e.match_start=t,o=n,n>=s)break;c=f[a+o-1],p=f[a+o];}}}while((t=h[t&u])>l&&0!=--i);return o<=e.lookahead?o:e.lookahead}function ae(e){var t,r,n,a,l,f,u,h,d,c,p=e.w_size;do{if(a=e.window_size-e.lookahead-e.strstart,e.strstart>=p+(p-M)){i.arraySet(e.window,e.window,p,p,0),e.match_start-=p,e.strstart-=p,e.block_start-=p,t=r=e.hash_size;do{n=e.head[--t],e.head[t]=n>=p?n-p:0;}while(--r);t=r=p;do{n=e.prev[--t],e.prev[t]=n>=p?n-p:0;}while(--r);a+=p;}if(0===e.strm.avail_in)break;if(f=e.strm,u=e.window,h=e.strstart+e.lookahead,d=a,c=void 0,(c=f.avail_in)>d&&(c=d),r=0===c?0:(f.avail_in-=c,i.arraySet(u,f.input,f.next_in,c,h),1===f.state.wrap?f.adler=o(f.adler,u,c,h):2===f.state.wrap&&(f.adler=s(f.adler,u,c,h)),f.next_in+=c,f.total_in+=c,c),e.lookahead+=r,e.lookahead+e.insert>=B)for(l=e.strstart-e.insert,e.ins_h=e.window[l],e.ins_h=(e.ins_h<=B&&(e.ins_h=(e.ins_h<=B)if(n=a._tr_tally(e,e.strstart-e.match_start,e.match_length-B),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=B){e.match_length--;do{e.strstart++,e.ins_h=(e.ins_h<=B&&(e.ins_h=(e.ins_h<4096)&&(e.match_length=B-1)),e.prev_length>=B&&e.match_length<=e.prev_length){i=e.strstart+e.lookahead-B,n=a._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-B),e.lookahead-=e.prev_length-1,e.prev_length-=2;do{++e.strstart<=i&&(e.ins_h=(e.ins_h<15&&(s=2,n-=16),a<1||a>P||r!==A||n<8||n>15||t<0||t>9||o<0||o>x)return X(e,m);8===n&&(n=9);var l=new function(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=A,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new i.Buf16(2*L),this.dyn_dtree=new i.Buf16(2*(2*I+1)),this.bl_tree=new i.Buf16(2*(2*R+1)),Q(this.dyn_ltree),Q(this.dyn_dtree),Q(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new i.Buf16(F+1),this.heap=new i.Buf16(2*O+1),Q(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new i.Buf16(2*O+1),Q(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0;};return e.state=l,l.strm=e,l.wrap=s,l.gzhead=null,l.w_bits=n,l.w_size=1<e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(ae(e),0===e.lookahead&&t===f)return H;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,te(e,!1),0===e.strm.avail_out))return H;if(e.strstart-e.block_start>=e.w_size-M&&(te(e,!1),0===e.strm.avail_out))return H}return e.insert=0,t===d?(te(e,!0),0===e.strm.avail_out?V:J):(e.strstart>e.block_start&&(te(e,!1),e.strm.avail_out),H)}),new le(4,4,8,4,oe),new le(4,5,16,8,oe),new le(4,6,32,32,oe),new le(4,4,16,16,se),new le(8,16,32,32,se),new le(8,16,128,128,se),new le(8,32,128,256,se),new le(32,128,258,1024,se),new le(32,258,258,4096,se)],t.deflateInit=function(e,t){return he(e,t,A,T,D,S)},t.deflateInit2=he,t.deflateReset=ue,t.deflateResetKeep=fe,t.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?m:(e.state.gzhead=t,p):m},t.deflate=function(e,t){var r,i,o,l;if(!e||!e.state||t>c||t<0)return e?X(e,m):m;if(i=e.state,!e.output||!e.input&&0!==e.avail_in||i.status===W&&t!==d)return X(e,0===e.avail_out?y:m);if(i.strm=e,r=i.last_flush,i.last_flush=t,i.status===z)if(2===i.wrap)e.adler=0,re(i,31),re(i,139),re(i,8),i.gzhead?(re(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),re(i,255&i.gzhead.time),re(i,i.gzhead.time>>8&255),re(i,i.gzhead.time>>16&255),re(i,i.gzhead.time>>24&255),re(i,9===i.level?2:i.strategy>=w||i.level<2?4:0),re(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(re(i,255&i.gzhead.extra.length),re(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(e.adler=s(e.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=Z):(re(i,0),re(i,0),re(i,0),re(i,0),re(i,0),re(i,9===i.level?2:i.strategy>=w||i.level<2?4:0),re(i,K),i.status=Y);else{var _=A+(i.w_bits-8<<4)<<8;_|=(i.strategy>=w||i.level<2?0:i.level<6?1:6===i.level?2:3)<<6,0!==i.strstart&&(_|=N),_+=31-_%31,i.status=Y,ne(i,_),0!==i.strstart&&(ne(i,e.adler>>>16),ne(i,65535&e.adler)),e.adler=1;}if(i.status===Z)if(i.gzhead.extra){for(o=i.pending;i.gzindex<(65535&i.gzhead.extra.length)&&(i.pending!==i.pending_buf_size||(i.gzhead.hcrc&&i.pending>o&&(e.adler=s(e.adler,i.pending_buf,i.pending-o,o)),ee(e),o=i.pending,i.pending!==i.pending_buf_size));)re(i,255&i.gzhead.extra[i.gzindex]),i.gzindex++;i.gzhead.hcrc&&i.pending>o&&(e.adler=s(e.adler,i.pending_buf,i.pending-o,o)),i.gzindex===i.gzhead.extra.length&&(i.gzindex=0,i.status=j);}else i.status=j;if(i.status===j)if(i.gzhead.name){o=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>o&&(e.adler=s(e.adler,i.pending_buf,i.pending-o,o)),ee(e),o=i.pending,i.pending===i.pending_buf_size)){l=1;break}l=i.gzindexo&&(e.adler=s(e.adler,i.pending_buf,i.pending-o,o)),0===l&&(i.gzindex=0,i.status=C);}else i.status=C;if(i.status===C)if(i.gzhead.comment){o=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>o&&(e.adler=s(e.adler,i.pending_buf,i.pending-o,o)),ee(e),o=i.pending,i.pending===i.pending_buf_size)){l=1;break}l=i.gzindexo&&(e.adler=s(e.adler,i.pending_buf,i.pending-o,o)),0===l&&(i.status=q);}else i.status=q;if(i.status===q&&(i.gzhead.hcrc?(i.pending+2>i.pending_buf_size&&ee(e),i.pending+2<=i.pending_buf_size&&(re(i,255&e.adler),re(i,e.adler>>8&255),e.adler=0,i.status=Y)):i.status=Y),0!==i.pending){if(ee(e),0===e.avail_out)return i.last_flush=-1,p}else if(0===e.avail_in&&$(t)<=$(r)&&t!==d)return X(e,y);if(i.status===W&&0!==e.avail_in)return X(e,y);if(0!==e.avail_in||0!==i.lookahead||t!==f&&i.status!==W){var b=i.strategy===w?function(e,t){for(var r;;){if(0===e.lookahead&&(ae(e),0===e.lookahead)){if(t===f)return H;break}if(e.match_length=0,r=a._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(te(e,!1),0===e.strm.avail_out))return H}return e.insert=0,t===d?(te(e,!0),0===e.strm.avail_out?V:J):e.last_lit&&(te(e,!1),0===e.strm.avail_out)?H:G}(i,t):i.strategy===E?function(e,t){for(var r,n,i,o,s=e.window;;){if(e.lookahead<=U){if(ae(e),e.lookahead<=U&&t===f)return H;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=B&&e.strstart>0&&(n=s[i=e.strstart-1])===s[++i]&&n===s[++i]&&n===s[++i]){o=e.strstart+U;do{}while(n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&ie.lookahead&&(e.match_length=e.lookahead);}if(e.match_length>=B?(r=a._tr_tally(e,1,e.match_length-B),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=a._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(te(e,!1),0===e.strm.avail_out))return H}return e.insert=0,t===d?(te(e,!0),0===e.strm.avail_out?V:J):e.last_lit&&(te(e,!1),0===e.strm.avail_out)?H:G}(i,t):n[i.level].func(i,t);if(b!==V&&b!==J||(i.status=W),b===H||b===V)return 0===e.avail_out&&(i.last_flush=-1),p;if(b===G&&(t===u?a._tr_align(i):t!==c&&(a._tr_stored_block(i,0,0,!1),t===h&&(Q(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),ee(e),0===e.avail_out))return i.last_flush=-1,p}return t!==d?p:i.wrap<=0?g:(2===i.wrap?(re(i,255&e.adler),re(i,e.adler>>8&255),re(i,e.adler>>16&255),re(i,e.adler>>24&255),re(i,255&e.total_in),re(i,e.total_in>>8&255),re(i,e.total_in>>16&255),re(i,e.total_in>>24&255)):(ne(i,e.adler>>>16),ne(i,65535&e.adler)),ee(e),i.wrap>0&&(i.wrap=-i.wrap),0!==i.pending?p:g)},t.deflateEnd=function(e){var t;return e&&e.state?(t=e.state.status)!==z&&t!==Z&&t!==j&&t!==C&&t!==q&&t!==Y&&t!==W?X(e,m):(e.state=null,t===Y?X(e,_):p):m},t.deflateSetDictionary=function(e,t){var r,n,a,s,l,f,u,h,d=t.length;if(!e||!e.state)return m;if(2===(s=(r=e.state).wrap)||1===s&&r.status!==z||r.lookahead)return m;for(1===s&&(e.adler=o(e.adler,t,d,0)),r.wrap=0,d>=r.w_size&&(0===s&&(Q(r.head),r.strstart=0,r.block_start=0,r.insert=0),h=new i.Buf8(r.w_size),i.arraySet(h,t,d-r.w_size,r.w_size,0),t=h,d=r.w_size),l=e.avail_in,f=e.next_in,u=e.input,e.avail_in=d,e.next_in=0,e.input=t,ae(r);r.lookahead>=B;){n=r.strstart,a=r.lookahead-(B-1);do{r.ins_h=(r.ins_h<t.UNZIP)throw new TypeError("Bad argument");this.dictionary=null,this.err=0,this.flush=0,this.init_done=!1,this.level=0,this.memLevel=0,this.mode=e,this.strategy=0,this.windowBits=0,this.write_in_progress=!1,this.pending_close=!1,this.gzip_id_bytes_read=0;}u.prototype.close=function(){this.write_in_progress?this.pending_close=!0:(this.pending_close=!1,i(this.init_done,"close before init"),i(this.mode<=t.UNZIP),this.mode===t.DEFLATE||this.mode===t.GZIP||this.mode===t.DEFLATERAW?o.deflateEnd(this.strm):this.mode!==t.INFLATE&&this.mode!==t.GUNZIP&&this.mode!==t.INFLATERAW&&this.mode!==t.UNZIP||s.inflateEnd(this.strm),this.mode=t.NONE,this.dictionary=null);},u.prototype.write=function(e,t,r,n,i,a,o){return this._write(!0,e,t,r,n,i,a,o)},u.prototype.writeSync=function(e,t,r,n,i,a,o){return this._write(!1,e,t,r,n,i,a,o)},u.prototype._write=function(r,a,o,s,l,f,u,h){if(i.equal(arguments.length,8),i(this.init_done,"write before init"),i(this.mode!==t.NONE,"already finalized"),i.equal(!1,this.write_in_progress,"write already in progress"),i.equal(!1,this.pending_close,"close is pending"),this.write_in_progress=!0,i.equal(!1,void 0===a,"must provide flush value"),this.write_in_progress=!0,a!==t.Z_NO_FLUSH&&a!==t.Z_PARTIAL_FLUSH&&a!==t.Z_SYNC_FLUSH&&a!==t.Z_FULL_FLUSH&&a!==t.Z_FINISH&&a!==t.Z_BLOCK)throw new Error("Invalid flush value");if(null==o&&(o=e.alloc(0),l=0,s=0),this.strm.avail_in=l,this.strm.input=o,this.strm.next_in=s,this.strm.avail_out=h,this.strm.output=f,this.strm.next_out=u,this.flush=a,!r)return this._process(),this._checkError()?this._afterSync():void 0;var d=this;return n.nextTick(function(){d._process(),d._after();}),this},u.prototype._afterSync=function(){var e=this.strm.avail_out,t=this.strm.avail_in;return this.write_in_progress=!1,[t,e]},u.prototype._process=function(){var e=null;switch(this.mode){case t.DEFLATE:case t.GZIP:case t.DEFLATERAW:this.err=o.deflate(this.strm,this.flush);break;case t.UNZIP:switch(this.strm.avail_in>0&&(e=this.strm.next_in),this.gzip_id_bytes_read){case 0:if(null===e)break;if(31!==this.strm.input[e]){this.mode=t.INFLATE;break}if(this.gzip_id_bytes_read=1,e++,1===this.strm.avail_in)break;case 1:if(null===e)break;139===this.strm.input[e]?(this.gzip_id_bytes_read=2,this.mode=t.GUNZIP):this.mode=t.INFLATE;break;default:throw new Error("invalid number of gzip magic number bytes read")}case t.INFLATE:case t.GUNZIP:case t.INFLATERAW:for(this.err=s.inflate(this.strm,this.flush),this.err===t.Z_NEED_DICT&&this.dictionary&&(this.err=s.inflateSetDictionary(this.strm,this.dictionary),this.err===t.Z_OK?this.err=s.inflate(this.strm,this.flush):this.err===t.Z_DATA_ERROR&&(this.err=t.Z_NEED_DICT));this.strm.avail_in>0&&this.mode===t.GUNZIP&&this.err===t.Z_STREAM_END&&0!==this.strm.next_in[0];)this.reset(),this.err=s.inflate(this.strm,this.flush);break;default:throw new Error("Unknown mode "+this.mode)}},u.prototype._checkError=function(){switch(this.err){case t.Z_OK:case t.Z_BUF_ERROR:if(0!==this.strm.avail_out&&this.flush===t.Z_FINISH)return this._error("unexpected end of file"),!1;break;case t.Z_STREAM_END:break;case t.Z_NEED_DICT:return null==this.dictionary?this._error("Missing dictionary"):this._error("Bad dictionary"),!1;default:return this._error("Zlib error"),!1}return !0},u.prototype._after=function(){if(this._checkError()){var e=this.strm.avail_out,t=this.strm.avail_in;this.write_in_progress=!1,this.callback(t,e),this.pending_close&&this.close();}},u.prototype._error=function(e){this.strm.msg&&(e=this.strm.msg),this.onerror(e,this.err),this.write_in_progress=!1,this.pending_close&&this.close();},u.prototype.init=function(e,r,n,a,o){i(4===arguments.length||5===arguments.length,"init(windowBits, level, memLevel, strategy, [dictionary])"),i(e>=8&&e<=15,"invalid windowBits"),i(r>=-1&&r<=9,"invalid compression level"),i(n>=1&&n<=9,"invalid memlevel"),i(a===t.Z_FILTERED||a===t.Z_HUFFMAN_ONLY||a===t.Z_RLE||a===t.Z_FIXED||a===t.Z_DEFAULT_STRATEGY,"invalid strategy"),this._init(r,e,n,a,o),this._setDictionary();},u.prototype.params=function(){throw new Error("deflateParams Not supported")},u.prototype.reset=function(){this._reset(),this._setDictionary();},u.prototype._init=function(e,r,n,i,l){switch(this.level=e,this.windowBits=r,this.memLevel=n,this.strategy=i,this.flush=t.Z_NO_FLUSH,this.err=t.Z_OK,this.mode!==t.GZIP&&this.mode!==t.GUNZIP||(this.windowBits+=16),this.mode===t.UNZIP&&(this.windowBits+=32),this.mode!==t.DEFLATERAW&&this.mode!==t.INFLATERAW||(this.windowBits=-1*this.windowBits),this.strm=new a,this.mode){case t.DEFLATE:case t.GZIP:case t.DEFLATERAW:this.err=o.deflateInit2(this.strm,this.level,t.Z_DEFLATED,this.windowBits,this.memLevel,this.strategy);break;case t.INFLATE:case t.GUNZIP:case t.INFLATERAW:case t.UNZIP:this.err=s.inflateInit2(this.strm,this.windowBits);break;default:throw new Error("Unknown mode "+this.mode)}this.err!==t.Z_OK&&this._error("Init error"),this.dictionary=l,this.write_in_progress=!1,this.init_done=!0;},u.prototype._setDictionary=function(){if(null!=this.dictionary){switch(this.err=t.Z_OK,this.mode){case t.DEFLATE:case t.DEFLATERAW:this.err=o.deflateSetDictionary(this.strm,this.dictionary);}this.err!==t.Z_OK&&this._error("Failed to set dictionary");}},u.prototype._reset=function(){switch(this.err=t.Z_OK,this.mode){case t.DEFLATE:case t.DEFLATERAW:case t.GZIP:this.err=o.deflateReset(this.strm);break;case t.INFLATE:case t.INFLATERAW:case t.GUNZIP:this.err=s.inflateReset(this.strm);}this.err!==t.Z_OK&&this._error("Failed to reset stream");},t.Zlib=u;}).call(this,r(1).Buffer,r(3));},function(e,t,r){e.exports=r(19).PassThrough;},function(e,t,r){e.exports=r(19).Transform;},function(e,t,r){e.exports=r(2);},function(e,t,r){e.exports=r(18);},function(e,t,r){e.exports=a;var n=r(31),i=r(6);function a(e){if(!(this instanceof a))return new a(e);n.call(this,e);}i.inherits=r(5),i.inherits(a,n),a.prototype._transform=function(e,t,r){r(null,e);};},function(e,t,r){(function(t){function r(e){try{if(!t.localStorage)return !1}catch(e){return !1}var r=t.localStorage[e];return null!=r&&"true"===String(r).toLowerCase()}e.exports=function(e,t){if(r("noDeprecation"))return e;var n=!1;return function(){if(!n){if(r("throwDeprecation"))throw new Error(t);r("traceDeprecation")?console.trace(t):console.warn(t),n=!0;}return e.apply(this,arguments)}};}).call(this,r(0));},function(e,t,r){(function(e,t){!function(e,r){if(!e.setImmediate){var n,i,a,o,s,l=1,f={},u=!1,h=e.document,d=Object.getPrototypeOf&&Object.getPrototypeOf(e);d=d&&d.setTimeout?d:e,"[object process]"==={}.toString.call(e.process)?n=function(e){t.nextTick(function(){p(e);});}:!function(){if(e.postMessage&&!e.importScripts){var t=!0,r=e.onmessage;return e.onmessage=function(){t=!1;},e.postMessage("","*"),e.onmessage=r,t}}()?e.MessageChannel?((a=new MessageChannel).port1.onmessage=function(e){p(e.data);},n=function(e){a.port2.postMessage(e);}):h&&"onreadystatechange"in h.createElement("script")?(i=h.documentElement,n=function(e){var t=h.createElement("script");t.onreadystatechange=function(){p(e),t.onreadystatechange=null,i.removeChild(t),t=null;},i.appendChild(t);}):n=function(e){setTimeout(p,0,e);}:(o="setImmediate$"+Math.random()+"$",s=function(t){t.source===e&&"string"==typeof t.data&&0===t.data.indexOf(o)&&p(+t.data.slice(o.length));},e.addEventListener?e.addEventListener("message",s,!1):e.attachEvent("onmessage",s),n=function(t){e.postMessage(o+t,"*");}),d.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),r=0;r=0&&(e._idleTimeoutId=setTimeout(function(){e._onTimeout&&e._onTimeout();},t));},r(62),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate;}).call(this,r(0));},function(e,t){},function(e,t,r){var n=r(9).Buffer,i=r(64);e.exports=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.head=null,this.tail=null,this.length=0;}return e.prototype.push=function(e){var t={data:e,next:null};this.length>0?this.tail.next=t:this.head=t,this.tail=t,++this.length;},e.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length;},e.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},e.prototype.clear=function(){this.head=this.tail=null,this.length=0;},e.prototype.join=function(e){if(0===this.length)return "";for(var t=this.head,r=""+t.data;t=t.next;)r+=e+t.data;return r},e.prototype.concat=function(e){if(0===this.length)return n.alloc(0);if(1===this.length)return this.head.data;for(var t,r,i,a=n.allocUnsafe(e>>>0),o=this.head,s=0;o;)t=o.data,r=a,i=s,t.copy(r,i),s+=o.data.length,o=o.next;return a},e}(),i&&i.inspect&&i.inspect.custom&&(e.exports.prototype[i.inspect.custom]=function(){var e=i.inspect({length:this.length});return this.constructor.name+" "+e});},function(e,t){},function(e,t,r){e.exports=i;var n=r(20).EventEmitter;function i(){n.call(this);}r(5)(i,n),i.Readable=r(19),i.Writable=r(59),i.Duplex=r(58),i.Transform=r(57),i.PassThrough=r(56),i.Stream=i,i.prototype.pipe=function(e,t){var r=this;function i(t){e.writable&&!1===e.write(t)&&r.pause&&r.pause();}function a(){r.readable&&r.resume&&r.resume();}r.on("data",i),e.on("drain",a),e._isStdio||t&&!1===t.end||(r.on("end",s),r.on("close",l));var o=!1;function s(){o||(o=!0,e.end());}function l(){o||(o=!0,"function"==typeof e.destroy&&e.destroy());}function f(e){if(u(),0===n.listenerCount(this,"error"))throw e}function u(){r.removeListener("data",i),e.removeListener("drain",a),r.removeListener("end",s),r.removeListener("close",l),r.removeListener("error",f),e.removeListener("error",f),r.removeListener("end",u),r.removeListener("close",u),e.removeListener("close",u);}return r.on("error",f),e.on("error",f),r.on("end",u),r.on("close",u),e.on("close",u),e.emit("pipe",r),e};},function(e,t,r){(function(e){var n=r(1).Buffer,i=r(67).Transform,a=r(55),o=r(29),s=r(30).ok,l=r(1).kMaxLength,f="Cannot create final Buffer. It would be larger than 0x"+l.toString(16)+" bytes";a.Z_MIN_WINDOWBITS=8,a.Z_MAX_WINDOWBITS=15,a.Z_DEFAULT_WINDOWBITS=15,a.Z_MIN_CHUNK=64,a.Z_MAX_CHUNK=1/0,a.Z_DEFAULT_CHUNK=16384,a.Z_MIN_MEMLEVEL=1,a.Z_MAX_MEMLEVEL=9,a.Z_DEFAULT_MEMLEVEL=8,a.Z_MIN_LEVEL=-1,a.Z_MAX_LEVEL=9,a.Z_DEFAULT_LEVEL=a.Z_DEFAULT_COMPRESSION;for(var u=Object.keys(a),h=0;h=l?o=new RangeError(f):t=n.concat(i,a),i=[],e.close(),r(o,t);}e.on("error",function(t){e.removeListener("end",s),e.removeListener("readable",o),r(t);}),e.on("end",s),e.end(t),o();}function y(e,t){if("string"==typeof t&&(t=n.from(t)),!n.isBuffer(t))throw new TypeError("Not a string or buffer");var r=e._finishFlushFlag;return e._processChunk(t,r)}function b(e){if(!(this instanceof b))return new b(e);P.call(this,e,a.DEFLATE);}function v(e){if(!(this instanceof v))return new v(e);P.call(this,e,a.INFLATE);}function w(e){if(!(this instanceof w))return new w(e);P.call(this,e,a.GZIP);}function E(e){if(!(this instanceof E))return new E(e);P.call(this,e,a.GUNZIP);}function x(e){if(!(this instanceof x))return new x(e);P.call(this,e,a.DEFLATERAW);}function S(e){if(!(this instanceof S))return new S(e);P.call(this,e,a.INFLATERAW);}function k(e){if(!(this instanceof k))return new k(e);P.call(this,e,a.UNZIP);}function A(e){return e===a.Z_NO_FLUSH||e===a.Z_PARTIAL_FLUSH||e===a.Z_SYNC_FLUSH||e===a.Z_FULL_FLUSH||e===a.Z_FINISH||e===a.Z_BLOCK}function P(e,r){var o=this;if(this._opts=e=e||{},this._chunkSize=e.chunkSize||t.Z_DEFAULT_CHUNK,i.call(this,e),e.flush&&!A(e.flush))throw new Error("Invalid flush flag: "+e.flush);if(e.finishFlush&&!A(e.finishFlush))throw new Error("Invalid flush flag: "+e.finishFlush);if(this._flushFlag=e.flush||a.Z_NO_FLUSH,this._finishFlushFlag=void 0!==e.finishFlush?e.finishFlush:a.Z_FINISH,e.chunkSize&&(e.chunkSizet.Z_MAX_CHUNK))throw new Error("Invalid chunk size: "+e.chunkSize);if(e.windowBits&&(e.windowBitst.Z_MAX_WINDOWBITS))throw new Error("Invalid windowBits: "+e.windowBits);if(e.level&&(e.levelt.Z_MAX_LEVEL))throw new Error("Invalid compression level: "+e.level);if(e.memLevel&&(e.memLevelt.Z_MAX_MEMLEVEL))throw new Error("Invalid memLevel: "+e.memLevel);if(e.strategy&&e.strategy!=t.Z_FILTERED&&e.strategy!=t.Z_HUFFMAN_ONLY&&e.strategy!=t.Z_RLE&&e.strategy!=t.Z_FIXED&&e.strategy!=t.Z_DEFAULT_STRATEGY)throw new Error("Invalid strategy: "+e.strategy);if(e.dictionary&&!n.isBuffer(e.dictionary))throw new Error("Invalid dictionary: it should be a Buffer instance");this._handle=new a.Zlib(r);var s=this;this._hadError=!1,this._handle.onerror=function(e,r){T(s),s._hadError=!0;var n=new Error(e);n.errno=r,n.code=t.codes[r],s.emit("error",n);};var l=t.Z_DEFAULT_COMPRESSION;"number"==typeof e.level&&(l=e.level);var f=t.Z_DEFAULT_STRATEGY;"number"==typeof e.strategy&&(f=e.strategy),this._handle.init(e.windowBits||t.Z_DEFAULT_WINDOWBITS,l,e.memLevel||t.Z_DEFAULT_MEMLEVEL,f,e.dictionary),this._buffer=n.allocUnsafe(this._chunkSize),this._offset=0,this._level=l,this._strategy=f,this.once("end",this.close),Object.defineProperty(this,"_closed",{get:function(){return !o._handle},configurable:!0,enumerable:!0});}function T(t,r){r&&e.nextTick(r),t._handle&&(t._handle.close(),t._handle=null);}function D(e){e.emit("close");}Object.defineProperty(t,"codes",{enumerable:!0,value:Object.freeze(c),writable:!1}),t.Deflate=b,t.Inflate=v,t.Gzip=w,t.Gunzip=E,t.DeflateRaw=x,t.InflateRaw=S,t.Unzip=k,t.createDeflate=function(e){return new b(e)},t.createInflate=function(e){return new v(e)},t.createDeflateRaw=function(e){return new x(e)},t.createInflateRaw=function(e){return new S(e)},t.createGzip=function(e){return new w(e)},t.createGunzip=function(e){return new E(e)},t.createUnzip=function(e){return new k(e)},t.deflate=function(e,t,r){return "function"==typeof t&&(r=t,t={}),_(new b(t),e,r)},t.deflateSync=function(e,t){return y(new b(t),e)},t.gzip=function(e,t,r){return "function"==typeof t&&(r=t,t={}),_(new w(t),e,r)},t.gzipSync=function(e,t){return y(new w(t),e)},t.deflateRaw=function(e,t,r){return "function"==typeof t&&(r=t,t={}),_(new x(t),e,r)},t.deflateRawSync=function(e,t){return y(new x(t),e)},t.unzip=function(e,t,r){return "function"==typeof t&&(r=t,t={}),_(new k(t),e,r)},t.unzipSync=function(e,t){return y(new k(t),e)},t.inflate=function(e,t,r){return "function"==typeof t&&(r=t,t={}),_(new v(t),e,r)},t.inflateSync=function(e,t){return y(new v(t),e)},t.gunzip=function(e,t,r){return "function"==typeof t&&(r=t,t={}),_(new E(t),e,r)},t.gunzipSync=function(e,t){return y(new E(t),e)},t.inflateRaw=function(e,t,r){return "function"==typeof t&&(r=t,t={}),_(new S(t),e,r)},t.inflateRawSync=function(e,t){return y(new S(t),e)},o.inherits(P,i),P.prototype.params=function(r,n,i){if(rt.Z_MAX_LEVEL)throw new RangeError("Invalid compression level: "+r);if(n!=t.Z_FILTERED&&n!=t.Z_HUFFMAN_ONLY&&n!=t.Z_RLE&&n!=t.Z_FIXED&&n!=t.Z_DEFAULT_STRATEGY)throw new TypeError("Invalid strategy: "+n);if(this._level!==r||this._strategy!==n){var o=this;this.flush(a.Z_SYNC_FLUSH,function(){s(o._handle,"zlib binding closed"),o._handle.params(r,n),o._hadError||(o._level=r,o._strategy=n,i&&i());});}else e.nextTick(i);},P.prototype.reset=function(){return s(this._handle,"zlib binding closed"),this._handle.reset()},P.prototype._flush=function(e){this._transform(n.alloc(0),"",e);},P.prototype.flush=function(t,r){var i=this,o=this._writableState;("function"==typeof t||void 0===t&&!r)&&(r=t,t=a.Z_FULL_FLUSH),o.ended?r&&e.nextTick(r):o.ending?r&&this.once("end",r):o.needDrain?r&&this.once("drain",function(){return i.flush(t,r)}):(this._flushFlag=t,this.write(n.alloc(0),"",r));},P.prototype.close=function(t){T(this,t),e.nextTick(D,this);},P.prototype._transform=function(e,t,r){var i,o=this._writableState,s=(o.ending||o.ended)&&(!e||o.length===e.length);return null===e||n.isBuffer(e)?this._handle?(s?i=this._finishFlushFlag:(i=this._flushFlag,e.length>=o.length&&(this._flushFlag=this._opts.flush||a.Z_NO_FLUSH)),void this._processChunk(e,i,r)):r(new Error("zlib binding closed")):r(new Error("invalid input"))},P.prototype._processChunk=function(e,t,r){var i=e&&e.length,a=this._chunkSize-this._offset,o=0,u=this,h="function"==typeof r;if(!h){var d,c=[],p=0;this.on("error",function(e){d=e;}),s(this._handle,"zlib binding closed");do{var g=this._handle.writeSync(t,e,o,i,this._buffer,this._offset,a);}while(!this._hadError&&y(g[0],g[1]));if(this._hadError)throw d;if(p>=l)throw T(this),new RangeError(f);var m=n.concat(c,p);return T(this),m}s(this._handle,"zlib binding closed");var _=this._handle.write(t,e,o,i,this._buffer,this._offset,a);function y(l,f){if(this&&(this.buffer=null,this.callback=null),!u._hadError){var d=a-f;if(s(d>=0,"have should not go down"),d>0){var g=u._buffer.slice(u._offset,u._offset+d);u._offset+=d,h?u.push(g):(c.push(g),p+=g.length);}if((0===f||u._offset>=u._chunkSize)&&(a=u._chunkSize,u._offset=0,u._buffer=n.allocUnsafe(u._chunkSize)),0===f){if(o+=i-l,i=l,!h)return !0;var m=u._handle.write(t,e,o,i,u._buffer,u._offset,u._chunkSize);return m.callback=y,void(m.buffer=e)}if(!h)return !1;r();}}_.buffer=e,_.callback=y;},o.inherits(b,P),o.inherits(v,P),o.inherits(w,P),o.inherits(E,P),o.inherits(x,P),o.inherits(S,P),o.inherits(k,P);}).call(this,r(3));},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e};},function(e,t,r){(function(e){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(t,d){if(void 0===t)throw"dicomParser.parseDicom: missing required parameter 'byteArray'";function c(l){var c=function(e){if(void 0===e.elements.x00020010)throw"dicomParser.parseDicom: missing required meta header attribute 0002,0010";var r=e.elements.x00020010;return u.readFixedString(t,r.dataOffset,r.length)}(l),p=function(e){if("1.2.840.10008.1.2"===e)return !1;return !0}(c),g=function(o,l){if("1.2.840.10008.1.2.1.99"===o){if(d&&d.inflater){var u=d.inflater(t,l);return new a.default(s.default,u,0)}if(void 0!==e&&this.module!==e){var h=r(68),c=(0, f.default)(t,l,t.length-l),p=h.inflateRawSync(c),g=(0, n.default)(t,p.length+l);return t.copy(g,0,0,l),p.copy(g,l),new a.default(s.default,g,0)}if("undefined"!=typeof pako){var m=t.slice(l),_=pako.inflateRaw(m),y=(0, n.default)(t,_.length+l);return y.set(t.slice(0,l),0),y.set(_,l),new a.default(s.default,y,0)}throw"dicomParser.parseDicom: no inflater available to handle deflate transfer syntax"}if("1.2.840.10008.1.2.2"===o)return new a.default(i.default,t,l);return new a.default(s.default,t,l)}(c,l.position),m=new o.default(g.byteArrayParser,g.byteArray,{});m.warnings=g.warnings;try{p?h.parseDicomDataSetExplicit(m,g,g.byteArray.length,d):h.parseDicomDataSetImplicit(m,g,g.byteArray.length,d);}catch(e){var _={exception:e,dataSet:m};throw _}return m}return p=(0, l.default)(t,d),g=c(p),function(e,t){for(var r in e.elements)e.elements.hasOwnProperty(r)&&(t.elements[r]=e.elements[r]);return void 0!==e.warnings&&(t.warnings=e.warnings.concat(t.warnings)),t}(p,g);var p,g;};var n=c(r(22)),i=c(r(37)),a=c(r(12)),o=c(r(7)),s=c(r(21)),l=c(r(36)),f=c(r(11)),u=d(r(14)),h=d(r(16));function d(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}function c(e){return e&&e.__esModule?e:{default:e}}}).call(this,r(69)(e));},function(e,t,r){Object.defineProperty(t,"__esModule",{value:!0}),t.default="1.8.2";},function(e,t){t.read=function(e,t,r,n,i){var a,o,s=8*i-n-1,l=(1<>1,u=-7,h=r?i-1:0,d=r?-1:1,c=e[t+h];for(h+=d,a=c&(1<<-u)-1,c>>=-u,u+=s;u>0;a=256*a+e[t+h],h+=d,u-=8);for(o=a&(1<<-u)-1,a>>=-u,u+=n;u>0;o=256*o+e[t+h],h+=d,u-=8);if(0===a)a=1-f;else{if(a===l)return o?NaN:1/0*(c?-1:1);o+=Math.pow(2,n),a-=f;}return (c?-1:1)*o*Math.pow(2,a-n)},t.write=function(e,t,r,n,i,a){var o,s,l,f=8*a-i-1,u=(1<>1,d=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,c=n?0:a-1,p=n?1:-1,g=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,o=u):(o=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-o))<1&&(o--,l*=2),(t+=o+h>=1?d/l:d*Math.pow(2,1-h))*l>=2&&(o++,l/=2),o+h>=u?(s=0,o=u):o+h>=1?(s=(t*l-1)*Math.pow(2,i),o+=h):(s=t*Math.pow(2,h-1)*Math.pow(2,i),o=0));i>=8;e[r+c]=255&s,c+=p,s/=256,i-=8);for(o=o<0;e[r+c]=255&o,c+=p,o/=256,f-=8);e[r+c-p]|=128*g;};},function(e,t,r){t.byteLength=function(e){return 3*e.length/4-f(e)},t.toByteArray=function(e){var t,r,n,o,s,l=e.length;o=f(e),s=new a(3*l/4-o),r=o>0?l-4:l;var u=0;for(t=0;t>16&255,s[u++]=n>>8&255,s[u++]=255&n;2===o?(n=i[e.charCodeAt(t)]<<2|i[e.charCodeAt(t+1)]>>4,s[u++]=255&n):1===o&&(n=i[e.charCodeAt(t)]<<10|i[e.charCodeAt(t+1)]<<4|i[e.charCodeAt(t+2)]>>2,s[u++]=n>>8&255,s[u++]=255&n);return s},t.fromByteArray=function(e){for(var t,r=e.length,i=r%3,a="",o=[],s=0,l=r-i;sl?l:s+16383));1===i?(t=e[r-1],a+=n[t>>2],a+=n[t<<4&63],a+="=="):2===i&&(t=(e[r-2]<<8)+e[r-1],a+=n[t>>10],a+=n[t>>4&63],a+=n[t<<2&63],a+="=");return o.push(a),o.join("")};for(var n=[],i=[],a="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,l=o.length;s0)throw new Error("Invalid string. Length must be a multiple of 4");return "="===e[t-2]?2:"="===e[t-1]?1:0}function u(e,t,r){for(var i,a,o=[],s=t;s>18&63]+n[a>>12&63]+n[a>>6&63]+n[63&a]);return o.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63;},function(e,t,r){function n(e,t){return 255===e.byteArray[t]&&217===e.byteArray[t+1]}function i(e,t,r){var i=t.fragments[r];return !(!n(e,i.position+i.length-2)&&!n(e,i.position+i.length-3))}function a(e,t,r){for(var n=r;n0&&t<=12&&e>0&&e<=function(e,t){switch(e){case 2:return t%4==0&&t%100||t%400==0?29:28;case 9:case 4:case 6:case 11:return 30;default:return 31}}(t,r)}(i,n,r))throw"invalid DA '"+e+"'";return {year:r,month:n,day:i}}if(t)throw"invalid DA '"+e+"'";return};},function(e,t,r){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){if(e.length>=2){var r=parseInt(e.substring(0,2),10),n=e.length>=4?parseInt(e.substring(2,4),10):void 0,i=e.length>=6?parseInt(e.substring(4,6),10):void 0,a=e.length>=8?parseInt(e.substring(7,13),10):void 0;if(t&&(isNaN(r)||void 0!==n&&isNaN(n)||void 0!==i&&isNaN(i)||void 0!==a&&isNaN(a)||r<0||r>23||n&&(n<0||n>59)||i&&(i<0||i>59)||a&&(a<0||a>999999)))throw"invalid TM '"+e+"'";return {hours:r,minutes:n,seconds:i,fractionalSeconds:a}}if(t)throw"invalid TM '"+e+"'";return};},function(e,t,r){Object.defineProperty(t,"__esModule",{value:!0}),t.createJPEGBasicOffsetTable=t.explicitDataSetToJS=t.explicitElementToString=t.parseDA=t.parseTM=t.parsePN=t.isPrivateTag=t.isStringVr=void 0;var n=r(25),i=f(r(77)),a=f(r(76)),o=f(r(43)),s=f(r(75)),l=f(r(74));function f(e){return e&&e.__esModule?e:{default:e}}t.isStringVr=n.isStringVr,t.isPrivateTag=n.isPrivateTag,t.parsePN=n.parsePN,t.parseTM=i.default,t.parseDA=a.default,t.explicitElementToString=o.default,t.explicitDataSetToJS=s.default,t.createJPEGBasicOffsetTable=l.default;},function(e,t,r){Object.defineProperty(t,"__esModule",{value:!0}),t.readTag=t.readSequenceItem=t.readSequenceItemsImplicit=t.readSequenceItemsExplicit=t.readPart10Header=t.readEncapsulatedPixelDataFromFragments=t.readEncapsulatedPixelData=t.readEncapsulatedImageFrame=t.readDicomElementImplicit=t.readDicomElementExplicit=t.parseDicom=t.littleEndianByteArrayParser=t.findItemDelimitationItemAndSetElementLength=t.findEndOfEncapsulatedElement=t.findAndSetUNElementLength=t.DataSet=t.sharedCopy=t.ByteStream=t.bigEndianByteArrayParser=t.version=t.alloc=t.readFixedString=t.parseDicomDataSetImplicit=t.parseDicomDataSetExplicit=t.createJPEGBasicOffsetTable=t.explicitDataSetToJS=t.explicitElementToString=t.parseDA=t.parseTM=t.parsePN=t.isPrivateTag=t.isStringVr=void 0;var n=r(78),i=r(16),a=r(14),o=P(r(22)),s=P(r(71)),l=P(r(37)),f=P(r(12)),u=P(r(11)),h=P(r(7)),d=P(r(41)),c=P(r(42)),p=P(r(24)),g=P(r(21)),m=P(r(70)),_=P(r(15)),y=P(r(23)),b=P(r(26)),v=P(r(44)),w=P(r(17)),E=P(r(36)),x=P(r(40)),S=P(r(39)),k=P(r(13)),A=P(r(4));function P(e){return e&&e.__esModule?e:{default:e}}var T={isStringVr:n.isStringVr,isPrivateTag:n.isPrivateTag,parsePN:n.parsePN,parseTM:n.parseTM,parseDA:n.parseDA,explicitElementToString:n.explicitElementToString,explicitDataSetToJS:n.explicitDataSetToJS,createJPEGBasicOffsetTable:n.createJPEGBasicOffsetTable,parseDicomDataSetExplicit:i.parseDicomDataSetExplicit,parseDicomDataSetImplicit:i.parseDicomDataSetImplicit,readFixedString:a.readFixedString,alloc:o.default,version:s.default,bigEndianByteArrayParser:l.default,ByteStream:f.default,sharedCopy:u.default,DataSet:h.default,findAndSetUNElementLength:d.default,findEndOfEncapsulatedElement:c.default,findItemDelimitationItemAndSetElementLength:p.default,littleEndianByteArrayParser:g.default,parseDicom:m.default,readDicomElementExplicit:_.default,readDicomElementImplicit:y.default,readEncapsulatedImageFrame:b.default,readEncapsulatedPixelData:v.default,readEncapsulatedPixelDataFromFragments:w.default,readPart10Header:E.default,readSequenceItemsExplicit:x.default,readSequenceItemsImplicit:S.default,readSequenceItem:k.default,readTag:A.default};t.isStringVr=n.isStringVr,t.isPrivateTag=n.isPrivateTag,t.parsePN=n.parsePN,t.parseTM=n.parseTM,t.parseDA=n.parseDA,t.explicitElementToString=n.explicitElementToString,t.explicitDataSetToJS=n.explicitDataSetToJS,t.createJPEGBasicOffsetTable=n.createJPEGBasicOffsetTable,t.parseDicomDataSetExplicit=i.parseDicomDataSetExplicit,t.parseDicomDataSetImplicit=i.parseDicomDataSetImplicit,t.readFixedString=a.readFixedString,t.alloc=o.default,t.version=s.default,t.bigEndianByteArrayParser=l.default,t.ByteStream=f.default,t.sharedCopy=u.default,t.DataSet=h.default,t.findAndSetUNElementLength=d.default,t.findEndOfEncapsulatedElement=c.default,t.findItemDelimitationItemAndSetElementLength=p.default,t.littleEndianByteArrayParser=g.default,t.parseDicom=m.default,t.readDicomElementExplicit=_.default,t.readDicomElementImplicit=y.default,t.readEncapsulatedImageFrame=b.default,t.readEncapsulatedPixelData=v.default,t.readEncapsulatedPixelDataFromFragments=w.default,t.readPart10Header=E.default,t.readSequenceItemsExplicit=x.default,t.readSequenceItemsImplicit=S.default,t.readSequenceItem=k.default,t.readTag=A.default,t.default=T;}])});
-//# sourceMappingURL=dicomParser.min.js.map
-});
-
-var dicomParser = unwrapExports(dicomParser_min);
-
-var cornerstone$2 = createCommonjsModule(function (module, exports) {
-/*! cornerstone-core - 2.2.8 - 2018-12-05 | (c) 2016 Chris Hafey | https://github.com/cornerstonejs/cornerstone */
-(function webpackUniversalModuleDefinition(root, factory) {
- module.exports = factory();
-})(window, function() {
-return /******/ (function(modules) { // webpackBootstrap
-/******/ function hotDisposeChunk(chunkId) {
-/******/ delete installedChunks[chunkId];
-/******/ }
-/******/ var parentHotUpdateCallback = window["webpackHotUpdate"];
-/******/ window["webpackHotUpdate"] = // eslint-disable-next-line no-unused-vars
-/******/ function webpackHotUpdateCallback(chunkId, moreModules) {
-/******/ hotAddUpdateChunk(chunkId, moreModules);
-/******/ if (parentHotUpdateCallback) parentHotUpdateCallback(chunkId, moreModules);
-/******/ } ;
-/******/
-/******/ // eslint-disable-next-line no-unused-vars
-/******/ function hotDownloadUpdateChunk(chunkId) {
-/******/ var head = document.getElementsByTagName("head")[0];
-/******/ var script = document.createElement("script");
-/******/ script.charset = "utf-8";
-/******/ script.src = __webpack_require__.p + "" + chunkId + "." + hotCurrentHash + ".hot-update.js";
-/******/ head.appendChild(script);
-/******/ }
-/******/
-/******/ // eslint-disable-next-line no-unused-vars
-/******/ function hotDownloadManifest(requestTimeout) {
-/******/ requestTimeout = requestTimeout || 10000;
-/******/ return new Promise(function(resolve, reject) {
-/******/ if (typeof XMLHttpRequest === "undefined") {
-/******/ return reject(new Error("No browser support"));
-/******/ }
-/******/ try {
-/******/ var request = new XMLHttpRequest();
-/******/ var requestPath = __webpack_require__.p + "" + hotCurrentHash + ".hot-update.json";
-/******/ request.open("GET", requestPath, true);
-/******/ request.timeout = requestTimeout;
-/******/ request.send(null);
-/******/ } catch (err) {
-/******/ return reject(err);
-/******/ }
-/******/ request.onreadystatechange = function() {
-/******/ if (request.readyState !== 4) return;
-/******/ if (request.status === 0) {
-/******/ // timeout
-/******/ reject(
-/******/ new Error("Manifest request to " + requestPath + " timed out.")
-/******/ );
-/******/ } else if (request.status === 404) {
-/******/ // no update available
-/******/ resolve();
-/******/ } else if (request.status !== 200 && request.status !== 304) {
-/******/ // other failure
-/******/ reject(new Error("Manifest request to " + requestPath + " failed."));
-/******/ } else {
-/******/ // success
-/******/ try {
-/******/ var update = JSON.parse(request.responseText);
-/******/ } catch (e) {
-/******/ reject(e);
-/******/ return;
-/******/ }
-/******/ resolve(update);
-/******/ }
-/******/ };
-/******/ });
-/******/ }
-/******/
-/******/ var hotApplyOnUpdate = true;
-/******/ // eslint-disable-next-line no-unused-vars
-/******/ var hotCurrentHash = "72ed982d5a0046aad5fa";
-/******/ var hotRequestTimeout = 10000;
-/******/ var hotCurrentModuleData = {};
-/******/ var hotCurrentChildModule;
-/******/ // eslint-disable-next-line no-unused-vars
-/******/ var hotCurrentParents = [];
-/******/ // eslint-disable-next-line no-unused-vars
-/******/ var hotCurrentParentsTemp = [];
-/******/
-/******/ // eslint-disable-next-line no-unused-vars
-/******/ function hotCreateRequire(moduleId) {
-/******/ var me = installedModules[moduleId];
-/******/ if (!me) return __webpack_require__;
-/******/ var fn = function(request) {
-/******/ if (me.hot.active) {
-/******/ if (installedModules[request]) {
-/******/ if (installedModules[request].parents.indexOf(moduleId) === -1) {
-/******/ installedModules[request].parents.push(moduleId);
-/******/ }
-/******/ } else {
-/******/ hotCurrentParents = [moduleId];
-/******/ hotCurrentChildModule = request;
-/******/ }
-/******/ if (me.children.indexOf(request) === -1) {
-/******/ me.children.push(request);
-/******/ }
-/******/ } else {
-/******/ console.warn(
-/******/ "[HMR] unexpected require(" +
-/******/ request +
-/******/ ") from disposed module " +
-/******/ moduleId
-/******/ );
-/******/ hotCurrentParents = [];
-/******/ }
-/******/ return __webpack_require__(request);
-/******/ };
-/******/ var ObjectFactory = function ObjectFactory(name) {
-/******/ return {
-/******/ configurable: true,
-/******/ enumerable: true,
-/******/ get: function() {
-/******/ return __webpack_require__[name];
-/******/ },
-/******/ set: function(value) {
-/******/ __webpack_require__[name] = value;
-/******/ }
-/******/ };
-/******/ };
-/******/ for (var name in __webpack_require__) {
-/******/ if (
-/******/ Object.prototype.hasOwnProperty.call(__webpack_require__, name) &&
-/******/ name !== "e" &&
-/******/ name !== "t"
-/******/ ) {
-/******/ Object.defineProperty(fn, name, ObjectFactory(name));
-/******/ }
-/******/ }
-/******/ fn.e = function(chunkId) {
-/******/ if (hotStatus === "ready") hotSetStatus("prepare");
-/******/ hotChunksLoading++;
-/******/ return __webpack_require__.e(chunkId).then(finishChunkLoading, function(err) {
-/******/ finishChunkLoading();
-/******/ throw err;
-/******/ });
-/******/
-/******/ function finishChunkLoading() {
-/******/ hotChunksLoading--;
-/******/ if (hotStatus === "prepare") {
-/******/ if (!hotWaitingFilesMap[chunkId]) {
-/******/ hotEnsureUpdateChunk(chunkId);
-/******/ }
-/******/ if (hotChunksLoading === 0 && hotWaitingFiles === 0) {
-/******/ hotUpdateDownloaded();
-/******/ }
-/******/ }
-/******/ }
-/******/ };
-/******/ fn.t = function(value, mode) {
-/******/ if (mode & 1) value = fn(value);
-/******/ return __webpack_require__.t(value, mode & ~1);
-/******/ };
-/******/ return fn;
-/******/ }
-/******/
-/******/ // eslint-disable-next-line no-unused-vars
-/******/ function hotCreateModule(moduleId) {
-/******/ var hot = {
-/******/ // private stuff
-/******/ _acceptedDependencies: {},
-/******/ _declinedDependencies: {},
-/******/ _selfAccepted: false,
-/******/ _selfDeclined: false,
-/******/ _disposeHandlers: [],
-/******/ _main: hotCurrentChildModule !== moduleId,
-/******/
-/******/ // Module API
-/******/ active: true,
-/******/ accept: function(dep, callback) {
-/******/ if (dep === undefined) hot._selfAccepted = true;
-/******/ else if (typeof dep === "function") hot._selfAccepted = dep;
-/******/ else if (typeof dep === "object")
-/******/ for (var i = 0; i < dep.length; i++)
-/******/ hot._acceptedDependencies[dep[i]] = callback || function() {};
-/******/ else hot._acceptedDependencies[dep] = callback || function() {};
-/******/ },
-/******/ decline: function(dep) {
-/******/ if (dep === undefined) hot._selfDeclined = true;
-/******/ else if (typeof dep === "object")
-/******/ for (var i = 0; i < dep.length; i++)
-/******/ hot._declinedDependencies[dep[i]] = true;
-/******/ else hot._declinedDependencies[dep] = true;
-/******/ },
-/******/ dispose: function(callback) {
-/******/ hot._disposeHandlers.push(callback);
-/******/ },
-/******/ addDisposeHandler: function(callback) {
-/******/ hot._disposeHandlers.push(callback);
-/******/ },
-/******/ removeDisposeHandler: function(callback) {
-/******/ var idx = hot._disposeHandlers.indexOf(callback);
-/******/ if (idx >= 0) hot._disposeHandlers.splice(idx, 1);
-/******/ },
-/******/
-/******/ // Management API
-/******/ check: hotCheck,
-/******/ apply: hotApply,
-/******/ status: function(l) {
-/******/ if (!l) return hotStatus;
-/******/ hotStatusHandlers.push(l);
-/******/ },
-/******/ addStatusHandler: function(l) {
-/******/ hotStatusHandlers.push(l);
-/******/ },
-/******/ removeStatusHandler: function(l) {
-/******/ var idx = hotStatusHandlers.indexOf(l);
-/******/ if (idx >= 0) hotStatusHandlers.splice(idx, 1);
-/******/ },
-/******/
-/******/ //inherit from previous dispose call
-/******/ data: hotCurrentModuleData[moduleId]
-/******/ };
-/******/ hotCurrentChildModule = undefined;
-/******/ return hot;
-/******/ }
-/******/
-/******/ var hotStatusHandlers = [];
-/******/ var hotStatus = "idle";
-/******/
-/******/ function hotSetStatus(newStatus) {
-/******/ hotStatus = newStatus;
-/******/ for (var i = 0; i < hotStatusHandlers.length; i++)
-/******/ hotStatusHandlers[i].call(null, newStatus);
-/******/ }
-/******/
-/******/ // while downloading
-/******/ var hotWaitingFiles = 0;
-/******/ var hotChunksLoading = 0;
-/******/ var hotWaitingFilesMap = {};
-/******/ var hotRequestedFilesMap = {};
-/******/ var hotAvailableFilesMap = {};
-/******/ var hotDeferred;
-/******/
-/******/ // The update info
-/******/ var hotUpdate, hotUpdateNewHash;
-/******/
-/******/ function toModuleId(id) {
-/******/ var isNumber = +id + "" === id;
-/******/ return isNumber ? +id : id;
-/******/ }
-/******/
-/******/ function hotCheck(apply) {
-/******/ if (hotStatus !== "idle") {
-/******/ throw new Error("check() is only allowed in idle status");
-/******/ }
-/******/ hotApplyOnUpdate = apply;
-/******/ hotSetStatus("check");
-/******/ return hotDownloadManifest(hotRequestTimeout).then(function(update) {
-/******/ if (!update) {
-/******/ hotSetStatus("idle");
-/******/ return null;
-/******/ }
-/******/ hotRequestedFilesMap = {};
-/******/ hotWaitingFilesMap = {};
-/******/ hotAvailableFilesMap = update.c;
-/******/ hotUpdateNewHash = update.h;
-/******/
-/******/ hotSetStatus("prepare");
-/******/ var promise = new Promise(function(resolve, reject) {
-/******/ hotDeferred = {
-/******/ resolve: resolve,
-/******/ reject: reject
-/******/ };
-/******/ });
-/******/ hotUpdate = {};
-/******/ var chunkId = "cornerstone";
-/******/ // eslint-disable-next-line no-lone-blocks
-/******/ {
-/******/ /*globals chunkId */
-/******/ hotEnsureUpdateChunk(chunkId);
-/******/ }
-/******/ if (
-/******/ hotStatus === "prepare" &&
-/******/ hotChunksLoading === 0 &&
-/******/ hotWaitingFiles === 0
-/******/ ) {
-/******/ hotUpdateDownloaded();
-/******/ }
-/******/ return promise;
-/******/ });
-/******/ }
-/******/
-/******/ // eslint-disable-next-line no-unused-vars
-/******/ function hotAddUpdateChunk(chunkId, moreModules) {
-/******/ if (!hotAvailableFilesMap[chunkId] || !hotRequestedFilesMap[chunkId])
-/******/ return;
-/******/ hotRequestedFilesMap[chunkId] = false;
-/******/ for (var moduleId in moreModules) {
-/******/ if (Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
-/******/ hotUpdate[moduleId] = moreModules[moduleId];
-/******/ }
-/******/ }
-/******/ if (--hotWaitingFiles === 0 && hotChunksLoading === 0) {
-/******/ hotUpdateDownloaded();
-/******/ }
-/******/ }
-/******/
-/******/ function hotEnsureUpdateChunk(chunkId) {
-/******/ if (!hotAvailableFilesMap[chunkId]) {
-/******/ hotWaitingFilesMap[chunkId] = true;
-/******/ } else {
-/******/ hotRequestedFilesMap[chunkId] = true;
-/******/ hotWaitingFiles++;
-/******/ hotDownloadUpdateChunk(chunkId);
-/******/ }
-/******/ }
-/******/
-/******/ function hotUpdateDownloaded() {
-/******/ hotSetStatus("ready");
-/******/ var deferred = hotDeferred;
-/******/ hotDeferred = null;
-/******/ if (!deferred) return;
-/******/ if (hotApplyOnUpdate) {
-/******/ // Wrap deferred object in Promise to mark it as a well-handled Promise to
-/******/ // avoid triggering uncaught exception warning in Chrome.
-/******/ // See https://bugs.chromium.org/p/chromium/issues/detail?id=465666
-/******/ Promise.resolve()
-/******/ .then(function() {
-/******/ return hotApply(hotApplyOnUpdate);
-/******/ })
-/******/ .then(
-/******/ function(result) {
-/******/ deferred.resolve(result);
-/******/ },
-/******/ function(err) {
-/******/ deferred.reject(err);
-/******/ }
-/******/ );
-/******/ } else {
-/******/ var outdatedModules = [];
-/******/ for (var id in hotUpdate) {
-/******/ if (Object.prototype.hasOwnProperty.call(hotUpdate, id)) {
-/******/ outdatedModules.push(toModuleId(id));
-/******/ }
-/******/ }
-/******/ deferred.resolve(outdatedModules);
-/******/ }
-/******/ }
-/******/
-/******/ function hotApply(options) {
-/******/ if (hotStatus !== "ready")
-/******/ throw new Error("apply() is only allowed in ready status");
-/******/ options = options || {};
-/******/
-/******/ var cb;
-/******/ var i;
-/******/ var j;
-/******/ var module;
-/******/ var moduleId;
-/******/
-/******/ function getAffectedStuff(updateModuleId) {
-/******/ var outdatedModules = [updateModuleId];
-/******/ var outdatedDependencies = {};
-/******/
-/******/ var queue = outdatedModules.slice().map(function(id) {
-/******/ return {
-/******/ chain: [id],
-/******/ id: id
-/******/ };
-/******/ });
-/******/ while (queue.length > 0) {
-/******/ var queueItem = queue.pop();
-/******/ var moduleId = queueItem.id;
-/******/ var chain = queueItem.chain;
-/******/ module = installedModules[moduleId];
-/******/ if (!module || module.hot._selfAccepted) continue;
-/******/ if (module.hot._selfDeclined) {
-/******/ return {
-/******/ type: "self-declined",
-/******/ chain: chain,
-/******/ moduleId: moduleId
-/******/ };
-/******/ }
-/******/ if (module.hot._main) {
-/******/ return {
-/******/ type: "unaccepted",
-/******/ chain: chain,
-/******/ moduleId: moduleId
-/******/ };
-/******/ }
-/******/ for (var i = 0; i < module.parents.length; i++) {
-/******/ var parentId = module.parents[i];
-/******/ var parent = installedModules[parentId];
-/******/ if (!parent) continue;
-/******/ if (parent.hot._declinedDependencies[moduleId]) {
-/******/ return {
-/******/ type: "declined",
-/******/ chain: chain.concat([parentId]),
-/******/ moduleId: moduleId,
-/******/ parentId: parentId
-/******/ };
-/******/ }
-/******/ if (outdatedModules.indexOf(parentId) !== -1) continue;
-/******/ if (parent.hot._acceptedDependencies[moduleId]) {
-/******/ if (!outdatedDependencies[parentId])
-/******/ outdatedDependencies[parentId] = [];
-/******/ addAllToSet(outdatedDependencies[parentId], [moduleId]);
-/******/ continue;
-/******/ }
-/******/ delete outdatedDependencies[parentId];
-/******/ outdatedModules.push(parentId);
-/******/ queue.push({
-/******/ chain: chain.concat([parentId]),
-/******/ id: parentId
-/******/ });
-/******/ }
-/******/ }
-/******/
-/******/ return {
-/******/ type: "accepted",
-/******/ moduleId: updateModuleId,
-/******/ outdatedModules: outdatedModules,
-/******/ outdatedDependencies: outdatedDependencies
-/******/ };
-/******/ }
-/******/
-/******/ function addAllToSet(a, b) {
-/******/ for (var i = 0; i < b.length; i++) {
-/******/ var item = b[i];
-/******/ if (a.indexOf(item) === -1) a.push(item);
-/******/ }
-/******/ }
-/******/
-/******/ // at begin all updates modules are outdated
-/******/ // the "outdated" status can propagate to parents if they don't accept the children
-/******/ var outdatedDependencies = {};
-/******/ var outdatedModules = [];
-/******/ var appliedUpdate = {};
-/******/
-/******/ var warnUnexpectedRequire = function warnUnexpectedRequire() {
-/******/ console.warn(
-/******/ "[HMR] unexpected require(" + result.moduleId + ") to disposed module"
-/******/ );
-/******/ };
-/******/
-/******/ for (var id in hotUpdate) {
-/******/ if (Object.prototype.hasOwnProperty.call(hotUpdate, id)) {
-/******/ moduleId = toModuleId(id);
-/******/ /** @type {TODO} */
-/******/ var result;
-/******/ if (hotUpdate[id]) {
-/******/ result = getAffectedStuff(moduleId);
-/******/ } else {
-/******/ result = {
-/******/ type: "disposed",
-/******/ moduleId: id
-/******/ };
-/******/ }
-/******/ /** @type {Error|false} */
-/******/ var abortError = false;
-/******/ var doApply = false;
-/******/ var doDispose = false;
-/******/ var chainInfo = "";
-/******/ if (result.chain) {
-/******/ chainInfo = "\nUpdate propagation: " + result.chain.join(" -> ");
-/******/ }
-/******/ switch (result.type) {
-/******/ case "self-declined":
-/******/ if (options.onDeclined) options.onDeclined(result);
-/******/ if (!options.ignoreDeclined)
-/******/ abortError = new Error(
-/******/ "Aborted because of self decline: " +
-/******/ result.moduleId +
-/******/ chainInfo
-/******/ );
-/******/ break;
-/******/ case "declined":
-/******/ if (options.onDeclined) options.onDeclined(result);
-/******/ if (!options.ignoreDeclined)
-/******/ abortError = new Error(
-/******/ "Aborted because of declined dependency: " +
-/******/ result.moduleId +
-/******/ " in " +
-/******/ result.parentId +
-/******/ chainInfo
-/******/ );
-/******/ break;
-/******/ case "unaccepted":
-/******/ if (options.onUnaccepted) options.onUnaccepted(result);
-/******/ if (!options.ignoreUnaccepted)
-/******/ abortError = new Error(
-/******/ "Aborted because " + moduleId + " is not accepted" + chainInfo
-/******/ );
-/******/ break;
-/******/ case "accepted":
-/******/ if (options.onAccepted) options.onAccepted(result);
-/******/ doApply = true;
-/******/ break;
-/******/ case "disposed":
-/******/ if (options.onDisposed) options.onDisposed(result);
-/******/ doDispose = true;
-/******/ break;
-/******/ default:
-/******/ throw new Error("Unexception type " + result.type);
-/******/ }
-/******/ if (abortError) {
-/******/ hotSetStatus("abort");
-/******/ return Promise.reject(abortError);
-/******/ }
-/******/ if (doApply) {
-/******/ appliedUpdate[moduleId] = hotUpdate[moduleId];
-/******/ addAllToSet(outdatedModules, result.outdatedModules);
-/******/ for (moduleId in result.outdatedDependencies) {
-/******/ if (
-/******/ Object.prototype.hasOwnProperty.call(
-/******/ result.outdatedDependencies,
-/******/ moduleId
-/******/ )
-/******/ ) {
-/******/ if (!outdatedDependencies[moduleId])
-/******/ outdatedDependencies[moduleId] = [];
-/******/ addAllToSet(
-/******/ outdatedDependencies[moduleId],
-/******/ result.outdatedDependencies[moduleId]
-/******/ );
-/******/ }
-/******/ }
-/******/ }
-/******/ if (doDispose) {
-/******/ addAllToSet(outdatedModules, [result.moduleId]);
-/******/ appliedUpdate[moduleId] = warnUnexpectedRequire;
-/******/ }
-/******/ }
-/******/ }
-/******/
-/******/ // Store self accepted outdated modules to require them later by the module system
-/******/ var outdatedSelfAcceptedModules = [];
-/******/ for (i = 0; i < outdatedModules.length; i++) {
-/******/ moduleId = outdatedModules[i];
-/******/ if (
-/******/ installedModules[moduleId] &&
-/******/ installedModules[moduleId].hot._selfAccepted
-/******/ )
-/******/ outdatedSelfAcceptedModules.push({
-/******/ module: moduleId,
-/******/ errorHandler: installedModules[moduleId].hot._selfAccepted
-/******/ });
-/******/ }
-/******/
-/******/ // Now in "dispose" phase
-/******/ hotSetStatus("dispose");
-/******/ Object.keys(hotAvailableFilesMap).forEach(function(chunkId) {
-/******/ if (hotAvailableFilesMap[chunkId] === false) {
-/******/ hotDisposeChunk(chunkId);
-/******/ }
-/******/ });
-/******/
-/******/ var idx;
-/******/ var queue = outdatedModules.slice();
-/******/ while (queue.length > 0) {
-/******/ moduleId = queue.pop();
-/******/ module = installedModules[moduleId];
-/******/ if (!module) continue;
-/******/
-/******/ var data = {};
-/******/
-/******/ // Call dispose handlers
-/******/ var disposeHandlers = module.hot._disposeHandlers;
-/******/ for (j = 0; j < disposeHandlers.length; j++) {
-/******/ cb = disposeHandlers[j];
-/******/ cb(data);
-/******/ }
-/******/ hotCurrentModuleData[moduleId] = data;
-/******/
-/******/ // disable module (this disables requires from this module)
-/******/ module.hot.active = false;
-/******/
-/******/ // remove module from cache
-/******/ delete installedModules[moduleId];
-/******/
-/******/ // when disposing there is no need to call dispose handler
-/******/ delete outdatedDependencies[moduleId];
-/******/
-/******/ // remove "parents" references from all children
-/******/ for (j = 0; j < module.children.length; j++) {
-/******/ var child = installedModules[module.children[j]];
-/******/ if (!child) continue;
-/******/ idx = child.parents.indexOf(moduleId);
-/******/ if (idx >= 0) {
-/******/ child.parents.splice(idx, 1);
-/******/ }
-/******/ }
-/******/ }
-/******/
-/******/ // remove outdated dependency from module children
-/******/ var dependency;
-/******/ var moduleOutdatedDependencies;
-/******/ for (moduleId in outdatedDependencies) {
-/******/ if (
-/******/ Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)
-/******/ ) {
-/******/ module = installedModules[moduleId];
-/******/ if (module) {
-/******/ moduleOutdatedDependencies = outdatedDependencies[moduleId];
-/******/ for (j = 0; j < moduleOutdatedDependencies.length; j++) {
-/******/ dependency = moduleOutdatedDependencies[j];
-/******/ idx = module.children.indexOf(dependency);
-/******/ if (idx >= 0) module.children.splice(idx, 1);
-/******/ }
-/******/ }
-/******/ }
-/******/ }
-/******/
-/******/ // Not in "apply" phase
-/******/ hotSetStatus("apply");
-/******/
-/******/ hotCurrentHash = hotUpdateNewHash;
-/******/
-/******/ // insert new code
-/******/ for (moduleId in appliedUpdate) {
-/******/ if (Object.prototype.hasOwnProperty.call(appliedUpdate, moduleId)) {
-/******/ modules[moduleId] = appliedUpdate[moduleId];
-/******/ }
-/******/ }
-/******/
-/******/ // call accept handlers
-/******/ var error = null;
-/******/ for (moduleId in outdatedDependencies) {
-/******/ if (
-/******/ Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)
-/******/ ) {
-/******/ module = installedModules[moduleId];
-/******/ if (module) {
-/******/ moduleOutdatedDependencies = outdatedDependencies[moduleId];
-/******/ var callbacks = [];
-/******/ for (i = 0; i < moduleOutdatedDependencies.length; i++) {
-/******/ dependency = moduleOutdatedDependencies[i];
-/******/ cb = module.hot._acceptedDependencies[dependency];
-/******/ if (cb) {
-/******/ if (callbacks.indexOf(cb) !== -1) continue;
-/******/ callbacks.push(cb);
-/******/ }
-/******/ }
-/******/ for (i = 0; i < callbacks.length; i++) {
-/******/ cb = callbacks[i];
-/******/ try {
-/******/ cb(moduleOutdatedDependencies);
-/******/ } catch (err) {
-/******/ if (options.onErrored) {
-/******/ options.onErrored({
-/******/ type: "accept-errored",
-/******/ moduleId: moduleId,
-/******/ dependencyId: moduleOutdatedDependencies[i],
-/******/ error: err
-/******/ });
-/******/ }
-/******/ if (!options.ignoreErrored) {
-/******/ if (!error) error = err;
-/******/ }
-/******/ }
-/******/ }
-/******/ }
-/******/ }
-/******/ }
-/******/
-/******/ // Load self accepted modules
-/******/ for (i = 0; i < outdatedSelfAcceptedModules.length; i++) {
-/******/ var item = outdatedSelfAcceptedModules[i];
-/******/ moduleId = item.module;
-/******/ hotCurrentParents = [moduleId];
-/******/ try {
-/******/ __webpack_require__(moduleId);
-/******/ } catch (err) {
-/******/ if (typeof item.errorHandler === "function") {
-/******/ try {
-/******/ item.errorHandler(err);
-/******/ } catch (err2) {
-/******/ if (options.onErrored) {
-/******/ options.onErrored({
-/******/ type: "self-accept-error-handler-errored",
-/******/ moduleId: moduleId,
-/******/ error: err2,
-/******/ originalError: err
-/******/ });
-/******/ }
-/******/ if (!options.ignoreErrored) {
-/******/ if (!error) error = err2;
-/******/ }
-/******/ if (!error) error = err;
-/******/ }
-/******/ } else {
-/******/ if (options.onErrored) {
-/******/ options.onErrored({
-/******/ type: "self-accept-errored",
-/******/ moduleId: moduleId,
-/******/ error: err
-/******/ });
-/******/ }
-/******/ if (!options.ignoreErrored) {
-/******/ if (!error) error = err;
-/******/ }
-/******/ }
-/******/ }
-/******/ }
-/******/
-/******/ // handle errors in accept handlers and self accepted module load
-/******/ if (error) {
-/******/ hotSetStatus("fail");
-/******/ return Promise.reject(error);
-/******/ }
-/******/
-/******/ hotSetStatus("idle");
-/******/ return new Promise(function(resolve) {
-/******/ resolve(outdatedModules);
-/******/ });
-/******/ }
-/******/
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {},
-/******/ hot: hotCreateModule(moduleId),
-/******/ parents: (hotCurrentParentsTemp = hotCurrentParents, hotCurrentParents = [], hotCurrentParentsTemp),
-/******/ children: []
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, hotCreateRequire(moduleId));
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // define getter function for harmony exports
-/******/ __webpack_require__.d = function(exports, name, getter) {
-/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
-/******/ }
-/******/ };
-/******/
-/******/ // define __esModule on exports
-/******/ __webpack_require__.r = function(exports) {
-/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
-/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
-/******/ }
-/******/ Object.defineProperty(exports, '__esModule', { value: true });
-/******/ };
-/******/
-/******/ // create a fake namespace object
-/******/ // mode & 1: value is a module id, require it
-/******/ // mode & 2: merge all properties of value into the ns
-/******/ // mode & 4: return value when already ns object
-/******/ // mode & 8|1: behave like require
-/******/ __webpack_require__.t = function(value, mode) {
-/******/ if(mode & 1) value = __webpack_require__(value);
-/******/ if(mode & 8) return value;
-/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
-/******/ var ns = Object.create(null);
-/******/ __webpack_require__.r(ns);
-/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
-/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
-/******/ return ns;
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __webpack_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __webpack_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-/******/
-/******/ // __webpack_hash__
-/******/ __webpack_require__.h = function() { return hotCurrentHash; };
-/******/
-/******/
-/******/ // Load entry module and return exports
-/******/ return hotCreateRequire("./index.js")(__webpack_require__.s = "./index.js");
-/******/ })
-/************************************************************************/
-/******/ ({
-
-/***/ "./canvasToPixel.js":
-/*!**************************!*\
- !*** ./canvasToPixel.js ***!
- \**************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js");
-/* harmony import */ var _internal_getTransform_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./internal/getTransform.js */ "./internal/getTransform.js");
-
-
-/**
- * Converts a point in the canvas coordinate system to the pixel coordinate system
- * system. This can be used to reset tools' image coordinates after modifications
- * have been made in canvas space (e.g. moving a tool by a few cm, independent of
- * image resolution).
- *
- * @param {HTMLElement} element The Cornerstone element within which the input point lies
- * @param {{x: Number, y: Number}} pt The input point in the canvas coordinate system
- *
- * @returns {{x: Number, y: Number}} The transformed point in the pixel coordinate system
- * @memberof PixelCoordinateSystem
- */
-
-/* harmony default export */ __webpack_exports__["default"] = (function (element, pt) {
- var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element);
- var transform = Object(_internal_getTransform_js__WEBPACK_IMPORTED_MODULE_1__["default"])(enabledElement);
- transform.invert();
- return transform.transformPoint(pt.x, pt.y);
-});
-
-/***/ }),
-
-/***/ "./colors/colormap.js":
-/*!****************************!*\
- !*** ./colors/colormap.js ***!
- \****************************/
-/*! exports provided: getColormapsList, getColormap */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getColormapsList", function() { return getColormapsList; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getColormap", function() { return getColormap; });
-/* harmony import */ var _lookupTable_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lookupTable.js */ "./colors/lookupTable.js");
-
-var COLOR_TRANSPARENT = [0, 0, 0, 0]; // Colormaps
-//
-// Hot Iron, PET, Hot Metal Blue and PET 20 Step are color palettes
-// Defined by the DICOM standard
-// http://dicom.nema.org/dicom/2013/output/chtml/part06/chapter_B.html
-//
-// All Linear Segmented Colormaps were copied from matplotlib
-// https://github.com/stefanv/matplotlib/blob/master/lib/matplotlib/_cm.py
-
-var colormapsData = {
- hotIron: {
- name: 'Hot Iron',
- numOfColors: 256,
- colors: [[0, 0, 0, 255], [2, 0, 0, 255], [4, 0, 0, 255], [6, 0, 0, 255], [8, 0, 0, 255], [10, 0, 0, 255], [12, 0, 0, 255], [14, 0, 0, 255], [16, 0, 0, 255], [18, 0, 0, 255], [20, 0, 0, 255], [22, 0, 0, 255], [24, 0, 0, 255], [26, 0, 0, 255], [28, 0, 0, 255], [30, 0, 0, 255], [32, 0, 0, 255], [34, 0, 0, 255], [36, 0, 0, 255], [38, 0, 0, 255], [40, 0, 0, 255], [42, 0, 0, 255], [44, 0, 0, 255], [46, 0, 0, 255], [48, 0, 0, 255], [50, 0, 0, 255], [52, 0, 0, 255], [54, 0, 0, 255], [56, 0, 0, 255], [58, 0, 0, 255], [60, 0, 0, 255], [62, 0, 0, 255], [64, 0, 0, 255], [66, 0, 0, 255], [68, 0, 0, 255], [70, 0, 0, 255], [72, 0, 0, 255], [74, 0, 0, 255], [76, 0, 0, 255], [78, 0, 0, 255], [80, 0, 0, 255], [82, 0, 0, 255], [84, 0, 0, 255], [86, 0, 0, 255], [88, 0, 0, 255], [90, 0, 0, 255], [92, 0, 0, 255], [94, 0, 0, 255], [96, 0, 0, 255], [98, 0, 0, 255], [100, 0, 0, 255], [102, 0, 0, 255], [104, 0, 0, 255], [106, 0, 0, 255], [108, 0, 0, 255], [110, 0, 0, 255], [112, 0, 0, 255], [114, 0, 0, 255], [116, 0, 0, 255], [118, 0, 0, 255], [120, 0, 0, 255], [122, 0, 0, 255], [124, 0, 0, 255], [126, 0, 0, 255], [128, 0, 0, 255], [130, 0, 0, 255], [132, 0, 0, 255], [134, 0, 0, 255], [136, 0, 0, 255], [138, 0, 0, 255], [140, 0, 0, 255], [142, 0, 0, 255], [144, 0, 0, 255], [146, 0, 0, 255], [148, 0, 0, 255], [150, 0, 0, 255], [152, 0, 0, 255], [154, 0, 0, 255], [156, 0, 0, 255], [158, 0, 0, 255], [160, 0, 0, 255], [162, 0, 0, 255], [164, 0, 0, 255], [166, 0, 0, 255], [168, 0, 0, 255], [170, 0, 0, 255], [172, 0, 0, 255], [174, 0, 0, 255], [176, 0, 0, 255], [178, 0, 0, 255], [180, 0, 0, 255], [182, 0, 0, 255], [184, 0, 0, 255], [186, 0, 0, 255], [188, 0, 0, 255], [190, 0, 0, 255], [192, 0, 0, 255], [194, 0, 0, 255], [196, 0, 0, 255], [198, 0, 0, 255], [200, 0, 0, 255], [202, 0, 0, 255], [204, 0, 0, 255], [206, 0, 0, 255], [208, 0, 0, 255], [210, 0, 0, 255], [212, 0, 0, 255], [214, 0, 0, 255], [216, 0, 0, 255], [218, 0, 0, 255], [220, 0, 0, 255], [222, 0, 0, 255], [224, 0, 0, 255], [226, 0, 0, 255], [228, 0, 0, 255], [230, 0, 0, 255], [232, 0, 0, 255], [234, 0, 0, 255], [236, 0, 0, 255], [238, 0, 0, 255], [240, 0, 0, 255], [242, 0, 0, 255], [244, 0, 0, 255], [246, 0, 0, 255], [248, 0, 0, 255], [250, 0, 0, 255], [252, 0, 0, 255], [254, 0, 0, 255], [255, 0, 0, 255], [255, 2, 0, 255], [255, 4, 0, 255], [255, 6, 0, 255], [255, 8, 0, 255], [255, 10, 0, 255], [255, 12, 0, 255], [255, 14, 0, 255], [255, 16, 0, 255], [255, 18, 0, 255], [255, 20, 0, 255], [255, 22, 0, 255], [255, 24, 0, 255], [255, 26, 0, 255], [255, 28, 0, 255], [255, 30, 0, 255], [255, 32, 0, 255], [255, 34, 0, 255], [255, 36, 0, 255], [255, 38, 0, 255], [255, 40, 0, 255], [255, 42, 0, 255], [255, 44, 0, 255], [255, 46, 0, 255], [255, 48, 0, 255], [255, 50, 0, 255], [255, 52, 0, 255], [255, 54, 0, 255], [255, 56, 0, 255], [255, 58, 0, 255], [255, 60, 0, 255], [255, 62, 0, 255], [255, 64, 0, 255], [255, 66, 0, 255], [255, 68, 0, 255], [255, 70, 0, 255], [255, 72, 0, 255], [255, 74, 0, 255], [255, 76, 0, 255], [255, 78, 0, 255], [255, 80, 0, 255], [255, 82, 0, 255], [255, 84, 0, 255], [255, 86, 0, 255], [255, 88, 0, 255], [255, 90, 0, 255], [255, 92, 0, 255], [255, 94, 0, 255], [255, 96, 0, 255], [255, 98, 0, 255], [255, 100, 0, 255], [255, 102, 0, 255], [255, 104, 0, 255], [255, 106, 0, 255], [255, 108, 0, 255], [255, 110, 0, 255], [255, 112, 0, 255], [255, 114, 0, 255], [255, 116, 0, 255], [255, 118, 0, 255], [255, 120, 0, 255], [255, 122, 0, 255], [255, 124, 0, 255], [255, 126, 0, 255], [255, 128, 4, 255], [255, 130, 8, 255], [255, 132, 12, 255], [255, 134, 16, 255], [255, 136, 20, 255], [255, 138, 24, 255], [255, 140, 28, 255], [255, 142, 32, 255], [255, 144, 36, 255], [255, 146, 40, 255], [255, 148, 44, 255], [255, 150, 48, 255], [255, 152, 52, 255], [255, 154, 56, 255], [255, 156, 60, 255], [255, 158, 64, 255], [255, 160, 68, 255], [255, 162, 72, 255], [255, 164, 76, 255], [255, 166, 80, 255], [255, 168, 84, 255], [255, 170, 88, 255], [255, 172, 92, 255], [255, 174, 96, 255], [255, 176, 100, 255], [255, 178, 104, 255], [255, 180, 108, 255], [255, 182, 112, 255], [255, 184, 116, 255], [255, 186, 120, 255], [255, 188, 124, 255], [255, 190, 128, 255], [255, 192, 132, 255], [255, 194, 136, 255], [255, 196, 140, 255], [255, 198, 144, 255], [255, 200, 148, 255], [255, 202, 152, 255], [255, 204, 156, 255], [255, 206, 160, 255], [255, 208, 164, 255], [255, 210, 168, 255], [255, 212, 172, 255], [255, 214, 176, 255], [255, 216, 180, 255], [255, 218, 184, 255], [255, 220, 188, 255], [255, 222, 192, 255], [255, 224, 196, 255], [255, 226, 200, 255], [255, 228, 204, 255], [255, 230, 208, 255], [255, 232, 212, 255], [255, 234, 216, 255], [255, 236, 220, 255], [255, 238, 224, 255], [255, 240, 228, 255], [255, 242, 232, 255], [255, 244, 236, 255], [255, 246, 240, 255], [255, 248, 244, 255], [255, 250, 248, 255], [255, 252, 252, 255], [255, 255, 255, 255]]
- },
- pet: {
- name: 'PET',
- numColors: 256,
- colors: [[0, 0, 0, 255], [0, 2, 1, 255], [0, 4, 3, 255], [0, 6, 5, 255], [0, 8, 7, 255], [0, 10, 9, 255], [0, 12, 11, 255], [0, 14, 13, 255], [0, 16, 15, 255], [0, 18, 17, 255], [0, 20, 19, 255], [0, 22, 21, 255], [0, 24, 23, 255], [0, 26, 25, 255], [0, 28, 27, 255], [0, 30, 29, 255], [0, 32, 31, 255], [0, 34, 33, 255], [0, 36, 35, 255], [0, 38, 37, 255], [0, 40, 39, 255], [0, 42, 41, 255], [0, 44, 43, 255], [0, 46, 45, 255], [0, 48, 47, 255], [0, 50, 49, 255], [0, 52, 51, 255], [0, 54, 53, 255], [0, 56, 55, 255], [0, 58, 57, 255], [0, 60, 59, 255], [0, 62, 61, 255], [0, 65, 63, 255], [0, 67, 65, 255], [0, 69, 67, 255], [0, 71, 69, 255], [0, 73, 71, 255], [0, 75, 73, 255], [0, 77, 75, 255], [0, 79, 77, 255], [0, 81, 79, 255], [0, 83, 81, 255], [0, 85, 83, 255], [0, 87, 85, 255], [0, 89, 87, 255], [0, 91, 89, 255], [0, 93, 91, 255], [0, 95, 93, 255], [0, 97, 95, 255], [0, 99, 97, 255], [0, 101, 99, 255], [0, 103, 101, 255], [0, 105, 103, 255], [0, 107, 105, 255], [0, 109, 107, 255], [0, 111, 109, 255], [0, 113, 111, 255], [0, 115, 113, 255], [0, 117, 115, 255], [0, 119, 117, 255], [0, 121, 119, 255], [0, 123, 121, 255], [0, 125, 123, 255], [0, 128, 125, 255], [1, 126, 127, 255], [3, 124, 129, 255], [5, 122, 131, 255], [7, 120, 133, 255], [9, 118, 135, 255], [11, 116, 137, 255], [13, 114, 139, 255], [15, 112, 141, 255], [17, 110, 143, 255], [19, 108, 145, 255], [21, 106, 147, 255], [23, 104, 149, 255], [25, 102, 151, 255], [27, 100, 153, 255], [29, 98, 155, 255], [31, 96, 157, 255], [33, 94, 159, 255], [35, 92, 161, 255], [37, 90, 163, 255], [39, 88, 165, 255], [41, 86, 167, 255], [43, 84, 169, 255], [45, 82, 171, 255], [47, 80, 173, 255], [49, 78, 175, 255], [51, 76, 177, 255], [53, 74, 179, 255], [55, 72, 181, 255], [57, 70, 183, 255], [59, 68, 185, 255], [61, 66, 187, 255], [63, 64, 189, 255], [65, 63, 191, 255], [67, 61, 193, 255], [69, 59, 195, 255], [71, 57, 197, 255], [73, 55, 199, 255], [75, 53, 201, 255], [77, 51, 203, 255], [79, 49, 205, 255], [81, 47, 207, 255], [83, 45, 209, 255], [85, 43, 211, 255], [86, 41, 213, 255], [88, 39, 215, 255], [90, 37, 217, 255], [92, 35, 219, 255], [94, 33, 221, 255], [96, 31, 223, 255], [98, 29, 225, 255], [100, 27, 227, 255], [102, 25, 229, 255], [104, 23, 231, 255], [106, 21, 233, 255], [108, 19, 235, 255], [110, 17, 237, 255], [112, 15, 239, 255], [114, 13, 241, 255], [116, 11, 243, 255], [118, 9, 245, 255], [120, 7, 247, 255], [122, 5, 249, 255], [124, 3, 251, 255], [126, 1, 253, 255], [128, 0, 255, 255], [130, 2, 252, 255], [132, 4, 248, 255], [134, 6, 244, 255], [136, 8, 240, 255], [138, 10, 236, 255], [140, 12, 232, 255], [142, 14, 228, 255], [144, 16, 224, 255], [146, 18, 220, 255], [148, 20, 216, 255], [150, 22, 212, 255], [152, 24, 208, 255], [154, 26, 204, 255], [156, 28, 200, 255], [158, 30, 196, 255], [160, 32, 192, 255], [162, 34, 188, 255], [164, 36, 184, 255], [166, 38, 180, 255], [168, 40, 176, 255], [170, 42, 172, 255], [171, 44, 168, 255], [173, 46, 164, 255], [175, 48, 160, 255], [177, 50, 156, 255], [179, 52, 152, 255], [181, 54, 148, 255], [183, 56, 144, 255], [185, 58, 140, 255], [187, 60, 136, 255], [189, 62, 132, 255], [191, 64, 128, 255], [193, 66, 124, 255], [195, 68, 120, 255], [197, 70, 116, 255], [199, 72, 112, 255], [201, 74, 108, 255], [203, 76, 104, 255], [205, 78, 100, 255], [207, 80, 96, 255], [209, 82, 92, 255], [211, 84, 88, 255], [213, 86, 84, 255], [215, 88, 80, 255], [217, 90, 76, 255], [219, 92, 72, 255], [221, 94, 68, 255], [223, 96, 64, 255], [225, 98, 60, 255], [227, 100, 56, 255], [229, 102, 52, 255], [231, 104, 48, 255], [233, 106, 44, 255], [235, 108, 40, 255], [237, 110, 36, 255], [239, 112, 32, 255], [241, 114, 28, 255], [243, 116, 24, 255], [245, 118, 20, 255], [247, 120, 16, 255], [249, 122, 12, 255], [251, 124, 8, 255], [253, 126, 4, 255], [255, 128, 0, 255], [255, 130, 4, 255], [255, 132, 8, 255], [255, 134, 12, 255], [255, 136, 16, 255], [255, 138, 20, 255], [255, 140, 24, 255], [255, 142, 28, 255], [255, 144, 32, 255], [255, 146, 36, 255], [255, 148, 40, 255], [255, 150, 44, 255], [255, 152, 48, 255], [255, 154, 52, 255], [255, 156, 56, 255], [255, 158, 60, 255], [255, 160, 64, 255], [255, 162, 68, 255], [255, 164, 72, 255], [255, 166, 76, 255], [255, 168, 80, 255], [255, 170, 85, 255], [255, 172, 89, 255], [255, 174, 93, 255], [255, 176, 97, 255], [255, 178, 101, 255], [255, 180, 105, 255], [255, 182, 109, 255], [255, 184, 113, 255], [255, 186, 117, 255], [255, 188, 121, 255], [255, 190, 125, 255], [255, 192, 129, 255], [255, 194, 133, 255], [255, 196, 137, 255], [255, 198, 141, 255], [255, 200, 145, 255], [255, 202, 149, 255], [255, 204, 153, 255], [255, 206, 157, 255], [255, 208, 161, 255], [255, 210, 165, 255], [255, 212, 170, 255], [255, 214, 174, 255], [255, 216, 178, 255], [255, 218, 182, 255], [255, 220, 186, 255], [255, 222, 190, 255], [255, 224, 194, 255], [255, 226, 198, 255], [255, 228, 202, 255], [255, 230, 206, 255], [255, 232, 210, 255], [255, 234, 214, 255], [255, 236, 218, 255], [255, 238, 222, 255], [255, 240, 226, 255], [255, 242, 230, 255], [255, 244, 234, 255], [255, 246, 238, 255], [255, 248, 242, 255], [255, 250, 246, 255], [255, 252, 250, 255], [255, 255, 255, 255]]
- },
- hotMetalBlue: {
- name: 'Hot Metal Blue',
- numColors: 256,
- colors: [[0, 0, 0, 255], [0, 0, 2, 255], [0, 0, 4, 255], [0, 0, 6, 255], [0, 0, 8, 255], [0, 0, 10, 255], [0, 0, 12, 255], [0, 0, 14, 255], [0, 0, 16, 255], [0, 0, 17, 255], [0, 0, 19, 255], [0, 0, 21, 255], [0, 0, 23, 255], [0, 0, 25, 255], [0, 0, 27, 255], [0, 0, 29, 255], [0, 0, 31, 255], [0, 0, 33, 255], [0, 0, 35, 255], [0, 0, 37, 255], [0, 0, 39, 255], [0, 0, 41, 255], [0, 0, 43, 255], [0, 0, 45, 255], [0, 0, 47, 255], [0, 0, 49, 255], [0, 0, 51, 255], [0, 0, 53, 255], [0, 0, 55, 255], [0, 0, 57, 255], [0, 0, 59, 255], [0, 0, 61, 255], [0, 0, 63, 255], [0, 0, 65, 255], [0, 0, 67, 255], [0, 0, 69, 255], [0, 0, 71, 255], [0, 0, 73, 255], [0, 0, 75, 255], [0, 0, 77, 255], [0, 0, 79, 255], [0, 0, 81, 255], [0, 0, 83, 255], [0, 0, 84, 255], [0, 0, 86, 255], [0, 0, 88, 255], [0, 0, 90, 255], [0, 0, 92, 255], [0, 0, 94, 255], [0, 0, 96, 255], [0, 0, 98, 255], [0, 0, 100, 255], [0, 0, 102, 255], [0, 0, 104, 255], [0, 0, 106, 255], [0, 0, 108, 255], [0, 0, 110, 255], [0, 0, 112, 255], [0, 0, 114, 255], [0, 0, 116, 255], [0, 0, 117, 255], [0, 0, 119, 255], [0, 0, 121, 255], [0, 0, 123, 255], [0, 0, 125, 255], [0, 0, 127, 255], [0, 0, 129, 255], [0, 0, 131, 255], [0, 0, 133, 255], [0, 0, 135, 255], [0, 0, 137, 255], [0, 0, 139, 255], [0, 0, 141, 255], [0, 0, 143, 255], [0, 0, 145, 255], [0, 0, 147, 255], [0, 0, 149, 255], [0, 0, 151, 255], [0, 0, 153, 255], [0, 0, 155, 255], [0, 0, 157, 255], [0, 0, 159, 255], [0, 0, 161, 255], [0, 0, 163, 255], [0, 0, 165, 255], [0, 0, 167, 255], [3, 0, 169, 255], [6, 0, 171, 255], [9, 0, 173, 255], [12, 0, 175, 255], [15, 0, 177, 255], [18, 0, 179, 255], [21, 0, 181, 255], [24, 0, 183, 255], [26, 0, 184, 255], [29, 0, 186, 255], [32, 0, 188, 255], [35, 0, 190, 255], [38, 0, 192, 255], [41, 0, 194, 255], [44, 0, 196, 255], [47, 0, 198, 255], [50, 0, 200, 255], [52, 0, 197, 255], [55, 0, 194, 255], [57, 0, 191, 255], [59, 0, 188, 255], [62, 0, 185, 255], [64, 0, 182, 255], [66, 0, 179, 255], [69, 0, 176, 255], [71, 0, 174, 255], [74, 0, 171, 255], [76, 0, 168, 255], [78, 0, 165, 255], [81, 0, 162, 255], [83, 0, 159, 255], [85, 0, 156, 255], [88, 0, 153, 255], [90, 0, 150, 255], [93, 2, 144, 255], [96, 4, 138, 255], [99, 6, 132, 255], [102, 8, 126, 255], [105, 9, 121, 255], [108, 11, 115, 255], [111, 13, 109, 255], [114, 15, 103, 255], [116, 17, 97, 255], [119, 19, 91, 255], [122, 21, 85, 255], [125, 23, 79, 255], [128, 24, 74, 255], [131, 26, 68, 255], [134, 28, 62, 255], [137, 30, 56, 255], [140, 32, 50, 255], [143, 34, 47, 255], [146, 36, 44, 255], [149, 38, 41, 255], [152, 40, 38, 255], [155, 41, 35, 255], [158, 43, 32, 255], [161, 45, 29, 255], [164, 47, 26, 255], [166, 49, 24, 255], [169, 51, 21, 255], [172, 53, 18, 255], [175, 55, 15, 255], [178, 56, 12, 255], [181, 58, 9, 255], [184, 60, 6, 255], [187, 62, 3, 255], [190, 64, 0, 255], [194, 66, 0, 255], [198, 68, 0, 255], [201, 70, 0, 255], [205, 72, 0, 255], [209, 73, 0, 255], [213, 75, 0, 255], [217, 77, 0, 255], [221, 79, 0, 255], [224, 81, 0, 255], [228, 83, 0, 255], [232, 85, 0, 255], [236, 87, 0, 255], [240, 88, 0, 255], [244, 90, 0, 255], [247, 92, 0, 255], [251, 94, 0, 255], [255, 96, 0, 255], [255, 98, 3, 255], [255, 100, 6, 255], [255, 102, 9, 255], [255, 104, 12, 255], [255, 105, 15, 255], [255, 107, 18, 255], [255, 109, 21, 255], [255, 111, 24, 255], [255, 113, 26, 255], [255, 115, 29, 255], [255, 117, 32, 255], [255, 119, 35, 255], [255, 120, 38, 255], [255, 122, 41, 255], [255, 124, 44, 255], [255, 126, 47, 255], [255, 128, 50, 255], [255, 130, 53, 255], [255, 132, 56, 255], [255, 134, 59, 255], [255, 136, 62, 255], [255, 137, 65, 255], [255, 139, 68, 255], [255, 141, 71, 255], [255, 143, 74, 255], [255, 145, 76, 255], [255, 147, 79, 255], [255, 149, 82, 255], [255, 151, 85, 255], [255, 152, 88, 255], [255, 154, 91, 255], [255, 156, 94, 255], [255, 158, 97, 255], [255, 160, 100, 255], [255, 162, 103, 255], [255, 164, 106, 255], [255, 166, 109, 255], [255, 168, 112, 255], [255, 169, 115, 255], [255, 171, 118, 255], [255, 173, 121, 255], [255, 175, 124, 255], [255, 177, 126, 255], [255, 179, 129, 255], [255, 181, 132, 255], [255, 183, 135, 255], [255, 184, 138, 255], [255, 186, 141, 255], [255, 188, 144, 255], [255, 190, 147, 255], [255, 192, 150, 255], [255, 194, 153, 255], [255, 196, 156, 255], [255, 198, 159, 255], [255, 200, 162, 255], [255, 201, 165, 255], [255, 203, 168, 255], [255, 205, 171, 255], [255, 207, 174, 255], [255, 209, 176, 255], [255, 211, 179, 255], [255, 213, 182, 255], [255, 215, 185, 255], [255, 216, 188, 255], [255, 218, 191, 255], [255, 220, 194, 255], [255, 222, 197, 255], [255, 224, 200, 255], [255, 226, 203, 255], [255, 228, 206, 255], [255, 229, 210, 255], [255, 231, 213, 255], [255, 233, 216, 255], [255, 235, 219, 255], [255, 237, 223, 255], [255, 239, 226, 255], [255, 240, 229, 255], [255, 242, 232, 255], [255, 244, 236, 255], [255, 246, 239, 255], [255, 248, 242, 255], [255, 250, 245, 255], [255, 251, 249, 255], [255, 253, 252, 255], [255, 255, 255, 255]]
- },
- pet20Step: {
- name: 'PET 20 Step',
- numColors: 256,
- colors: [[0, 0, 0, 255], [0, 0, 0, 255], [0, 0, 0, 255], [0, 0, 0, 255], [0, 0, 0, 255], [0, 0, 0, 255], [0, 0, 0, 255], [0, 0, 0, 255], [0, 0, 0, 255], [0, 0, 0, 255], [0, 0, 0, 255], [0, 0, 0, 255], [0, 0, 0, 255], [96, 0, 80, 255], [96, 0, 80, 255], [96, 0, 80, 255], [96, 0, 80, 255], [96, 0, 80, 255], [96, 0, 80, 255], [96, 0, 80, 255], [96, 0, 80, 255], [96, 0, 80, 255], [96, 0, 80, 255], [96, 0, 80, 255], [96, 0, 80, 255], [96, 0, 80, 255], [48, 48, 80, 255], [48, 48, 80, 255], [48, 48, 80, 255], [48, 48, 80, 255], [48, 48, 80, 255], [48, 48, 80, 255], [48, 48, 80, 255], [48, 48, 80, 255], [48, 48, 80, 255], [48, 48, 80, 255], [48, 48, 80, 255], [48, 48, 80, 255], [48, 48, 80, 255], [48, 48, 112, 255], [48, 48, 112, 255], [48, 48, 112, 255], [48, 48, 112, 255], [48, 48, 112, 255], [48, 48, 112, 255], [48, 48, 112, 255], [48, 48, 112, 255], [48, 48, 112, 255], [48, 48, 112, 255], [48, 48, 112, 255], [48, 48, 112, 255], [80, 80, 128, 255], [80, 80, 128, 255], [80, 80, 128, 255], [80, 80, 128, 255], [80, 80, 128, 255], [80, 80, 128, 255], [80, 80, 128, 255], [80, 80, 128, 255], [80, 80, 128, 255], [80, 80, 128, 255], [80, 80, 128, 255], [80, 80, 128, 255], [80, 80, 128, 255], [96, 96, 176, 255], [96, 96, 176, 255], [96, 96, 176, 255], [96, 96, 176, 255], [96, 96, 176, 255], [96, 96, 176, 255], [96, 96, 176, 255], [96, 96, 176, 255], [96, 96, 176, 255], [96, 96, 176, 255], [96, 96, 176, 255], [96, 96, 176, 255], [96, 96, 176, 255], [112, 112, 192, 255], [112, 112, 192, 255], [112, 112, 192, 255], [112, 112, 192, 255], [112, 112, 192, 255], [112, 112, 192, 255], [112, 112, 192, 255], [112, 112, 192, 255], [112, 112, 192, 255], [112, 112, 192, 255], [112, 112, 192, 255], [112, 112, 192, 255], [112, 112, 192, 255], [128, 128, 224, 255], [128, 128, 224, 255], [128, 128, 224, 255], [128, 128, 224, 255], [128, 128, 224, 255], [128, 128, 224, 255], [128, 128, 224, 255], [128, 128, 224, 255], [128, 128, 224, 255], [128, 128, 224, 255], [128, 128, 224, 255], [128, 128, 224, 255], [48, 96, 48, 255], [48, 96, 48, 255], [48, 96, 48, 255], [48, 96, 48, 255], [48, 96, 48, 255], [48, 96, 48, 255], [48, 96, 48, 255], [48, 96, 48, 255], [48, 96, 48, 255], [48, 96, 48, 255], [48, 96, 48, 255], [48, 96, 48, 255], [48, 96, 48, 255], [48, 144, 48, 255], [48, 144, 48, 255], [48, 144, 48, 255], [48, 144, 48, 255], [48, 144, 48, 255], [48, 144, 48, 255], [48, 144, 48, 255], [48, 144, 48, 255], [48, 144, 48, 255], [48, 144, 48, 255], [48, 144, 48, 255], [48, 144, 48, 255], [48, 144, 48, 255], [80, 192, 80, 255], [80, 192, 80, 255], [80, 192, 80, 255], [80, 192, 80, 255], [80, 192, 80, 255], [80, 192, 80, 255], [80, 192, 80, 255], [80, 192, 80, 255], [80, 192, 80, 255], [80, 192, 80, 255], [80, 192, 80, 255], [80, 192, 80, 255], [80, 192, 80, 255], [64, 224, 64, 255], [64, 224, 64, 255], [64, 224, 64, 255], [64, 224, 64, 255], [64, 224, 64, 255], [64, 224, 64, 255], [64, 224, 64, 255], [64, 224, 64, 255], [64, 224, 64, 255], [64, 224, 64, 255], [64, 224, 64, 255], [64, 224, 64, 255], [224, 224, 80, 255], [224, 224, 80, 255], [224, 224, 80, 255], [224, 224, 80, 255], [224, 224, 80, 255], [224, 224, 80, 255], [224, 224, 80, 255], [224, 224, 80, 255], [224, 224, 80, 255], [224, 224, 80, 255], [224, 224, 80, 255], [224, 224, 80, 255], [224, 224, 80, 255], [208, 208, 96, 255], [208, 208, 96, 255], [208, 208, 96, 255], [208, 208, 96, 255], [208, 208, 96, 255], [208, 208, 96, 255], [208, 208, 96, 255], [208, 208, 96, 255], [208, 208, 96, 255], [208, 208, 96, 255], [208, 208, 96, 255], [208, 208, 96, 255], [208, 208, 96, 255], [208, 176, 64, 255], [208, 176, 64, 255], [208, 176, 64, 255], [208, 176, 64, 255], [208, 176, 64, 255], [208, 176, 64, 255], [208, 176, 64, 255], [208, 176, 64, 255], [208, 176, 64, 255], [208, 176, 64, 255], [208, 176, 64, 255], [208, 176, 64, 255], [208, 176, 64, 255], [208, 144, 0, 255], [208, 144, 0, 255], [208, 144, 0, 255], [208, 144, 0, 255], [208, 144, 0, 255], [208, 144, 0, 255], [208, 144, 0, 255], [208, 144, 0, 255], [208, 144, 0, 255], [208, 144, 0, 255], [208, 144, 0, 255], [208, 144, 0, 255], [192, 96, 0, 255], [192, 96, 0, 255], [192, 96, 0, 255], [192, 96, 0, 255], [192, 96, 0, 255], [192, 96, 0, 255], [192, 96, 0, 255], [192, 96, 0, 255], [192, 96, 0, 255], [192, 96, 0, 255], [192, 96, 0, 255], [192, 96, 0, 255], [192, 96, 0, 255], [176, 48, 0, 255], [176, 48, 0, 255], [176, 48, 0, 255], [176, 48, 0, 255], [176, 48, 0, 255], [176, 48, 0, 255], [176, 48, 0, 255], [176, 48, 0, 255], [176, 48, 0, 255], [176, 48, 0, 255], [176, 48, 0, 255], [176, 48, 0, 255], [176, 48, 0, 255], [255, 0, 0, 255], [255, 0, 0, 255], [255, 0, 0, 255], [255, 0, 0, 255], [255, 0, 0, 255], [255, 0, 0, 255], [255, 0, 0, 255], [255, 0, 0, 255], [255, 0, 0, 255], [255, 0, 0, 255], [255, 0, 0, 255], [255, 0, 0, 255], [255, 0, 0, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]]
- },
- gray: {
- name: 'Gray',
- numColors: 256,
- gamma: 1,
- segmentedData: {
- red: [[0, 0, 0], [1, 1, 1]],
- green: [[0, 0, 0], [1, 1, 1]],
- blue: [[0, 0, 0], [1, 1, 1]]
- }
- },
- jet: {
- name: 'Jet',
- numColors: 256,
- gamma: 1,
- segmentedData: {
- red: [[0, 0, 0], [0.35, 0, 0], [0.66, 1, 1], [0.89, 1, 1], [1, 0.5, 0.5]],
- green: [[0, 0, 0], [0.125, 0, 0], [0.375, 1, 1], [0.64, 1, 1], [0.91, 0, 0], [1, 0, 0]],
- blue: [[0, 0.5, 0.5], [0.11, 1, 1], [0.34, 1, 1], [0.65, 0, 0], [1, 0, 0]]
- }
- },
- hsv: {
- name: 'HSV',
- numColors: 256,
- gamma: 1,
- segmentedData: {
- red: [[0, 1, 1], [0.158730, 1, 1], [0.174603, 0.968750, 0.968750], [0.333333, 0.031250, 0.031250], [0.349206, 0, 0], [0.666667, 0, 0], [0.682540, 0.031250, 0.031250], [0.841270, 0.968750, 0.968750], [0.857143, 1, 1], [1, 1, 1]],
- green: [[0, 0, 0], [0.158730, 0.937500, 0.937500], [0.174603, 1, 1], [0.507937, 1, 1], [0.666667, 0.062500, 0.062500], [0.682540, 0, 0], [1, 0, 0]],
- blue: [[0, 0, 0], [0.333333, 0, 0], [0.349206, 0.062500, 0.062500], [0.507937, 1, 1], [0.841270, 1, 1], [0.857143, 0.937500, 0.937500], [1, 0.09375, 0.09375]]
- }
- },
- hot: {
- name: 'Hot',
- numColors: 256,
- gamma: 1,
- segmentedData: {
- red: [[0, 0.0416, 0.0416], [0.365079, 1, 1], [1, 1, 1]],
- green: [[0, 0, 0], [0.365079, 0, 0], [0.746032, 1, 1], [1, 1, 1]],
- blue: [[0, 0, 0], [0.746032, 0, 0], [1, 1, 1]]
- }
- },
- cool: {
- name: 'Cool',
- numColors: 256,
- gamma: 1,
- segmentedData: {
- red: [[0, 0, 0], [1, 1, 1]],
- green: [[0, 1, 1], [1, 0, 0]],
- blue: [[0, 1, 1], [1, 1, 1]]
- }
- },
- spring: {
- name: 'Spring',
- numColors: 256,
- gamma: 1,
- segmentedData: {
- red: [[0, 1, 1], [1, 1, 1]],
- green: [[0, 0, 0], [1, 1, 1]],
- blue: [[0, 1, 1], [1, 0, 0]]
- }
- },
- summer: {
- name: 'Summer',
- numColors: 256,
- gamma: 1,
- segmentedData: {
- red: [[0, 0, 0], [1, 1, 1]],
- green: [[0, 0.5, 0.5], [1, 1, 1]],
- blue: [[0, 0.4, 0.4], [1, 0.4, 0.4]]
- }
- },
- autumn: {
- name: 'Autumn',
- numColors: 256,
- gamma: 1,
- segmentedData: {
- red: [[0, 1, 1], [1, 1, 1]],
- green: [[0, 0, 0], [1, 1, 1]],
- blue: [[0, 0, 0], [1, 0, 0]]
- }
- },
- winter: {
- name: 'Winter',
- numColors: 256,
- gamma: 1,
- segmentedData: {
- red: [[0, 0, 0], [1, 0, 0]],
- green: [[0, 0, 0], [1, 1, 1]],
- blue: [[0, 1, 1], [1, 0.5, 0.5]]
- }
- },
- bone: {
- name: 'Bone',
- numColors: 256,
- gamma: 1,
- segmentedData: {
- red: [[0, 0, 0], [0.746032, 0.652778, 0.652778], [1, 1, 1]],
- green: [[0, 0, 0], [0.365079, 0.319444, 0.319444], [0.746032, 0.777778, 0.777778], [1, 1, 1]],
- blue: [[0, 0, 0], [0.365079, 0.444444, 0.444444], [1, 1, 1]]
- }
- },
- copper: {
- name: 'Copper',
- numColors: 256,
- gamma: 1,
- segmentedData: {
- red: [[0, 0, 0], [0.809524, 1, 1], [1, 1, 1]],
- green: [[0, 0, 0], [1, 0.7812, 0.7812]],
- blue: [[0, 0, 0], [1, 0.4975, 0.4975]]
- }
- },
- spectral: {
- name: 'Spectral',
- numColors: 256,
- gamma: 1,
- segmentedData: {
- red: [[0, 0, 0], [0.05, 0.4667, 0.4667], [0.10, 0.5333, 0.5333], [0.15, 0, 0], [0.20, 0, 0], [0.25, 0, 0], [0.30, 0, 0], [0.35, 0, 0], [0.40, 0, 0], [0.45, 0, 0], [0.50, 0, 0], [0.55, 0, 0], [0.60, 0, 0], [0.65, 0.7333, 0.7333], [0.70, 0.9333, 0.9333], [0.75, 1, 1], [0.80, 1, 1], [0.85, 1, 1], [0.90, 0.8667, 0.8667], [0.95, 0.80, 0.80], [1, 0.80, 0.80]],
- green: [[0, 0, 0], [0.05, 0, 0], [0.10, 0, 0], [0.15, 0, 0], [0.20, 0, 0], [0.25, 0.4667, 0.4667], [0.30, 0.6000, 0.6000], [0.35, 0.6667, 0.6667], [0.40, 0.6667, 0.6667], [0.45, 0.6000, 0.6000], [0.50, 0.7333, 0.7333], [0.55, 0.8667, 0.8667], [0.60, 1, 1], [0.65, 1, 1], [0.70, 0.9333, 0.9333], [0.75, 0.8000, 0.8000], [0.80, 0.6000, 0.6000], [0.85, 0, 0], [0.90, 0, 0], [0.95, 0, 0], [1, 0.80, 0.80]],
- blue: [[0, 0, 0], [0.05, 0.5333, 0.5333], [0.10, 0.6000, 0.6000], [0.15, 0.6667, 0.6667], [0.20, 0.8667, 0.8667], [0.25, 0.8667, 0.8667], [0.30, 0.8667, 0.8667], [0.35, 0.6667, 0.6667], [0.40, 0.5333, 0.5333], [0.45, 0, 0], [0.5, 0, 0], [0.55, 0, 0], [0.60, 0, 0], [0.65, 0, 0], [0.70, 0, 0], [0.75, 0, 0], [0.80, 0, 0], [0.85, 0, 0], [0.90, 0, 0], [0.95, 0, 0], [1, 0.80, 0.80]]
- }
- },
- coolwarm: {
- name: 'CoolWarm',
- numColors: 256,
- gamma: 1,
- segmentedData: {
- red: [[0, 0.2298057, 0.2298057], [0.03125, 0.26623388, 0.26623388], [0.0625, 0.30386891, 0.30386891], [0.09375, 0.342804478, 0.342804478], [0.125, 0.38301334, 0.38301334], [0.15625, 0.424369608, 0.424369608], [0.1875, 0.46666708, 0.46666708], [0.21875, 0.509635204, 0.509635204], [0.25, 0.552953156, 0.552953156], [0.28125, 0.596262162, 0.596262162], [0.3125, 0.639176211, 0.639176211], [0.34375, 0.681291281, 0.681291281], [0.375, 0.722193294, 0.722193294], [0.40625, 0.761464949, 0.761464949], [0.4375, 0.798691636, 0.798691636], [0.46875, 0.833466556, 0.833466556], [0.5, 0.865395197, 0.865395197], [0.53125, 0.897787179, 0.897787179], [0.5625, 0.924127593, 0.924127593], [0.59375, 0.944468518, 0.944468518], [0.625, 0.958852946, 0.958852946], [0.65625, 0.96732803, 0.96732803], [0.6875, 0.969954137, 0.969954137], [0.71875, 0.966811177, 0.966811177], [0.75, 0.958003065, 0.958003065], [0.78125, 0.943660866, 0.943660866], [0.8125, 0.923944917, 0.923944917], [0.84375, 0.89904617, 0.89904617], [0.875, 0.869186849, 0.869186849], [0.90625, 0.834620542, 0.834620542], [0.9375, 0.795631745, 0.795631745], [0.96875, 0.752534934, 0.752534934], [1, 0.705673158, 0.705673158]],
- green: [[0, 0.298717966, 0.298717966], [0.03125, 0.353094838, 0.353094838], [0.0625, 0.406535296, 0.406535296], [0.09375, 0.458757618, 0.458757618], [0.125, 0.50941904, 0.50941904], [0.15625, 0.558148092, 0.558148092], [0.1875, 0.604562568, 0.604562568], [0.21875, 0.648280772, 0.648280772], [0.25, 0.688929332, 0.688929332], [0.28125, 0.726149107, 0.726149107], [0.3125, 0.759599947, 0.759599947], [0.34375, 0.788964712, 0.788964712], [0.375, 0.813952739, 0.813952739], [0.40625, 0.834302879, 0.834302879], [0.4375, 0.849786142, 0.849786142], [0.46875, 0.860207984, 0.860207984], [0.5, 0.86541021, 0.86541021], [0.53125, 0.848937047, 0.848937047], [0.5625, 0.827384882, 0.827384882], [0.59375, 0.800927443, 0.800927443], [0.625, 0.769767752, 0.769767752], [0.65625, 0.734132809, 0.734132809], [0.6875, 0.694266682, 0.694266682], [0.71875, 0.650421156, 0.650421156], [0.75, 0.602842431, 0.602842431], [0.78125, 0.551750968, 0.551750968], [0.8125, 0.49730856, 0.49730856], [0.84375, 0.439559467, 0.439559467], [0.875, 0.378313092, 0.378313092], [0.90625, 0.312874446, 0.312874446], [0.9375, 0.24128379, 0.24128379], [0.96875, 0.157246067, 0.157246067], [1, 0.01555616, 0.01555616]],
- blue: [[0, 0.753683153, 0.753683153], [0.03125, 0.801466763, 0.801466763], [0.0625, 0.84495867, 0.84495867], [0.09375, 0.883725899, 0.883725899], [0.125, 0.917387822, 0.917387822], [0.15625, 0.945619588, 0.945619588], [0.1875, 0.968154911, 0.968154911], [0.21875, 0.98478814, 0.98478814], [0.25, 0.995375608, 0.995375608], [0.28125, 0.999836203, 0.999836203], [0.3125, 0.998151185, 0.998151185], [0.34375, 0.990363227, 0.990363227], [0.375, 0.976574709, 0.976574709], [0.40625, 0.956945269, 0.956945269], [0.4375, 0.931688648, 0.931688648], [0.46875, 0.901068838, 0.901068838], [0.5, 0.865395561, 0.865395561], [0.53125, 0.820880546, 0.820880546], [0.5625, 0.774508472, 0.774508472], [0.59375, 0.726736146, 0.726736146], [0.625, 0.678007945, 0.678007945], [0.65625, 0.628751763, 0.628751763], [0.6875, 0.579375448, 0.579375448], [0.71875, 0.530263762, 0.530263762], [0.75, 0.481775914, 0.481775914], [0.78125, 0.434243684, 0.434243684], [0.8125, 0.387970225, 0.387970225], [0.84375, 0.343229596, 0.343229596], [0.875, 0.300267182, 0.300267182], [0.90625, 0.259301199, 0.259301199], [0.9375, 0.220525627, 0.220525627], [0.96875, 0.184115123, 0.184115123], [1, 0.150232812, 0.150232812]]
- }
- },
- blues: {
- name: 'Blues',
- numColors: 256,
- gamma: 1,
- segmentedData: {
- red: [[0, 0.9686274528503418, 0.9686274528503418], [0.125, 0.87058824300765991, 0.87058824300765991], [0.25, 0.7764706015586853, 0.7764706015586853], [0.375, 0.61960786581039429, 0.61960786581039429], [0.5, 0.41960784792900085, 0.41960784792900085], [0.625, 0.25882354378700256, 0.25882354378700256], [0.75, 0.12941177189350128, 0.12941177189350128], [0.875, 0.031372550874948502, 0.031372550874948502], [1, 0.031372550874948502, 0.031372550874948502]],
- green: [[0, 0.9843137264251709, 0.9843137264251709], [0.125, 0.92156863212585449, 0.92156863212585449], [0.25, 0.85882353782653809, 0.85882353782653809], [0.375, 0.7921568751335144, 0.7921568751335144], [0.5, 0.68235296010971069, 0.68235296010971069], [0.625, 0.57254904508590698, 0.57254904508590698], [0.75, 0.44313725829124451, 0.44313725829124451], [0.875, 0.31764706969261169, 0.31764706969261169], [1, 0.18823529779911041, 0.18823529779911041]],
- blue: [[0, 1, 1], [0.125, 0.9686274528503418, 0.9686274528503418], [0.25, 0.93725490570068359, 0.93725490570068359], [0.375, 0.88235294818878174, 0.88235294818878174], [0.5, 0.83921569585800171, 0.83921569585800171], [0.625, 0.7764706015586853, 0.7764706015586853], [0.75, 0.70980393886566162, 0.70980393886566162], [0.875, 0.61176472902297974, 0.61176472902297974], [1, 0.41960784792900085, 0.41960784792900085]]
- }
- }
-};
-/**
- * Generate linearly spaced vectors
-* http://cens.ioc.ee/local/man/matlab/techdoc/ref/linspace.html
- * @param {Number} a A number representing the first vector
- * @param {Number} b A number representing the second vector
- * @param {Number} n The number of linear spaced vectors to generate
- * @returns {Array} An array of points representing linear spaced vectors.
- * @memberof Colors
- */
-
-function linspace(a, b, n) {
- n = n === null ? 100 : n;
- var increment = (b - a) / (n - 1);
- var vector = [];
-
- while (n-- > 0) {
- vector.push(a);
- a += increment;
- } // Make sure the last item will always be "b" because most of the
- // Time we'll get numbers like 1.0000000000000002 instead of 1.
-
-
- vector[vector.length - 1] = b;
- return vector;
-}
-/**
- * Returns the "rank/index" of the element in a sorted array if found or the highest index if not. Uses (binary search)
- * @param {Array} array A sorted array to search in
- * @param {any} elem the element in the array to search for
- * @returns {number} The rank/index of the element in the given array
- * @memberof Colors
- */
-
-
-function getRank(array, elem) {
- var left = 0;
- var right = array.length - 1;
-
- while (left <= right) {
- var mid = left + Math.floor((right - left) / 2);
- var midElem = array[mid];
-
- if (midElem === elem) {
- return mid;
- } else if (elem < midElem) {
- right = mid - 1;
- } else {
- left = mid + 1;
- }
- }
-
- return left;
-}
-/**
- * Find the indices into a sorted array a such that, if the corresponding elements
- * In v were inserted before the indices, the order of a would be preserved.
- * http://lagrange.univ-lyon1.fr/docs/numpy/1.11.0/reference/generated/numpy.searchsorted.html
- * @param {Array} inputArray The array where the values will be inserted
- * @param {Array} values An array of the values to be inserted into the inputArray
- * @returns {Array} The indices where elements should be inserted to maintain order.
- * @memberof Colors
- */
-
-
-function searchSorted(inputArray, values) {
- var i;
- var indexes = [];
- var len = values.length;
- inputArray.sort(function (a, b) {
- return a - b;
- });
-
- for (i = 0; i < len; i++) {
- indexes[i] = getRank(inputArray, values[i]);
- }
-
- return indexes;
-}
-/**
- * Creates an *N* -element 1-d lookup table
- * @param {Number} N The number of elements in the result lookup table
- * @param {Array} data represented by a list of x,y0,y1 mapping correspondences. Each element in this
- * List represents how a value between 0 and 1 (inclusive) represented by x is mapped to
- * A corresponding value between 0 and 1 (inclusive). The two values of y are to allow for
- * Discontinuous mapping functions (say as might be found in a sawtooth) where y0 represents
- * The value of y for values of x <= to that given, and y1 is the value to be used for x >
- * Than that given). The list must start with x=0, end with x=1, and all values of x must be
- * In increasing order. Values between the given mapping points are determined by simple linear
- * Interpolation.
- * @param {any} gamma value denotes a "gamma curve" value which adjusts the brightness
- * at the bottom and top of the map.
- * @returns {any[]} an array "result" where result[x*(N-1)] gives the closest value for
- * Values of x between 0 and 1.
- * @memberof Colors
- */
-
-
-function makeMappingArray(N, data, gamma) {
- var i;
- var x = [];
- var y0 = [];
- var y1 = [];
- var lut = [];
- gamma = gamma === null ? 1 : gamma;
-
- for (i = 0; i < data.length; i++) {
- var element = data[i];
- x.push((N - 1) * element[0]);
- y0.push(element[1]);
- y1.push(element[1]);
- }
-
- var xLinSpace = linspace(0, 1, N);
-
- for (i = 0; i < N; i++) {
- xLinSpace[i] = (N - 1) * Math.pow(xLinSpace[i], gamma);
- }
-
- var xLinSpaceIndexes = searchSorted(x, xLinSpace);
-
- for (i = 1; i < N - 1; i++) {
- var index = xLinSpaceIndexes[i];
- var colorPercent = (xLinSpace[i] - x[index - 1]) / (x[index] - x[index - 1]);
- var colorDelta = y0[index] - y1[index - 1];
- lut[i] = colorPercent * colorDelta + y1[index - 1];
- }
-
- lut[0] = y1[0];
- lut[N - 1] = y0[data.length - 1];
- return lut;
-}
-/**
- * Creates a Colormap based on lookup tables using linear segments.
- * @param {{red:Array, green:Array, blue:Array}} segmentedData An object with a red, green and blue entries.
- * Each entry should be a list of x, y0, y1 tuples, forming rows in a table.
- * @param {Number} N The number of elements in the result Colormap
- * @param {any} gamma value denotes a "gamma curve" value which adjusts the brightness
- * at the bottom and top of the Colormap.
- * @returns {Array} The created Colormap object
- * @description The lookup table is generated using linear interpolation for each
- * Primary color, with the 0-1 domain divided into any number of
- * Segments.
- * https://github.com/stefanv/matplotlib/blob/3f1a23755e86fef97d51e30e106195f34425c9e3/lib/matplotlib/colors.py#L663
- * @memberof Colors
- */
-
-
-function createLinearSegmentedColormap(segmentedData, N, gamma) {
- var i;
- var lut = [];
- N = N === null ? 256 : N;
- gamma = gamma === null ? 1 : gamma;
- var redLut = makeMappingArray(N, segmentedData.red, gamma);
- var greenLut = makeMappingArray(N, segmentedData.green, gamma);
- var blueLut = makeMappingArray(N, segmentedData.blue, gamma);
-
- for (i = 0; i < N; i++) {
- var red = Math.round(redLut[i] * 255);
- var green = Math.round(greenLut[i] * 255);
- var blue = Math.round(blueLut[i] * 255);
- var rgba = [red, green, blue, 255];
- lut.push(rgba);
- }
-
- return lut;
-}
-/**
- * Return all available colormaps (id and name)
- * @returns {Array<{id,key}>} An array of colormaps with an object containing the "id" and display "name"
- * @memberof Colors
- */
-
-
-function getColormapsList() {
- var colormaps = [];
- var keys = Object.keys(colormapsData);
- keys.forEach(function (key) {
- if (colormapsData.hasOwnProperty(key)) {
- var colormap = colormapsData[key];
- colormaps.push({
- id: key,
- name: colormap.name
- });
- }
- });
- colormaps.sort(function (a, b) {
- var aName = a.name.toLowerCase();
- var bName = b.name.toLowerCase();
-
- if (aName === bName) {
- return 0;
- }
-
- return aName < bName ? -1 : 1;
- });
- return colormaps;
-}
-/**
- * Return a colorMap object with the provided id and colormapData
- * if the Id matches existent colorMap objects (check colormapsData) the colormapData is ignored.
- * if the colormapData is not empty, the colorMap will be added to the colormapsData list. Otherwise, an empty colorMap object is returned.
- * @param {string} id The ID of the colormap
- * @param {Object} colormapData - An object that can contain a name, numColors, gama, segmentedData and/or colors
- * @returns {*} The Colormap Object
- * @memberof Colors
-*/
-
-function getColormap(id, colormapData) {
- var colormap = colormapsData[id];
-
- if (!colormap) {
- colormap = colormapsData[id] = colormapData || {
- name: '',
- colors: []
- };
- }
-
- if (!colormap.colors && colormap.segmentedData) {
- colormap.colors = createLinearSegmentedColormap(colormap.segmentedData, colormap.numColors, colormap.gamma);
- }
-
- return {
- getId: function getId() {
- return id;
- },
- getColorSchemeName: function getColorSchemeName() {
- return colormap.name;
- },
- setColorSchemeName: function setColorSchemeName(name) {
- colormap.name = name;
- },
- getNumberOfColors: function getNumberOfColors() {
- return colormap.colors.length;
- },
- setNumberOfColors: function setNumberOfColors(numColors) {
- while (colormap.colors.length < numColors) {
- colormap.colors.push(COLOR_TRANSPARENT);
- }
-
- colormap.colors.length = numColors;
- },
- getColor: function getColor(index) {
- if (this.isValidIndex(index)) {
- return colormap.colors[index];
- }
-
- return COLOR_TRANSPARENT;
- },
- getColorRepeating: function getColorRepeating(index) {
- var numColors = colormap.colors.length;
- index = numColors ? index % numColors : 0;
- return this.getColor(index);
- },
- setColor: function setColor(index, rgba) {
- if (this.isValidIndex(index)) {
- colormap.colors[index] = rgba;
- }
- },
- addColor: function addColor(rgba) {
- colormap.colors.push(rgba);
- },
- insertColor: function insertColor(index, rgba) {
- if (this.isValidIndex(index)) {
- colormap.colors.splice(index, 1, rgba);
- }
- },
- removeColor: function removeColor(index) {
- if (this.isValidIndex(index)) {
- colormap.colors.splice(index, 1);
- }
- },
- clearColors: function clearColors() {
- colormap.colors = [];
- },
- buildLookupTable: function buildLookupTable(lut) {
- if (!lut) {
- return;
- }
-
- var numColors = colormap.colors.length;
- lut.setNumberOfTableValues(numColors);
-
- for (var i = 0; i < numColors; i++) {
- lut.setTableValue(i, colormap.colors[i]);
- }
- },
- createLookupTable: function createLookupTable() {
- var lut = new _lookupTable_js__WEBPACK_IMPORTED_MODULE_0__["default"]();
- this.buildLookupTable(lut);
- return lut;
- },
- isValidIndex: function isValidIndex(index) {
- return index >= 0 && index < colormap.colors.length;
- }
- };
-}
-
-/***/ }),
-
-/***/ "./colors/index.js":
-/*!*************************!*\
- !*** ./colors/index.js ***!
- \*************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _colormap_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./colormap.js */ "./colors/colormap.js");
-/* harmony import */ var _lookupTable_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lookupTable.js */ "./colors/lookupTable.js");
-
-
-/* harmony default export */ __webpack_exports__["default"] = ({
- getColormap: _colormap_js__WEBPACK_IMPORTED_MODULE_0__["getColormap"],
- getColormapsList: _colormap_js__WEBPACK_IMPORTED_MODULE_0__["getColormapsList"],
- LookupTable: _lookupTable_js__WEBPACK_IMPORTED_MODULE_1__["default"]
-});
-
-/***/ }),
-
-/***/ "./colors/lookupTable.js":
-/*!*******************************!*\
- !*** ./colors/lookupTable.js ***!
- \*******************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
-
-function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
-
-// This code was created based on vtkLookupTable
-// http://www.vtk.org/doc/release/5.0/html/a01697.html
-// https://github.com/Kitware/VTK/blob/master/Common/Core/vtkLookupTable.cxx
-var BELOW_RANGE_COLOR_INDEX = 0;
-var ABOVE_RANGE_COLOR_INDEX = 1;
-var NAN_COLOR_INDEX = 2;
-/**
- * Converts an HSV (Hue, Saturation, Value) color to RGB (Red, Green, Blue) color value
- * @param {Number} hue A number representing the hue color value
- * @param {any} sat A number representing the saturation color value
- * @param {any} val A number representing the value color value
- * @returns {Numberp[]} An RGB color array
- */
-
-function HSVToRGB(hue, sat, val) {
- if (hue > 1) {
- throw new Error('HSVToRGB expects hue < 1');
- }
-
- var rgb = [];
-
- if (sat === 0) {
- rgb[0] = val;
- rgb[1] = val;
- rgb[2] = val;
- return rgb;
- }
-
- var hueCase = Math.floor(hue * 6);
- var frac = 6 * hue - hueCase;
- var lx = val * (1 - sat);
- var ly = val * (1 - sat * frac);
- var lz = val * (1 - sat * (1 - frac));
-
- switch (hueCase) {
- /* 0 p.Range[1]) {
- dIndex = p.MaxIndex + ABOVE_RANGE_COLOR_INDEX + 1.5;
- } else {
- dIndex = (v + p.Shift) * p.Scale;
- }
-
- return Math.floor(dIndex);
-}
-/**
- * Maps scalar values into colors via a lookup table
- * LookupTable is an object that is used by mapper objects to map scalar values into rgba (red-green-blue-alpha transparency) color specification,
- * or rgba into scalar values. The color table can be created by direct insertion of color values, or by specifying hue, saturation, value, and alpha range and generating a table
- */
-
-
-var LookupTable =
-/*#__PURE__*/
-function () {
- /**
- * Creates a default linear LookupTable object with 256 colors.
- */
- function LookupTable() {
- _classCallCheck(this, LookupTable);
-
- this.NumberOfColors = 256;
- this.Ramp = 'linear';
- this.TableRange = [0, 255];
- this.HueRange = [0, 0.66667];
- this.SaturationRange = [1, 1];
- this.ValueRange = [1, 1];
- this.AlphaRange = [1, 1];
- this.NaNColor = [128, 0, 0, 255];
- this.BelowRangeColor = [0, 0, 0, 255];
- this.UseBelowRangeColor = true;
- this.AboveRangeColor = [255, 255, 255, 255];
- this.UseAboveRangeColor = true;
- this.InputRange = [0, 255];
- this.Table = [];
- }
- /**
- * Specify the number of values (i.e., colors) in the lookup table.
- * @param {Number} number The number of colors in he LookupTable
- * @returns {void}
- * @memberof Colors
- */
-
-
- _createClass(LookupTable, [{
- key: "setNumberOfTableValues",
- value: function setNumberOfTableValues(number) {
- this.NumberOfColors = number;
- }
- /**
- * Set the shape of the table ramp to either 'linear', 'scurve' or 'sqrt'
- * @param {String} ramp A string value representing the shape of the table. Allowed values are 'linear', 'scurve' or 'sqrt'
- * @returns {void}
- * @memberof Colors
- */
-
- }, {
- key: "setRamp",
- value: function setRamp(ramp) {
- this.Ramp = ramp;
- }
- /**
- * Sets the minimum/maximum scalar values for scalar mapping.
- * Scalar values less than minimum range value are clamped to minimum range value.
- * Scalar values greater than maximum range value are clamped to maximum range value.
- * @param {Number} start A double representing the minimum scaler value of the LookupTable
- * @param {any} end A double representing the maximum scaler value of the LookupTable
- * @returns {void}
- * @memberof Colors
- */
-
- }, {
- key: "setTableRange",
- value: function setTableRange(start, end) {
- this.TableRange[0] = start;
- this.TableRange[1] = end;
- }
- /**
- * Set the range in hue (using automatic generation). Hue ranges between [0,1].
- * @param {Number} start A double representing the minimum hue value in a range. Min. is 0
- * @param {Number} end A double representing the maximum hue value in a range. Max. is 1
- * @returns {void}
- * @memberof Colors
- */
-
- }, {
- key: "setHueRange",
- value: function setHueRange(start, end) {
- this.HueRange[0] = start;
- this.HueRange[1] = end;
- }
- /**
- * Set the range in saturation (using automatic generation). Saturation ranges between [0,1].
- * @param {Number} start A double representing the minimum Saturation value in a range. Min. is 0
- * @param {Number} end A double representing the maximum Saturation value in a range. Max. is 1
- * @returns {void}
- * @memberof Colors
- */
-
- }, {
- key: "setSaturationRange",
- value: function setSaturationRange(start, end) {
- this.SaturationRange[0] = start;
- this.SaturationRange[1] = end;
- }
- /**
- * Set the range in value (using automatic generation). Value ranges between [0,1].
- * @param {Numeber } start A double representing the minimum value in a range. Min. is 0
- * @param {Numeber} end A double representing the maximum value in a range. Max. is 1
- * @returns {void}
- * @memberof Colors
- */
-
- }, {
- key: "setValueRange",
- value: function setValueRange(start, end) {
- // Set the range in value (using automatic generation). Value ranges between [0,1].
- this.ValueRange[0] = start;
- this.ValueRange[1] = end;
- }
- /**
- * (Not Used) Sets the range of scalars which will be mapped.
- * @param {Number} start the minimum scalar value in the range
- * @param {Number} end the maximum scalar value in the range
- * @returns {void}
- * @memberof Colors
- */
-
- }, {
- key: "setRange",
- value: function setRange(start, end) {
- this.InputRange[0] = start;
- this.InputRange[1] = end;
- }
- /**
- * Set the range in alpha (using automatic generation). Alpha ranges from [0,1].
- * @param {Number} start A double representing the minimum alpha value
- * @param {Number} end A double representing the maximum alpha value
- * @returns {void}
- * @memberof Colors
- */
-
- }, {
- key: "setAlphaRange",
- value: function setAlphaRange(start, end) {
- // Set the range in alpha (using automatic generation). Alpha ranges from [0,1].
- this.AlphaRange[0] = start;
- this.AlphaRange[1] = end;
- }
- /**
- * Map one value through the lookup table and return the color as an
- * RGBA array of doubles between 0 and 1.
- * @param {Number} scalar A double scalar value which will be mapped to a color in the LookupTable
- * @returns {Number[]} An RGBA array of doubles between 0 and 1
- * @memberof Colors
- */
-
- }, {
- key: "getColor",
- value: function getColor(scalar) {
- return this.mapValue(scalar);
- }
- /**
- * Generate lookup table from hue, saturation, value, alpha min/max values. Table is built from linear ramp of each value.
- * @param {Boolean} force true to force the build of the LookupTable. Otherwie, false. This is useful if a lookup table has been defined manually
- * (using SetTableValue) and then an application decides to rebuild the lookup table using the implicit process.
- * @returns {void}
- * @memberof Colors
- */
-
- }, {
- key: "build",
- value: function build(force) {
- if (this.Table.length > 1 && !force) {
- return;
- } // Clear the table
-
-
- this.Table = [];
- var maxIndex = this.NumberOfColors - 1;
- var hinc, sinc, vinc, ainc;
-
- if (maxIndex) {
- hinc = (this.HueRange[1] - this.HueRange[0]) / maxIndex;
- sinc = (this.SaturationRange[1] - this.SaturationRange[0]) / maxIndex;
- vinc = (this.ValueRange[1] - this.ValueRange[0]) / maxIndex;
- ainc = (this.AlphaRange[1] - this.AlphaRange[0]) / maxIndex;
- } else {
- hinc = sinc = vinc = ainc = 0.0;
- }
-
- for (var i = 0; i <= maxIndex; i++) {
- var hue = this.HueRange[0] + i * hinc;
- var sat = this.SaturationRange[0] + i * sinc;
- var val = this.ValueRange[0] + i * vinc;
- var alpha = this.AlphaRange[0] + i * ainc;
- var rgb = HSVToRGB(hue, sat, val);
- var c_rgba = [];
-
- switch (this.Ramp) {
- case 'scurve':
- c_rgba[0] = Math.floor(127.5 * (1.0 + Math.cos((1.0 - rgb[0]) * Math.PI)));
- c_rgba[1] = Math.floor(127.5 * (1.0 + Math.cos((1.0 - rgb[1]) * Math.PI)));
- c_rgba[2] = Math.floor(127.5 * (1.0 + Math.cos((1.0 - rgb[2]) * Math.PI)));
- c_rgba[3] = Math.floor(alpha * 255);
- break;
-
- case 'linear':
- c_rgba[0] = Math.floor(rgb[0] * 255 + 0.5);
- c_rgba[1] = Math.floor(rgb[1] * 255 + 0.5);
- c_rgba[2] = Math.floor(rgb[2] * 255 + 0.5);
- c_rgba[3] = Math.floor(alpha * 255 + 0.5);
- break;
-
- case 'sqrt':
- c_rgba[0] = Math.floor(Math.sqrt(rgb[0]) * 255 + 0.5);
- c_rgba[1] = Math.floor(Math.sqrt(rgb[1]) * 255 + 0.5);
- c_rgba[2] = Math.floor(Math.sqrt(rgb[2]) * 255 + 0.5);
- c_rgba[3] = Math.floor(Math.sqrt(alpha) * 255 + 0.5);
- break;
-
- default:
- throw new Error("Invalid Ramp value (".concat(this.Ramp, ")"));
- }
-
- this.Table.push(c_rgba);
- }
-
- this.buildSpecialColors();
- }
- /**
- * Ensures the out-of-range colors (Below range and Above range) are set correctly.
- * @returns {void}
- * @memberof Colors
- */
-
- }, {
- key: "buildSpecialColors",
- value: function buildSpecialColors() {
- var numberOfColors = this.NumberOfColors;
- var belowRangeColorIndex = numberOfColors + BELOW_RANGE_COLOR_INDEX;
- var aboveRangeColorIndex = numberOfColors + ABOVE_RANGE_COLOR_INDEX;
- var nanColorIndex = numberOfColors + NAN_COLOR_INDEX; // Below range color
-
- if (this.UseBelowRangeColor || numberOfColors === 0) {
- this.Table[belowRangeColorIndex] = this.BelowRangeColor;
- } else {
- // Duplicate the first color in the table.
- this.Table[belowRangeColorIndex] = this.Table[0];
- } // Above range color
-
-
- if (this.UseAboveRangeColor || numberOfColors === 0) {
- this.Table[aboveRangeColorIndex] = this.AboveRangeColor;
- } else {
- // Duplicate the last color in the table.
- this.Table[aboveRangeColorIndex] = this.Table[numberOfColors - 1];
- } // Always use NanColor
-
-
- this.Table[nanColorIndex] = this.NaNColor;
- }
- /**
- * Similar to GetColor - Map one value through the lookup table and return the color as an
- * RGBA array of doubles between 0 and 1.
- * @param {Numeber} v A double scalar value which will be mapped to a color in the LookupTable
- * @returns {Number[]} An RGBA array of doubles between 0 and 1
- * @memberof Colors
- */
-
- }, {
- key: "mapValue",
- value: function mapValue(v) {
- var index = this.getIndex(v);
-
- if (index < 0) {
- return this.NaNColor;
- } else if (index === 0) {
- if (this.UseBelowRangeColor && v < this.TableRange[0]) {
- return this.BelowRangeColor;
- }
- } else if (index === this.NumberOfColors - 1) {
- if (this.UseAboveRangeColor && v > this.TableRange[1]) {
- return this.AboveRangeColor;
- }
- }
-
- return this.Table[index];
- }
- /**
- * Return the table index associated with a particular value.
- * @param {Number} v A double value which table index will be returned.
- * @returns {Number} The index in the LookupTable
- * @memberof Colors
- */
-
- }, {
- key: "getIndex",
- value: function getIndex(v) {
- var p = {};
- p.Range = [];
- p.MaxIndex = this.NumberOfColors - 1; // This was LookupShiftAndScale
-
- p.Shift = -this.TableRange[0];
-
- if (this.TableRange[1] <= this.TableRange[0]) {
- p.Scale = Number.MAX_VALUE;
- } else {
- p.Scale = p.MaxIndex / (this.TableRange[1] - this.TableRange[0]);
- }
-
- p.Range[0] = this.TableRange[0];
- p.Range[1] = this.TableRange[1]; // First, check whether we have a number...
-
- if (isNaN(v)) {
- // For backwards compatibility
- return -1;
- } // Map to an index:
-
-
- var index = linearIndexLookupMain(v, p); // For backwards compatibility, if the index indicates an
- // Out-of-range value, truncate to index range for in-range colors.
-
- if (index === this.NumberOfColors + BELOW_RANGE_COLOR_INDEX) {
- index = 0;
- } else if (index === this.NumberOfColors + ABOVE_RANGE_COLOR_INDEX) {
- index = this.NumberOfColors - 1;
- }
-
- return index;
- }
- /**
- * Directly load color into lookup table. Use [0,1] double values for color component specification.
- * Make sure that you've either used the Build() method or used SetNumberOfTableValues() prior to using this method.
- * @param {Number} index The index in the LookupTable of where to insert the color value
- * @param {Number[]} rgba An array of [0,1] double values for an RGBA color component
- * @returns {void}
- * @memberof Colors
- */
-
- }, {
- key: "setTableValue",
- value: function setTableValue(index, rgba) {
- // Check if it index, red, green, blue and alpha were passed as parameter
- if (arguments.length === 5) {
- rgba = Array.prototype.slice.call(arguments, 1);
- } // Check the index to make sure it is valid
-
-
- if (index < 0) {
- throw new Error("Can't set the table value for negative index (".concat(index, ")"));
- }
-
- if (index >= this.NumberOfColors) {
- new Error("Index ".concat(index, " is greater than the number of colors ").concat(this.NumberOfColors));
- }
-
- this.Table[index] = rgba;
-
- if (index === 0 || index === this.NumberOfColors - 1) {
- // This is needed due to the way the special colors are stored in
- // The internal table. If Above/BelowRangeColors are not used and
- // The min/max colors are changed in the table with this member
- // Function, then the colors used for values outside the range may
- // Be incorrect. Calling this here ensures the out-of-range colors
- // Are set correctly.
- this.buildSpecialColors();
- }
- }
- }]);
-
- return LookupTable;
-}();
-
-/* harmony default export */ __webpack_exports__["default"] = (LookupTable);
-
-/***/ }),
-
-/***/ "./disable.js":
-/*!********************!*\
- !*** ./disable.js ***!
- \********************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js");
-/* harmony import */ var _triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./triggerEvent.js */ "./triggerEvent.js");
-/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./events.js */ "./events.js");
-
-
-
-/**
- * Disable an HTML element for further use in Cornerstone
- *
- * @param {HTMLElement} element An HTML Element enabled for Cornerstone
- * @returns {void}
- * @memberof Enable
- */
-
-/* harmony default export */ __webpack_exports__["default"] = (function (element) {
- if (element === undefined) {
- throw new Error('disable: element must not be undefined');
- } // Search for this element in this list of enabled elements
-
-
- var enabledElements = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElements"])();
-
- for (var i = 0; i < enabledElements.length; i++) {
- if (enabledElements[i].element === element) {
- // We found it!
- // Fire an event so dependencies can cleanup
- var eventData = {
- element: element
- };
- Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element, _events_js__WEBPACK_IMPORTED_MODULE_2__["default"].ELEMENT_DISABLED, eventData);
- Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__["default"])(_events_js__WEBPACK_IMPORTED_MODULE_2__["events"], _events_js__WEBPACK_IMPORTED_MODULE_2__["default"].ELEMENT_DISABLED, eventData); // Remove the child DOM elements that we created (e.g.canvas)
-
- enabledElements[i].element.removeChild(enabledElements[i].canvas);
- enabledElements[i].canvas = undefined; // Remove this element from the list of enabled elements
-
- enabledElements.splice(i, 1);
- break;
- }
- }
-});
-
-/***/ }),
-
-/***/ "./displayImage.js":
-/*!*************************!*\
- !*** ./displayImage.js ***!
- \*************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js");
-/* harmony import */ var _internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./internal/getDefaultViewport.js */ "./internal/getDefaultViewport.js");
-/* harmony import */ var _updateImage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./updateImage.js */ "./updateImage.js");
-/* harmony import */ var _internal_now_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./internal/now.js */ "./internal/now.js");
-/* harmony import */ var _layers_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./layers.js */ "./layers.js");
-/* harmony import */ var _triggerEvent_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./triggerEvent.js */ "./triggerEvent.js");
-/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./events.js */ "./events.js");
-
-
-
-
-
-
-
-/**
- * Sets a new image object for a given element.
- *
- * Will also apply an optional viewport setting.
- *
- * @param {HTMLElement} element An HTML Element enabled for Cornerstone
- * @param {Object} image An Image loaded by a Cornerstone Image Loader
- * @param {Object} [viewport] A set of Cornerstone viewport parameters
- * @returns {void}
- * @memberof Drawing
- */
-
-/* harmony default export */ __webpack_exports__["default"] = (function (element, image, viewport) {
- if (element === undefined) {
- throw new Error('displayImage: parameter element must not be undefined');
- }
-
- if (image === undefined) {
- throw new Error('displayImage: parameter image must not be undefined');
- }
-
- var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element);
- var oldImage = enabledElement.image;
- enabledElement.image = image;
-
- if (enabledElement.layers && enabledElement.layers.length) {
- Object(_layers_js__WEBPACK_IMPORTED_MODULE_4__["setLayerImage"])(element, image);
- }
-
- if (enabledElement.viewport === undefined) {
- enabledElement.viewport = Object(_internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_1__["default"])(enabledElement.canvas, image);
- } // Merge viewport
-
-
- if (viewport) {
- for (var attrname in viewport) {
- if (viewport[attrname] !== null) {
- enabledElement.viewport[attrname] = viewport[attrname];
- }
- }
- }
-
- var frameRate;
-
- if (enabledElement.lastImageTimeStamp !== undefined) {
- var timeSinceLastImage = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_3__["default"])() - enabledElement.lastImageTimeStamp;
- frameRate = (1000 / timeSinceLastImage).toFixed();
- }
-
- enabledElement.lastImageTimeStamp = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_3__["default"])();
- var newImageEventData = {
- viewport: enabledElement.viewport,
- element: enabledElement.element,
- image: enabledElement.image,
- oldImage: oldImage,
- enabledElement: enabledElement,
- frameRate: frameRate
- };
- Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_5__["default"])(enabledElement.element, _events_js__WEBPACK_IMPORTED_MODULE_6__["default"].NEW_IMAGE, newImageEventData);
- Object(_updateImage_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element);
-});
-
-/***/ }),
-
-/***/ "./draw.js":
-/*!*****************!*\
- !*** ./draw.js ***!
- \*****************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js");
-/* harmony import */ var _internal_drawImage_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./internal/drawImage.js */ "./internal/drawImage.js");
-
-
-/**
- * Immediately draws the enabled element
- *
- * @param {HTMLElement} element An HTML Element enabled for Cornerstone
- * @returns {void}
- * @memberof Drawing
- */
-
-/* harmony default export */ __webpack_exports__["default"] = (function (element) {
- var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element);
-
- if (enabledElement.image === undefined) {
- throw new Error('draw: image has not been loaded yet');
- }
-
- Object(_internal_drawImage_js__WEBPACK_IMPORTED_MODULE_1__["default"])(enabledElement);
-});
-
-/***/ }),
-
-/***/ "./drawInvalidated.js":
-/*!****************************!*\
- !*** ./drawInvalidated.js ***!
- \****************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js");
-/* harmony import */ var _internal_drawImage_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./internal/drawImage.js */ "./internal/drawImage.js");
-/**
- * This module is responsible for drawing invalidated enabled elements
- */
-
-
-/**
- * Draws all invalidated enabled elements and clears the invalid flag after drawing it
- *
- * @returns {void}
- * @memberof Drawing
- */
-
-/* harmony default export */ __webpack_exports__["default"] = (function () {
- var enabledElements = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElements"])();
-
- for (var i = 0; i < enabledElements.length; i++) {
- var ee = enabledElements[i];
-
- if (ee.invalid === true) {
- Object(_internal_drawImage_js__WEBPACK_IMPORTED_MODULE_1__["default"])(ee, true);
- }
- }
-});
-
-/***/ }),
-
-/***/ "./enable.js":
-/*!*******************!*\
- !*** ./enable.js ***!
- \*******************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js");
-/* harmony import */ var _resize_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./resize.js */ "./resize.js");
-/* harmony import */ var _internal_drawImageSync_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./internal/drawImageSync.js */ "./internal/drawImageSync.js");
-/* harmony import */ var _internal_requestAnimationFrame_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./internal/requestAnimationFrame.js */ "./internal/requestAnimationFrame.js");
-/* harmony import */ var _internal_tryEnableWebgl_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./internal/tryEnableWebgl.js */ "./internal/tryEnableWebgl.js");
-/* harmony import */ var _triggerEvent_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./triggerEvent.js */ "./triggerEvent.js");
-/* harmony import */ var _generateUUID_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./generateUUID.js */ "./generateUUID.js");
-/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./events.js */ "./events.js");
-/* harmony import */ var _internal_getCanvas_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./internal/getCanvas.js */ "./internal/getCanvas.js");
-
-
-
-
-
-
-
-
-
-/**
- * @module Enable
- * This module is responsible for enabling an element to display images with cornerstone
- */
-
-/**
- * Returns whether or not an Enabled Element has either a currently active image or
- * a non-empty Array of Enabled Element Layers.
- *
- * @param {EnabledElement} enabledElement An Enabled Element
- * @return {Boolean} Whether or not the Enabled Element has an active image or valid set of layers
- * @memberof Enable
- */
-
-function hasImageOrLayers(enabledElement) {
- return enabledElement.image !== undefined || enabledElement.layers.length > 0;
-}
-/**
- * Enable an HTML Element for use in Cornerstone
- *
- * - If there is a Canvas already present within the HTMLElement, and it has the class
- * 'cornerstone-canvas', this function will use this existing Canvas instead of creating
- * a new one. This may be helpful when using libraries (e.g. React, Vue) which don't
- * want third parties to change the DOM.
- *
- * @param {HTMLElement} element An HTML Element enabled for Cornerstone
- * @param {Object} options Options for the enabledElement
- *
- * @return {void}
- * @memberof Enable
- */
-
-
-/* harmony default export */ __webpack_exports__["default"] = (function (element, options) {
- if (element === undefined) {
- throw new Error('enable: parameter element cannot be undefined');
- } // If this enabled element has the option set for WebGL, we should
- // Check if this device actually supports it
-
-
- if (options && options.renderer && options.renderer.toLowerCase() === 'webgl') {
- Object(_internal_tryEnableWebgl_js__WEBPACK_IMPORTED_MODULE_4__["default"])(options);
- }
-
- var canvas = Object(_internal_getCanvas_js__WEBPACK_IMPORTED_MODULE_8__["default"])(element);
- var enabledElement = {
- element: element,
- canvas: canvas,
- image: undefined,
- // Will be set once image is loaded
- invalid: false,
- // True if image needs to be drawn, false if not
- needsRedraw: true,
- options: options,
- layers: [],
- data: {},
- renderingTools: {},
- uuid: Object(_generateUUID_js__WEBPACK_IMPORTED_MODULE_6__["default"])()
- };
- Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["addEnabledElement"])(enabledElement);
- Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_5__["default"])(_events_js__WEBPACK_IMPORTED_MODULE_7__["events"], _events_js__WEBPACK_IMPORTED_MODULE_7__["default"].ELEMENT_ENABLED, enabledElement);
- Object(_resize_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element, true);
- /**
- * Draw the image immediately
- *
- * @param {DOMHighResTimeStamp} timestamp The current time for when requestAnimationFrame starts to fire callbacks
- * @returns {void}
- * @memberof Drawing
- */
-
- function draw(timestamp) {
- if (enabledElement.canvas === undefined) {
- return;
- }
-
- var eventDetails = {
- enabledElement: enabledElement,
- timestamp: timestamp
- };
- Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_5__["default"])(enabledElement.element, _events_js__WEBPACK_IMPORTED_MODULE_7__["default"].PRE_RENDER, eventDetails);
-
- if (enabledElement.needsRedraw && hasImageOrLayers(enabledElement)) {
- Object(_internal_drawImageSync_js__WEBPACK_IMPORTED_MODULE_2__["default"])(enabledElement, enabledElement.invalid);
- }
-
- Object(_internal_requestAnimationFrame_js__WEBPACK_IMPORTED_MODULE_3__["default"])(draw);
- }
-
- draw();
-});
-
-/***/ }),
-
-/***/ "./enabledElementData.js":
-/*!*******************************!*\
- !*** ./enabledElementData.js ***!
- \*******************************/
-/*! exports provided: getElementData, removeElementData */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getElementData", function() { return getElementData; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeElementData", function() { return removeElementData; });
-/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js");
-
-/**
- * Retrieves any data for a Cornerstone enabledElement for a specific string
- * dataType
- *
- * @param {HTMLElement} element An HTML Element enabled for Cornerstone
- * @param {string} dataType A string name for an arbitrary set of data
- * @returns {*} Whatever data is stored for this enabled element
- */
-
-function getElementData(element, dataType) {
- var ee = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element);
-
- if (ee.data.hasOwnProperty(dataType) === false) {
- ee.data[dataType] = {};
- }
-
- return ee.data[dataType];
-}
-/**
- * Clears any data for a Cornerstone enabledElement for a specific string
- * dataType
- *
- * @param {HTMLElement} element An HTML Element enabled for Cornerstone
- * @param {string} dataType A string name for an arbitrary set of data
- *
- * @returns {void}
- */
-
-function removeElementData(element, dataType) {
- var ee = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element);
- delete ee.data[dataType];
-}
-
-/***/ }),
-
-/***/ "./enabledElements.js":
-/*!****************************!*\
- !*** ./enabledElements.js ***!
- \****************************/
-/*! exports provided: getEnabledElement, addEnabledElement, getEnabledElementsByImageId, getEnabledElements */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getEnabledElement", function() { return getEnabledElement; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addEnabledElement", function() { return addEnabledElement; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getEnabledElementsByImageId", function() { return getEnabledElementsByImageId; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getEnabledElements", function() { return getEnabledElements; });
-var enabledElements = [];
-/**
- * @module EnabledElements
- */
-
-/**
- * @module Objects
- */
-
-/**
- * A two-dimensional vector
- *
- * @typedef {Object} vec2
- * @memberof Objects
- * @param {Number} x - The x distance
- * @param {Number} y - The y distance
- */
-
-/**
- * VOI
- *
- * @typedef {Object} VOI
- * @memberof Objects
- * @param {Number} windowWidth - Window Width for display
- * @param {Number} windowCenter - Window Center for display
- */
-
-/**
- * Lookup Table Array
- *
- * @typedef {Object} LUT
- * @memberof Objects
- * @property {Number} firstValueMapped
- * @property {Number} numBitsPerEntry
- * @property {Array} lut
- */
-
-/**
- * Image Statistics Object
- *
- * @typedef {Object} ImageStats
- * @memberof Objects
- * @property {Number} [lastGetPixelDataTime] The time in ms taken to retrieve stored pixels required to draw the image
- * @property {Number} [lastStoredPixelDataToCanvasImageDataTime] The time in ms taken to map from stored pixel array to canvas pixel array
- * @property {Number} [lastPutImageDataTime] The time in ms taken for putImageData to put the canvas pixel data into the canvas context
- * @property {Number} [lastRenderTime] The total time in ms taken for the entire rendering function to run
- * @property {Number} [lastLutGenerateTime] The time in ms taken to generate the lookup table for the image
- */
-
-/**
- * An Image Object in Cornerstone
- *
- * @typedef {Object} Image
- * @memberof Objects
- * @property {string} imageId - The imageId associated with this image object
- * @property {Number} minPixelValue - the minimum stored pixel value in the image
- * @property {Number} maxPixelValue - the maximum stored pixel value in the image
- * @property {Number} slope - the rescale slope to convert stored pixel values to modality pixel values or 1 if not specified
- * @property {Number} intercept - the rescale intercept used to convert stored pixel values to modality values or 0 if not specified
- * @property {Number} windowCenter - the default windowCenter to apply to the image
- * @property {Number} windowWidth - the default windowWidth to apply to the image
- * @property {function} getPixelData - a function that returns the underlying pixel data. An array of integers for grayscale and an array of RGBA for color
- * @property {function} getImageData - a function that returns a canvas imageData object for the image. This is only needed for color images
- * @property {function} getCanvas - a function that returns a canvas element with the image loaded into it. This is only needed for color images.
- * @property {function} getImage - a function that returns a JavaScript Image object with the image data. This is optional and typically used for images encoded in standard web JPEG and PNG formats
- * @property {Number} rows - number of rows in the image. This is the same as height but duplicated for convenience
- * @property {Number} columns - number of columns in the image. This is the same as width but duplicated for convenience
- * @property {Number} height - the height of the image. This is the same as rows but duplicated for convenience
- * @property {Number} width - the width of the image. This is the same as columns but duplicated for convenience
- * @property {Boolean} color - true if pixel data is RGB, false if grayscale
- * @property {Object} lut - The Lookup Table
- * @property {Boolean} rgba - Is the color pixel data stored in RGBA?
- * @property {Number} columnPixelSpacing - horizontal distance between the middle of each pixel (or width of each pixel) in mm or undefined if not known
- * @property {Number} rowPixelSpacing - vertical distance between the middle of each pixel (or height of each pixel) in mm or undefined if not known
- * @property {Boolean} invert - true if the the image should initially be displayed be inverted, false if not. This is here mainly to support DICOM images with a photometric interpretation of MONOCHROME1
- * @property {Number} sizeInBytes - the number of bytes used to store the pixels for this image.
- * @property {Boolean} [falseColor=false] - Whether or not the image has undergone false color mapping
- * @property {Array} [origPixelData] - Original pixel data for an image after it has undergone false color mapping
- * @property {ImageStats} [stats] - Statistics for the last redraw of the image
- * @property {Object} cachedLut - Cached Lookup Table for this image.
- * @property {String|Colormap} [colormap] - Depreacted. Use viewport.colormap instead. an optional colormap ID or colormap object (from colors/colormap.js). This will be applied during rendering to convert the image to pseudocolor
- * @property {Boolean} [labelmap=false] - whether or not to render this image as a label map (i.e. skip modality and VOI LUT pipelines and use only a color lookup table)
- */
-
-/**
- * A Viewport Settings Object Cornerstone
- *
- * @typedef {Object} Viewport
- * @memberof Objects
- * @property {Number} [scale=1.0] - The scale applied to the image. A scale of 1.0 will display no zoom (one image pixel takes up one screen pixel). A scale of 2.0 will be double zoom and a scale of .5 will be zoomed out by 2x
- * @property {vec2} [translation] - An object with properties x and y which describe the translation to apply in the pixel coordinate system. Note that the image is initially displayed centered in the enabled element with a x and y translation of 0 and 0 respectively.
- * @property {VOI} [voi] - an object with properties windowWidth and windowCenter.
- * @property {boolean} [invert=false] - Whether or not the image is inverted.
- * @property {boolean} [pixelReplication=false] - true if the image smooth / interpolation should be used when zoomed in on the image or false if pixel replication should be used.
- * @property {boolean} [hflip=false] - true if the image is flipped horizontally. Default is false
- * @property {boolean} [vflip=false] - true if the image is flipped vertically. Default is false
- * @property {Number} [rotation=0] - the rotation of the image (90 degree increments). Default is 0
- * @property {LUT} [modalityLUT] - the modality LUT to apply or undefined if none
- * @property {LUT} [voiLUT] - the modality LUT to apply or undefined if none
- * @property {String|Colormap} [colormap] - an optional colormap ID or colormap object (from colors/colormap.js). This will be applied during rendering to convert the image to pseudocolor
- * @property {Boolean} [labelmap=false] - whether or not to render this image as a label map (i.e. skip modality and VOI LUT pipelines and use only a color lookup table)
- */
-
-/**
- * An Enabled Element in Cornerstone
- *
- * @typedef {Object} EnabledElement
- * @memberof Objects
- * @property {HTMLElement} element - The DOM element which has been enabled for use by Cornerstone
- * @property {Image} [image] - The image currently displayed in the enabledElement
- * @property {Viewport} [viewport] - The current viewport settings of the enabledElement
- * @property {HTMLCanvasElement} [canvas] - The current canvas for this enabledElement
- * @property {Boolean} invalid - Whether or not the image pixel data underlying the enabledElement has been changed, necessitating a redraw
- * @property {Boolean} needsRedraw - A flag for triggering a redraw of the canvas without re-retrieving the pixel data, since it remains valid
- * @property {EnabledElementLayer[]} [layers] - The layers that have been added to the enabledElement
- * @property {Boolean} [syncViewports] - Whether or not to synchronize the viewport parameters
- * for each of the enabled element's layers
- * @property {Boolean} [lastSyncViewportsState] - The previous state for the sync viewport boolean
- */
-
-/**
- * An Enabled Element Layer in Cornerstone
- *
- * @typedef {Object} EnabledElementLayer
- * @memberof Objects
- * @property {HTMLElement} element - The DOM element which has been enabled for use by Cornerstone
- * @property {Image} [image] - The image currently displayed in the enabledElement
- * @property {Viewport} [viewport] - The current viewport settings of the enabledElement
- * @property {HTMLCanvasElement} [canvas] - The current canvas for this enabledElement
- * @property {Object} [options] - Layer drawing options
- * @property {Boolean} invalid - Whether or not the image pixel data underlying the enabledElement has been changed, necessitating a redraw
- * @property {Boolean} needsRedraw - A flag for triggering a redraw of the canvas without re-retrieving the pixel data, since it remains valid
- */
-
-/**
- * An Image Load Object
- *
- * @typedef {Object} ImageLoadObject
- * @memberof Objects
- * @property {Promise} promise - The Promise tracking the loading of this image
- * @property {Function|undefined} cancelFn - A function to cancel the image load request
- */
-
-/**
- * Retrieves a Cornerstone Enabled Element object
- *
- * @param {HTMLElement} element An HTML Element enabled for Cornerstone
- *
- * @returns {EnabledElement} A Cornerstone Enabled Element
- * @memberof EnabledElements
- */
-
-function getEnabledElement(element) {
- if (element === undefined) {
- throw new Error('getEnabledElement: parameter element must not be undefined');
- }
-
- for (var i = 0; i < enabledElements.length; i++) {
- if (enabledElements[i].element === element) {
- return enabledElements[i];
- }
- }
-
- throw new Error('element not enabled');
-}
-/**
- * Adds a Cornerstone Enabled Element object to the central store of enabledElements
- *
- * @param {EnabledElement} enabledElement A Cornerstone enabledElement Object
- * @returns {void}
- * @memberof EnabledElements
- */
-
-function addEnabledElement(enabledElement) {
- if (enabledElement === undefined) {
- throw new Error('getEnabledElement: enabledElement element must not be undefined');
- }
-
- enabledElements.push(enabledElement);
-}
-/**
- * Adds a Cornerstone Enabled Element object to the central store of enabledElements
- *
- * @param {string} imageId A Cornerstone Image ID
- * @returns {EnabledElement[]} An Array of Cornerstone enabledElement Objects
- * @memberof EnabledElements
- */
-
-function getEnabledElementsByImageId(imageId) {
- var ees = [];
- enabledElements.forEach(function (enabledElement) {
- if (enabledElement.image && enabledElement.image.imageId === imageId) {
- ees.push(enabledElement);
- }
- });
- return ees;
-}
-/**
- * Retrieve all of the currently enabled Cornerstone elements
- *
- * @return {EnabledElement[]} An Array of Cornerstone enabledElement Objects
- * @memberof EnabledElements
- */
-
-function getEnabledElements() {
- return enabledElements;
-}
-
-/***/ }),
-
-/***/ "./events.js":
-/*!*******************!*\
- !*** ./events.js ***!
- \*******************/
-/*! exports provided: default, events */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "events", function() { return events; });
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
-
-function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
-
-var EVENTS = {
- NEW_IMAGE: 'cornerstonenewimage',
- INVALIDATED: 'cornerstoneinvalidated',
- PRE_RENDER: 'cornerstoneprerender',
- IMAGE_CACHE_MAXIMUM_SIZE_CHANGED: 'cornerstoneimagecachemaximumsizechanged',
- IMAGE_CACHE_PROMISE_REMOVED: 'cornerstoneimagecachepromiseremoved',
- IMAGE_CACHE_FULL: 'cornerstoneimagecachefull',
- IMAGE_CACHE_CHANGED: 'cornerstoneimagecachechanged',
- WEBGL_TEXTURE_REMOVED: 'cornerstonewebgltextureremoved',
- WEBGL_TEXTURE_CACHE_FULL: 'cornerstonewebgltexturecachefull',
- IMAGE_LOADED: 'cornerstoneimageloaded',
- IMAGE_LOAD_FAILED: 'cornerstoneimageloadfailed',
- ELEMENT_RESIZED: 'cornerstoneelementresized',
- IMAGE_RENDERED: 'cornerstoneimagerendered',
- LAYER_ADDED: 'cornerstonelayeradded',
- LAYER_REMOVED: 'cornerstonelayerremoved',
- ACTIVE_LAYER_CHANGED: 'cornerstoneactivelayerchanged',
- ELEMENT_DISABLED: 'cornerstoneelementdisabled',
- ELEMENT_ENABLED: 'cornerstoneelementenabled'
-};
-/* harmony default export */ __webpack_exports__["default"] = (EVENTS);
-/**
- * EventTarget - Provides the [EventTarget](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget) interface
- *
- * @class
- * @memberof Polyfills
- */
-
-var EventTarget =
-/*#__PURE__*/
-function () {
- function EventTarget() {
- _classCallCheck(this, EventTarget);
-
- this.listeners = {};
- this.namespaces = {};
- }
-
- _createClass(EventTarget, [{
- key: "addEventNamespaceListener",
- value: function addEventNamespaceListener(type, callback) {
- if (type.indexOf('.') <= 0) {
- return;
- }
-
- this.namespaces[type] = callback;
- this.addEventListener(type.split('.')[0], callback);
- }
- }, {
- key: "removeEventNamespaceListener",
- value: function removeEventNamespaceListener(type) {
- if (type.indexOf('.') <= 0 || !this.namespaces[type]) {
- return;
- }
-
- this.removeEventListener(type.split('.')[0], this.namespaces[type]);
- delete this.namespaces[type];
- }
- }, {
- key: "addEventListener",
- value: function addEventListener(type, callback) {
- // Check if it is an event namespace
- if (type.indexOf('.') > 0) {
- this.addEventNamespaceListener(type, callback);
- return;
- }
-
- if (!(type in this.listeners)) {
- this.listeners[type] = [];
- }
-
- this.listeners[type].push(callback);
- }
- }, {
- key: "removeEventListener",
- value: function removeEventListener(type, callback) {
- // Check if it is an event namespace
- if (type.indexOf('.') > 0) {
- this.removeEventNamespaceListener(type);
- return;
- }
-
- if (!(type in this.listeners)) {
- return;
- }
-
- var stack = this.listeners[type];
-
- for (var i = 0, l = stack.length; i < l; i++) {
- if (stack[i] === callback) {
- stack.splice(i, 1);
- return;
- }
- }
- }
- }, {
- key: "dispatchEvent",
- value: function dispatchEvent(event) {
- if (!(event.type in this.listeners)) {
- return true;
- }
-
- var stack = this.listeners[event.type];
-
- for (var i = 0, l = stack.length; i < l; i++) {
- stack[i].call(this, event);
- }
-
- return !event.defaultPrevented;
- }
- }]);
-
- return EventTarget;
-}();
-
-var events = new EventTarget();
-
-/***/ }),
-
-/***/ "./falseColorMapping.js":
-/*!******************************!*\
- !*** ./falseColorMapping.js ***!
- \******************************/
-/*! exports provided: convertImageToFalseColorImage, convertToFalseColorImage, restoreImage */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "convertImageToFalseColorImage", function() { return convertImageToFalseColorImage; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "convertToFalseColorImage", function() { return convertToFalseColorImage; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "restoreImage", function() { return restoreImage; });
-/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js");
-/* harmony import */ var _pixelDataToFalseColorData_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./pixelDataToFalseColorData.js */ "./pixelDataToFalseColorData.js");
-/* harmony import */ var _colors_colormap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./colors/colormap.js */ "./colors/colormap.js");
-
-
-
-/**
- * Retrieves the minimum and maximum pixel values from an Array of pixel data
- *
- * @param {Array} pixelData The input pixel data array
- *
- * @returns {{minPixelValue: Number, maxPixelValue: Number}} The minimum and maximum pixel values in the input Array
- */
-
-function getPixelValues(pixelData) {
- var minPixelValue = Number.MAX_VALUE;
- var maxPixelValue = Number.MIN_VALUE;
- var len = pixelData.length;
- var pixel;
-
- for (var i = 0; i < len; i++) {
- pixel = pixelData[i];
- minPixelValue = minPixelValue < pixel ? minPixelValue : pixel;
- maxPixelValue = maxPixelValue > pixel ? maxPixelValue : pixel;
- }
-
- return {
- minPixelValue: minPixelValue,
- maxPixelValue: maxPixelValue
- };
-}
-/**
- * Retrieve a function that will allow an image object to be reset to its original form
- * after a false color mapping transformation
- *
- * @param {Image} image A Cornerstone Image Object
- *
- * @return {Function} A function for resetting an Image Object to its original form
- */
-
-
-function getRestoreImageMethod(image) {
- if (image.restore) {
- return image.restore;
- }
-
- var color = image.color;
- var rgba = image.rgba;
- var cachedLut = image.cachedLut;
- var slope = image.slope;
- var windowWidth = image.windowWidth;
- var windowCenter = image.windowCenter;
- var minPixelValue = image.minPixelValue;
- var maxPixelValue = image.maxPixelValue;
- return function () {
- image.color = color;
- image.rgba = rgba;
- image.cachedLut = cachedLut;
- image.slope = slope;
- image.windowWidth = windowWidth;
- image.windowCenter = windowCenter;
- image.minPixelValue = minPixelValue;
- image.maxPixelValue = maxPixelValue;
-
- if (image.origPixelData) {
- var pixelData = image.origPixelData;
-
- image.getPixelData = function () {
- return pixelData;
- };
- } // Remove some attributes added by false color mapping
-
-
- image.origPixelData = undefined;
- image.colormapId = undefined;
- image.falseColor = undefined;
- };
-} //
-// Then we need to make sure it will be converted into a colormap object if it's as string.
-
-/**
- * User can pass a colormap or its id as string to some of these public functions.
- * Then we need to make sure it will be converted into a colormap object if it's a string.
- *
- * @param {*} colormap A colormap ID or Object
- * @return {*} The colormap
- */
-
-
-function ensuresColormap(colormap) {
- if (colormap && typeof colormap === 'string') {
- colormap = Object(_colors_colormap_js__WEBPACK_IMPORTED_MODULE_2__["getColormap"])(colormap);
- }
-
- return colormap;
-}
-/**
- * Restores a false color image to its original version
- *
- * @param {Image} image A Cornerstone Image Object
- * @returns {Boolean} True if the image object had a valid restore function, which was run. Otherwise, false.
- */
-
-
-function restoreImage(image) {
- if (image.restore && typeof image.restore === 'function') {
- image.restore();
- return true;
- }
-
- return false;
-}
-/**
- * Convert an image to a false color image
- *
- * @param {Image} image A Cornerstone Image Object
- * @param {String|Object} colormap - it can be a colormap object or a colormap id (string)
- *
- * @returns {Boolean} - Whether or not the image has been converted to a false color image
- */
-
-
-function convertImageToFalseColorImage(image, colormap) {
- if (image.color && !image.falseColor) {
- throw new Error('Color transforms are not implemented yet');
- } // User can pass a colormap id or a colormap object
-
-
- colormap = ensuresColormap(colormap);
- var colormapId = colormap.getId(); // Doesn't do anything if colormapId hasn't changed
-
- if (image.colormapId === colormapId) {
- // It has already being converted into a false color image
- // Using the colormapId passed as parameter
- return false;
- } // Restore the image attributes updated when converting to a false color image
-
-
- restoreImage(image); // Convert the image to a false color image
-
- if (colormapId) {
- var minPixelValue = image.minPixelValue || 0;
- var maxPixelValue = image.maxPixelValue || 255;
- image.restore = getRestoreImageMethod(image);
- var lookupTable = colormap.createLookupTable();
- lookupTable.setTableRange(minPixelValue, maxPixelValue); // Update the pixel data and render the new image
-
- Object(_pixelDataToFalseColorData_js__WEBPACK_IMPORTED_MODULE_1__["default"])(image, lookupTable); // Update min and max pixel values
-
- var pixelValues = getPixelValues(image.getPixelData());
- image.minPixelValue = pixelValues.minPixelValue;
- image.maxPixelValue = pixelValues.maxPixelValue;
- image.windowWidth = 255;
- image.windowCenter = 128; // Cache the last colormapId used for performance
- // Then it doesn't need to be re-rendered on next
- // Time if the user hasn't updated it
-
- image.colormapId = colormapId;
- } // Return `true` to tell the caller that the image has got updated
-
-
- return true;
-}
-/**
- * Convert the image of a element to a false color image
- *
- * @param {HTMLElement} element The Cornerstone element
- * @param {*} colormap - it can be a colormap object or a colormap id (string)
- *
- * @returns {void}
- */
-
-
-function convertToFalseColorImage(element, colormap) {
- var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element);
- return convertImageToFalseColorImage(enabledElement.image, colormap);
-}
-
-
-
-/***/ }),
-
-/***/ "./fitToWindow.js":
-/*!************************!*\
- !*** ./fitToWindow.js ***!
- \************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js");
-/* harmony import */ var _updateImage_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./updateImage.js */ "./updateImage.js");
-/* harmony import */ var _internal_getImageFitScale_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./internal/getImageFitScale.js */ "./internal/getImageFitScale.js");
-
-
-
-/**
- * Adjusts an image's scale and translation so the image is centered and all pixels
- * in the image are viewable.
- *
- * @param {HTMLElement} element The Cornerstone element to update
- * @returns {void}
- */
-
-/* harmony default export */ __webpack_exports__["default"] = (function (element) {
- var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element);
- var image = enabledElement.image; // The new scale is the minimum of the horizontal and vertical scale values
-
- enabledElement.viewport.scale = Object(_internal_getImageFitScale_js__WEBPACK_IMPORTED_MODULE_2__["default"])(enabledElement.canvas, image, enabledElement.viewport.rotation).scaleFactor;
- enabledElement.viewport.translation.x = 0;
- enabledElement.viewport.translation.y = 0;
- Object(_updateImage_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element);
-});
-
-/***/ }),
-
-/***/ "./generateUUID.js":
-/*!*************************!*\
- !*** ./generateUUID.js ***!
- \*************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/**
-* Generates a UUID for the enabledElement.
-*
-* @return {String} the UUID.
-*/
-/* harmony default export */ __webpack_exports__["default"] = (function () {
- // https://stackoverflow.com/a/8809472/9208320 Public Domain/MIT
-
- /* eslint no-bitwise: ["error", { "allow": ["&","|"] }] */
- var d = new Date().getTime();
-
- if (typeof performance !== 'undefined' && typeof performance.now === 'function') {
- d += performance.now(); // Use high-precision timer if available
- }
-
- return 'x.x.x.x.x.x.xxxx.xxx.x.x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
- var r = (d + Math.random() * 16) % 16 | 0;
- d = Math.floor(d / 16);
- return (c === 'x' ? r : r & 0x3 | 0x8).toString(16);
- });
-});
-
-/***/ }),
-
-/***/ "./getDefaultViewportForImage.js":
-/*!***************************************!*\
- !*** ./getDefaultViewportForImage.js ***!
- \***************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js");
-/* harmony import */ var _internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./internal/getDefaultViewport.js */ "./internal/getDefaultViewport.js");
-
-
-/**
- * Returns a default viewport for display the specified image on the specified
- * enabled element. The default viewport is fit to window
- *
- * @param {HTMLElement} element The DOM element enabled for Cornerstone
- * @param {Image} image A Cornerstone Image Object
- *
- * @returns {Viewport} The default viewport for the image
- */
-
-/* harmony default export */ __webpack_exports__["default"] = (function (element, image) {
- var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element);
- return Object(_internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_1__["default"])(enabledElement.canvas, image);
-});
-
-/***/ }),
-
-/***/ "./getImage.js":
-/*!*********************!*\
- !*** ./getImage.js ***!
- \*********************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js");
-
-/**
- * Returns the currently displayed image for an element or undefined if no image has
- * been displayed yet
- *
- * @param {HTMLElement} element The DOM element enabled for Cornerstone
- * @returns {Image} The Cornerstone Image Object displayed in this element
- */
-
-/* harmony default export */ __webpack_exports__["default"] = (function (element) {
- var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element);
- return enabledElement.image;
-});
-
-/***/ }),
-
-/***/ "./getPixels.js":
-/*!**********************!*\
- !*** ./getPixels.js ***!
- \**********************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js");
-/* harmony import */ var _getStoredPixels_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getStoredPixels.js */ "./getStoredPixels.js");
-/* harmony import */ var _internal_getModalityLUT_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./internal/getModalityLUT.js */ "./internal/getModalityLUT.js");
-
-
-
-/**
- * Retrieves an array of pixels from a rectangular region with modality LUT transformation applied
- *
- * @param {HTMLElement} element The DOM element enabled for Cornerstone
- * @param {Number} x The x coordinate of the top left corner of the sampling rectangle in image coordinates
- * @param {Number} y The y coordinate of the top left corner of the sampling rectangle in image coordinates
- * @param {Number} width The width of the of the sampling rectangle in image coordinates
- * @param {Number} height The height of the of the sampling rectangle in image coordinates
- * @returns {Array} The modality pixel value of the pixels in the sampling rectangle
- */
-
-/* harmony default export */ __webpack_exports__["default"] = (function (element, x, y, width, height) {
- var storedPixels = Object(_getStoredPixels_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element, x, y, width, height);
- var ee = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element);
- var mlutfn = Object(_internal_getModalityLUT_js__WEBPACK_IMPORTED_MODULE_2__["default"])(ee.image.slope, ee.image.intercept, ee.viewport.modalityLUT);
- return storedPixels.map(mlutfn);
-});
-
-/***/ }),
-
-/***/ "./getStoredPixels.js":
-/*!****************************!*\
- !*** ./getStoredPixels.js ***!
- \****************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js");
-
-/**
- * Retrieves an array of stored pixel values from a rectangular region of an image
- *
- * @param {HTMLElement} element The DOM element enabled for Cornerstone
- * @param {Number} x The x coordinate of the top left corner of the sampling rectangle in image coordinates
- * @param {Number} y The y coordinate of the top left corner of the sampling rectangle in image coordinates
- * @param {Number} width The width of the of the sampling rectangle in image coordinates
- * @param {Number} height The height of the of the sampling rectangle in image coordinates
- * @returns {Array} The stored pixel value of the pixels in the sampling rectangle
- */
-
-/* harmony default export */ __webpack_exports__["default"] = (function (element, x, y, width, height) {
- if (element === undefined) {
- throw new Error('getStoredPixels: parameter element must not be undefined');
- }
-
- x = Math.round(x);
- y = Math.round(y);
- var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element);
- var storedPixels = [];
- var index = 0;
- var pixelData = enabledElement.image.getPixelData();
-
- for (var row = 0; row < height; row++) {
- for (var column = 0; column < width; column++) {
- var spIndex = (row + y) * enabledElement.image.columns + (column + x);
- storedPixels[index++] = pixelData[spIndex];
- }
- }
-
- return storedPixels;
-});
-
-/***/ }),
-
-/***/ "./getViewport.js":
-/*!************************!*\
- !*** ./getViewport.js ***!
- \************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js");
-
-/**
- * Retrieves the viewport for the specified enabled element
- *
- * @param {HTMLElement} element The DOM element enabled for Cornerstone
- * @returns {Viewport|undefined} The Cornerstone Viewport settings for this element, if they exist. Otherwise, undefined
- * @memberof ViewportSettings
- */
-
-/* harmony default export */ __webpack_exports__["default"] = (function (element) {
- var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element);
- var viewport = enabledElement.viewport;
-
- if (viewport === undefined) {
- return;
- } // Return a copy of the viewport
-
-
- return Object.assign({}, viewport);
-});
-
-/***/ }),
-
-/***/ "./imageCache.js":
-/*!***********************!*\
- !*** ./imageCache.js ***!
- \***********************/
-/*! exports provided: cachedImages, setMaximumSizeBytes, putImageLoadObject, getImageLoadObject, removeImageLoadObject, getCacheInfo, purgeCache, changeImageIdCacheSize, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cachedImages", function() { return cachedImages; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setMaximumSizeBytes", function() { return setMaximumSizeBytes; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "putImageLoadObject", function() { return putImageLoadObject; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getImageLoadObject", function() { return getImageLoadObject; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeImageLoadObject", function() { return removeImageLoadObject; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getCacheInfo", function() { return getCacheInfo; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "purgeCache", function() { return purgeCache; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "changeImageIdCacheSize", function() { return changeImageIdCacheSize; });
-/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./events.js */ "./events.js");
-/* harmony import */ var _triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./triggerEvent.js */ "./triggerEvent.js");
-
-
-/**
- * This module deals with caching images
- * @module ImageCache
- */
-
-var maximumSizeInBytes = 1024 * 1024 * 1024; // 1 GB
-
-var cacheSizeInBytes = 0; // Dictionary of imageId to cachedImage objects
-
-var imageCacheDict = {}; // Array of cachedImage objects
-
-var cachedImages = [];
-/** Sets the maximum size of cache and purges cache contents if necessary.
- *
- * @param {number} numBytes The maximun size that the cache should occupy.
- * @returns {void}
- */
-
-function setMaximumSizeBytes(numBytes) {
- if (numBytes === undefined) {
- throw new Error('setMaximumSizeBytes: parameter numBytes must not be undefined');
- }
-
- if (numBytes.toFixed === undefined) {
- throw new Error('setMaximumSizeBytes: parameter numBytes must be a number');
- }
-
- maximumSizeInBytes = numBytes;
- Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__["default"])(_events_js__WEBPACK_IMPORTED_MODULE_0__["events"], _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].IMAGE_CACHE_MAXIMUM_SIZE_CHANGED);
- purgeCacheIfNecessary();
-}
-/**
- * Purges the cache if size exceeds maximum
- * @returns {void}
- */
-
-function purgeCacheIfNecessary() {
- // If max cache size has not been exceeded, do nothing
- if (cacheSizeInBytes <= maximumSizeInBytes) {
- return;
- } // Cache size has been exceeded, create list of images sorted by timeStamp
- // So we can purge the least recently used image
-
-
- function compare(a, b) {
- if (a.timeStamp > b.timeStamp) {
- return -1;
- }
-
- if (a.timeStamp < b.timeStamp) {
- return 1;
- }
-
- return 0;
- }
-
- cachedImages.sort(compare); // Remove images as necessary)
-
- while (cacheSizeInBytes > maximumSizeInBytes) {
- var lastCachedImage = cachedImages[cachedImages.length - 1];
- var imageId = lastCachedImage.imageId;
- removeImageLoadObject(imageId);
- Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__["default"])(_events_js__WEBPACK_IMPORTED_MODULE_0__["events"], _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].IMAGE_CACHE_PROMISE_REMOVED, {
- imageId: imageId
- });
- }
-
- var cacheInfo = getCacheInfo();
- Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__["default"])(_events_js__WEBPACK_IMPORTED_MODULE_0__["events"], _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].IMAGE_CACHE_FULL, cacheInfo);
-}
-/**
- * Puts a new image loader into the cache
- *
- * @param {string} imageId ImageId of the image loader
- * @param {Object} imageLoadObject The object that is loading or loaded the image
- * @returns {void}
- */
-
-
-function putImageLoadObject(imageId, imageLoadObject) {
- if (imageId === undefined) {
- throw new Error('putImageLoadObject: imageId must not be undefined');
- }
-
- if (imageLoadObject.promise === undefined) {
- throw new Error('putImageLoadObject: imageLoadObject.promise must not be undefined');
- }
-
- if (imageCacheDict.hasOwnProperty(imageId) === true) {
- throw new Error('putImageLoadObject: imageId already in cache');
- }
-
- if (imageLoadObject.cancelFn && typeof imageLoadObject.cancelFn !== 'function') {
- throw new Error('putImageLoadObject: imageLoadObject.cancelFn must be a function');
- }
-
- var cachedImage = {
- loaded: false,
- imageId: imageId,
- sharedCacheKey: undefined,
- // The sharedCacheKey for this imageId. undefined by default
- imageLoadObject: imageLoadObject,
- timeStamp: Date.now(),
- sizeInBytes: 0
- };
- imageCacheDict[imageId] = cachedImage;
- cachedImages.push(cachedImage);
- imageLoadObject.promise.then(function (image) {
- if (cachedImages.indexOf(cachedImage) === -1) {
- // If the image has been purged before being loaded, we stop here.
- return;
- }
-
- cachedImage.loaded = true;
- cachedImage.image = image;
-
- if (image.sizeInBytes === undefined) {
- throw new Error('putImageLoadObject: image.sizeInBytes must not be undefined');
- }
-
- if (image.sizeInBytes.toFixed === undefined) {
- throw new Error('putImageLoadObject: image.sizeInBytes is not a number');
- }
-
- cachedImage.sizeInBytes = image.sizeInBytes;
- cacheSizeInBytes += cachedImage.sizeInBytes;
- var eventDetails = {
- action: 'addImage',
- image: cachedImage
- };
- Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__["default"])(_events_js__WEBPACK_IMPORTED_MODULE_0__["events"], _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].IMAGE_CACHE_CHANGED, eventDetails);
- cachedImage.sharedCacheKey = image.sharedCacheKey;
- purgeCacheIfNecessary();
- }, function () {
- var cachedImage = imageCacheDict[imageId];
- cachedImages.splice(cachedImages.indexOf(cachedImage), 1);
- delete imageCacheDict[imageId];
- });
-}
-/**
- * Retuns the object that is loading a given imageId
- *
- * @param {string} imageId Image ID
- * @returns {void}
- */
-
-function getImageLoadObject(imageId) {
- if (imageId === undefined) {
- throw new Error('getImageLoadObject: imageId must not be undefined');
- }
-
- var cachedImage = imageCacheDict[imageId];
-
- if (cachedImage === undefined) {
- return;
- } // Bump time stamp for cached image
-
-
- cachedImage.timeStamp = Date.now();
- return cachedImage.imageLoadObject;
-}
-/**
- * Removes the image loader associated with a given Id from the cache
- *
- * @param {string} imageId Image ID
- * @returns {void}
- */
-
-function removeImageLoadObject(imageId) {
- if (imageId === undefined) {
- throw new Error('removeImageLoadObject: imageId must not be undefined');
- }
-
- var cachedImage = imageCacheDict[imageId];
-
- if (cachedImage === undefined) {
- throw new Error('removeImageLoadObject: imageId was not present in imageCache');
- }
-
- cachedImages.splice(cachedImages.indexOf(cachedImage), 1);
- cacheSizeInBytes -= cachedImage.sizeInBytes;
- var eventDetails = {
- action: 'deleteImage',
- image: cachedImage
- };
- Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__["default"])(_events_js__WEBPACK_IMPORTED_MODULE_0__["events"], _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].IMAGE_CACHE_CHANGED, eventDetails);
- decache(cachedImage.imageLoadObject);
- delete imageCacheDict[imageId];
-}
-/**
- * @typedef {Object} CacheInformation
- * @property {number} maximumSizeInBytes The maximum size of the cache in bytes
- * @property {number} cacheSizeInBytes Currently occupied space in the cache in bytes
- * @property {number} numberOfImagesCached Number of ImageLoaders in the cache
- * @returns {void}
- */
-
-/**
- * Gets the current state of the cache
- * @returns {void}
- */
-
-function getCacheInfo() {
- return {
- maximumSizeInBytes: maximumSizeInBytes,
- cacheSizeInBytes: cacheSizeInBytes,
- numberOfImagesCached: cachedImages.length
- };
-} // This method should only be called by `removeImageLoadObject` because it's
-// The one that knows how to deal with shared cache keys and cache size.
-
-/**
- * INTERNAL: Removes and ImageLoader from the cache
- *
- * @param {Object} imageLoadObject Image Loader Object to remove
- * @returns {void}
- */
-
-function decache(imageLoadObject) {
- imageLoadObject.promise.then(function () {
- if (imageLoadObject.decache) {
- imageLoadObject.decache();
- }
- }, function () {
- if (imageLoadObject.decache) {
- imageLoadObject.decache();
- }
- });
-}
-/**
- * Removes all images from cache
- * @returns {void}
- */
-
-
-function purgeCache() {
- while (cachedImages.length > 0) {
- var removedCachedImage = cachedImages[0];
- removeImageLoadObject(removedCachedImage.imageId);
- }
-}
-/**
- * Updates the space than an image is using in the cache
- *
- * @param {string} imageId Image ID
- * @param {number} newCacheSize New image size
- * @returns {void}
- */
-
-function changeImageIdCacheSize(imageId, newCacheSize) {
- var cacheEntry = imageCacheDict[imageId];
-
- if (cacheEntry) {
- cacheEntry.imageLoadObject.promise.then(function (image) {
- var cacheSizeDifference = newCacheSize - image.sizeInBytes;
- image.sizeInBytes = newCacheSize;
- cacheEntry.sizeInBytes = newCacheSize;
- cacheSizeInBytes += cacheSizeDifference;
- var eventDetails = {
- action: 'changeImageSize',
- image: image
- };
- Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__["default"])(_events_js__WEBPACK_IMPORTED_MODULE_0__["events"], _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].IMAGE_CACHE_CHANGED, eventDetails);
- });
- }
-}
-/* harmony default export */ __webpack_exports__["default"] = ({
- imageCache: imageCacheDict,
- cachedImages: cachedImages,
- setMaximumSizeBytes: setMaximumSizeBytes,
- putImageLoadObject: putImageLoadObject,
- getImageLoadObject: getImageLoadObject,
- removeImageLoadObject: removeImageLoadObject,
- getCacheInfo: getCacheInfo,
- purgeCache: purgeCache,
- changeImageIdCacheSize: changeImageIdCacheSize
-});
-
-/***/ }),
-
-/***/ "./imageLoader.js":
-/*!************************!*\
- !*** ./imageLoader.js ***!
- \************************/
-/*! exports provided: loadImage, loadAndCacheImage, registerImageLoader, registerUnknownImageLoader */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadImage", function() { return loadImage; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadAndCacheImage", function() { return loadAndCacheImage; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "registerImageLoader", function() { return registerImageLoader; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "registerUnknownImageLoader", function() { return registerUnknownImageLoader; });
-/* harmony import */ var _imageCache_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./imageCache.js */ "./imageCache.js");
-/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./events.js */ "./events.js");
-/* harmony import */ var _triggerEvent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./triggerEvent.js */ "./triggerEvent.js");
-
-
-
-/**
- * This module deals with ImageLoaders, loading images and caching images
- * @module ImageLoader
- */
-
-var imageLoaders = {};
-var unknownImageLoader;
-/**
- * Load an image using a registered Cornerstone Image Loader.
- *
- * The image loader that is used will be
- * determined by the image loader scheme matching against the imageId.
- *
- * @param {String} imageId A Cornerstone Image Object's imageId
- * @param {Object} [options] Options to be passed to the Image Loader
- *
- * @returns {ImageLoadObject} An Object which can be used to act after an image is loaded or loading fails
- * @memberof ImageLoader
- */
-
-function loadImageFromImageLoader(imageId, options) {
- var colonIndex = imageId.indexOf(':');
- var scheme = imageId.substring(0, colonIndex);
- var loader = imageLoaders[scheme];
-
- if (loader === undefined || loader === null) {
- if (unknownImageLoader !== undefined) {
- return unknownImageLoader(imageId);
- }
-
- throw new Error('loadImageFromImageLoader: no image loader for imageId');
- }
-
- var imageLoadObject = loader(imageId, options); // Broadcast an image loaded event once the image is loaded
-
- imageLoadObject.promise.then(function (image) {
- Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_2__["default"])(_events_js__WEBPACK_IMPORTED_MODULE_1__["events"], _events_js__WEBPACK_IMPORTED_MODULE_1__["default"].IMAGE_LOADED, {
- image: image
- });
- }, function (error) {
- var errorObject = {
- imageId: imageId,
- error: error
- };
- Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_2__["default"])(_events_js__WEBPACK_IMPORTED_MODULE_1__["events"], _events_js__WEBPACK_IMPORTED_MODULE_1__["default"].IMAGE_LOAD_FAILED, errorObject);
- });
- return imageLoadObject;
-}
-/**
- * Loads an image given an imageId and optional priority and returns a promise which will resolve to
- * the loaded image object or fail if an error occurred. The loaded image is not stored in the cache.
- *
- * @param {String} imageId A Cornerstone Image Object's imageId
- * @param {Object} [options] Options to be passed to the Image Loader
- *
- * @returns {ImageLoadObject} An Object which can be used to act after an image is loaded or loading fails
- * @memberof ImageLoader
- */
-
-
-function loadImage(imageId, options) {
- if (imageId === undefined) {
- throw new Error('loadImage: parameter imageId must not be undefined');
- }
-
- var imageLoadObject = Object(_imageCache_js__WEBPACK_IMPORTED_MODULE_0__["getImageLoadObject"])(imageId);
-
- if (imageLoadObject !== undefined) {
- return imageLoadObject.promise;
- }
-
- return loadImageFromImageLoader(imageId, options).promise;
-} //
-
-/**
- * Loads an image given an imageId and optional priority and returns a promise which will resolve to
- * the loaded image object or fail if an error occurred. The image is stored in the cache.
- *
- * @param {String} imageId A Cornerstone Image Object's imageId
- * @param {Object} [options] Options to be passed to the Image Loader
- *
- * @returns {ImageLoadObject} Image Loader Object
- * @memberof ImageLoader
- */
-
-function loadAndCacheImage(imageId, options) {
- if (imageId === undefined) {
- throw new Error('loadAndCacheImage: parameter imageId must not be undefined');
- }
-
- var imageLoadObject = Object(_imageCache_js__WEBPACK_IMPORTED_MODULE_0__["getImageLoadObject"])(imageId);
-
- if (imageLoadObject !== undefined) {
- return imageLoadObject.promise;
- }
-
- imageLoadObject = loadImageFromImageLoader(imageId, options);
- Object(_imageCache_js__WEBPACK_IMPORTED_MODULE_0__["putImageLoadObject"])(imageId, imageLoadObject);
- return imageLoadObject.promise;
-}
-/**
- * Registers an imageLoader plugin with cornerstone for the specified scheme
- *
- * @param {String} scheme The scheme to use for this image loader (e.g. 'dicomweb', 'wadouri', 'http')
- * @param {Function} imageLoader A Cornerstone Image Loader function
- * @returns {void}
- * @memberof ImageLoader
- */
-
-function registerImageLoader(scheme, imageLoader) {
- imageLoaders[scheme] = imageLoader;
-}
-/**
- * Registers a new unknownImageLoader and returns the previous one
- *
- * @param {Function} imageLoader A Cornerstone Image Loader
- *
- * @returns {Function|Undefined} The previous Unknown Image Loader
- * @memberof ImageLoader
- */
-
-function registerUnknownImageLoader(imageLoader) {
- var oldImageLoader = unknownImageLoader;
- unknownImageLoader = imageLoader;
- return oldImageLoader;
-}
-
-/***/ }),
-
-/***/ "./index.js":
-/*!******************!*\
- !*** ./index.js ***!
- \******************/
-/*! exports provided: drawImage, generateLut, getDefaultViewport, requestAnimationFrame, storedPixelDataToCanvasImageData, storedColorPixelDataToCanvasImageData, storedPixelDataToCanvasImageDataColorLUT, storedPixelDataToCanvasImageDataPseudocolorLUT, internal, renderLabelMapImage, renderPseudoColorImage, renderColorImage, renderGrayscaleImage, renderWebImage, renderToCanvas, canvasToPixel, disable, displayImage, draw, drawInvalidated, enable, getElementData, removeElementData, getEnabledElement, addEnabledElement, getEnabledElementsByImageId, getEnabledElements, addLayer, removeLayer, getLayer, getLayers, getVisibleLayers, setActiveLayer, getActiveLayer, purgeLayers, setLayerImage, fitToWindow, getDefaultViewportForImage, getImage, getPixels, getStoredPixels, getViewport, loadImage, loadAndCacheImage, registerImageLoader, registerUnknownImageLoader, invalidate, invalidateImageId, pageToPixel, pixelToCanvas, reset, resize, setToPixelCoordinateSystem, setViewport, updateImage, pixelDataToFalseColorData, rendering, imageCache, metaData, webGL, colors, convertImageToFalseColorImage, convertToFalseColorImage, restoreImage, EVENTS, events, triggerEvent, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _internal_drawImage_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./internal/drawImage.js */ "./internal/drawImage.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "drawImage", function() { return _internal_drawImage_js__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-/* harmony import */ var _internal_generateLut_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./internal/generateLut.js */ "./internal/generateLut.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "generateLut", function() { return _internal_generateLut_js__WEBPACK_IMPORTED_MODULE_1__["default"]; });
-
-/* harmony import */ var _internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./internal/getDefaultViewport.js */ "./internal/getDefaultViewport.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getDefaultViewport", function() { return _internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_2__["default"]; });
-
-/* harmony import */ var _internal_requestAnimationFrame_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./internal/requestAnimationFrame.js */ "./internal/requestAnimationFrame.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "requestAnimationFrame", function() { return _internal_requestAnimationFrame_js__WEBPACK_IMPORTED_MODULE_3__["default"]; });
-
-/* harmony import */ var _internal_storedPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./internal/storedPixelDataToCanvasImageData.js */ "./internal/storedPixelDataToCanvasImageData.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "storedPixelDataToCanvasImageData", function() { return _internal_storedPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_4__["default"]; });
-
-/* harmony import */ var _internal_storedColorPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./internal/storedColorPixelDataToCanvasImageData.js */ "./internal/storedColorPixelDataToCanvasImageData.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "storedColorPixelDataToCanvasImageData", function() { return _internal_storedColorPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_5__["default"]; });
-
-/* harmony import */ var _internal_storedPixelDataToCanvasImageDataColorLUT_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./internal/storedPixelDataToCanvasImageDataColorLUT.js */ "./internal/storedPixelDataToCanvasImageDataColorLUT.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "storedPixelDataToCanvasImageDataColorLUT", function() { return _internal_storedPixelDataToCanvasImageDataColorLUT_js__WEBPACK_IMPORTED_MODULE_6__["default"]; });
-
-/* harmony import */ var _internal_storedPixelDataToCanvasImageDataPseudocolorLUT_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./internal/storedPixelDataToCanvasImageDataPseudocolorLUT.js */ "./internal/storedPixelDataToCanvasImageDataPseudocolorLUT.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "storedPixelDataToCanvasImageDataPseudocolorLUT", function() { return _internal_storedPixelDataToCanvasImageDataPseudocolorLUT_js__WEBPACK_IMPORTED_MODULE_7__["default"]; });
-
-/* harmony import */ var _internal_index_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./internal/index.js */ "./internal/index.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "internal", function() { return _internal_index_js__WEBPACK_IMPORTED_MODULE_8__["default"]; });
-
-/* harmony import */ var _rendering_renderLabelMapImage_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./rendering/renderLabelMapImage.js */ "./rendering/renderLabelMapImage.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "renderLabelMapImage", function() { return _rendering_renderLabelMapImage_js__WEBPACK_IMPORTED_MODULE_9__["renderLabelMapImage"]; });
-
-/* harmony import */ var _rendering_renderPseudoColorImage_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./rendering/renderPseudoColorImage.js */ "./rendering/renderPseudoColorImage.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "renderPseudoColorImage", function() { return _rendering_renderPseudoColorImage_js__WEBPACK_IMPORTED_MODULE_10__["renderPseudoColorImage"]; });
-
-/* harmony import */ var _rendering_renderColorImage_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./rendering/renderColorImage.js */ "./rendering/renderColorImage.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "renderColorImage", function() { return _rendering_renderColorImage_js__WEBPACK_IMPORTED_MODULE_11__["renderColorImage"]; });
-
-/* harmony import */ var _rendering_renderGrayscaleImage_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./rendering/renderGrayscaleImage.js */ "./rendering/renderGrayscaleImage.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "renderGrayscaleImage", function() { return _rendering_renderGrayscaleImage_js__WEBPACK_IMPORTED_MODULE_12__["renderGrayscaleImage"]; });
-
-/* harmony import */ var _rendering_renderWebImage_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./rendering/renderWebImage.js */ "./rendering/renderWebImage.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "renderWebImage", function() { return _rendering_renderWebImage_js__WEBPACK_IMPORTED_MODULE_13__["renderWebImage"]; });
-
-/* harmony import */ var _rendering_renderToCanvas_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./rendering/renderToCanvas.js */ "./rendering/renderToCanvas.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "renderToCanvas", function() { return _rendering_renderToCanvas_js__WEBPACK_IMPORTED_MODULE_14__["default"]; });
-
-/* harmony import */ var _canvasToPixel_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./canvasToPixel.js */ "./canvasToPixel.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "canvasToPixel", function() { return _canvasToPixel_js__WEBPACK_IMPORTED_MODULE_15__["default"]; });
-
-/* harmony import */ var _disable_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./disable.js */ "./disable.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "disable", function() { return _disable_js__WEBPACK_IMPORTED_MODULE_16__["default"]; });
-
-/* harmony import */ var _displayImage_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./displayImage.js */ "./displayImage.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "displayImage", function() { return _displayImage_js__WEBPACK_IMPORTED_MODULE_17__["default"]; });
-
-/* harmony import */ var _draw_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./draw.js */ "./draw.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "draw", function() { return _draw_js__WEBPACK_IMPORTED_MODULE_18__["default"]; });
-
-/* harmony import */ var _drawInvalidated_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./drawInvalidated.js */ "./drawInvalidated.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "drawInvalidated", function() { return _drawInvalidated_js__WEBPACK_IMPORTED_MODULE_19__["default"]; });
-
-/* harmony import */ var _enable_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./enable.js */ "./enable.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "enable", function() { return _enable_js__WEBPACK_IMPORTED_MODULE_20__["default"]; });
-
-/* harmony import */ var _enabledElementData_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./enabledElementData.js */ "./enabledElementData.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getElementData", function() { return _enabledElementData_js__WEBPACK_IMPORTED_MODULE_21__["getElementData"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "removeElementData", function() { return _enabledElementData_js__WEBPACK_IMPORTED_MODULE_21__["removeElementData"]; });
-
-/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getEnabledElement", function() { return _enabledElements_js__WEBPACK_IMPORTED_MODULE_22__["getEnabledElement"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "addEnabledElement", function() { return _enabledElements_js__WEBPACK_IMPORTED_MODULE_22__["addEnabledElement"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getEnabledElementsByImageId", function() { return _enabledElements_js__WEBPACK_IMPORTED_MODULE_22__["getEnabledElementsByImageId"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getEnabledElements", function() { return _enabledElements_js__WEBPACK_IMPORTED_MODULE_22__["getEnabledElements"]; });
-
-/* harmony import */ var _layers_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./layers.js */ "./layers.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "addLayer", function() { return _layers_js__WEBPACK_IMPORTED_MODULE_23__["addLayer"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "removeLayer", function() { return _layers_js__WEBPACK_IMPORTED_MODULE_23__["removeLayer"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getLayer", function() { return _layers_js__WEBPACK_IMPORTED_MODULE_23__["getLayer"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getLayers", function() { return _layers_js__WEBPACK_IMPORTED_MODULE_23__["getLayers"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getVisibleLayers", function() { return _layers_js__WEBPACK_IMPORTED_MODULE_23__["getVisibleLayers"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setActiveLayer", function() { return _layers_js__WEBPACK_IMPORTED_MODULE_23__["setActiveLayer"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getActiveLayer", function() { return _layers_js__WEBPACK_IMPORTED_MODULE_23__["getActiveLayer"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "purgeLayers", function() { return _layers_js__WEBPACK_IMPORTED_MODULE_23__["purgeLayers"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setLayerImage", function() { return _layers_js__WEBPACK_IMPORTED_MODULE_23__["setLayerImage"]; });
-
-/* harmony import */ var _fitToWindow_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./fitToWindow.js */ "./fitToWindow.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "fitToWindow", function() { return _fitToWindow_js__WEBPACK_IMPORTED_MODULE_24__["default"]; });
-
-/* harmony import */ var _getDefaultViewportForImage_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./getDefaultViewportForImage.js */ "./getDefaultViewportForImage.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getDefaultViewportForImage", function() { return _getDefaultViewportForImage_js__WEBPACK_IMPORTED_MODULE_25__["default"]; });
-
-/* harmony import */ var _getImage_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./getImage.js */ "./getImage.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getImage", function() { return _getImage_js__WEBPACK_IMPORTED_MODULE_26__["default"]; });
-
-/* harmony import */ var _getPixels_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./getPixels.js */ "./getPixels.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getPixels", function() { return _getPixels_js__WEBPACK_IMPORTED_MODULE_27__["default"]; });
-
-/* harmony import */ var _getStoredPixels_js__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./getStoredPixels.js */ "./getStoredPixels.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getStoredPixels", function() { return _getStoredPixels_js__WEBPACK_IMPORTED_MODULE_28__["default"]; });
-
-/* harmony import */ var _getViewport_js__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./getViewport.js */ "./getViewport.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getViewport", function() { return _getViewport_js__WEBPACK_IMPORTED_MODULE_29__["default"]; });
-
-/* harmony import */ var _imageLoader_js__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./imageLoader.js */ "./imageLoader.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "loadImage", function() { return _imageLoader_js__WEBPACK_IMPORTED_MODULE_30__["loadImage"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "loadAndCacheImage", function() { return _imageLoader_js__WEBPACK_IMPORTED_MODULE_30__["loadAndCacheImage"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "registerImageLoader", function() { return _imageLoader_js__WEBPACK_IMPORTED_MODULE_30__["registerImageLoader"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "registerUnknownImageLoader", function() { return _imageLoader_js__WEBPACK_IMPORTED_MODULE_30__["registerUnknownImageLoader"]; });
-
-/* harmony import */ var _invalidate_js__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./invalidate.js */ "./invalidate.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "invalidate", function() { return _invalidate_js__WEBPACK_IMPORTED_MODULE_31__["default"]; });
-
-/* harmony import */ var _invalidateImageId_js__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./invalidateImageId.js */ "./invalidateImageId.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "invalidateImageId", function() { return _invalidateImageId_js__WEBPACK_IMPORTED_MODULE_32__["default"]; });
-
-/* harmony import */ var _pageToPixel_js__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./pageToPixel.js */ "./pageToPixel.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pageToPixel", function() { return _pageToPixel_js__WEBPACK_IMPORTED_MODULE_33__["default"]; });
-
-/* harmony import */ var _pixelToCanvas_js__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./pixelToCanvas.js */ "./pixelToCanvas.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pixelToCanvas", function() { return _pixelToCanvas_js__WEBPACK_IMPORTED_MODULE_34__["default"]; });
-
-/* harmony import */ var _reset_js__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./reset.js */ "./reset.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "reset", function() { return _reset_js__WEBPACK_IMPORTED_MODULE_35__["default"]; });
-
-/* harmony import */ var _resize_js__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./resize.js */ "./resize.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resize", function() { return _resize_js__WEBPACK_IMPORTED_MODULE_36__["default"]; });
-
-/* harmony import */ var _setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./setToPixelCoordinateSystem.js */ "./setToPixelCoordinateSystem.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setToPixelCoordinateSystem", function() { return _setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_37__["default"]; });
-
-/* harmony import */ var _setViewport_js__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./setViewport.js */ "./setViewport.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setViewport", function() { return _setViewport_js__WEBPACK_IMPORTED_MODULE_38__["default"]; });
-
-/* harmony import */ var _updateImage_js__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./updateImage.js */ "./updateImage.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "updateImage", function() { return _updateImage_js__WEBPACK_IMPORTED_MODULE_39__["default"]; });
-
-/* harmony import */ var _pixelDataToFalseColorData_js__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./pixelDataToFalseColorData.js */ "./pixelDataToFalseColorData.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pixelDataToFalseColorData", function() { return _pixelDataToFalseColorData_js__WEBPACK_IMPORTED_MODULE_40__["default"]; });
-
-/* harmony import */ var _rendering_index_js__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./rendering/index.js */ "./rendering/index.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "rendering", function() { return _rendering_index_js__WEBPACK_IMPORTED_MODULE_41__["default"]; });
-
-/* harmony import */ var _imageCache_js__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./imageCache.js */ "./imageCache.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "imageCache", function() { return _imageCache_js__WEBPACK_IMPORTED_MODULE_42__["default"]; });
-
-/* harmony import */ var _metaData_js__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./metaData.js */ "./metaData.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "metaData", function() { return _metaData_js__WEBPACK_IMPORTED_MODULE_43__["default"]; });
-
-/* harmony import */ var _webgl_index_js__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./webgl/index.js */ "./webgl/index.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "webGL", function() { return _webgl_index_js__WEBPACK_IMPORTED_MODULE_44__["default"]; });
-
-/* harmony import */ var _colors_index_js__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./colors/index.js */ "./colors/index.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "colors", function() { return _colors_index_js__WEBPACK_IMPORTED_MODULE_45__["default"]; });
-
-/* harmony import */ var _falseColorMapping_js__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./falseColorMapping.js */ "./falseColorMapping.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "convertImageToFalseColorImage", function() { return _falseColorMapping_js__WEBPACK_IMPORTED_MODULE_46__["convertImageToFalseColorImage"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "convertToFalseColorImage", function() { return _falseColorMapping_js__WEBPACK_IMPORTED_MODULE_46__["convertToFalseColorImage"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "restoreImage", function() { return _falseColorMapping_js__WEBPACK_IMPORTED_MODULE_46__["restoreImage"]; });
-
-/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./events.js */ "./events.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "EVENTS", function() { return _events_js__WEBPACK_IMPORTED_MODULE_47__["default"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "events", function() { return _events_js__WEBPACK_IMPORTED_MODULE_47__["events"]; });
-
-/* harmony import */ var _triggerEvent_js__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./triggerEvent.js */ "./triggerEvent.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "triggerEvent", function() { return _triggerEvent_js__WEBPACK_IMPORTED_MODULE_48__["default"]; });
-
-// Internal (some of these are from old internal/legacy expose)
-
-
-
-
-
-
-
-
- // Rendering
-
-
-
-
-
-
-
-/**
- * @module PixelCoordinateSystem
- */
-
-/**
- * @module ViewportSettings
- */
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-var cornerstone = {
- drawImage: _internal_drawImage_js__WEBPACK_IMPORTED_MODULE_0__["default"],
- generateLut: _internal_generateLut_js__WEBPACK_IMPORTED_MODULE_1__["default"],
- getDefaultViewport: _internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_2__["default"],
- requestAnimationFrame: _internal_requestAnimationFrame_js__WEBPACK_IMPORTED_MODULE_3__["default"],
- storedPixelDataToCanvasImageData: _internal_storedPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_4__["default"],
- storedColorPixelDataToCanvasImageData: _internal_storedColorPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_5__["default"],
- storedPixelDataToCanvasImageDataColorLUT: _internal_storedPixelDataToCanvasImageDataColorLUT_js__WEBPACK_IMPORTED_MODULE_6__["default"],
- storedPixelDataToCanvasImageDataPseudocolorLUT: _internal_storedPixelDataToCanvasImageDataPseudocolorLUT_js__WEBPACK_IMPORTED_MODULE_7__["default"],
- internal: _internal_index_js__WEBPACK_IMPORTED_MODULE_8__["default"],
- renderLabelMapImage: _rendering_renderLabelMapImage_js__WEBPACK_IMPORTED_MODULE_9__["renderLabelMapImage"],
- renderPseudoColorImage: _rendering_renderPseudoColorImage_js__WEBPACK_IMPORTED_MODULE_10__["renderPseudoColorImage"],
- renderColorImage: _rendering_renderColorImage_js__WEBPACK_IMPORTED_MODULE_11__["renderColorImage"],
- renderGrayscaleImage: _rendering_renderGrayscaleImage_js__WEBPACK_IMPORTED_MODULE_12__["renderGrayscaleImage"],
- renderWebImage: _rendering_renderWebImage_js__WEBPACK_IMPORTED_MODULE_13__["renderWebImage"],
- renderToCanvas: _rendering_renderToCanvas_js__WEBPACK_IMPORTED_MODULE_14__["default"],
- canvasToPixel: _canvasToPixel_js__WEBPACK_IMPORTED_MODULE_15__["default"],
- disable: _disable_js__WEBPACK_IMPORTED_MODULE_16__["default"],
- displayImage: _displayImage_js__WEBPACK_IMPORTED_MODULE_17__["default"],
- draw: _draw_js__WEBPACK_IMPORTED_MODULE_18__["default"],
- drawInvalidated: _drawInvalidated_js__WEBPACK_IMPORTED_MODULE_19__["default"],
- enable: _enable_js__WEBPACK_IMPORTED_MODULE_20__["default"],
- getElementData: _enabledElementData_js__WEBPACK_IMPORTED_MODULE_21__["getElementData"],
- removeElementData: _enabledElementData_js__WEBPACK_IMPORTED_MODULE_21__["removeElementData"],
- getEnabledElement: _enabledElements_js__WEBPACK_IMPORTED_MODULE_22__["getEnabledElement"],
- addEnabledElement: _enabledElements_js__WEBPACK_IMPORTED_MODULE_22__["addEnabledElement"],
- getEnabledElementsByImageId: _enabledElements_js__WEBPACK_IMPORTED_MODULE_22__["getEnabledElementsByImageId"],
- getEnabledElements: _enabledElements_js__WEBPACK_IMPORTED_MODULE_22__["getEnabledElements"],
- addLayer: _layers_js__WEBPACK_IMPORTED_MODULE_23__["addLayer"],
- removeLayer: _layers_js__WEBPACK_IMPORTED_MODULE_23__["removeLayer"],
- getLayer: _layers_js__WEBPACK_IMPORTED_MODULE_23__["getLayer"],
- getLayers: _layers_js__WEBPACK_IMPORTED_MODULE_23__["getLayers"],
- getVisibleLayers: _layers_js__WEBPACK_IMPORTED_MODULE_23__["getVisibleLayers"],
- setActiveLayer: _layers_js__WEBPACK_IMPORTED_MODULE_23__["setActiveLayer"],
- getActiveLayer: _layers_js__WEBPACK_IMPORTED_MODULE_23__["getActiveLayer"],
- purgeLayers: _layers_js__WEBPACK_IMPORTED_MODULE_23__["purgeLayers"],
- setLayerImage: _layers_js__WEBPACK_IMPORTED_MODULE_23__["setLayerImage"],
- fitToWindow: _fitToWindow_js__WEBPACK_IMPORTED_MODULE_24__["default"],
- getDefaultViewportForImage: _getDefaultViewportForImage_js__WEBPACK_IMPORTED_MODULE_25__["default"],
- getImage: _getImage_js__WEBPACK_IMPORTED_MODULE_26__["default"],
- getPixels: _getPixels_js__WEBPACK_IMPORTED_MODULE_27__["default"],
- getStoredPixels: _getStoredPixels_js__WEBPACK_IMPORTED_MODULE_28__["default"],
- getViewport: _getViewport_js__WEBPACK_IMPORTED_MODULE_29__["default"],
- loadImage: _imageLoader_js__WEBPACK_IMPORTED_MODULE_30__["loadImage"],
- loadAndCacheImage: _imageLoader_js__WEBPACK_IMPORTED_MODULE_30__["loadAndCacheImage"],
- registerImageLoader: _imageLoader_js__WEBPACK_IMPORTED_MODULE_30__["registerImageLoader"],
- registerUnknownImageLoader: _imageLoader_js__WEBPACK_IMPORTED_MODULE_30__["registerUnknownImageLoader"],
- invalidate: _invalidate_js__WEBPACK_IMPORTED_MODULE_31__["default"],
- invalidateImageId: _invalidateImageId_js__WEBPACK_IMPORTED_MODULE_32__["default"],
- pageToPixel: _pageToPixel_js__WEBPACK_IMPORTED_MODULE_33__["default"],
- pixelToCanvas: _pixelToCanvas_js__WEBPACK_IMPORTED_MODULE_34__["default"],
- reset: _reset_js__WEBPACK_IMPORTED_MODULE_35__["default"],
- resize: _resize_js__WEBPACK_IMPORTED_MODULE_36__["default"],
- setToPixelCoordinateSystem: _setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_37__["default"],
- setViewport: _setViewport_js__WEBPACK_IMPORTED_MODULE_38__["default"],
- updateImage: _updateImage_js__WEBPACK_IMPORTED_MODULE_39__["default"],
- pixelDataToFalseColorData: _pixelDataToFalseColorData_js__WEBPACK_IMPORTED_MODULE_40__["default"],
- rendering: _rendering_index_js__WEBPACK_IMPORTED_MODULE_41__["default"],
- imageCache: _imageCache_js__WEBPACK_IMPORTED_MODULE_42__["default"],
- metaData: _metaData_js__WEBPACK_IMPORTED_MODULE_43__["default"],
- webGL: _webgl_index_js__WEBPACK_IMPORTED_MODULE_44__["default"],
- colors: _colors_index_js__WEBPACK_IMPORTED_MODULE_45__["default"],
- convertImageToFalseColorImage: _falseColorMapping_js__WEBPACK_IMPORTED_MODULE_46__["convertImageToFalseColorImage"],
- convertToFalseColorImage: _falseColorMapping_js__WEBPACK_IMPORTED_MODULE_46__["convertToFalseColorImage"],
- restoreImage: _falseColorMapping_js__WEBPACK_IMPORTED_MODULE_46__["restoreImage"],
- EVENTS: _events_js__WEBPACK_IMPORTED_MODULE_47__["default"],
- events: _events_js__WEBPACK_IMPORTED_MODULE_47__["events"],
- triggerEvent: _triggerEvent_js__WEBPACK_IMPORTED_MODULE_48__["default"]
-};
-
-/* harmony default export */ __webpack_exports__["default"] = (cornerstone);
-
-/***/ }),
-
-/***/ "./internal/calculateTransform.js":
-/*!****************************************!*\
- !*** ./internal/calculateTransform.js ***!
- \****************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _transform_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./transform.js */ "./internal/transform.js");
-
-/**
- * Calculate the transform for a Cornerstone enabled element
- *
- * @param {EnabledElement} enabledElement The Cornerstone Enabled Element
- * @param {Number} [scale] The viewport scale
- * @return {Transform} The current transform
- * @memberof Internal
- */
-
-/* harmony default export */ __webpack_exports__["default"] = (function (enabledElement, scale) {
- var transform = new _transform_js__WEBPACK_IMPORTED_MODULE_0__["Transform"](); // Move to center of canvas
-
- transform.translate(enabledElement.canvas.width / 2, enabledElement.canvas.height / 2); // Apply the rotation before scaling for non square pixels
-
- var angle = enabledElement.viewport.rotation;
-
- if (angle !== 0) {
- transform.rotate(angle * Math.PI / 180);
- } // Apply the scale
-
-
- var widthScale = enabledElement.viewport.scale;
- var heightScale = enabledElement.viewport.scale;
- var width = enabledElement.viewport.displayedArea.brhc.x - (enabledElement.viewport.displayedArea.tlhc.x - 1);
- var height = enabledElement.viewport.displayedArea.brhc.y - (enabledElement.viewport.displayedArea.tlhc.y - 1);
-
- if (enabledElement.viewport.displayedArea.presentationSizeMode === 'NONE') {
- if (enabledElement.image.rowPixelSpacing < enabledElement.image.columnPixelSpacing) {
- widthScale *= enabledElement.image.columnPixelSpacing / enabledElement.image.rowPixelSpacing;
- } else if (enabledElement.image.columnPixelSpacing < enabledElement.image.rowPixelSpacing) {
- heightScale *= enabledElement.image.rowPixelSpacing / enabledElement.image.columnPixelSpacing;
- }
- } else {
- // These should be good for "TRUE SIZE" and "MAGNIFY"
- widthScale = enabledElement.viewport.displayedArea.columnPixelSpacing;
- heightScale = enabledElement.viewport.displayedArea.rowPixelSpacing;
-
- if (enabledElement.viewport.displayedArea.presentationSizeMode === 'SCALE TO FIT') {
- // Fit TRUE IMAGE image (width/height) to window
- var verticalScale = enabledElement.canvas.height / (height * heightScale);
- var horizontalScale = enabledElement.canvas.width / (width * widthScale); // Apply new scale
-
- widthScale = heightScale = Math.min(horizontalScale, verticalScale);
-
- if (enabledElement.viewport.displayedArea.rowPixelSpacing < enabledElement.viewport.displayedArea.columnPixelSpacing) {
- widthScale *= enabledElement.viewport.displayedArea.columnPixelSpacing / enabledElement.viewport.displayedArea.rowPixelSpacing;
- } else if (enabledElement.viewport.displayedArea.columnPixelSpacing < enabledElement.viewport.displayedArea.rowPixelSpacing) {
- heightScale *= enabledElement.viewport.displayedArea.rowPixelSpacing / enabledElement.viewport.displayedArea.columnPixelSpacing;
- }
- }
- }
-
- transform.scale(widthScale, heightScale); // Unrotate to so we can translate unrotated
-
- if (angle !== 0) {
- transform.rotate(-angle * Math.PI / 180);
- } // Apply the pan offset
-
-
- transform.translate(enabledElement.viewport.translation.x, enabledElement.viewport.translation.y); // Rotate again so we can apply general scale
-
- if (angle !== 0) {
- transform.rotate(angle * Math.PI / 180);
- }
-
- if (scale !== undefined) {
- // Apply the font scale
- transform.scale(scale, scale);
- } // Apply Flip if required
-
-
- if (enabledElement.viewport.hflip) {
- transform.scale(-1, 1);
- }
-
- if (enabledElement.viewport.vflip) {
- transform.scale(1, -1);
- } // Move back from center of image
-
-
- transform.translate(-width / 2, -height / 2);
- return transform;
-});
-
-/***/ }),
-
-/***/ "./internal/computeAutoVoi.js":
-/*!************************************!*\
- !*** ./internal/computeAutoVoi.js ***!
- \************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return computeAutoVoi; });
-/**
- * Computes the VOI to display all the pixels if no VOI LUT data (Window Width/Window Center or voiLUT) exists on the viewport object.
- *
- * @param {Viewport} viewport - Object containing the viewport properties
- * @param {Object} image An Image loaded by a Cornerstone Image Loader
- * @returns {void}
- * @memberof Internal
- */
-function computeAutoVoi(viewport, image) {
- if (hasVoi(viewport)) {
- return;
- }
-
- var maxVoi = image.maxPixelValue * image.slope + image.intercept;
- var minVoi = image.minPixelValue * image.slope + image.intercept;
- var ww = maxVoi - minVoi;
- var wc = (maxVoi + minVoi) / 2;
-
- if (viewport.voi === undefined) {
- viewport.voi = {
- windowWidth: ww,
- windowCenter: wc
- };
- } else {
- viewport.voi.windowWidth = ww;
- viewport.voi.windowCenter = wc;
- }
-}
-/**
- * Check if viewport has voi LUT data
- * @param {any} viewport The viewport to check for voi LUT data
- * @returns {Boolean} true viewport has LUT data (Window Width/Window Center or voiLUT). Otherwise, false.
- * @memberof Internal
- */
-
-function hasVoi(viewport) {
- var hasLut = viewport.voiLUT && viewport.voiLUT.lut && viewport.voiLUT.lut.length > 0;
- return hasLut || viewport.voi.windowWidth !== undefined && viewport.voi.windowCenter !== undefined;
-}
-
-/***/ }),
-
-/***/ "./internal/drawCompositeImage.js":
-/*!****************************************!*\
- !*** ./internal/drawCompositeImage.js ***!
- \****************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _layers_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../layers.js */ "./layers.js");
-/* harmony import */ var _rendering_renderGrayscaleImage_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../rendering/renderGrayscaleImage.js */ "./rendering/renderGrayscaleImage.js");
-/* harmony import */ var _rendering_renderColorImage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../rendering/renderColorImage.js */ "./rendering/renderColorImage.js");
-/* harmony import */ var _rendering_renderPseudoColorImage_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../rendering/renderPseudoColorImage.js */ "./rendering/renderPseudoColorImage.js");
-/* harmony import */ var _rendering_renderLabelMapImage_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../rendering/renderLabelMapImage.js */ "./rendering/renderLabelMapImage.js");
-/* harmony import */ var _setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../setToPixelCoordinateSystem.js */ "./setToPixelCoordinateSystem.js");
-
-
-
-
-
-
-
-function getViewportRatio(baseLayer, targetLayer) {
- if (!baseLayer.syncProps) {
- updateLayerSyncProps(baseLayer);
- }
-
- if (!targetLayer.syncProps) {
- updateLayerSyncProps(targetLayer);
- }
-
- return targetLayer.syncProps.originalScale / baseLayer.syncProps.originalScale;
-}
-
-function updateLayerSyncProps(layer) {
- var syncProps = layer.syncProps || {}; // This is used to keep each of the layers' viewports in sync with the active layer
-
- syncProps.originalScale = layer.viewport.scale;
- layer.syncProps = syncProps;
-} // Sync all viewports based on active layer's viewport
-
-
-function syncViewports(layers, activeLayer) {
- // If we intend to keep the viewport's scale, translation and rotation in sync,
- // loop through the layers
- layers.forEach(function (layer) {
- // Don't do anything to the active layer
- // Don't do anything if this layer has no viewport
- if (layer === activeLayer || !layer.viewport || !activeLayer.viewport) {
- return;
- }
-
- if (!layer.syncProps) {
- updateLayerSyncProps(layer);
- }
-
- var viewportRatio = getViewportRatio(activeLayer, layer); // Update the layer's translation and scale to keep them in sync with the first image
- // based on the ratios between the images
-
- layer.viewport.scale = activeLayer.viewport.scale * viewportRatio;
- layer.viewport.rotation = activeLayer.viewport.rotation;
- layer.viewport.translation = {
- x: activeLayer.viewport.translation.x / viewportRatio,
- y: activeLayer.viewport.translation.y / viewportRatio
- };
- layer.viewport.hflip = activeLayer.viewport.hflip;
- layer.viewport.vflip = activeLayer.viewport.vflip;
- });
-}
-/**
- * Internal function to render all layers for a Cornerstone enabled element
- *
- * @param {CanvasRenderingContext2D} context Canvas context to draw upon
- * @param {EnabledElementLayer[]} layers The array of all layers for this enabled element
- * @param {Boolean} invalidated A boolean whether or not this image has been invalidated and must be redrawn
- * @returns {void}
- * @memberof Internal
- */
-
-
-function renderLayers(context, layers, invalidated) {
- // Loop through each layer and draw it to the canvas
- layers.forEach(function (layer, index) {
- if (!layer.image) {
- return;
- }
-
- context.save(); // Set the layer's canvas to the pixel coordinate system
-
- layer.canvas = context.canvas;
- Object(_setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_5__["default"])(layer, context); // Render into the layer's canvas
-
- var colormap = layer.viewport.colormap || layer.options.colormap;
- var labelmap = layer.viewport.labelmap;
- var isInvalid = layer.invalid || invalidated;
-
- if (colormap && colormap !== '' && labelmap === true) {
- Object(_rendering_renderLabelMapImage_js__WEBPACK_IMPORTED_MODULE_4__["addLabelMapLayer"])(layer, isInvalid);
- } else if (colormap && colormap !== '') {
- Object(_rendering_renderPseudoColorImage_js__WEBPACK_IMPORTED_MODULE_3__["addPseudoColorLayer"])(layer, isInvalid);
- } else if (layer.image.color === true) {
- Object(_rendering_renderColorImage_js__WEBPACK_IMPORTED_MODULE_2__["addColorLayer"])(layer, isInvalid);
- } else {
- // If this is the base layer, use the alpha channel for rendering of the grayscale image
- var useAlphaChannel = index === 0;
- Object(_rendering_renderGrayscaleImage_js__WEBPACK_IMPORTED_MODULE_1__["addGrayscaleLayer"])(layer, isInvalid, useAlphaChannel);
- } // Apply any global opacity settings that have been defined for this layer
-
-
- if (layer.options && layer.options.opacity) {
- context.globalAlpha = layer.options.opacity;
- } else {
- context.globalAlpha = 1;
- }
-
- if (layer.options && layer.options.fillStyle) {
- context.fillStyle = layer.options.fillStyle;
- } // Set the pixelReplication property before drawing from the layer into the
- // composite canvas
-
-
- context.imageSmoothingEnabled = !layer.viewport.pixelReplication;
- context.mozImageSmoothingEnabled = context.imageSmoothingEnabled; // Draw from the current layer's canvas onto the enabled element's canvas
-
- var sx = layer.viewport.displayedArea.tlhc.x - 1;
- var sy = layer.viewport.displayedArea.tlhc.y - 1;
- var width = layer.viewport.displayedArea.brhc.x - sx;
- var height = layer.viewport.displayedArea.brhc.y - sy;
- context.drawImage(layer.canvas, sx, sy, width, height, 0, 0, width, height);
- context.restore();
- layer.invalid = false;
- });
-}
-/**
- * Internal API function to draw a composite image to a given enabled element
- *
- * @param {EnabledElement} enabledElement An enabled element to draw into
- * @param {Boolean} invalidated - true if pixel data has been invalidated and cached rendering should not be used
- * @returns {void}
- */
-
-
-/* harmony default export */ __webpack_exports__["default"] = (function (enabledElement, invalidated) {
- var element = enabledElement.element;
- var allLayers = Object(_layers_js__WEBPACK_IMPORTED_MODULE_0__["getLayers"])(element);
- var activeLayer = Object(_layers_js__WEBPACK_IMPORTED_MODULE_0__["getActiveLayer"])(element);
- var visibleLayers = Object(_layers_js__WEBPACK_IMPORTED_MODULE_0__["getVisibleLayers"])(element);
- var resynced = !enabledElement.lastSyncViewportsState && enabledElement.syncViewports; // This state will help us to determine if the user has re-synced the
- // layers allowing us to make a new copy of the viewports
-
- enabledElement.lastSyncViewportsState = enabledElement.syncViewports; // Stores a copy of all viewports if the user has just synced them then we can use the
- // copies to calculate anything later (ratio, translation offset, rotation offset, etc)
-
- if (resynced) {
- allLayers.forEach(function (layer) {
- if (layer.viewport) {
- updateLayerSyncProps(layer);
- }
- });
- } // Sync all viewports in case it's activated
-
-
- if (enabledElement.syncViewports === true) {
- syncViewports(visibleLayers, activeLayer);
- } // Get the enabled element's canvas so we can draw to it
-
-
- var context = enabledElement.canvas.getContext('2d');
- context.setTransform(1, 0, 0, 1, 0, 0); // Clear the canvas
-
- context.fillStyle = 'black';
- context.fillRect(0, 0, enabledElement.canvas.width, enabledElement.canvas.height); // Render all visible layers
-
- renderLayers(context, visibleLayers, invalidated);
-});
-
-/***/ }),
-
-/***/ "./internal/drawImage.js":
-/*!*******************************!*\
- !*** ./internal/drawImage.js ***!
- \*******************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/**
- * Internal API function to draw an image to a given enabled element
- *
- * @param {EnabledElement} enabledElement The Cornerstone Enabled Element to redraw
- * @param {Boolean} [invalidated = false] - true if pixel data has been invalidated and cached rendering should not be used
- * @returns {void}
- * @memberof Internal
- */
-/* harmony default export */ __webpack_exports__["default"] = (function (enabledElement) {
- var invalidated = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
- enabledElement.needsRedraw = true;
-
- if (invalidated) {
- enabledElement.invalid = true;
- }
-});
-
-/***/ }),
-
-/***/ "./internal/drawImageSync.js":
-/*!***********************************!*\
- !*** ./internal/drawImageSync.js ***!
- \***********************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _now_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./now.js */ "./internal/now.js");
-/* harmony import */ var _drawCompositeImage_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./drawCompositeImage.js */ "./internal/drawCompositeImage.js");
-/* harmony import */ var _rendering_renderColorImage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../rendering/renderColorImage.js */ "./rendering/renderColorImage.js");
-/* harmony import */ var _rendering_renderGrayscaleImage_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../rendering/renderGrayscaleImage.js */ "./rendering/renderGrayscaleImage.js");
-/* harmony import */ var _rendering_renderPseudoColorImage_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../rendering/renderPseudoColorImage.js */ "./rendering/renderPseudoColorImage.js");
-/* harmony import */ var _rendering_renderLabelMapImage_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../rendering/renderLabelMapImage.js */ "./rendering/renderLabelMapImage.js");
-/* harmony import */ var _triggerEvent_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../triggerEvent.js */ "./triggerEvent.js");
-/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../events.js */ "./events.js");
-
-
-
-
-
-
-
-
-/**
- * Draw an image to a given enabled element synchronously
- *
- * @param {EnabledElement} enabledElement An enabled element to draw into
- * @param {Boolean} invalidated - true if pixel data has been invalidated and cached rendering should not be used
- * @returns {void}
- * @memberof Internal
- */
-
-/* harmony default export */ __webpack_exports__["default"] = (function (enabledElement, invalidated) {
- var image = enabledElement.image;
- var element = enabledElement.element;
- var layers = enabledElement.layers || []; // Check if enabledElement can be redrawn
-
- if (!enabledElement.canvas || !(enabledElement.image || layers.length)) {
- return;
- } // Start measuring the time needed to draw the image/layers
-
-
- var start = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])();
- image.stats = {
- lastGetPixelDataTime: -1.0,
- lastStoredPixelDataToCanvasImageDataTime: -1.0,
- lastPutImageDataTime: -1.0,
- lastRenderTime: -1.0,
- lastLutGenerateTime: -1.0
- };
-
- if (layers && layers.length) {
- Object(_drawCompositeImage_js__WEBPACK_IMPORTED_MODULE_1__["default"])(enabledElement, invalidated);
- } else if (image) {
- var render = image.render;
-
- if (!render) {
- if (enabledElement.viewport.colormap && enabledElement.viewport.colormap !== '' && enabledElement.image.labelmap === true) {
- render = _rendering_renderLabelMapImage_js__WEBPACK_IMPORTED_MODULE_5__["renderLabelMapImage"];
- } else if (enabledElement.viewport.colormap && enabledElement.viewport.colormap !== '') {
- render = _rendering_renderPseudoColorImage_js__WEBPACK_IMPORTED_MODULE_4__["renderPseudoColorImage"];
- } else if (image.color) {
- render = _rendering_renderColorImage_js__WEBPACK_IMPORTED_MODULE_2__["renderColorImage"];
- } else {
- render = _rendering_renderGrayscaleImage_js__WEBPACK_IMPORTED_MODULE_3__["renderGrayscaleImage"];
- }
- }
-
- render(enabledElement, invalidated);
- } // Calculate how long it took to draw the image/layers
-
-
- var renderTimeInMs = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])() - start;
- var eventData = {
- viewport: enabledElement.viewport,
- element: element,
- image: image,
- enabledElement: enabledElement,
- canvasContext: enabledElement.canvas.getContext('2d'),
- renderTimeInMs: renderTimeInMs
- };
- image.stats.lastRenderTime = renderTimeInMs;
- enabledElement.invalid = false;
- enabledElement.needsRedraw = false;
- Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_6__["default"])(element, _events_js__WEBPACK_IMPORTED_MODULE_7__["default"].IMAGE_RENDERED, eventData);
-});
-
-/***/ }),
-
-/***/ "./internal/generateColorLut.js":
-/*!**************************************!*\
- !*** ./internal/generateColorLut.js ***!
- \**************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _getVOILut_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getVOILut.js */ "./internal/getVOILut.js");
-
-/**
- * Creates a LUT used while rendering to convert stored pixel values to
- * display pixels
- *
- * @param {Image} image A Cornerstone Image Object
- * @param {Number} windowWidth The Window Width
- * @param {Number} windowCenter The Window Center
- * @param {Boolean} invert A boolean describing whether or not the image has been inverted
- * @param {Array} [voiLUT] A Volume of Interest Lookup Table
- *
- * @returns {Uint8ClampedArray} A lookup table to apply to the image
- * @memberof Internal
- */
-
-/* harmony default export */ __webpack_exports__["default"] = (function (image, windowWidth, windowCenter, invert, voiLUT) {
- var maxPixelValue = image.maxPixelValue;
- var minPixelValue = image.minPixelValue;
- var offset = Math.min(minPixelValue, 0);
-
- if (image.cachedLut === undefined) {
- var length = maxPixelValue - offset + 1;
- image.cachedLut = {};
- image.cachedLut.lutArray = new Uint8ClampedArray(length);
- }
-
- var lut = image.cachedLut.lutArray;
- var vlutfn = Object(_getVOILut_js__WEBPACK_IMPORTED_MODULE_0__["default"])(windowWidth, windowCenter, voiLUT);
-
- if (invert === true) {
- for (var storedValue = minPixelValue; storedValue <= maxPixelValue; storedValue++) {
- lut[storedValue + -offset] = 255 - vlutfn(storedValue);
- }
- } else {
- for (var _storedValue = minPixelValue; _storedValue <= maxPixelValue; _storedValue++) {
- lut[_storedValue + -offset] = vlutfn(_storedValue);
- }
- }
-
- return lut;
-});
-
-/***/ }),
-
-/***/ "./internal/generateLut.js":
-/*!*********************************!*\
- !*** ./internal/generateLut.js ***!
- \*********************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _getModalityLUT_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getModalityLUT.js */ "./internal/getModalityLUT.js");
-/* harmony import */ var _getVOILut_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getVOILut.js */ "./internal/getVOILut.js");
-
-
-/**
- * Creates a LUT used while rendering to convert stored pixel values to
- * display pixels
- *
- * @param {Image} image A Cornerstone Image Object
- * @param {Number} windowWidth The Window Width
- * @param {Number} windowCenter The Window Center
- * @param {Boolean} invert A boolean describing whether or not the image has been inverted
- * @param {Array} [modalityLUT] A modality Lookup Table
- * @param {Array} [voiLUT] A Volume of Interest Lookup Table
- *
- * @returns {Uint8ClampedArray} A lookup table to apply to the image
- * @memberof Internal
- */
-
-/* harmony default export */ __webpack_exports__["default"] = (function (image, windowWidth, windowCenter, invert, modalityLUT, voiLUT) {
- var maxPixelValue = image.maxPixelValue;
- var minPixelValue = image.minPixelValue;
- var offset = Math.min(minPixelValue, 0);
-
- if (image.cachedLut === undefined) {
- var length = maxPixelValue - offset + 1;
- image.cachedLut = {};
- image.cachedLut.lutArray = new Uint8ClampedArray(length);
- }
-
- var lut = image.cachedLut.lutArray;
- var mlutfn = Object(_getModalityLUT_js__WEBPACK_IMPORTED_MODULE_0__["default"])(image.slope, image.intercept, modalityLUT);
- var vlutfn = Object(_getVOILut_js__WEBPACK_IMPORTED_MODULE_1__["default"])(windowWidth, windowCenter, voiLUT);
-
- if (invert === true) {
- for (var storedValue = minPixelValue; storedValue <= maxPixelValue; storedValue++) {
- lut[storedValue + -offset] = 255 - vlutfn(mlutfn(storedValue));
- }
- } else {
- for (var _storedValue = minPixelValue; _storedValue <= maxPixelValue; _storedValue++) {
- lut[_storedValue + -offset] = vlutfn(mlutfn(_storedValue));
- }
- }
-
- return lut;
-});
-
-/***/ }),
-
-/***/ "./internal/getCanvas.js":
-/*!*******************************!*\
- !*** ./internal/getCanvas.js ***!
- \*******************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return getCanvas; });
-var CANVAS_CSS_CLASS = 'cornerstone-canvas';
-/**
- * Create a canvas and append it to the element
- *
- * @param {HTMLElement} element An HTML Element
- * @return {HTMLElement} canvas A Canvas DOM element
- */
-
-function createCanvas(element) {
- var canvas = document.createElement('canvas');
- canvas.style.display = 'block';
- canvas.classList.add(CANVAS_CSS_CLASS);
- element.appendChild(canvas);
- return canvas;
-}
-/**
- * Create a canvas or returns the one that already exists for a given element
- *
- * @param {HTMLElement} element An HTML Element
- * @return {HTMLElement} canvas A Canvas DOM element
- */
-
-
-function getCanvas(element) {
- var selector = "canvas.".concat(CANVAS_CSS_CLASS);
- return element.querySelector(selector) || createCanvas(element);
-}
-
-/***/ }),
-
-/***/ "./internal/getDefaultViewport.js":
-/*!****************************************!*\
- !*** ./internal/getDefaultViewport.js ***!
- \****************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _getImageFitScale_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getImageFitScale.js */ "./internal/getImageFitScale.js");
-
-/**
- * Creates a new viewport object containing default values
- *
- * @returns {Viewport} viewport object
- * @memberof Internal
- */
-
-function createViewport() {
- var displayedArea = createDefaultDisplayedArea();
- return {
- scale: 1,
- translation: {
- x: 0,
- y: 0
- },
- voi: {
- windowWidth: undefined,
- windowCenter: undefined
- },
- invert: false,
- pixelReplication: false,
- rotation: 0,
- hflip: false,
- vflip: false,
- modalityLUT: undefined,
- voiLUT: undefined,
- colormap: undefined,
- labelmap: false,
- displayedArea: displayedArea
- };
-}
-/**
- * Creates the default displayed area.
- * C.10.4 Displayed Area Module: This Module describes Attributes required to define a Specified Displayed Area space.
- *
- * @returns {tlhc: {x,y}, brhc: {x, y},rowPixelSpacing: Number, columnPixelSpacing: Number, presentationSizeMode: Number} displayedArea object
- * @memberof Internal
- */
-
-
-function createDefaultDisplayedArea() {
- return {
- // Top Left Hand Corner
- tlhc: {
- x: 1,
- y: 1
- },
- // Bottom Right Hand Corner
- brhc: {
- x: 1,
- y: 1
- },
- rowPixelSpacing: 1,
- columnPixelSpacing: 1,
- presentationSizeMode: 'NONE'
- };
-}
-/**
- * Creates a new viewport object containing default values for the image and canvas
- *
- * @param {HTMLElement} canvas A Canvas DOM element
- * @param {Image} image A Cornerstone Image Object
- * @returns {Viewport} viewport object
- * @memberof Internal
- */
-
-
-/* harmony default export */ __webpack_exports__["default"] = (function (canvas, image) {
- if (canvas === undefined) {
- throw new Error('getDefaultViewport: parameter canvas must not be undefined');
- }
-
- if (image === undefined) {
- return createViewport();
- } // Fit image to window
-
-
- var scale = Object(_getImageFitScale_js__WEBPACK_IMPORTED_MODULE_0__["default"])(canvas, image, 0).scaleFactor;
- return {
- scale: scale,
- translation: {
- x: 0,
- y: 0
- },
- voi: {
- windowWidth: image.windowWidth,
- windowCenter: image.windowCenter
- },
- invert: image.invert,
- pixelReplication: false,
- rotation: 0,
- hflip: false,
- vflip: false,
- modalityLUT: image.modalityLUT,
- voiLUT: image.voiLUT,
- colormap: image.colormap,
- labelmap: Boolean(image.labelmap),
- displayedArea: {
- tlhc: {
- x: 1,
- y: 1
- },
- brhc: {
- x: image.columns,
- y: image.rows
- },
- rowPixelSpacing: image.rowPixelSpacing === undefined ? 1 : image.rowPixelSpacing,
- columnPixelSpacing: image.columnPixelSpacing === undefined ? 1 : image.columnPixelSpacing,
- presentationSizeMode: 'NONE'
- }
- };
-});
-
-/***/ }),
-
-/***/ "./internal/getImageFitScale.js":
-/*!**************************************!*\
- !*** ./internal/getImageFitScale.js ***!
- \**************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _validator_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./validator.js */ "./internal/validator.js");
-/* harmony import */ var _getImageSize_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getImageSize.js */ "./internal/getImageSize.js");
-
-
-/**
- * Calculates the horizontal, vertical and minimum scale factor for an image
- @param {{width, height}} windowSize The window size where the image is displayed. This can be any HTML element or structure with a width, height fields (e.g. canvas).
- * @param {any} image The cornerstone image object
- * @param {Number} rotation Optional. The rotation angle of the image.
- * @return {{horizontalScale, verticalScale, scaleFactor}} The calculated horizontal, vertical and minimum scale factor
- * @memberof Internal
- */
-
-/* harmony default export */ __webpack_exports__["default"] = (function (windowSize, image) {
- var rotation = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
- Object(_validator_js__WEBPACK_IMPORTED_MODULE_0__["validateParameterUndefinedOrNull"])(windowSize, 'getImageScale: parameter windowSize must not be undefined');
- Object(_validator_js__WEBPACK_IMPORTED_MODULE_0__["validateParameterUndefinedOrNull"])(image, 'getImageScale: parameter image must not be undefined');
- var imageSize = Object(_getImageSize_js__WEBPACK_IMPORTED_MODULE_1__["default"])(image, rotation);
- var rowPixelSpacing = image.rowPixelSpacing || 1;
- var columnPixelSpacing = image.columnPixelSpacing || 1;
- var verticalRatio = 1;
- var horizontalRatio = 1;
-
- if (rowPixelSpacing < columnPixelSpacing) {
- horizontalRatio = columnPixelSpacing / rowPixelSpacing;
- } else {
- // even if they are equal we want to calculate this ratio (the ration might be 0.5)
- verticalRatio = rowPixelSpacing / columnPixelSpacing;
- }
-
- var verticalScale = windowSize.height / imageSize.height / verticalRatio;
- var horizontalScale = windowSize.width / imageSize.width / horizontalRatio; // Fit image to window
-
- return {
- verticalScale: verticalScale,
- horizontalScale: horizontalScale,
- scaleFactor: Math.min(horizontalScale, verticalScale)
- };
-});
-
-/***/ }),
-
-/***/ "./internal/getImageSize.js":
-/*!**********************************!*\
- !*** ./internal/getImageSize.js ***!
- \**********************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _validator_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./validator.js */ "./internal/validator.js");
-
-/**
- * Check if the angle is rotated
- * @param {Number} rotation the rotation angle
- * @returns {Boolean} true if the angle is rotated; Otherwise, false.
- * @memberof Internal
- */
-
-function isRotated(rotation) {
- return !(rotation === null || rotation === undefined || rotation === 0 || rotation === 180);
-}
-/**
- * Retrieves the current image dimensions given an enabled element
- *
- * @param {any} image The Cornerstone image.
- * @param {Number} rotation Optional. The rotation angle of the image.
- * @return {{width:Number, height:Number}} The Image dimensions
- * @memberof Internal
- */
-
-
-/* harmony default export */ __webpack_exports__["default"] = (function (image) {
- var rotation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
- Object(_validator_js__WEBPACK_IMPORTED_MODULE_0__["validateParameterUndefinedOrNull"])(image, 'getImageSize: parameter image must not be undefined');
- Object(_validator_js__WEBPACK_IMPORTED_MODULE_0__["validateParameterUndefinedOrNull"])(image.width, 'getImageSize: parameter image must have width');
- Object(_validator_js__WEBPACK_IMPORTED_MODULE_0__["validateParameterUndefinedOrNull"])(image.height, 'getImageSize: parameter image must have height');
-
- if (isRotated(rotation)) {
- return {
- height: image.width,
- width: image.height
- };
- }
-
- return {
- width: image.width,
- height: image.height
- };
-});
-
-/***/ }),
-
-/***/ "./internal/getModalityLUT.js":
-/*!************************************!*\
- !*** ./internal/getModalityLUT.js ***!
- \************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/**
- * Generates a linear modality transformation function
- *
- * See DICOM PS3.3 C.11.1 Modality LUT Module
- *
- * http://dicom.nema.org/medical/Dicom/current/output/chtml/part03/sect_C.11.html
- *
- * @param {Number} slope m in the equation specified by Rescale Intercept (0028,1052).
- * @param {Number} intercept The value b in relationship between stored values (SV) and the output units specified in Rescale Type (0028,1054).
-
- Output units = m*SV + b.
- * @return {function(*): *} A linear modality LUT function. Given a stored pixel it returns the modality pixel value
- * @memberof Internal
- */
-function generateLinearModalityLUT(slope, intercept) {
- return function (storedPixelValue) {
- return storedPixelValue * slope + intercept;
- };
-}
-
-function generateNonLinearModalityLUT(modalityLUT) {
- var minValue = modalityLUT.lut[0];
- var maxValue = modalityLUT.lut[modalityLUT.lut.length - 1];
- var maxValueMapped = modalityLUT.firstValueMapped + modalityLUT.lut.length;
- return function (storedPixelValue) {
- if (storedPixelValue < modalityLUT.firstValueMapped) {
- return minValue;
- } else if (storedPixelValue >= maxValueMapped) {
- return maxValue;
- }
-
- return modalityLUT.lut[storedPixelValue];
- };
-}
-/**
- * Get the appropriate Modality LUT for the current situation.
- *
- * @param {Number} [slope] m in the equation specified by Rescale Intercept (0028,1052).
- * @param {Number} [intercept] The value b in relationship between stored values (SV) and the output units specified in Rescale Type (0028,1054).
- * @param {Function} [modalityLUT] A modality LUT function. Given a stored pixel it returns the modality pixel value.
- *
- * @return {function(*): *} A modality LUT function. Given a stored pixel it returns the modality pixel value.
- * @memberof Internal
- */
-
-
-/* harmony default export */ __webpack_exports__["default"] = (function (slope, intercept, modalityLUT) {
- if (modalityLUT) {
- return generateNonLinearModalityLUT(modalityLUT);
- }
-
- return generateLinearModalityLUT(slope, intercept);
-});
-
-/***/ }),
-
-/***/ "./internal/getTransform.js":
-/*!**********************************!*\
- !*** ./internal/getTransform.js ***!
- \**********************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _calculateTransform_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./calculateTransform.js */ "./internal/calculateTransform.js");
-
-/* harmony default export */ __webpack_exports__["default"] = (function (enabledElement) {
- // For now we will calculate it every time it is requested.
- // In the future, we may want to cache it in the enabled element to speed things up.
- return Object(_calculateTransform_js__WEBPACK_IMPORTED_MODULE_0__["default"])(enabledElement);
-});
-
-/***/ }),
-
-/***/ "./internal/getVOILut.js":
-/*!*******************************!*\
- !*** ./internal/getVOILut.js ***!
- \*******************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }
-
-function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); }
-
-function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); }
-
-function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }
-
-/* eslint no-bitwise: 0 */
-
-/**
- * Volume of Interest Lookup Table Function
- *
- * @typedef {Function} VOILUTFunction
- *
- * @param {Number} modalityLutValue
- * @returns {Number} transformed value
- * @memberof Objects
- */
-
-/**
- * @module: VOILUT
- */
-
-/**
- *
- * @param {Number} windowWidth Window Width
- * @param {Number} windowCenter Window Center
- * @returns {VOILUTFunction} VOI LUT mapping function
- * @memberof VOILUT
- */
-function generateLinearVOILUT(windowWidth, windowCenter) {
- return function (modalityLutValue) {
- return ((modalityLutValue - windowCenter) / windowWidth + 0.5) * 255.0;
- };
-}
-/**
- * Generate a non-linear volume of interest lookup table
- *
- * @param {LUT} voiLUT Volume of Interest Lookup Table Object
- *
- * @returns {VOILUTFunction} VOI LUT mapping function
- * @memberof VOILUT
- */
-
-
-function generateNonLinearVOILUT(voiLUT) {
- // We don't trust the voiLUT.numBitsPerEntry, mainly thanks to Agfa!
- var bitsPerEntry = Math.max.apply(Math, _toConsumableArray(voiLUT.lut)).toString(2).length;
- var shift = bitsPerEntry - 8;
- var minValue = voiLUT.lut[0] >> shift;
- var maxValue = voiLUT.lut[voiLUT.lut.length - 1] >> shift;
- var maxValueMapped = voiLUT.firstValueMapped + voiLUT.lut.length - 1;
- return function (modalityLutValue) {
- if (modalityLutValue < voiLUT.firstValueMapped) {
- return minValue;
- } else if (modalityLutValue >= maxValueMapped) {
- return maxValue;
- }
-
- return voiLUT.lut[modalityLutValue - voiLUT.firstValueMapped] >> shift;
- };
-}
-/**
- * Retrieve a VOI LUT mapping function given the current windowing settings
- * and the VOI LUT for the image
- *
- * @param {Number} windowWidth Window Width
- * @param {Number} windowCenter Window Center
- * @param {LUT} [voiLUT] Volume of Interest Lookup Table Object
- *
- * @return {VOILUTFunction} VOI LUT mapping function
- * @memberof VOILUT
- */
-
-
-/* harmony default export */ __webpack_exports__["default"] = (function (windowWidth, windowCenter, voiLUT) {
- if (voiLUT) {
- return generateNonLinearVOILUT(voiLUT);
- }
-
- return generateLinearVOILUT(windowWidth, windowCenter);
-});
-
-/***/ }),
-
-/***/ "./internal/guid.js":
-/*!**************************!*\
- !*** ./internal/guid.js ***!
- \**************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-function s4() {
- return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);
-}
-/**
- * Generate a unique identifier
- *
- * @return {string} A unique identifier
- * @memberof Internal
- */
-
-
-/* harmony default export */ __webpack_exports__["default"] = (function () {
- return "".concat(s4() + s4(), "-").concat(s4(), "-").concat(s4(), "-").concat(s4(), "-").concat(s4()).concat(s4()).concat(s4());
-});
-
-/***/ }),
-
-/***/ "./internal/index.js":
-/*!***************************!*\
- !*** ./internal/index.js ***!
- \***************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _drawImage_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./drawImage.js */ "./internal/drawImage.js");
-/* harmony import */ var _generateLut_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./generateLut.js */ "./internal/generateLut.js");
-/* harmony import */ var _getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getDefaultViewport.js */ "./internal/getDefaultViewport.js");
-/* harmony import */ var _requestAnimationFrame_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./requestAnimationFrame.js */ "./internal/requestAnimationFrame.js");
-/* harmony import */ var _storedPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./storedPixelDataToCanvasImageData.js */ "./internal/storedPixelDataToCanvasImageData.js");
-/* harmony import */ var _storedPixelDataToCanvasImageDataRGBA_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./storedPixelDataToCanvasImageDataRGBA.js */ "./internal/storedPixelDataToCanvasImageDataRGBA.js");
-/* harmony import */ var _storedColorPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./storedColorPixelDataToCanvasImageData.js */ "./internal/storedColorPixelDataToCanvasImageData.js");
-/* harmony import */ var _storedPixelDataToCanvasImageDataColorLUT_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./storedPixelDataToCanvasImageDataColorLUT.js */ "./internal/storedPixelDataToCanvasImageDataColorLUT.js");
-/* harmony import */ var _storedPixelDataToCanvasImageDataPseudocolorLUT_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./storedPixelDataToCanvasImageDataPseudocolorLUT.js */ "./internal/storedPixelDataToCanvasImageDataPseudocolorLUT.js");
-/* harmony import */ var _getTransform_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./getTransform.js */ "./internal/getTransform.js");
-/* harmony import */ var _calculateTransform_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./calculateTransform.js */ "./internal/calculateTransform.js");
-/* harmony import */ var _transform_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./transform.js */ "./internal/transform.js");
-
-
-
-
-
-
-
-
-
-
-
-
-/**
- * @module Internal
- */
-
-/* harmony default export */ __webpack_exports__["default"] = ({
- drawImage: _drawImage_js__WEBPACK_IMPORTED_MODULE_0__["default"],
- generateLut: _generateLut_js__WEBPACK_IMPORTED_MODULE_1__["default"],
- getDefaultViewport: _getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_2__["default"],
- requestAnimationFrame: _requestAnimationFrame_js__WEBPACK_IMPORTED_MODULE_3__["default"],
- storedPixelDataToCanvasImageData: _storedPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_4__["default"],
- storedPixelDataToCanvasImageDataRGBA: _storedPixelDataToCanvasImageDataRGBA_js__WEBPACK_IMPORTED_MODULE_5__["default"],
- storedPixelDataToCanvasImageDataColorLUT: _storedPixelDataToCanvasImageDataColorLUT_js__WEBPACK_IMPORTED_MODULE_7__["default"],
- storedPixelDataToCanvasImageDataPseudocolorLUT: _storedPixelDataToCanvasImageDataPseudocolorLUT_js__WEBPACK_IMPORTED_MODULE_8__["default"],
- storedColorPixelDataToCanvasImageData: _storedColorPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_6__["default"],
- getTransform: _getTransform_js__WEBPACK_IMPORTED_MODULE_9__["default"],
- calculateTransform: _calculateTransform_js__WEBPACK_IMPORTED_MODULE_10__["default"],
- Transform: _transform_js__WEBPACK_IMPORTED_MODULE_11__["Transform"]
-});
-
-/***/ }),
-
-/***/ "./internal/now.js":
-/*!*************************!*\
- !*** ./internal/now.js ***!
- \*************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/**
- * @module Polyfills
- */
-
-/**
- * Use the performance.now() method if possible, and if not, use Date.now()
- *
- * @return {number} Time elapsed since the time origin
- * @memberof Polyfills
- */
-/* harmony default export */ __webpack_exports__["default"] = (function () {
- if (window.performance) {
- return performance.now();
- }
-
- return Date.now();
-});
-
-/***/ }),
-
-/***/ "./internal/requestAnimationFrame.js":
-/*!*******************************************!*\
- !*** ./internal/requestAnimationFrame.js ***!
- \*******************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-function requestFrame(callback) {
- window.setTimeout(callback, 1000 / 60);
-}
-/**
- * Polyfills requestAnimationFrame for older browsers.
- *
- * @param {Function} callback A parameter specifying a function to call when it's time to update your animation for the next repaint. The callback has one single argument, a DOMHighResTimeStamp, which indicates the current time (the time returned from performance.now() ) for when requestAnimationFrame starts to fire callbacks.
- *
- * @return {Number} A long integer value, the request id, that uniquely identifies the entry in the callback list. This is a non-zero value, but you may not make any other assumptions about its value. You can pass this value to window.cancelAnimationFrame() to cancel the refresh callback request.
- * @memberof Polyfills
- */
-
-
-/* harmony default export */ __webpack_exports__["default"] = (function (callback) {
- return window.requestAnimationFrame(callback) || window.webkitRequestAnimationFrame(callback) || window.mozRequestAnimationFrame(callback) || window.oRequestAnimationFrame(callback) || window.msRequestAnimationFrame(callback) || requestFrame(callback);
-});
-
-/***/ }),
-
-/***/ "./internal/storedColorPixelDataToCanvasImageData.js":
-/*!***********************************************************!*\
- !*** ./internal/storedColorPixelDataToCanvasImageData.js ***!
- \***********************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _now_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./now.js */ "./internal/now.js");
-
-/**
- * Converts stored color pixel values to display pixel values using a LUT.
- *
- * Note: Skips alpha value for any input image pixel data.
- *
- * @param {Image} image A Cornerstone Image Object
- * @param {Array} lut Lookup table array
- * @param {Uint8ClampedArray} canvasImageDataData canvasImageData.data buffer filled with white pixels
- *
- * @returns {void}
- * @memberof Internal
- */
-
-/* harmony default export */ __webpack_exports__["default"] = (function (image, lut, canvasImageDataData) {
- var start = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])();
- var pixelData = image.getPixelData();
- image.stats.lastGetPixelDataTime = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])() - start;
- var minPixelValue = image.minPixelValue;
- var canvasImageDataIndex = 0;
- var storedPixelDataIndex = 0;
- var numPixels = pixelData.length; // NOTE: As of Nov 2014, most javascript engines have lower performance when indexing negative indexes.
- // We have a special code path for this case that improves performance. Thanks to @jpambrun for this enhancement
-
- start = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])();
-
- if (minPixelValue < 0) {
- while (storedPixelDataIndex < numPixels) {
- canvasImageDataData[canvasImageDataIndex++] = lut[pixelData[storedPixelDataIndex++] + -minPixelValue]; // Red
-
- canvasImageDataData[canvasImageDataIndex++] = lut[pixelData[storedPixelDataIndex++] + -minPixelValue]; // Green
-
- canvasImageDataData[canvasImageDataIndex] = lut[pixelData[storedPixelDataIndex] + -minPixelValue]; // Blue
-
- storedPixelDataIndex += 2;
- canvasImageDataIndex += 2;
- }
- } else {
- while (storedPixelDataIndex < numPixels) {
- canvasImageDataData[canvasImageDataIndex++] = lut[pixelData[storedPixelDataIndex++]]; // Red
-
- canvasImageDataData[canvasImageDataIndex++] = lut[pixelData[storedPixelDataIndex++]]; // Green
-
- canvasImageDataData[canvasImageDataIndex] = lut[pixelData[storedPixelDataIndex]]; // Blue
-
- storedPixelDataIndex += 2;
- canvasImageDataIndex += 2;
- }
- }
-
- image.stats.lastStoredPixelDataToCanvasImageDataTime = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])() - start;
-});
-
-/***/ }),
-
-/***/ "./internal/storedPixelDataToCanvasImageData.js":
-/*!******************************************************!*\
- !*** ./internal/storedPixelDataToCanvasImageData.js ***!
- \******************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _now_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./now.js */ "./internal/now.js");
-
-/**
- * This function transforms stored pixel values into a canvas image data buffer
- * by using a LUT. This is the most performance sensitive code in cornerstone and
- * we use a special trick to make this go as fast as possible. Specifically we
- * use the alpha channel only to control the luminance rather than the red, green and
- * blue channels which makes it over 3x faster. The canvasImageDataData buffer needs
- * to be previously filled with white pixels.
- *
- * NOTE: Attribution would be appreciated if you use this technique!
- *
- * @param {Image} image A Cornerstone Image Object
- * @param {Array} lut Lookup table array
- * @param {Uint8ClampedArray} canvasImageDataData canvasImageData.data buffer filled with white pixels
- *
- * @returns {void}
- * @memberof Internal
- */
-
-/* harmony default export */ __webpack_exports__["default"] = (function (image, lut, canvasImageDataData) {
- var start = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])();
- var pixelData = image.getPixelData();
- image.stats.lastGetPixelDataTime = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])() - start;
- var numPixels = pixelData.length;
- var minPixelValue = image.minPixelValue;
- var canvasImageDataIndex = 3;
- var storedPixelDataIndex = 0; // NOTE: As of Nov 2014, most javascript engines have lower performance when indexing negative indexes.
- // We have a special code path for this case that improves performance. Thanks to @jpambrun for this enhancement
- // Added two paths (Int16Array, Uint16Array) to avoid polymorphic deoptimization in chrome.
-
- start = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])();
-
- if (pixelData instanceof Int16Array) {
- if (minPixelValue < 0) {
- while (storedPixelDataIndex < numPixels) {
- canvasImageDataData[canvasImageDataIndex] = lut[pixelData[storedPixelDataIndex++] + -minPixelValue]; // Alpha
-
- canvasImageDataIndex += 4;
- }
- } else {
- while (storedPixelDataIndex < numPixels) {
- canvasImageDataData[canvasImageDataIndex] = lut[pixelData[storedPixelDataIndex++]]; // Alpha
-
- canvasImageDataIndex += 4;
- }
- }
- } else if (pixelData instanceof Uint16Array) {
- while (storedPixelDataIndex < numPixels) {
- canvasImageDataData[canvasImageDataIndex] = lut[pixelData[storedPixelDataIndex++]]; // Alpha
-
- canvasImageDataIndex += 4;
- }
- } else if (minPixelValue < 0) {
- while (storedPixelDataIndex < numPixels) {
- canvasImageDataData[canvasImageDataIndex] = lut[pixelData[storedPixelDataIndex++] + -minPixelValue]; // Alpha
-
- canvasImageDataIndex += 4;
- }
- } else {
- while (storedPixelDataIndex < numPixels) {
- canvasImageDataData[canvasImageDataIndex] = lut[pixelData[storedPixelDataIndex++]]; // Alpha
-
- canvasImageDataIndex += 4;
- }
- }
-
- image.stats.lastStoredPixelDataToCanvasImageDataTime = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])() - start;
-});
-
-/***/ }),
-
-/***/ "./internal/storedPixelDataToCanvasImageDataColorLUT.js":
-/*!**************************************************************!*\
- !*** ./internal/storedPixelDataToCanvasImageDataColorLUT.js ***!
- \**************************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _colors_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors/index.js */ "./colors/index.js");
-/* harmony import */ var _now_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./now.js */ "./internal/now.js");
-
-
-/**
- *
- * @param {Image} image A Cornerstone Image Object
- * @param {LookupTable|Array} colorLut Lookup table array
- * @param {Uint8ClampedArray} canvasImageDataData canvasImageData.data buffer filled with white pixels
- *
- * @returns {void}
- * @memberof Internal
- */
-
-function storedPixelDataToCanvasImageDataColorLUT(image, colorLut, canvasImageDataData) {
- var start = Object(_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])();
- var pixelData = image.getPixelData();
- image.stats.lastGetPixelDataTime = Object(_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])() - start;
- var numPixels = pixelData.length;
- var minPixelValue = image.minPixelValue;
- var canvasImageDataIndex = 0;
- var storedPixelDataIndex = 0;
- var rgba;
- var clut;
- start = Object(_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])();
-
- if (colorLut instanceof _colors_index_js__WEBPACK_IMPORTED_MODULE_0__["default"].LookupTable) {
- clut = colorLut.Table;
- } else {
- clut = colorLut;
- }
-
- if (minPixelValue < 0) {
- while (storedPixelDataIndex < numPixels) {
- rgba = clut[pixelData[storedPixelDataIndex++] + -minPixelValue];
- canvasImageDataData[canvasImageDataIndex++] = rgba[0];
- canvasImageDataData[canvasImageDataIndex++] = rgba[1];
- canvasImageDataData[canvasImageDataIndex++] = rgba[2];
- canvasImageDataData[canvasImageDataIndex++] = rgba[3];
- }
- } else {
- while (storedPixelDataIndex < numPixels) {
- rgba = clut[pixelData[storedPixelDataIndex++]];
- canvasImageDataData[canvasImageDataIndex++] = rgba[0];
- canvasImageDataData[canvasImageDataIndex++] = rgba[1];
- canvasImageDataData[canvasImageDataIndex++] = rgba[2];
- canvasImageDataData[canvasImageDataIndex++] = rgba[3];
- }
- }
-
- image.stats.lastStoredPixelDataToCanvasImageDataTime = Object(_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])() - start;
-}
-
-/* harmony default export */ __webpack_exports__["default"] = (storedPixelDataToCanvasImageDataColorLUT);
-
-/***/ }),
-
-/***/ "./internal/storedPixelDataToCanvasImageDataPseudocolorLUT.js":
-/*!********************************************************************!*\
- !*** ./internal/storedPixelDataToCanvasImageDataPseudocolorLUT.js ***!
- \********************************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _colors_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors/index.js */ "./colors/index.js");
-/* harmony import */ var _now_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./now.js */ "./internal/now.js");
-
-
-/**
- *
- * @param {Image} image A Cornerstone Image Object
- * @param {Array} grayscaleLut Lookup table array
- * @param {LookupTable|Array} colorLut Lookup table array
- * @param {Uint8ClampedArray} canvasImageDataData canvasImageData.data buffer filled with white pixels
- *
- * @returns {void}
- * @memberof Internal
- */
-
-function storedPixelDataToCanvasImageDataPseudocolorLUT(image, grayscaleLut, colorLut, canvasImageDataData) {
- var start = Object(_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])();
- var pixelData = image.getPixelData();
- image.stats.lastGetPixelDataTime = Object(_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])() - start;
- var numPixels = pixelData.length;
- var minPixelValue = image.minPixelValue;
- var canvasImageDataIndex = 0;
- var storedPixelDataIndex = 0;
- var grayscale;
- var rgba;
- var clut;
- start = Object(_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])();
-
- if (colorLut instanceof _colors_index_js__WEBPACK_IMPORTED_MODULE_0__["default"].LookupTable) {
- clut = colorLut.Table;
- } else {
- clut = colorLut;
- }
-
- if (minPixelValue < 0) {
- while (storedPixelDataIndex < numPixels) {
- grayscale = grayscaleLut[pixelData[storedPixelDataIndex++] + -minPixelValue];
- rgba = clut[grayscale];
- canvasImageDataData[canvasImageDataIndex++] = rgba[0];
- canvasImageDataData[canvasImageDataIndex++] = rgba[1];
- canvasImageDataData[canvasImageDataIndex++] = rgba[2];
- canvasImageDataData[canvasImageDataIndex++] = rgba[3];
- }
- } else {
- while (storedPixelDataIndex < numPixels) {
- grayscale = grayscaleLut[pixelData[storedPixelDataIndex++]];
- rgba = clut[grayscale];
- canvasImageDataData[canvasImageDataIndex++] = rgba[0];
- canvasImageDataData[canvasImageDataIndex++] = rgba[1];
- canvasImageDataData[canvasImageDataIndex++] = rgba[2];
- canvasImageDataData[canvasImageDataIndex++] = rgba[3];
- }
- }
-
- image.stats.lastStoredPixelDataToCanvasImageDataTime = Object(_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])() - start;
-}
-
-/* harmony default export */ __webpack_exports__["default"] = (storedPixelDataToCanvasImageDataPseudocolorLUT);
-
-/***/ }),
-
-/***/ "./internal/storedPixelDataToCanvasImageDataRGBA.js":
-/*!**********************************************************!*\
- !*** ./internal/storedPixelDataToCanvasImageDataRGBA.js ***!
- \**********************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _now_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./now.js */ "./internal/now.js");
-
-/**
- * This function transforms stored pixel values into a canvas image data buffer
- * by using a LUT.
- *
- * @param {Image} image A Cornerstone Image Object
- * @param {Array} lut Lookup table array
- * @param {Uint8ClampedArray} canvasImageDataData canvasImageData.data buffer filled with white pixels
- *
- * @returns {void}
- * @memberof Internal
- */
-
-/* harmony default export */ __webpack_exports__["default"] = (function (image, lut, canvasImageDataData) {
- var start = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])();
- var pixelData = image.getPixelData();
- image.stats.lastGetPixelDataTime = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])() - start;
- var numPixels = pixelData.length;
- var minPixelValue = image.minPixelValue;
- var canvasImageDataIndex = 0;
- var storedPixelDataIndex = 0;
- var pixelValue; // NOTE: As of Nov 2014, most javascript engines have lower performance when indexing negative indexes.
- // We have a special code path for this case that improves performance. Thanks to @jpambrun for this enhancement
- // Added two paths (Int16Array, Uint16Array) to avoid polymorphic deoptimization in chrome.
-
- start = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])();
-
- if (pixelData instanceof Int16Array) {
- if (minPixelValue < 0) {
- while (storedPixelDataIndex < numPixels) {
- pixelValue = lut[pixelData[storedPixelDataIndex++] + -minPixelValue];
- canvasImageDataData[canvasImageDataIndex++] = pixelValue;
- canvasImageDataData[canvasImageDataIndex++] = pixelValue;
- canvasImageDataData[canvasImageDataIndex++] = pixelValue;
- canvasImageDataData[canvasImageDataIndex++] = 255; // Alpha
- }
- } else {
- while (storedPixelDataIndex < numPixels) {
- pixelValue = lut[pixelData[storedPixelDataIndex++]];
- canvasImageDataData[canvasImageDataIndex++] = pixelValue;
- canvasImageDataData[canvasImageDataIndex++] = pixelValue;
- canvasImageDataData[canvasImageDataIndex++] = pixelValue;
- canvasImageDataData[canvasImageDataIndex++] = 255; // Alpha
- }
- }
- } else if (pixelData instanceof Uint16Array) {
- while (storedPixelDataIndex < numPixels) {
- pixelValue = lut[pixelData[storedPixelDataIndex++]];
- canvasImageDataData[canvasImageDataIndex++] = pixelValue;
- canvasImageDataData[canvasImageDataIndex++] = pixelValue;
- canvasImageDataData[canvasImageDataIndex++] = pixelValue;
- canvasImageDataData[canvasImageDataIndex++] = 255; // Alpha
- }
- } else if (minPixelValue < 0) {
- while (storedPixelDataIndex < numPixels) {
- pixelValue = lut[pixelData[storedPixelDataIndex++] + -minPixelValue];
- canvasImageDataData[canvasImageDataIndex++] = pixelValue;
- canvasImageDataData[canvasImageDataIndex++] = pixelValue;
- canvasImageDataData[canvasImageDataIndex++] = pixelValue;
- canvasImageDataData[canvasImageDataIndex++] = 255; // Alpha
- }
- } else {
- while (storedPixelDataIndex < numPixels) {
- pixelValue = lut[pixelData[storedPixelDataIndex++]];
- canvasImageDataData[canvasImageDataIndex++] = pixelValue;
- canvasImageDataData[canvasImageDataIndex++] = pixelValue;
- canvasImageDataData[canvasImageDataIndex++] = pixelValue;
- canvasImageDataData[canvasImageDataIndex++] = 255; // Alpha
- }
- }
-
- image.stats.lastStoredPixelDataToCanvasImageDataTime = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])() - start;
-});
-
-/***/ }),
-
-/***/ "./internal/storedRGBAPixelDataToCanvasImageData.js":
-/*!**********************************************************!*\
- !*** ./internal/storedRGBAPixelDataToCanvasImageData.js ***!
- \**********************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _now_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./now.js */ "./internal/now.js");
-
-/**
- * Converts stored RGBA color pixel values to display pixel values using a LUT.
- *
- * @param {Image} image A Cornerstone Image Object
- * @param {Array} lut Lookup table array
- * @param {Uint8ClampedArray} canvasImageDataData canvasImageData.data buffer filled with white pixels
- *
- * @returns {void}
- * @memberof Internal
- */
-
-/* harmony default export */ __webpack_exports__["default"] = (function (image, lut, canvasImageDataData) {
- var start = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])();
- var pixelData = image.getPixelData();
- image.stats.lastGetPixelDataTime = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])() - start;
- var minPixelValue = image.minPixelValue;
- var canvasImageDataIndex = 0;
- var storedPixelDataIndex = 0;
- var numPixels = pixelData.length; // NOTE: As of Nov 2014, most javascript engines have lower performance when indexing negative indexes.
- // We have a special code path for this case that improves performance. Thanks to @jpambrun for this enhancement
-
- start = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])();
-
- if (minPixelValue < 0) {
- while (storedPixelDataIndex < numPixels) {
- canvasImageDataData[canvasImageDataIndex++] = lut[pixelData[storedPixelDataIndex++] + -minPixelValue]; // Red
-
- canvasImageDataData[canvasImageDataIndex++] = lut[pixelData[storedPixelDataIndex++] + -minPixelValue]; // Green
-
- canvasImageDataData[canvasImageDataIndex++] = lut[pixelData[storedPixelDataIndex++] + -minPixelValue]; // Blue
-
- canvasImageDataData[canvasImageDataIndex++] = pixelData[storedPixelDataIndex++];
- }
- } else {
- while (storedPixelDataIndex < numPixels) {
- canvasImageDataData[canvasImageDataIndex++] = lut[pixelData[storedPixelDataIndex++]]; // Red
-
- canvasImageDataData[canvasImageDataIndex++] = lut[pixelData[storedPixelDataIndex++]]; // Green
-
- canvasImageDataData[canvasImageDataIndex++] = lut[pixelData[storedPixelDataIndex++]]; // Blue
-
- canvasImageDataData[canvasImageDataIndex++] = pixelData[storedPixelDataIndex++];
- }
- }
-
- image.stats.lastStoredPixelDataToCanvasImageDataTime = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])() - start;
-});
-
-/***/ }),
-
-/***/ "./internal/transform.js":
-/*!*******************************!*\
- !*** ./internal/transform.js ***!
- \*******************************/
-/*! exports provided: Transform */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Transform", function() { return Transform; });
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
-
-function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
-
-// By Simon Sarris
-// Www.simonsarris.com
-// Sarris@acm.org
-//
-// Free to use and distribute at will
-// So long as you are nice to people, etc
-// Simple class for keeping track of the current transformation matrix
-// For instance:
-// Var t = new Transform();
-// T.rotate(5);
-// Var m = t.m;
-// Ctx.setTransform(m[0], m[1], m[2], m[3], m[4], m[5]);
-// Is equivalent to:
-// Ctx.rotate(5);
-// But now you can retrieve it :)
-// Remember that this does not account for any CSS transforms applied to the canvas
-var Transform =
-/*#__PURE__*/
-function () {
- function Transform() {
- _classCallCheck(this, Transform);
-
- this.reset();
- }
-
- _createClass(Transform, [{
- key: "reset",
- value: function reset() {
- this.m = [1, 0, 0, 1, 0, 0];
- }
- }, {
- key: "clone",
- value: function clone() {
- var transform = new Transform();
- transform.m[0] = this.m[0];
- transform.m[1] = this.m[1];
- transform.m[2] = this.m[2];
- transform.m[3] = this.m[3];
- transform.m[4] = this.m[4];
- transform.m[5] = this.m[5];
- return transform;
- }
- }, {
- key: "multiply",
- value: function multiply(matrix) {
- var m11 = this.m[0] * matrix.m[0] + this.m[2] * matrix.m[1];
- var m12 = this.m[1] * matrix.m[0] + this.m[3] * matrix.m[1];
- var m21 = this.m[0] * matrix.m[2] + this.m[2] * matrix.m[3];
- var m22 = this.m[1] * matrix.m[2] + this.m[3] * matrix.m[3];
- var dx = this.m[0] * matrix.m[4] + this.m[2] * matrix.m[5] + this.m[4];
- var dy = this.m[1] * matrix.m[4] + this.m[3] * matrix.m[5] + this.m[5];
- this.m[0] = m11;
- this.m[1] = m12;
- this.m[2] = m21;
- this.m[3] = m22;
- this.m[4] = dx;
- this.m[5] = dy;
- }
- }, {
- key: "invert",
- value: function invert() {
- var d = 1 / (this.m[0] * this.m[3] - this.m[1] * this.m[2]);
- var m0 = this.m[3] * d;
- var m1 = -this.m[1] * d;
- var m2 = -this.m[2] * d;
- var m3 = this.m[0] * d;
- var m4 = d * (this.m[2] * this.m[5] - this.m[3] * this.m[4]);
- var m5 = d * (this.m[1] * this.m[4] - this.m[0] * this.m[5]);
- this.m[0] = m0;
- this.m[1] = m1;
- this.m[2] = m2;
- this.m[3] = m3;
- this.m[4] = m4;
- this.m[5] = m5;
- }
- }, {
- key: "rotate",
- value: function rotate(rad) {
- var c = Math.cos(rad);
- var s = Math.sin(rad);
- var m11 = this.m[0] * c + this.m[2] * s;
- var m12 = this.m[1] * c + this.m[3] * s;
- var m21 = this.m[0] * -s + this.m[2] * c;
- var m22 = this.m[1] * -s + this.m[3] * c;
- this.m[0] = m11;
- this.m[1] = m12;
- this.m[2] = m21;
- this.m[3] = m22;
- }
- }, {
- key: "translate",
- value: function translate(x, y) {
- this.m[4] += this.m[0] * x + this.m[2] * y;
- this.m[5] += this.m[1] * x + this.m[3] * y;
- }
- }, {
- key: "scale",
- value: function scale(sx, sy) {
- this.m[0] *= sx;
- this.m[1] *= sx;
- this.m[2] *= sy;
- this.m[3] *= sy;
- }
- }, {
- key: "transformPoint",
- value: function transformPoint(px, py) {
- var x = px;
- var y = py;
- px = x * this.m[0] + y * this.m[2] + this.m[4];
- py = x * this.m[1] + y * this.m[3] + this.m[5];
- return {
- x: px,
- y: py
- };
- }
- }]);
-
- return Transform;
-}();
-
-/***/ }),
-
-/***/ "./internal/tryEnableWebgl.js":
-/*!************************************!*\
- !*** ./internal/tryEnableWebgl.js ***!
- \************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _webgl_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../webgl/index.js */ "./webgl/index.js");
-
-/**
- * Checks if webGL is supported and initializes the rendering engine.
- * @param {any} options Options to check if webgl rendering is requested (e.g. enable webgl by passing {renderer: 'webgl'})
- * @returns {Boolean} true if webgl rendering has been successfully initialized. Otherwise, false.
- */
-
-/* harmony default export */ __webpack_exports__["default"] = (function (options) {
- if (_webgl_index_js__WEBPACK_IMPORTED_MODULE_0__["default"].renderer.isWebGLAvailable()) {
- // If WebGL is available on the device, initialize the renderer
- // And return the renderCanvas from the WebGL rendering path
- _webgl_index_js__WEBPACK_IMPORTED_MODULE_0__["default"].renderer.initRenderer();
- options.renderer = 'webgl';
- return true;
- } // If WebGL is not available on this device, we will fall back
- // To using the Canvas renderer
-
-
- console.error('WebGL not available, falling back to Canvas renderer');
- delete options.renderer;
- return false;
-});
-
-/***/ }),
-
-/***/ "./internal/validator.js":
-/*!*******************************!*\
- !*** ./internal/validator.js ***!
- \*******************************/
-/*! exports provided: validateParameterUndefined, validateParameterUndefinedOrNull */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "validateParameterUndefined", function() { return validateParameterUndefined; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "validateParameterUndefinedOrNull", function() { return validateParameterUndefinedOrNull; });
-/**
- * Check if the supplied parameter is undefined and throws and error
- * @param {any} checkParam the parameter to validate for undefined
- * @param {any} errorMsg the error message to be thrown
- * @returns {void}
- * @memberof internal
- */
-function validateParameterUndefined(checkParam, errorMsg) {
- if (checkParam === undefined) {
- throw new Error(errorMsg);
- }
-}
-/**
- * Check if the supplied parameter is undefined or null and throws and error
- * @param {any} checkParam the parameter to validate for undefined
- * @param {any} errorMsg the error message to be thrown
- * @returns {void}
- * @memberof internal
- */
-
-function validateParameterUndefinedOrNull(checkParam, errorMsg) {
- if (checkParam === undefined || checkParam === null) {
- throw new Error(errorMsg);
- }
-}
-
-/***/ }),
-
-/***/ "./invalidate.js":
-/*!***********************!*\
- !*** ./invalidate.js ***!
- \***********************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js");
-/* harmony import */ var _triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./triggerEvent.js */ "./triggerEvent.js");
-/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./events.js */ "./events.js");
-
-
-
-/**
- * Sets the invalid flag on the enabled element and fire an event
- * @param {HTMLElement} element The DOM element enabled for Cornerstone
- * @returns {void}
- * @memberof Drawing
- */
-
-/* harmony default export */ __webpack_exports__["default"] = (function (element) {
- var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element);
- enabledElement.invalid = true;
- enabledElement.needsRedraw = true;
- var eventData = {
- element: element
- };
- Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element, _events_js__WEBPACK_IMPORTED_MODULE_2__["default"].INVALIDATED, eventData);
-});
-
-/***/ }),
-
-/***/ "./invalidateImageId.js":
-/*!******************************!*\
- !*** ./invalidateImageId.js ***!
- \******************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js");
-/* harmony import */ var _internal_drawImage_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./internal/drawImage.js */ "./internal/drawImage.js");
-
-
-/**
- * Forces the image to be updated/redrawn for the all enabled elements
- * displaying the specified imageId
- *
- * @param {string} imageId The imageId of the Cornerstone Image Object to redraw
- * @returns {void}
- * @memberof Drawing
- */
-
-/* harmony default export */ __webpack_exports__["default"] = (function (imageId) {
- var enabledElements = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElementsByImageId"])(imageId);
- enabledElements.forEach(function (enabledElement) {
- Object(_internal_drawImage_js__WEBPACK_IMPORTED_MODULE_1__["default"])(enabledElement, true);
- });
-});
-
-/***/ }),
-
-/***/ "./layers.js":
-/*!*******************!*\
- !*** ./layers.js ***!
- \*******************/
-/*! exports provided: rescaleImage, addLayer, removeLayer, getLayer, getLayers, getVisibleLayers, setActiveLayer, setLayerImage, getActiveLayer, purgeLayers */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rescaleImage", function() { return rescaleImage; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addLayer", function() { return addLayer; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeLayer", function() { return removeLayer; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLayer", function() { return getLayer; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLayers", function() { return getLayers; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getVisibleLayers", function() { return getVisibleLayers; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setActiveLayer", function() { return setActiveLayer; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setLayerImage", function() { return setLayerImage; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getActiveLayer", function() { return getActiveLayer; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "purgeLayers", function() { return purgeLayers; });
-/* harmony import */ var _internal_guid_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./internal/guid.js */ "./internal/guid.js");
-/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js");
-/* harmony import */ var _internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./internal/getDefaultViewport.js */ "./internal/getDefaultViewport.js");
-/* harmony import */ var _updateImage_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./updateImage.js */ "./updateImage.js");
-/* harmony import */ var _triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./triggerEvent.js */ "./triggerEvent.js");
-/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./events.js */ "./events.js");
-
-
-
-
-
-
-/**
- * @module EnabledElementLayers
- */
-
-/**
- * Helper function to trigger an event on a Cornerstone element with
- * a specific layerId
- *
- * @param {String} eventName The event name (e.g. CornerstoneLayerAdded)
- * @param {EnabledElement} enabledElement The Cornerstone enabled element
- * @param {String} layerId The layer's unique identifier
- * @returns {void}
- * @memberof EnabledElementLayers
- */
-
-function triggerEventForLayer(eventName, enabledElement, layerId) {
- var element = enabledElement.element;
- var eventData = {
- viewport: enabledElement.viewport,
- element: enabledElement.element,
- image: enabledElement.image,
- enabledElement: enabledElement,
- layerId: layerId
- };
- Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__["default"])(element, eventName, eventData);
-}
-/**
- * Rescale the target layer to the base layer based on the
- * relative size of each image and their pixel dimensions.
- *
- * This function will update the Viewport parameters of the
- * target layer to a new scale.
- *
- * @param {EnabledElementLayer} baseLayer The base layer
- * @param {EnabledElementLayer} targetLayer The target layer to rescale
- * @returns {void}
- * @memberof EnabledElementLayers
- */
-
-
-function rescaleImage(baseLayer, targetLayer) {
- if (baseLayer.layerId === targetLayer.layerId) {
- throw new Error('rescaleImage: both arguments represent the same layer');
- }
-
- var baseImage = baseLayer.image;
- var targetImage = targetLayer.image; // Return if these images don't have an imageId (e.g. for dynamic images)
-
- if (!baseImage.imageId || !targetImage.imageId) {
- return;
- } // Column pixel spacing need to be considered when calculating the
- // ratio between the layer added and base layer images
-
-
- var colRelative = targetLayer.viewport.displayedArea.columnPixelSpacing * targetImage.width / (baseLayer.viewport.displayedArea.columnPixelSpacing * baseImage.width);
- var viewportRatio = targetLayer.viewport.scale / baseLayer.viewport.scale * colRelative;
- targetLayer.viewport.scale = baseLayer.viewport.scale * viewportRatio;
-}
-/**
- * Add a layer to a Cornerstone element
- *
- * @param {HTMLElement} element The DOM element enabled for Cornerstone
- * @param {Image} image A Cornerstone Image object to add as a new layer
- * @param {Object} options Options for the layer
- *
- * @returns {String} layerId The new layer's unique identifier
- * @memberof EnabledElementLayers
- */
-
-function addLayer(element, image, options) {
- var layerId = Object(_internal_guid_js__WEBPACK_IMPORTED_MODULE_0__["default"])();
- var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElement"])(element);
- var layers = enabledElement.layers;
- var viewport;
-
- if (image) {
- viewport = Object(_internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_2__["default"])(enabledElement.canvas, image); // Override the defaults if any optional viewport settings
- // have been specified
-
- if (options && options.viewport) {
- viewport = Object.assign(viewport, options.viewport);
- }
- } // Set syncViewports to true by default when a new layer is added
-
-
- if (enabledElement.syncViewports !== false) {
- enabledElement.syncViewports = true;
- }
-
- var newLayer = {
- image: image,
- layerId: layerId,
- viewport: viewport,
- options: options || {},
- renderingTools: {}
- }; // Rescale the new layer based on the base layer to make sure
- // they will have a proportional size (pixel spacing)
-
- if (layers.length && image) {
- rescaleImage(layers[0], newLayer);
- }
-
- layers.push(newLayer);
- triggerEventForLayer(_events_js__WEBPACK_IMPORTED_MODULE_5__["default"].LAYER_ADDED, enabledElement, layerId); // Set the layer as active if it's the first layer added
-
- if (layers.length === 1 && image) {
- setActiveLayer(element, layerId);
- }
-
- return layerId;
-}
-/**
- * Remove a layer from a Cornerstone element given a layer ID
- *
- * @param {HTMLElement} element The DOM element enabled for Cornerstone
- * @param {String} layerId The unique identifier for the layer
- * @returns {void}
- * @memberof EnabledElementLayers
- */
-
-function removeLayer(element, layerId) {
- var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElement"])(element);
- var layers = enabledElement.layers;
- var index = enabledElement.layers.findIndex(function (layer) {
- return layer.layerId === layerId;
- });
-
- if (index !== -1) {
- layers.splice(index, 1); // If the current layer is active, and we have other layers,
- // switch to the first layer that remains in the array
-
- if (layerId === enabledElement.activeLayerId && layers.length) {
- setActiveLayer(element, layers[0].layerId);
- }
-
- triggerEventForLayer(_events_js__WEBPACK_IMPORTED_MODULE_5__["default"].LAYER_REMOVED, enabledElement, layerId);
- }
-}
-/**
- * Retrieve a layer from a Cornerstone element given a layer ID
- *
- * @param {HTMLElement} element The DOM element enabled for Cornerstone
- * @param {String} layerId The unique identifier for the layer
- * @return {EnabledElementLayer} The layer
- * @memberof EnabledElementLayers
- */
-
-function getLayer(element, layerId) {
- var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElement"])(element);
- return enabledElement.layers.find(function (layer) {
- return layer.layerId === layerId;
- });
-}
-/**
- * Retrieve all layers for a Cornerstone element
- *
- * @param {HTMLElement} element The DOM element enabled for Cornerstone
- *
- * @return {EnabledElementLayer[]} An array of layers
- * @memberof EnabledElementLayers
- */
-
-function getLayers(element) {
- var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElement"])(element);
- return enabledElement.layers;
-}
-/**
- * Retrieve all visible layers for a Cornerstone element
- *
- * @param {HTMLElement} element The DOM element enabled for Cornerstone
- *
- * @return {EnabledElementLayer[]} An array of layers
- * @memberof EnabledElementLayers
- */
-
-function getVisibleLayers(element) {
- var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElement"])(element);
- return enabledElement.layers.filter(function (layer) {
- return layer.options && layer.options.visible !== false && layer.options.opacity !== 0;
- });
-}
-/**
- * Set the active layer for a Cornerstone element
- *
- * @param {HTMLElement} element The DOM element enabled for Cornerstone
- * @param {String} layerId The unique identifier for the layer
- * @returns {void}
- * @memberof EnabledElementLayers
- */
-
-function setActiveLayer(element, layerId) {
- var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElement"])(element); // Stop here if this layer is already active
-
- if (enabledElement.activeLayerId === layerId) {
- return;
- }
-
- var index = enabledElement.layers.findIndex(function (layer) {
- return layer.layerId === layerId;
- });
-
- if (index === -1) {
- throw new Error('setActiveLayer: layer not found in layers array');
- }
-
- var layer = enabledElement.layers[index];
-
- if (!layer.image) {
- throw new Error('setActiveLayer: layer with undefined image cannot be set as active.');
- }
-
- enabledElement.activeLayerId = layerId;
- enabledElement.image = layer.image;
- enabledElement.viewport = layer.viewport;
- Object(_updateImage_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element);
- triggerEventForLayer(_events_js__WEBPACK_IMPORTED_MODULE_5__["default"].ACTIVE_LAYER_CHANGED, enabledElement, layerId);
-}
-/**
- * Set a new image for a specific layerId
- *
- * @param {HTMLElement} element The DOM element enabled for Cornerstone
- * @param {Image} image The image to be displayed in this layer
- * @param {String} [layerId] The unique identifier for the layer
- * @returns {void}
- * @memberof EnabledElementLayers
- */
-
-function setLayerImage(element, image, layerId) {
- var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElement"])(element);
- var baseLayer = enabledElement.layers[0];
- var layer;
-
- if (layerId) {
- layer = getLayer(element, layerId);
- } else {
- layer = getActiveLayer(element);
- }
-
- if (!layer) {
- throw new Error('setLayerImage: Layer not found');
- }
-
- layer.image = image;
-
- if (!image) {
- layer.viewport = undefined;
- return;
- }
-
- if (!layer.viewport) {
- var defaultViewport = Object(_internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_2__["default"])(enabledElement.canvas, image); // Override the defaults if any optional viewport settings
- // have been specified
-
- if (layer.options && layer.options.viewport) {
- layer.viewport = Object.assign(defaultViewport, layer.options.viewport);
- }
-
- if (baseLayer.layerId !== layerId) {
- rescaleImage(baseLayer, layer);
- }
- }
-}
-/**
- * Retrieve the currently active layer for a Cornerstone element
- *
- * @param {HTMLElement} element The DOM element enabled for Cornerstone
- * @return {EnabledElementLayer} The currently active layer
- * @memberof EnabledElementLayers
- */
-
-function getActiveLayer(element) {
- var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElement"])(element);
- return enabledElement.layers.find(function (layer) {
- return layer.layerId === enabledElement.activeLayerId;
- });
-}
-/**
- * Purge the layers
- *
- * @param {HTMLElement} element The DOM element enabled for Cornerstone
- *
- * @returns {void}
- */
-
-function purgeLayers(element) {
- var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElement"])(element);
- enabledElement.layers = [];
- delete enabledElement.activeLayerId;
- delete enabledElement.lastSyncViewportsState;
-}
-
-/***/ }),
-
-/***/ "./metaData.js":
-/*!*********************!*\
- !*** ./metaData.js ***!
- \*********************/
-/*! exports provided: addProvider, removeProvider, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addProvider", function() { return addProvider; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeProvider", function() { return removeProvider; });
-// This module defines a way to access various metadata about an imageId. This layer of abstraction exists
-// So metadata can be provided in different ways (e.g. by parsing DICOM P10 or by a WADO-RS document)
-var providers = [];
-/**
- * @module Metadata
- */
-
-/**
- * Adds a metadata provider with the specified priority
- * @param {Function} provider Metadata provider function
- * @param {Number} [priority=0] - 0 is default/normal, > 0 is high, < 0 is low
- *
- * @returns {void}
- * @memberof Metadata
- */
-
-function addProvider(provider) {
- var priority = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
- var i; // Find the right spot to insert this provider based on priority
-
- for (i = 0; i < providers.length; i++) {
- if (providers[i].priority <= priority) {
- break;
- }
- } // Insert the decode task at position i
-
-
- providers.splice(i, 0, {
- priority: priority,
- provider: provider
- });
-}
-/**
- * Removes the specified provider
- *
- * @param {Function} provider Metadata provider function
- *
- * @returns {void}
- * @memberof Metadata
- */
-
-function removeProvider(provider) {
- for (var i = 0; i < providers.length; i++) {
- if (providers[i].provider === provider) {
- providers.splice(i, 1);
- break;
- }
- }
-}
-/**
- * Gets metadata from the registered metadata providers. Will call each one from highest priority to lowest
- * until one responds
- *
- * @param {String} type The type of metadata requested from the metadata store
- * @param {String} imageId The Cornerstone Image Object's imageId
- *
- * @returns {*} The metadata retrieved from the metadata store
- * @memberof Metadata
- */
-
-function getMetaData(type, imageId) {
- // Invoke each provider in priority order until one returns something
- for (var i = 0; i < providers.length; i++) {
- var result = providers[i].provider(type, imageId);
-
- if (result !== undefined) {
- return result;
- }
- }
-}
-
-/* harmony default export */ __webpack_exports__["default"] = ({
- addProvider: addProvider,
- removeProvider: removeProvider,
- get: getMetaData
-});
-
-/***/ }),
-
-/***/ "./pageToPixel.js":
-/*!************************!*\
- !*** ./pageToPixel.js ***!
- \************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js");
-/* harmony import */ var _internal_getTransform_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./internal/getTransform.js */ "./internal/getTransform.js");
-
-
-/**
- * Converts a point in the page coordinate system to the pixel coordinate
- * system
- *
- * @param {HTMLElement} element The Cornerstone element within which the input point lies
- * @param {Number} pageX The x value in the page coordinate system
- * @param {Number} pageY The y value in the page coordinate system
- *
- * @returns {{x: Number, y: Number}} The transformed point in the pixel coordinate system
- */
-
-/* harmony default export */ __webpack_exports__["default"] = (function (element, pageX, pageY) {
- var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element);
-
- if (enabledElement.image === undefined) {
- throw new Error('image has not been loaded yet');
- } // Convert the pageX and pageY to the canvas client coordinates
-
-
- var rect = element.getBoundingClientRect();
- var clientX = pageX - rect.left - window.pageXOffset;
- var clientY = pageY - rect.top - window.pageYOffset;
- var pt = {
- x: clientX,
- y: clientY
- };
- var transform = Object(_internal_getTransform_js__WEBPACK_IMPORTED_MODULE_1__["default"])(enabledElement);
- transform.invert();
- return transform.transformPoint(pt.x, pt.y);
-});
-
-/***/ }),
-
-/***/ "./pixelDataToFalseColorData.js":
-/*!**************************************!*\
- !*** ./pixelDataToFalseColorData.js ***!
- \**************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return pixelDataToFalseColorData; });
-/* harmony import */ var _colors_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./colors/index.js */ "./colors/index.js");
-
-/**
- * Converts the image pixel data into a false color data
- *
- * @param {Image} image A Cornerstone Image Object
- * @param {Object} lookupTable A lookup table Object
- *
- * @returns {void}
- * @deprecated This function is superseded by the ability to set the Viewport parameters
- * to include colormaps.
- */
-
-function pixelDataToFalseColorData(image, lookupTable) {
- if (image.color && !image.falseColor) {
- throw new Error('Color transforms are not implemented yet');
- }
-
- var minPixelValue = image.minPixelValue;
- var canvasImageDataIndex = 0;
- var storedPixelDataIndex = 0;
- var numPixels = image.width * image.height;
- var origPixelData = image.origPixelData || image.getPixelData();
- var storedColorPixelData = new Uint8Array(numPixels * 4);
- var sp;
- var mapped;
- image.color = true;
- image.falseColor = true;
- image.origPixelData = origPixelData;
-
- if (lookupTable instanceof _colors_index_js__WEBPACK_IMPORTED_MODULE_0__["default"].LookupTable) {
- lookupTable.build();
-
- while (storedPixelDataIndex < numPixels) {
- sp = origPixelData[storedPixelDataIndex++];
- mapped = lookupTable.mapValue(sp);
- storedColorPixelData[canvasImageDataIndex++] = mapped[0];
- storedColorPixelData[canvasImageDataIndex++] = mapped[1];
- storedColorPixelData[canvasImageDataIndex++] = mapped[2];
- storedColorPixelData[canvasImageDataIndex++] = mapped[3];
- }
- } else if (minPixelValue < 0) {
- while (storedPixelDataIndex < numPixels) {
- sp = origPixelData[storedPixelDataIndex++];
- storedColorPixelData[canvasImageDataIndex++] = lookupTable[sp + -minPixelValue][0]; // Red
-
- storedColorPixelData[canvasImageDataIndex++] = lookupTable[sp + -minPixelValue][1]; // Green
-
- storedColorPixelData[canvasImageDataIndex++] = lookupTable[sp + -minPixelValue][2]; // Blue
-
- storedColorPixelData[canvasImageDataIndex++] = lookupTable[sp + -minPixelValue][3]; // Alpha
- }
- } else {
- while (storedPixelDataIndex < numPixels) {
- sp = origPixelData[storedPixelDataIndex++];
- storedColorPixelData[canvasImageDataIndex++] = lookupTable[sp][0]; // Red
-
- storedColorPixelData[canvasImageDataIndex++] = lookupTable[sp][1]; // Green
-
- storedColorPixelData[canvasImageDataIndex++] = lookupTable[sp][2]; // Blue
-
- storedColorPixelData[canvasImageDataIndex++] = lookupTable[sp][3]; // Alpha
- }
- }
-
- image.rgba = true;
- image.cachedLut = undefined;
- image.render = undefined;
- image.slope = 1;
- image.intercept = 0;
- image.minPixelValue = 0;
- image.maxPixelValue = 255;
- image.windowWidth = 255;
- image.windowCenter = 128;
-
- image.getPixelData = function () {
- return storedColorPixelData;
- };
-}
-
-/***/ }),
-
-/***/ "./pixelToCanvas.js":
-/*!**************************!*\
- !*** ./pixelToCanvas.js ***!
- \**************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js");
-/* harmony import */ var _internal_getTransform_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./internal/getTransform.js */ "./internal/getTransform.js");
-
-
-/**
- * Converts a point in the pixel coordinate system to the canvas coordinate system
- * system. This can be used to render using canvas context without having the weird
- * side effects that come from scaling and non square pixels
- *
- * @param {HTMLElement} element An HTML Element enabled for Cornerstone
- * @param {{x: Number, y: Number}} pt The transformed point in the pixel coordinate system
- *
- * @returns {{x: Number, y: Number}} The input point in the canvas coordinate system
- * @memberof PixelCoordinateSystem
- */
-
-/* harmony default export */ __webpack_exports__["default"] = (function (element, pt) {
- var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element);
- var transform = Object(_internal_getTransform_js__WEBPACK_IMPORTED_MODULE_1__["default"])(enabledElement);
- return transform.transformPoint(pt.x, pt.y);
-});
-
-/***/ }),
-
-/***/ "./rendering/doesImageNeedToBeRendered.js":
-/*!************************************************!*\
- !*** ./rendering/doesImageNeedToBeRendered.js ***!
- \************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/**
- * Determine whether or not an Enabled Element needs to be re-rendered.
- *
- * If the imageId has changed, or if any of the last rendered viewport
- * parameters have changed, this function will return true.
- *
- * @param {EnabledElement} enabledElement An Enabled Element
- * @param {Image} image An Image
- * @return {boolean} Whether or not the Enabled Element needs to re-render its image
- * @memberof rendering
- */
-/* harmony default export */ __webpack_exports__["default"] = (function (enabledElement, image) {
- var lastRenderedImageId = enabledElement.renderingTools.lastRenderedImageId;
- var lastRenderedViewport = enabledElement.renderingTools.lastRenderedViewport;
- return image.imageId !== lastRenderedImageId || !lastRenderedViewport || lastRenderedViewport.windowCenter !== enabledElement.viewport.voi.windowCenter || lastRenderedViewport.windowWidth !== enabledElement.viewport.voi.windowWidth || lastRenderedViewport.invert !== enabledElement.viewport.invert || lastRenderedViewport.rotation !== enabledElement.viewport.rotation || lastRenderedViewport.hflip !== enabledElement.viewport.hflip || lastRenderedViewport.vflip !== enabledElement.viewport.vflip || lastRenderedViewport.modalityLUT !== enabledElement.viewport.modalityLUT || lastRenderedViewport.voiLUT !== enabledElement.viewport.voiLUT || lastRenderedViewport.colormap !== enabledElement.viewport.colormap;
-});
-
-/***/ }),
-
-/***/ "./rendering/getLut.js":
-/*!*****************************!*\
- !*** ./rendering/getLut.js ***!
- \*****************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _internal_computeAutoVoi_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../internal/computeAutoVoi.js */ "./internal/computeAutoVoi.js");
-/* harmony import */ var _lutMatches_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lutMatches.js */ "./rendering/lutMatches.js");
-/* harmony import */ var _internal_generateLut_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../internal/generateLut.js */ "./internal/generateLut.js");
-
-
-
-/**
- * Retrieve or generate a LUT Array for an Image and Viewport
- *
- * @param {Image} image An Image Object
- * @param {Viewport} viewport An Viewport Object
- * @param {Boolean} invalidated Whether or not the LUT data has been invalidated
- * (e.g. by a change to the windowWidth, windowCenter, or invert viewport parameters).
- * @return {Uint8ClampedArray} LUT Array
- * @memberof rendering
- */
-
-/* harmony default export */ __webpack_exports__["default"] = (function (image, viewport, invalidated) {
- // If we have a cached lut and it has the right values, return it immediately
- if (image.cachedLut !== undefined && image.cachedLut.windowCenter === viewport.voi.windowCenter && image.cachedLut.windowWidth === viewport.voi.windowWidth && Object(_lutMatches_js__WEBPACK_IMPORTED_MODULE_1__["default"])(image.cachedLut.modalityLUT, viewport.modalityLUT) && Object(_lutMatches_js__WEBPACK_IMPORTED_MODULE_1__["default"])(image.cachedLut.voiLUT, viewport.voiLUT) && image.cachedLut.invert === viewport.invert && invalidated !== true) {
- return image.cachedLut.lutArray;
- }
-
- Object(_internal_computeAutoVoi_js__WEBPACK_IMPORTED_MODULE_0__["default"])(viewport, image); // Lut is invalid or not present, regenerate it and cache it
-
- Object(_internal_generateLut_js__WEBPACK_IMPORTED_MODULE_2__["default"])(image, viewport.voi.windowWidth, viewport.voi.windowCenter, viewport.invert, viewport.modalityLUT, viewport.voiLUT);
- image.cachedLut.windowWidth = viewport.voi.windowWidth;
- image.cachedLut.windowCenter = viewport.voi.windowCenter;
- image.cachedLut.invert = viewport.invert;
- image.cachedLut.voiLUT = viewport.voiLUT;
- image.cachedLut.modalityLUT = viewport.modalityLUT;
- return image.cachedLut.lutArray;
-});
-
-/***/ }),
-
-/***/ "./rendering/index.js":
-/*!****************************!*\
- !*** ./rendering/index.js ***!
- \****************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _renderColorImage_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./renderColorImage.js */ "./rendering/renderColorImage.js");
-/* harmony import */ var _renderGrayscaleImage_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./renderGrayscaleImage.js */ "./rendering/renderGrayscaleImage.js");
-/* harmony import */ var _renderWebImage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./renderWebImage.js */ "./rendering/renderWebImage.js");
-/* harmony import */ var _renderPseudoColorImage_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./renderPseudoColorImage.js */ "./rendering/renderPseudoColorImage.js");
-/* harmony import */ var _renderLabelMapImage_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./renderLabelMapImage.js */ "./rendering/renderLabelMapImage.js");
-/* harmony import */ var _renderToCanvas_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./renderToCanvas.js */ "./rendering/renderToCanvas.js");
-
-
-
-
-
-
-/**
- * @module rendering
- */
-
-/* harmony default export */ __webpack_exports__["default"] = ({
- colorImage: _renderColorImage_js__WEBPACK_IMPORTED_MODULE_0__["renderColorImage"],
- grayscaleImage: _renderGrayscaleImage_js__WEBPACK_IMPORTED_MODULE_1__["renderGrayscaleImage"],
- webImage: _renderWebImage_js__WEBPACK_IMPORTED_MODULE_2__["renderWebImage"],
- pseudoColorImage: _renderPseudoColorImage_js__WEBPACK_IMPORTED_MODULE_3__["renderPseudoColorImage"],
- labelMapImage: _renderLabelMapImage_js__WEBPACK_IMPORTED_MODULE_4__["renderLabelMapImage"],
- toCanvas: _renderToCanvas_js__WEBPACK_IMPORTED_MODULE_5__["default"]
-});
-
-/***/ }),
-
-/***/ "./rendering/initializeRenderCanvas.js":
-/*!*********************************************!*\
- !*** ./rendering/initializeRenderCanvas.js ***!
- \*********************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/**
- * Sets size and clears canvas
- *
- * @param {Object} enabledElement Cornerstone Enabled Element
- * @param {Object} image Image to be rendered
- * @returns {void}
- * @memberof rendering
- */
-/* harmony default export */ __webpack_exports__["default"] = (function (enabledElement, image) {
- var renderCanvas = enabledElement.renderingTools.renderCanvas; // Resize the canvas
-
- renderCanvas.width = image.width;
- renderCanvas.height = image.height;
- var canvasContext = renderCanvas.getContext('2d'); // NOTE - we need to fill the render canvas with white pixels since we
- // control the luminance using the alpha channel to improve rendering performance.
-
- canvasContext.fillStyle = 'white';
- canvasContext.fillRect(0, 0, renderCanvas.width, renderCanvas.height);
- var renderCanvasData = canvasContext.getImageData(0, 0, image.width, image.height);
- enabledElement.renderingTools.renderCanvasContext = canvasContext;
- enabledElement.renderingTools.renderCanvasData = renderCanvasData;
-});
-
-/***/ }),
-
-/***/ "./rendering/lutMatches.js":
-/*!*********************************!*\
- !*** ./rendering/lutMatches.js ***!
- \*********************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/**
- * Check if two lookup tables match
- *
- * @param {LUT} a A lookup table function
- * @param {LUT} b Another lookup table function
- * @return {boolean} Whether or not they match
- * @memberof rendering
- */
-/* harmony default export */ __webpack_exports__["default"] = (function (a, b) {
- // If undefined, they are equal
- if (!a && !b) {
- return true;
- } // If one is undefined, not equal
-
-
- if (!a || !b) {
- return false;
- } // Check the unique ids
-
-
- return a.id === b.id;
-});
-
-/***/ }),
-
-/***/ "./rendering/renderColorImage.js":
-/*!***************************************!*\
- !*** ./rendering/renderColorImage.js ***!
- \***************************************/
-/*! exports provided: renderColorImage, addColorLayer */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "renderColorImage", function() { return renderColorImage; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addColorLayer", function() { return addColorLayer; });
-/* harmony import */ var _internal_now_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../internal/now.js */ "./internal/now.js");
-/* harmony import */ var _internal_generateColorLut_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../internal/generateColorLut.js */ "./internal/generateColorLut.js");
-/* harmony import */ var _internal_storedColorPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../internal/storedColorPixelDataToCanvasImageData.js */ "./internal/storedColorPixelDataToCanvasImageData.js");
-/* harmony import */ var _internal_storedRGBAPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../internal/storedRGBAPixelDataToCanvasImageData.js */ "./internal/storedRGBAPixelDataToCanvasImageData.js");
-/* harmony import */ var _setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../setToPixelCoordinateSystem.js */ "./setToPixelCoordinateSystem.js");
-/* harmony import */ var _webgl_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../webgl/index.js */ "./webgl/index.js");
-/* harmony import */ var _doesImageNeedToBeRendered_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./doesImageNeedToBeRendered.js */ "./rendering/doesImageNeedToBeRendered.js");
-/* harmony import */ var _initializeRenderCanvas_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./initializeRenderCanvas.js */ "./rendering/initializeRenderCanvas.js");
-/* harmony import */ var _saveLastRendered_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./saveLastRendered.js */ "./rendering/saveLastRendered.js");
-
-
-
-
-
-
-
-
-
-/**
- * Generates an appropriate Look Up Table to render the given image with the given window width and level (specified in the viewport)
- * Uses an internal cache for performance
- *
- * @param {Object} image The image to be rendered
- * @param {Object} viewport The viewport values used for rendering
- * @returns {Uint8ClampedArray} Look Up Table array.
- * @memberof rendering
- */
-
-function getLut(image, viewport) {
- // If we have a cached lut and it has the right values, return it immediately
- if (image.cachedLut !== undefined && image.cachedLut.windowCenter === viewport.voi.windowCenter && image.cachedLut.windowWidth === viewport.voi.windowWidth && image.cachedLut.invert === viewport.invert) {
- return image.cachedLut.lutArray;
- } // Lut is invalid or not present, regenerate it and cache it
-
-
- Object(_internal_generateColorLut_js__WEBPACK_IMPORTED_MODULE_1__["default"])(image, viewport.voi.windowWidth, viewport.voi.windowCenter, viewport.invert);
- image.cachedLut.windowWidth = viewport.voi.windowWidth;
- image.cachedLut.windowCenter = viewport.voi.windowCenter;
- image.cachedLut.invert = viewport.invert;
- return image.cachedLut.lutArray;
-}
-/**
- * Returns an appropriate canvas to render the Image. If the canvas available in the cache is appropriate
- * it is returned, otherwise adjustments are made. It also sets the color transfer functions.
- *
- * @param {Object} enabledElement The cornerstone enabled element
- * @param {Object} image The image to be rendered
- * @param {Boolean} invalidated Is pixel data valid
- * @returns {HTMLCanvasElement} An appropriate canvas for rendering the image
- * @memberof rendering
- */
-
-
-function getRenderCanvas(enabledElement, image, invalidated) {
- var canvasWasColor = enabledElement.renderingTools.lastRenderedIsColor === true;
-
- if (!enabledElement.renderingTools.renderCanvas || !canvasWasColor) {
- enabledElement.renderingTools.renderCanvas = document.createElement('canvas');
- }
-
- var renderCanvas = enabledElement.renderingTools.renderCanvas; // The ww/wc is identity and not inverted - get a canvas with the image rendered into it for
- // Fast drawing
-
- if (enabledElement.viewport.voi.windowWidth === 255 && enabledElement.viewport.voi.windowCenter === 128 && enabledElement.viewport.invert === false && image.getCanvas && image.getCanvas()) {
- return image.getCanvas();
- } // Apply the lut to the stored pixel data onto the render canvas
-
-
- if (Object(_doesImageNeedToBeRendered_js__WEBPACK_IMPORTED_MODULE_6__["default"])(enabledElement, image) === false && invalidated !== true) {
- return renderCanvas;
- } // If our render canvas does not match the size of this image reset it
- // NOTE: This might be inefficient if we are updating multiple images of different
- // Sizes frequently.
-
-
- if (renderCanvas.width !== image.width || renderCanvas.height !== image.height) {
- Object(_initializeRenderCanvas_js__WEBPACK_IMPORTED_MODULE_7__["default"])(enabledElement, image);
- } // Get the lut to use
-
-
- var start = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])();
- var colorLut = getLut(image, enabledElement.viewport);
- image.stats = image.stats || {};
- image.stats.lastLutGenerateTime = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])() - start;
- var renderCanvasData = enabledElement.renderingTools.renderCanvasData;
- var renderCanvasContext = enabledElement.renderingTools.renderCanvasContext; // The color image voi/invert has been modified - apply the lut to the underlying
- // Pixel data and put it into the renderCanvas
-
- if (image.rgba) {
- Object(_internal_storedRGBAPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_3__["default"])(image, colorLut, renderCanvasData.data);
- } else {
- Object(_internal_storedColorPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_2__["default"])(image, colorLut, renderCanvasData.data);
- }
-
- start = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])();
- renderCanvasContext.putImageData(renderCanvasData, 0, 0);
- image.stats.lastPutImageDataTime = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])() - start;
- return renderCanvas;
-}
-/**
- * API function to render a color image to an enabled element
- *
- * @param {EnabledElement} enabledElement The Cornerstone Enabled Element to redraw
- * @param {Boolean} invalidated - true if pixel data has been invalidated and cached rendering should not be used
- * @returns {void}
- * @memberof rendering
- */
-
-
-function renderColorImage(enabledElement, invalidated) {
- if (enabledElement === undefined) {
- throw new Error('renderColorImage: enabledElement parameter must not be undefined');
- }
-
- var image = enabledElement.image;
-
- if (image === undefined) {
- throw new Error('renderColorImage: image must be loaded before it can be drawn');
- } // Get the canvas context and reset the transform
-
-
- var context = enabledElement.canvas.getContext('2d');
- context.setTransform(1, 0, 0, 1, 0, 0); // Clear the canvas
-
- context.fillStyle = 'black';
- context.fillRect(0, 0, enabledElement.canvas.width, enabledElement.canvas.height); // Turn off image smooth/interpolation if pixelReplication is set in the viewport
-
- context.imageSmoothingEnabled = !enabledElement.viewport.pixelReplication;
- context.mozImageSmoothingEnabled = context.imageSmoothingEnabled; // Save the canvas context state and apply the viewport properties
-
- Object(_setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_4__["default"])(enabledElement, context);
- var renderCanvas;
-
- if (enabledElement.options && enabledElement.options.renderer && enabledElement.options.renderer.toLowerCase() === 'webgl') {
- // If this enabled element has the option set for WebGL, we should
- // User it as our renderer.
- renderCanvas = _webgl_index_js__WEBPACK_IMPORTED_MODULE_5__["default"].renderer.render(enabledElement);
- } else {
- // If no options are set we will retrieve the renderCanvas through the
- // Normal Canvas rendering path
- renderCanvas = getRenderCanvas(enabledElement, image, invalidated);
- }
-
- var sx = enabledElement.viewport.displayedArea.tlhc.x - 1;
- var sy = enabledElement.viewport.displayedArea.tlhc.y - 1;
- var width = enabledElement.viewport.displayedArea.brhc.x - sx;
- var height = enabledElement.viewport.displayedArea.brhc.y - sy;
- context.drawImage(renderCanvas, sx, sy, width, height, 0, 0, width, height);
- enabledElement.renderingTools = Object(_saveLastRendered_js__WEBPACK_IMPORTED_MODULE_8__["default"])(enabledElement);
-}
-function addColorLayer(layer, invalidated) {
- if (layer === undefined) {
- throw new Error('addColorLayer: layer parameter must not be undefined');
- }
-
- var image = layer.image;
-
- if (image === undefined) {
- throw new Error('addColorLayer: image must be loaded before it can be drawn');
- } // All multi-layer images should include the alpha value
-
-
- image.rgba = true;
- layer.canvas = getRenderCanvas(layer, image, invalidated);
- var context = layer.canvas.getContext('2d'); // Turn off image smooth/interpolation if pixelReplication is set in the viewport
-
- context.imageSmoothingEnabled = !layer.viewport.pixelReplication;
- context.mozImageSmoothingEnabled = context.imageSmoothingEnabled;
- layer.renderingTools = Object(_saveLastRendered_js__WEBPACK_IMPORTED_MODULE_8__["default"])(layer);
-}
-
-/***/ }),
-
-/***/ "./rendering/renderGrayscaleImage.js":
-/*!*******************************************!*\
- !*** ./rendering/renderGrayscaleImage.js ***!
- \*******************************************/
-/*! exports provided: renderGrayscaleImage, addGrayscaleLayer */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "renderGrayscaleImage", function() { return renderGrayscaleImage; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addGrayscaleLayer", function() { return addGrayscaleLayer; });
-/* harmony import */ var _internal_storedPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../internal/storedPixelDataToCanvasImageData.js */ "./internal/storedPixelDataToCanvasImageData.js");
-/* harmony import */ var _internal_storedPixelDataToCanvasImageDataRGBA_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../internal/storedPixelDataToCanvasImageDataRGBA.js */ "./internal/storedPixelDataToCanvasImageDataRGBA.js");
-/* harmony import */ var _setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../setToPixelCoordinateSystem.js */ "./setToPixelCoordinateSystem.js");
-/* harmony import */ var _internal_now_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../internal/now.js */ "./internal/now.js");
-/* harmony import */ var _webgl_index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../webgl/index.js */ "./webgl/index.js");
-/* harmony import */ var _getLut_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./getLut.js */ "./rendering/getLut.js");
-/* harmony import */ var _doesImageNeedToBeRendered_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./doesImageNeedToBeRendered.js */ "./rendering/doesImageNeedToBeRendered.js");
-/* harmony import */ var _initializeRenderCanvas_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./initializeRenderCanvas.js */ "./rendering/initializeRenderCanvas.js");
-/* harmony import */ var _saveLastRendered_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./saveLastRendered.js */ "./rendering/saveLastRendered.js");
-
-
-
-
-
-
-
-
-
-/**
- * Returns an appropriate canvas to render the Image. If the canvas available in the cache is appropriate
- * it is returned, otherwise adjustments are made. It also sets the color transfer functions.
- *
- * @param {Object} enabledElement The cornerstone enabled element
- * @param {Object} image The image to be rendered
- * @param {Boolean} invalidated Is pixel data valid
- * @param {Boolean} [useAlphaChannel = true] Will an alpha channel be used
- * @returns {HTMLCanvasElement} An appropriate canvas for rendering the image
- * @memberof rendering
- */
-
-function getRenderCanvas(enabledElement, image, invalidated) {
- var useAlphaChannel = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
- var canvasWasColor = enabledElement.renderingTools.lastRenderedIsColor === true;
-
- if (!enabledElement.renderingTools.renderCanvas || canvasWasColor) {
- enabledElement.renderingTools.renderCanvas = document.createElement('canvas');
- Object(_initializeRenderCanvas_js__WEBPACK_IMPORTED_MODULE_7__["default"])(enabledElement, image);
- }
-
- var renderCanvas = enabledElement.renderingTools.renderCanvas;
-
- if (Object(_doesImageNeedToBeRendered_js__WEBPACK_IMPORTED_MODULE_6__["default"])(enabledElement, image) === false && invalidated !== true) {
- return renderCanvas;
- } // If our render canvas does not match the size of this image reset it
- // NOTE: This might be inefficient if we are updating multiple images of different
- // Sizes frequently.
-
-
- if (renderCanvas.width !== image.width || renderCanvas.height !== image.height) {
- Object(_initializeRenderCanvas_js__WEBPACK_IMPORTED_MODULE_7__["default"])(enabledElement, image);
- } // Get the lut to use
-
-
- var start = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_3__["default"])();
- var lut = Object(_getLut_js__WEBPACK_IMPORTED_MODULE_5__["default"])(image, enabledElement.viewport, invalidated);
- image.stats = image.stats || {};
- image.stats.lastLutGenerateTime = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_3__["default"])() - start;
- var renderCanvasData = enabledElement.renderingTools.renderCanvasData;
- var renderCanvasContext = enabledElement.renderingTools.renderCanvasContext; // Gray scale image - apply the lut and put the resulting image onto the render canvas
-
- if (useAlphaChannel) {
- Object(_internal_storedPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_0__["default"])(image, lut, renderCanvasData.data);
- } else {
- Object(_internal_storedPixelDataToCanvasImageDataRGBA_js__WEBPACK_IMPORTED_MODULE_1__["default"])(image, lut, renderCanvasData.data);
- }
-
- start = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_3__["default"])();
- renderCanvasContext.putImageData(renderCanvasData, 0, 0);
- image.stats.lastPutImageDataTime = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_3__["default"])() - start;
- return renderCanvas;
-}
-/**
- * API function to draw a grayscale image to a given enabledElement
- *
- * @param {EnabledElement} enabledElement The Cornerstone Enabled Element to redraw
- * @param {Boolean} invalidated - true if pixel data has been invalidated and cached rendering should not be used
- * @returns {void}
- * @memberof rendering
- */
-
-
-function renderGrayscaleImage(enabledElement, invalidated) {
- if (enabledElement === undefined) {
- throw new Error('drawImage: enabledElement parameter must not be undefined');
- }
-
- var image = enabledElement.image;
-
- if (image === undefined) {
- throw new Error('drawImage: image must be loaded before it can be drawn');
- } // Get the canvas context and reset the transform
-
-
- var context = enabledElement.canvas.getContext('2d');
- context.setTransform(1, 0, 0, 1, 0, 0); // Clear the canvas
-
- context.fillStyle = 'black';
- context.fillRect(0, 0, enabledElement.canvas.width, enabledElement.canvas.height); // Turn off image smooth/interpolation if pixelReplication is set in the viewport
-
- context.imageSmoothingEnabled = !enabledElement.viewport.pixelReplication;
- context.mozImageSmoothingEnabled = context.imageSmoothingEnabled; // Save the canvas context state and apply the viewport properties
-
- Object(_setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_2__["default"])(enabledElement, context);
- var renderCanvas;
-
- if (enabledElement.options && enabledElement.options.renderer && enabledElement.options.renderer.toLowerCase() === 'webgl') {
- // If this enabled element has the option set for WebGL, we should
- // User it as our renderer.
- renderCanvas = _webgl_index_js__WEBPACK_IMPORTED_MODULE_4__["default"].renderer.render(enabledElement);
- } else {
- // If no options are set we will retrieve the renderCanvas through the
- // Normal Canvas rendering path
- renderCanvas = getRenderCanvas(enabledElement, image, invalidated);
- }
-
- var sx = enabledElement.viewport.displayedArea.tlhc.x - 1;
- var sy = enabledElement.viewport.displayedArea.tlhc.y - 1;
- var width = enabledElement.viewport.displayedArea.brhc.x - sx;
- var height = enabledElement.viewport.displayedArea.brhc.y - sy;
- context.drawImage(renderCanvas, sx, sy, width, height, 0, 0, width, height);
- enabledElement.renderingTools = Object(_saveLastRendered_js__WEBPACK_IMPORTED_MODULE_8__["default"])(enabledElement);
-}
-/**
- * API function to draw a grayscale image to a given layer
- *
- * @param {EnabledElementLayer} layer The layer that the image will be added to
- * @param {Boolean} invalidated - true if pixel data has been invalidated and cached rendering should not be used
- * @param {Boolean} [useAlphaChannel] - Whether or not to render the grayscale image using only the alpha channel.
- This does not work if this layer is not the first layer in the enabledElement.
- * @returns {void}
- */
-
-function addGrayscaleLayer(layer, invalidated) {
- var useAlphaChannel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
- if (layer === undefined) {
- throw new Error('addGrayscaleLayer: layer parameter must not be undefined');
- }
-
- var image = layer.image;
-
- if (image === undefined) {
- throw new Error('addGrayscaleLayer: image must be loaded before it can be drawn');
- }
-
- layer.canvas = getRenderCanvas(layer, image, invalidated, useAlphaChannel);
- var context = layer.canvas.getContext('2d'); // Turn off image smooth/interpolation if pixelReplication is set in the viewport
-
- context.imageSmoothingEnabled = !layer.viewport.pixelReplication;
- context.mozImageSmoothingEnabled = context.imageSmoothingEnabled;
- layer.renderingTools = Object(_saveLastRendered_js__WEBPACK_IMPORTED_MODULE_8__["default"])(layer);
-}
-
-/***/ }),
-
-/***/ "./rendering/renderLabelMapImage.js":
-/*!******************************************!*\
- !*** ./rendering/renderLabelMapImage.js ***!
- \******************************************/
-/*! exports provided: renderLabelMapImage, addLabelMapLayer */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "renderLabelMapImage", function() { return renderLabelMapImage; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addLabelMapLayer", function() { return addLabelMapLayer; });
-/* harmony import */ var _setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../setToPixelCoordinateSystem.js */ "./setToPixelCoordinateSystem.js");
-/* harmony import */ var _internal_now_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../internal/now.js */ "./internal/now.js");
-/* harmony import */ var _initializeRenderCanvas_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./initializeRenderCanvas.js */ "./rendering/initializeRenderCanvas.js");
-/* harmony import */ var _saveLastRendered_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./saveLastRendered.js */ "./rendering/saveLastRendered.js");
-/* harmony import */ var _doesImageNeedToBeRendered_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./doesImageNeedToBeRendered.js */ "./rendering/doesImageNeedToBeRendered.js");
-/* harmony import */ var _internal_storedPixelDataToCanvasImageDataColorLUT_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../internal/storedPixelDataToCanvasImageDataColorLUT.js */ "./internal/storedPixelDataToCanvasImageDataColorLUT.js");
-/* harmony import */ var _colors_index_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../colors/index.js */ "./colors/index.js");
-
-
-
-
-
-
-
-/**
- * Returns an appropriate canvas to render the Image. If the canvas available in the cache is appropriate
- * it is returned, otherwise adjustments are made. It also sets the color transfer functions.
- *
- * @param {Object} enabledElement The cornerstone enabled element
- * @param {Object} image The image to be rendered
- * @param {Boolean} invalidated Is pixel data valid
- * @returns {HTMLCanvasElement} An appropriate canvas for rendering the image
- * @memberof rendering
- */
-
-function getRenderCanvas(enabledElement, image, invalidated) {
- if (!enabledElement.renderingTools.renderCanvas) {
- enabledElement.renderingTools.renderCanvas = document.createElement('canvas');
- }
-
- var renderCanvas = enabledElement.renderingTools.renderCanvas;
- var colormap = enabledElement.viewport.colormap || enabledElement.options.colormap;
-
- if (enabledElement.options.colormap) {
- console.warn('enabledElement.options.colormap is deprecated. Use enabledElement.viewport.colormap instead');
- }
-
- if (colormap && typeof colormap === 'string') {
- colormap = _colors_index_js__WEBPACK_IMPORTED_MODULE_6__["default"].getColormap(colormap);
- }
-
- if (!colormap) {
- throw new Error('renderLabelMapImage: colormap not found.');
- }
-
- var colormapId = colormap.getId();
-
- if (Object(_doesImageNeedToBeRendered_js__WEBPACK_IMPORTED_MODULE_4__["default"])(enabledElement, image) === false && invalidated !== true && enabledElement.renderingTools.colormapId === colormapId) {
- return renderCanvas;
- } // If our render canvas does not match the size of this image reset it
- // NOTE: This might be inefficient if we are updating multiple images of different
- // Sizes frequently.
-
-
- if (renderCanvas.width !== image.width || renderCanvas.height !== image.height) {
- Object(_initializeRenderCanvas_js__WEBPACK_IMPORTED_MODULE_2__["default"])(enabledElement, image);
- } // Get the lut to use
-
-
- var start = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])();
-
- if (!enabledElement.renderingTools.colorLut || invalidated || enabledElement.renderingTools.colormapId !== colormapId) {
- enabledElement.renderingTools.colorLut = colormap.createLookupTable();
- enabledElement.renderingTools.colormapId = colormapId;
- }
-
- image.stats = image.stats || {};
- image.stats.lastLutGenerateTime = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])() - start;
- var colorLut = enabledElement.renderingTools.colorLut;
- var renderCanvasData = enabledElement.renderingTools.renderCanvasData;
- var renderCanvasContext = enabledElement.renderingTools.renderCanvasContext;
- Object(_internal_storedPixelDataToCanvasImageDataColorLUT_js__WEBPACK_IMPORTED_MODULE_5__["default"])(image, colorLut, renderCanvasData.data);
- start = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])();
- renderCanvasContext.putImageData(renderCanvasData, 0, 0);
- image.stats.lastPutImageDataTime = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])() - start;
- return renderCanvas;
-}
-/**
- * API function to draw a label map image to a given enabledElement
- *
- * @param {EnabledElement} enabledElement The Cornerstone Enabled Element to redraw
- * @param {Boolean} invalidated - true if pixel data has been invalidated and cached rendering should not be used
- * @returns {void}
- * @memberof rendering
- */
-
-
-function renderLabelMapImage(enabledElement, invalidated) {
- if (enabledElement === undefined) {
- throw new Error('renderLabelMapImage: enabledElement parameter must not be undefined');
- }
-
- var image = enabledElement.image;
-
- if (image === undefined) {
- throw new Error('renderLabelMapImage: image must be loaded before it can be drawn');
- } // Get the canvas context and reset the transform
-
-
- var context = enabledElement.canvas.getContext('2d');
- context.setTransform(1, 0, 0, 1, 0, 0); // Clear the canvas
-
- context.fillStyle = 'black';
- context.fillRect(0, 0, enabledElement.canvas.width, enabledElement.canvas.height); // Turn off image smooth/interpolation if pixelReplication is set in the viewport
-
- context.imageSmoothingEnabled = !enabledElement.viewport.pixelReplication;
- context.mozImageSmoothingEnabled = context.imageSmoothingEnabled; // Save the canvas context state and apply the viewport properties
-
- Object(_setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_0__["default"])(enabledElement, context); // If no options are set we will retrieve the renderCanvas through the
- // Normal Canvas rendering path
- // TODO: Add WebGL support for label map pipeline
-
- var renderCanvas = getRenderCanvas(enabledElement, image, invalidated);
- var sx = enabledElement.viewport.displayedArea.tlhc.x - 1;
- var sy = enabledElement.viewport.displayedArea.tlhc.y - 1;
- var width = enabledElement.viewport.displayedArea.brhc.x - sx;
- var height = enabledElement.viewport.displayedArea.brhc.y - sy;
- context.drawImage(renderCanvas, sx, sy, width, height, 0, 0, width, height);
- enabledElement.renderingTools = Object(_saveLastRendered_js__WEBPACK_IMPORTED_MODULE_3__["default"])(enabledElement);
-}
-/**
- * API function to draw a pseudo-color image to a given layer
- *
- * @param {EnabledElementLayer} layer The layer that the image will be added to
- * @param {Boolean} invalidated - true if pixel data has been invalidated and cached rendering should not be used
- * @returns {void}
- */
-
-function addLabelMapLayer(layer, invalidated) {
- if (layer === undefined) {
- throw new Error('addLabelMapLayer: layer parameter must not be undefined');
- }
-
- var image = layer.image;
-
- if (image === undefined) {
- throw new Error('addLabelMapLayer: image must be loaded before it can be drawn');
- }
-
- layer.canvas = getRenderCanvas(layer, image, invalidated);
- var context = layer.canvas.getContext('2d'); // Turn off image smooth/interpolation if pixelReplication is set in the viewport
-
- context.imageSmoothingEnabled = !layer.viewport.pixelReplication;
- context.mozImageSmoothingEnabled = context.imageSmoothingEnabled;
- layer.renderingTools = Object(_saveLastRendered_js__WEBPACK_IMPORTED_MODULE_3__["default"])(layer);
-}
-
-/***/ }),
-
-/***/ "./rendering/renderPseudoColorImage.js":
-/*!*********************************************!*\
- !*** ./rendering/renderPseudoColorImage.js ***!
- \*********************************************/
-/*! exports provided: renderPseudoColorImage, addPseudoColorLayer */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "renderPseudoColorImage", function() { return renderPseudoColorImage; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addPseudoColorLayer", function() { return addPseudoColorLayer; });
-/* harmony import */ var _setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../setToPixelCoordinateSystem.js */ "./setToPixelCoordinateSystem.js");
-/* harmony import */ var _internal_now_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../internal/now.js */ "./internal/now.js");
-/* harmony import */ var _initializeRenderCanvas_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./initializeRenderCanvas.js */ "./rendering/initializeRenderCanvas.js");
-/* harmony import */ var _getLut_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getLut.js */ "./rendering/getLut.js");
-/* harmony import */ var _saveLastRendered_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./saveLastRendered.js */ "./rendering/saveLastRendered.js");
-/* harmony import */ var _doesImageNeedToBeRendered_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./doesImageNeedToBeRendered.js */ "./rendering/doesImageNeedToBeRendered.js");
-/* harmony import */ var _internal_storedPixelDataToCanvasImageDataPseudocolorLUT_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../internal/storedPixelDataToCanvasImageDataPseudocolorLUT.js */ "./internal/storedPixelDataToCanvasImageDataPseudocolorLUT.js");
-/* harmony import */ var _colors_index_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../colors/index.js */ "./colors/index.js");
-
-
-
-
-
-
-
-
-/**
- * Returns an appropriate canvas to render the Image. If the canvas available in the cache is appropriate
- * it is returned, otherwise adjustments are made. It also sets the color transfer functions.
- *
- * @param {Object} enabledElement The cornerstone enabled element
- * @param {Object} image The image to be rendered
- * @param {Boolean} invalidated Is pixel data valid
- * @returns {HTMLCanvasElement} An appropriate canvas for rendering the image
- * @memberof rendering
- */
-
-function getRenderCanvas(enabledElement, image, invalidated) {
- if (!enabledElement.renderingTools.renderCanvas) {
- enabledElement.renderingTools.renderCanvas = document.createElement('canvas');
- }
-
- var renderCanvas = enabledElement.renderingTools.renderCanvas;
- var colormap = enabledElement.viewport.colormap || enabledElement.options.colormap;
-
- if (enabledElement.options.colormap) {
- console.warn('enabledElement.options.colormap is deprecated. Use enabledElement.viewport.colormap instead');
- }
-
- if (colormap && typeof colormap === 'string') {
- colormap = _colors_index_js__WEBPACK_IMPORTED_MODULE_7__["default"].getColormap(colormap);
- }
-
- if (!colormap) {
- throw new Error('renderPseudoColorImage: colormap not found.');
- }
-
- var colormapId = colormap.getId();
-
- if (Object(_doesImageNeedToBeRendered_js__WEBPACK_IMPORTED_MODULE_5__["default"])(enabledElement, image) === false && invalidated !== true && enabledElement.renderingTools.colormapId === colormapId) {
- return renderCanvas;
- } // If our render canvas does not match the size of this image reset it
- // NOTE: This might be inefficient if we are updating multiple images of different
- // Sizes frequently.
-
-
- if (renderCanvas.width !== image.width || renderCanvas.height !== image.height) {
- Object(_initializeRenderCanvas_js__WEBPACK_IMPORTED_MODULE_2__["default"])(enabledElement, image);
- } // Get the lut to use
-
-
- var start = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])();
-
- if (!enabledElement.renderingTools.colorLut || invalidated || enabledElement.renderingTools.colormapId !== colormapId) {
- colormap.setNumberOfColors(256);
- enabledElement.renderingTools.colorLut = colormap.createLookupTable();
- enabledElement.renderingTools.colormapId = colormapId;
- }
-
- var lut = Object(_getLut_js__WEBPACK_IMPORTED_MODULE_3__["default"])(image, enabledElement.viewport, invalidated);
- image.stats = image.stats || {};
- image.stats.lastLutGenerateTime = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])() - start;
- var colorLut = enabledElement.renderingTools.colorLut;
- var renderCanvasData = enabledElement.renderingTools.renderCanvasData;
- var renderCanvasContext = enabledElement.renderingTools.renderCanvasContext;
- Object(_internal_storedPixelDataToCanvasImageDataPseudocolorLUT_js__WEBPACK_IMPORTED_MODULE_6__["default"])(image, lut, colorLut, renderCanvasData.data);
- start = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])();
- renderCanvasContext.putImageData(renderCanvasData, 0, 0);
- image.stats.lastPutImageDataTime = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])() - start;
- return renderCanvas;
-}
-/**
- * API function to draw a pseudo-color image to a given enabledElement
- *
- * @param {EnabledElement} enabledElement The Cornerstone Enabled Element to redraw
- * @param {Boolean} invalidated - true if pixel data has been invalidated and cached rendering should not be used
- * @returns {void}
- * @memberof rendering
- */
-
-
-function renderPseudoColorImage(enabledElement, invalidated) {
- if (enabledElement === undefined) {
- throw new Error('drawImage: enabledElement parameter must not be undefined');
- }
-
- var image = enabledElement.image;
-
- if (image === undefined) {
- throw new Error('drawImage: image must be loaded before it can be drawn');
- } // Get the canvas context and reset the transform
-
-
- var context = enabledElement.canvas.getContext('2d');
- context.setTransform(1, 0, 0, 1, 0, 0); // Clear the canvas
-
- context.fillStyle = 'black';
- context.fillRect(0, 0, enabledElement.canvas.width, enabledElement.canvas.height); // Turn off image smooth/interpolation if pixelReplication is set in the viewport
-
- context.imageSmoothingEnabled = !enabledElement.viewport.pixelReplication;
- context.mozImageSmoothingEnabled = context.imageSmoothingEnabled; // Save the canvas context state and apply the viewport properties
-
- Object(_setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_0__["default"])(enabledElement, context); // If no options are set we will retrieve the renderCanvas through the
- // Normal Canvas rendering path
- // TODO: Add WebGL support for pseudocolor pipeline
-
- var renderCanvas = getRenderCanvas(enabledElement, image, invalidated);
- var sx = enabledElement.viewport.displayedArea.tlhc.x - 1;
- var sy = enabledElement.viewport.displayedArea.tlhc.y - 1;
- var width = enabledElement.viewport.displayedArea.brhc.x - sx;
- var height = enabledElement.viewport.displayedArea.brhc.y - sy;
- context.drawImage(renderCanvas, sx, sy, width, height, 0, 0, width, height);
- enabledElement.renderingTools = Object(_saveLastRendered_js__WEBPACK_IMPORTED_MODULE_4__["default"])(enabledElement);
-}
-/**
- * API function to draw a pseudo-color image to a given layer
- *
- * @param {EnabledElementLayer} layer The layer that the image will be added to
- * @param {Boolean} invalidated - true if pixel data has been invalidated and cached rendering should not be used
- * @returns {void}
- */
-
-function addPseudoColorLayer(layer, invalidated) {
- if (layer === undefined) {
- throw new Error('addPseudoColorLayer: layer parameter must not be undefined');
- }
-
- var image = layer.image;
-
- if (image === undefined) {
- throw new Error('addPseudoColorLayer: image must be loaded before it can be drawn');
- }
-
- layer.canvas = getRenderCanvas(layer, image, invalidated);
- var context = layer.canvas.getContext('2d'); // Turn off image smooth/interpolation if pixelReplication is set in the viewport
-
- context.imageSmoothingEnabled = !layer.viewport.pixelReplication;
- context.mozImageSmoothingEnabled = context.imageSmoothingEnabled;
- layer.renderingTools = Object(_saveLastRendered_js__WEBPACK_IMPORTED_MODULE_4__["default"])(layer);
-}
-
-/***/ }),
-
-/***/ "./rendering/renderToCanvas.js":
-/*!*************************************!*\
- !*** ./rendering/renderToCanvas.js ***!
- \*************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _triggerEvent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../triggerEvent.js */ "./triggerEvent.js");
-/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../events.js */ "./events.js");
-/* harmony import */ var _internal_drawImageSync_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../internal/drawImageSync.js */ "./internal/drawImageSync.js");
-/* harmony import */ var _internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../internal/getDefaultViewport.js */ "./internal/getDefaultViewport.js");
-/* harmony import */ var _internal_tryEnableWebgl_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../internal/tryEnableWebgl.js */ "./internal/tryEnableWebgl.js");
-
-
-
-
-
-/**
- * @typedef {Object} EnabledElementStub
- * @property {HTMLElement} element The enabled element
- * @property {HTMLCanvasElement} canvas The current canvas
- * @property {Object} image Currently displayed image
- * @property {Boolean} invalid Whether or not the image pixel data has been changed
- * @property {Boolean} needsRedraw A flag for triggering a redraw of the canvas without re-retrieving the pixel data, since it remains valid
- * @property {Object} options Layer drawing options
- * @property {Object[]} layers Layers added to the EnabledElement
- * @property {Object} data
- * @property {Object} renderingTools
- * @property {Object} viewport The current viewport
- * @memberof rendering
- */
-
-/**
- * creates a dummy enabled element
- *
- * @param {HTMLCanvasElement} canvas the canvas that will be assigned to the enabled element.
- * @param {any} image An Image loaded by a Cornerstone Image Loader
- * @param { any } options Options for rendering the image (e.g.enable webgl by {renderer: 'webgl' })
- * @param { any } viewport A set of Cornerstone viewport parameters
- * @returns {EnabledElementStub} a dummy enabled element
- * @memberof rendering
- */
-
-function createEnabledElementStub(canvas, image, options, viewport) {
- return {
- element: canvas,
- canvas: canvas,
- image: image,
- invalid: true,
- // True if image needs to be drawn, false if not
- needsRedraw: true,
- options: options,
- layers: [],
- data: {},
- renderingTools: {},
- viewport: viewport
- };
-}
-/**
- * Render the image to the provided canvas immediately.
- * @param {any} canvas The HTML canvas where the image will be rendered.
- * @param {any} image An Image loaded by a Cornerstone Image Loader
- * @param {any} [viewport = null] A set of Cornerstone viewport parameters
- * @param {any} [options = null] Options for rendering the image (e.g. enable webgl by {renderer: 'webgl'})
- * @returns {void}
- * @memberof rendering
- */
-
-
-/* harmony default export */ __webpack_exports__["default"] = (function (canvas, image) {
- var viewport = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
- var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
-
- if (canvas === undefined) {
- throw new Error('renderToCanvas: parameter canvas cannot be undefined');
- } // If this enabled element has the option set for WebGL, we should
- // Check if this device actually supports it
-
-
- if (options && options.renderer && options.renderer.toLowerCase() === 'webgl') {
- Object(_internal_tryEnableWebgl_js__WEBPACK_IMPORTED_MODULE_4__["default"])(options);
- }
-
- var defaultViewport = Object(_internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_3__["default"])(canvas, image);
-
- if (viewport) {
- Object.assign(defaultViewport, viewport);
- }
-
- var enabledElementStub = createEnabledElementStub(canvas, image, options, defaultViewport);
- var eventDetails = {
- enabledElement: enabledElementStub,
- timestamp: Date.now()
- };
- Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_0__["default"])(enabledElementStub.element, _events_js__WEBPACK_IMPORTED_MODULE_1__["default"].PRE_RENDER, eventDetails);
- Object(_internal_drawImageSync_js__WEBPACK_IMPORTED_MODULE_2__["default"])(enabledElementStub, enabledElementStub.invalid);
-});
-
-/***/ }),
-
-/***/ "./rendering/renderWebImage.js":
-/*!*************************************!*\
- !*** ./rendering/renderWebImage.js ***!
- \*************************************/
-/*! exports provided: renderWebImage */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "renderWebImage", function() { return renderWebImage; });
-/* harmony import */ var _setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../setToPixelCoordinateSystem.js */ "./setToPixelCoordinateSystem.js");
-/* harmony import */ var _renderColorImage_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./renderColorImage.js */ "./rendering/renderColorImage.js");
-
-
-/**
- * API function to draw a standard web image (PNG, JPG) to an enabledImage
- *
- * @param {EnabledElement} enabledElement The Cornerstone Enabled Element to redraw
- * @param {Boolean} invalidated - true if pixel data has been invalidated and cached rendering should not be used
- * @returns {void}
- * @memberof rendering
- */
-
-function renderWebImage(enabledElement, invalidated) {
- if (enabledElement === undefined) {
- throw new Error('renderWebImage: enabledElement parameter must not be undefined');
- }
-
- var image = enabledElement.image;
-
- if (image === undefined) {
- throw new Error('renderWebImage: image must be loaded before it can be drawn');
- } // If the viewport ww/wc and invert all match the initial state of the image, we can draw the image
- // Directly. If any of those are changed, we call renderColorImage() to apply the lut
-
-
- if (enabledElement.viewport.voi.windowWidth === enabledElement.image.windowWidth && enabledElement.viewport.voi.windowCenter === enabledElement.image.windowCenter && enabledElement.viewport.invert === false) {
- // Get the canvas context and reset the transform
- var context = enabledElement.canvas.getContext('2d');
- context.setTransform(1, 0, 0, 1, 0, 0); // Clear the canvas
-
- context.fillStyle = 'black';
- context.fillRect(0, 0, enabledElement.canvas.width, enabledElement.canvas.height); // Turn off image smooth/interpolation if pixelReplication is set in the viewport
-
- context.imageSmoothingEnabled = !enabledElement.viewport.pixelReplication;
- context.mozImageSmoothingEnabled = context.imageSmoothingEnabled; // Save the canvas context state and apply the viewport properties
-
- Object(_setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_0__["default"])(enabledElement, context);
- var sx = enabledElement.viewport.displayedArea.tlhc.x - 1;
- var sy = enabledElement.viewport.displayedArea.tlhc.y - 1;
- var width = enabledElement.viewport.displayedArea.brhc.x - sx;
- var height = enabledElement.viewport.displayedArea.brhc.y - sy;
- context.drawImage(image.getImage(), sx, sy, width, height, 0, 0, width, height);
- } else {
- Object(_renderColorImage_js__WEBPACK_IMPORTED_MODULE_1__["renderColorImage"])(enabledElement, invalidated);
- }
-}
-
-/***/ }),
-
-/***/ "./rendering/saveLastRendered.js":
-/*!***************************************!*\
- !*** ./rendering/saveLastRendered.js ***!
- \***************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/**
- * Saves the parameters of the last render into renderingTools, used later to decide if data can be reused.
- *
- * @param {Object} enabledElement Cornerstone EnabledElement
- * @returns {Object} enabledElement.renderingTools
- * @memberof rendering
- */
-/* harmony default export */ __webpack_exports__["default"] = (function (enabledElement) {
- var imageId = enabledElement.image.imageId;
- var viewport = enabledElement.viewport;
- var isColor = enabledElement.image.color;
- enabledElement.renderingTools.lastRenderedImageId = imageId;
- enabledElement.renderingTools.lastRenderedIsColor = isColor;
- enabledElement.renderingTools.lastRenderedViewport = {
- windowCenter: viewport.voi.windowCenter,
- windowWidth: viewport.voi.windowWidth,
- invert: viewport.invert,
- rotation: viewport.rotation,
- hflip: viewport.hflip,
- vflip: viewport.vflip,
- modalityLUT: viewport.modalityLUT,
- voiLUT: viewport.voiLUT,
- colormap: viewport.colormap
- };
- return enabledElement.renderingTools;
-});
-
-/***/ }),
-
-/***/ "./reset.js":
-/*!******************!*\
- !*** ./reset.js ***!
- \******************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js");
-/* harmony import */ var _internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./internal/getDefaultViewport.js */ "./internal/getDefaultViewport.js");
-/* harmony import */ var _updateImage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./updateImage.js */ "./updateImage.js");
-
-
-
-/**
- * Resets the viewport to the default settings
- *
- * @param {HTMLElement} element An HTML Element enabled for Cornerstone
- * @returns {void}
- */
-
-/* harmony default export */ __webpack_exports__["default"] = (function (element) {
- var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element);
- enabledElement.viewport = Object(_internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_1__["default"])(enabledElement.canvas, enabledElement.image);
- Object(_updateImage_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element);
-});
-
-/***/ }),
-
-/***/ "./resize.js":
-/*!*******************!*\
- !*** ./resize.js ***!
- \*******************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js");
-/* harmony import */ var _fitToWindow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fitToWindow.js */ "./fitToWindow.js");
-/* harmony import */ var _updateImage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./updateImage.js */ "./updateImage.js");
-/* harmony import */ var _triggerEvent_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./triggerEvent.js */ "./triggerEvent.js");
-/* harmony import */ var _internal_getImageSize_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./internal/getImageSize.js */ "./internal/getImageSize.js");
-/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./events.js */ "./events.js");
-
-
-
-
-
-
-/**
- * This module is responsible for enabling an element to display images with cornerstone
- *
- * @param {HTMLElement} element The DOM element enabled for Cornerstone
- * @param {HTMLElement} canvas The Canvas DOM element within the DOM element enabled for Cornerstone
- * @returns {void}
- */
-
-function setCanvasSize(element, canvas) {
- // The device pixel ratio is 1.0 for normal displays and > 1.0
- // For high DPI displays like Retina
-
- /*
- This functionality is disabled due to buggy behavior on systems with mixed DPI's. If the canvas
- is created on a display with high DPI (e.g. 2.0) and then the browser window is dragged to
- a different display with a different DPI (e.g. 1.0), the canvas is not recreated so the pageToPixel
- produces incorrect results. I couldn't find any way to determine when the DPI changed other than
- by polling which is not very clean. If anyone has any ideas here, please let me know, but for now
- we will disable this functionality. We may want
- to add a mechanism to optionally enable this functionality if we can determine it is safe to do
- so (e.g. iPad or iPhone or perhaps enumerate the displays on the system. I am choosing
- to be cautious here since I would rather not have bug reports or safety issues related to this
- scenario.
- var devicePixelRatio = window.devicePixelRatio;
- if(devicePixelRatio === undefined) {
- devicePixelRatio = 1.0;
- }
- */
- // Avoid setting the same value because it flashes the canvas with IE and Edge
- if (canvas.width !== element.clientWidth) {
- canvas.width = element.clientWidth;
- canvas.style.width = "".concat(element.clientWidth, "px");
- } // Avoid setting the same value because it flashes the canvas with IE and Edge
-
-
- if (canvas.height !== element.clientHeight) {
- canvas.height = element.clientHeight;
- canvas.style.height = "".concat(element.clientHeight, "px");
- }
-}
-/**
- * Checks if the image of a given enabled element fitted the window
- * before the resize
- *
- * @param {EnabledElement} enabledElement The Cornerstone Enabled Element
- * @param {number} oldCanvasWidth The width of the canvas before the resize
- * @param {number} oldCanvasHeight The height of the canvas before the resize
- * @return {Boolean} true if it fitted the windows, false otherwise
- */
-
-
-function wasFitToWindow(enabledElement, oldCanvasWidth, oldCanvasHeight) {
- var scale = enabledElement.viewport.scale;
- var imageSize = Object(_internal_getImageSize_js__WEBPACK_IMPORTED_MODULE_4__["default"])(enabledElement.image, enabledElement.viewport.rotation);
- var imageWidth = Math.round(imageSize.width * scale);
- var imageHeight = Math.round(imageSize.height * scale);
- var x = enabledElement.viewport.translation.x;
- var y = enabledElement.viewport.translation.y;
- return imageWidth === oldCanvasWidth && imageHeight <= oldCanvasHeight || imageWidth <= oldCanvasWidth && imageHeight === oldCanvasHeight && x === 0 && y === 0;
-}
-/**
- * Rescale the image relative to the changed size of the canvas
- *
- * @param {EnabledElement} enabledElement The Cornerstone Enabled Element
- * @param {number} oldCanvasWidth The width of the canvas before the resize
- * @param {number} oldCanvasHeight The height of the canvas before the resize
- * @return {void}
- */
-
-
-function relativeRescale(enabledElement, oldCanvasWidth, oldCanvasHeight) {
- var scale = enabledElement.viewport.scale;
- var canvasWidth = enabledElement.canvas.width;
- var canvasHeight = enabledElement.canvas.height;
- var relWidthChange = canvasWidth / oldCanvasWidth;
- var relHeightChange = canvasHeight / oldCanvasHeight;
- var relChange = Math.sqrt(relWidthChange * relHeightChange);
- enabledElement.viewport.scale = relChange * scale;
-}
-/**
- * Resizes an enabled element and optionally fits the image to window
- *
- * @param {HTMLElement} element The DOM element enabled for Cornerstone
- * @param {Boolean} forceFitToWindow true to to force a refit, false to rescale accordingly
- * @returns {void}
- */
-
-
-/* harmony default export */ __webpack_exports__["default"] = (function (element, forceFitToWindow) {
- var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element);
- var oldCanvasWidth = enabledElement.canvas.width;
- var oldCanvasHeight = enabledElement.canvas.height;
- setCanvasSize(element, enabledElement.canvas);
- var eventData = {
- element: element
- };
- Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element, _events_js__WEBPACK_IMPORTED_MODULE_5__["default"].ELEMENT_RESIZED, eventData);
-
- if (enabledElement.image === undefined) {
- return;
- }
-
- if (forceFitToWindow || wasFitToWindow(enabledElement, oldCanvasWidth, oldCanvasHeight)) {
- // Fit the image to the window again if it fitted before the resize
- Object(_fitToWindow_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element);
- } else {
- // Adapt the scale of a zoomed or panned image relative to the size change
- relativeRescale(enabledElement, oldCanvasWidth, oldCanvasHeight);
- Object(_updateImage_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element);
- }
-});
-
-/***/ }),
-
-/***/ "./setToPixelCoordinateSystem.js":
-/*!***************************************!*\
- !*** ./setToPixelCoordinateSystem.js ***!
- \***************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _internal_calculateTransform_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./internal/calculateTransform.js */ "./internal/calculateTransform.js");
-
-/**
- * Sets the canvas context transformation matrix to the pixel coordinate system. This allows
- * geometry to be driven using the canvas context using coordinates in the pixel coordinate system
- * @param {EnabledElement} enabledElement The
- * @param {CanvasRenderingContext2D} context The CanvasRenderingContext2D for the enabledElement's Canvas
- * @param {Number} [scale] Optional scale to apply
- * @returns {void}
- */
-
-/* harmony default export */ __webpack_exports__["default"] = (function (enabledElement, context, scale) {
- if (enabledElement === undefined) {
- throw new Error('setToPixelCoordinateSystem: parameter enabledElement must not be undefined');
- }
-
- if (context === undefined) {
- throw new Error('setToPixelCoordinateSystem: parameter context must not be undefined');
- }
-
- var transform = Object(_internal_calculateTransform_js__WEBPACK_IMPORTED_MODULE_0__["default"])(enabledElement, scale);
- context.setTransform(transform.m[0], transform.m[1], transform.m[2], transform.m[3], transform.m[4], transform.m[5]);
-});
-
-/***/ }),
-
-/***/ "./setViewport.js":
-/*!************************!*\
- !*** ./setViewport.js ***!
- \************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./internal/getDefaultViewport.js */ "./internal/getDefaultViewport.js");
-/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js");
-/* harmony import */ var _updateImage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./updateImage.js */ "./updateImage.js");
-
-
-
-var MIN_WINDOW_WIDTH = 0.000001;
-var MIN_VIEWPORT_SCALE = 0.0001;
-/**
- * Sets/updates viewport of a given enabled element
- *
- * @param {HTMLElement} element - DOM element of the enabled element
- * @param {Viewport} [viewport] - Object containing the viewport properties
- * @returns {void}
- * @memberof ViewportSettings
- */
-
-/* harmony default export */ __webpack_exports__["default"] = (function (element, viewport) {
- var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElement"])(element); // If viewport is not already set, start with default and merge new
- // viewport options later
-
- if (enabledElement.viewport === undefined) {
- enabledElement.viewport = Object(_internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_0__["default"])(enabledElement.canvas);
- } // Merge viewport
-
-
- if (viewport) {
- for (var attrname in viewport) {
- if (viewport[attrname] !== null) {
- enabledElement.viewport[attrname] = viewport[attrname];
- }
- }
- } // Prevent window width from being too small (note that values close to zero are valid and can occur with
- // PET images in particular)
-
-
- if (enabledElement.viewport.voi.windowWidth) {
- enabledElement.viewport.voi.windowWidth = Math.max(viewport.voi.windowWidth, MIN_WINDOW_WIDTH);
- } // Prevent scale from getting too small
-
-
- if (enabledElement.viewport.scale) {
- enabledElement.viewport.scale = Math.max(viewport.scale, MIN_VIEWPORT_SCALE);
- } // Normalize the rotation value to a positive rotation in degrees
-
-
- enabledElement.viewport.rotation %= 360;
-
- if (enabledElement.viewport.rotation < 0) {
- enabledElement.viewport.rotation += 360;
- }
-
- if (enabledElement.image) {
- // Force the image to be updated since the viewport has been modified
- Object(_updateImage_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element);
- }
-});
-
-/***/ }),
-
-/***/ "./triggerEvent.js":
-/*!*************************!*\
- !*** ./triggerEvent.js ***!
- \*************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return triggerEvent; });
-/**
- * Trigger a CustomEvent
- *
- * @param {EventTarget} el The element or EventTarget to trigger the event upon
- * @param {String} type The event type name
- * @param {Object|null} detail=null The event data to be sent
- * @returns {Boolean} The return value is false if at least one event listener called preventDefault(). Otherwise it returns true.
- */
-function triggerEvent(el, type) {
- var detail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
- var event; // This check is needed to polyfill CustomEvent on IE11-
-
- if (typeof window.CustomEvent === 'function') {
- event = new CustomEvent(type, {
- detail: detail,
- cancelable: true
- });
- } else {
- event = document.createEvent('CustomEvent');
- event.initCustomEvent(type, true, true, detail);
- }
-
- return el.dispatchEvent(event);
-}
-
-/***/ }),
-
-/***/ "./updateImage.js":
-/*!************************!*\
- !*** ./updateImage.js ***!
- \************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js");
-/* harmony import */ var _internal_drawImage_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./internal/drawImage.js */ "./internal/drawImage.js");
-
-
-/**
- * Forces the image to be updated/redrawn for the specified enabled element
- * @param {HTMLElement} element An HTML Element enabled for Cornerstone
- * @param {Boolean} [invalidated=false] Whether or not the image pixel data has been changed, necessitating a redraw
- *
- * @returns {void}
- * @memberof Drawing
- */
-
-/* harmony default export */ __webpack_exports__["default"] = (function (element) {
- var invalidated = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
- var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element);
-
- if (enabledElement.image === undefined && !enabledElement.layers.length) {
- throw new Error('updateImage: image has not been loaded yet');
- }
-
- Object(_internal_drawImage_js__WEBPACK_IMPORTED_MODULE_1__["default"])(enabledElement, invalidated);
-});
-
-/***/ }),
-
-/***/ "./webgl/createProgramFromString.js":
-/*!******************************************!*\
- !*** ./webgl/createProgramFromString.js ***!
- \******************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/**
- * Creates and compiles a shader.
- *
- * @param {!WebGLRenderingContext} gl The WebGL Context.
- * @param {string} shaderSource The GLSL source code for the shader.
- * @param {number} shaderType The type of shader, VERTEX_SHADER or FRAGMENT_SHADER.
- *
- * @return {!WebGLShader} The shader.
- * @memberof WebGLRendering
- */
-function compileShader(gl, shaderSource, shaderType) {
- // Create the shader object
- var shader = gl.createShader(shaderType); // Set the shader source code.
-
- gl.shaderSource(shader, shaderSource); // Compile the shader
-
- gl.compileShader(shader); // Check if it compiled
-
- var success = gl.getShaderParameter(shader, gl.COMPILE_STATUS);
-
- if (!success && !gl.isContextLost()) {
- // Something went wrong during compilation; get the error
- var infoLog = gl.getShaderInfoLog(shader);
- console.error("Could not compile shader:\n".concat(infoLog));
- }
-
- return shader;
-}
-/**
- * Creates a program from 2 shaders.
- *
- * @param {!WebGLRenderingContext} gl The WebGL context.
- * @param {!WebGLShader} vertexShader A vertex shader.
- * @param {!WebGLShader} fragmentShader A fragment shader.
- * @return {!WebGLProgram} A program.
- * @memberof WebGLRendering
- */
-
-
-function createProgram(gl, vertexShader, fragmentShader) {
- // Create a program.
- var program = gl.createProgram(); // Attach the shaders.
-
- gl.attachShader(program, vertexShader);
- gl.attachShader(program, fragmentShader); // Link the program.
-
- gl.linkProgram(program); // Check if it linked.
-
- var success = gl.getProgramParameter(program, gl.LINK_STATUS);
-
- if (!success && !gl.isContextLost()) {
- // Something went wrong with the link
- var infoLog = gl.getProgramInfoLog(program);
- console.error("WebGL program filed to link:\n".concat(infoLog));
- }
-
- return program;
-}
-/**
- * Creates a program from 2 shaders source (Strings)
- * @param {!WebGLRenderingContext} gl The WebGL context.
- * @param {!WebGLShader} vertexShaderSrc Vertex shader string
- * @param {!WebGLShader} fragShaderSrc Fragment shader string
- * @return {!WebGLProgram} A program
- * @memberof WebGLRendering
- */
-
-
-/* harmony default export */ __webpack_exports__["default"] = (function (gl, vertexShaderSrc, fragShaderSrc) {
- var vertexShader = compileShader(gl, vertexShaderSrc, gl.VERTEX_SHADER);
- var fragShader = compileShader(gl, fragShaderSrc, gl.FRAGMENT_SHADER);
- return createProgram(gl, vertexShader, fragShader);
-});
-
-/***/ }),
-
-/***/ "./webgl/index.js":
-/*!************************!*\
- !*** ./webgl/index.js ***!
- \************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _renderer_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./renderer.js */ "./webgl/renderer.js");
-/* harmony import */ var _createProgramFromString_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./createProgramFromString.js */ "./webgl/createProgramFromString.js");
-/* harmony import */ var _textureCache_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textureCache.js */ "./webgl/textureCache.js");
-
-
-
-/**
- * @module WebGLRendering
- */
-
-var mod = {
- createProgramFromString: _createProgramFromString_js__WEBPACK_IMPORTED_MODULE_1__["default"],
- renderer: {
- render: _renderer_js__WEBPACK_IMPORTED_MODULE_0__["render"],
- initRenderer: _renderer_js__WEBPACK_IMPORTED_MODULE_0__["initRenderer"],
- getRenderCanvas: _renderer_js__WEBPACK_IMPORTED_MODULE_0__["getRenderCanvas"],
- isWebGLAvailable: _renderer_js__WEBPACK_IMPORTED_MODULE_0__["isWebGLAvailable"]
- },
- textureCache: _textureCache_js__WEBPACK_IMPORTED_MODULE_2__["default"]
-};
-Object.defineProperty(mod, 'isWebGLInitialized', {
- enumerable: true,
- configurable: false,
- get: function get() {
- return _renderer_js__WEBPACK_IMPORTED_MODULE_0__["isWebGLInitialized"];
- }
-});
-/* harmony default export */ __webpack_exports__["default"] = (mod);
-
-/***/ }),
-
-/***/ "./webgl/renderer.js":
-/*!***************************!*\
- !*** ./webgl/renderer.js ***!
- \***************************/
-/*! exports provided: isWebGLInitialized, getRenderCanvas, initRenderer, render, isWebGLAvailable */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isWebGLInitialized", function() { return isWebGLInitialized; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getRenderCanvas", function() { return getRenderCanvas; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "initRenderer", function() { return initRenderer; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isWebGLAvailable", function() { return isWebGLAvailable; });
-/* harmony import */ var _shaders_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./shaders/index.js */ "./webgl/shaders/index.js");
-/* harmony import */ var _vertexShader_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./vertexShader.js */ "./webgl/vertexShader.js");
-/* harmony import */ var _textureCache_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textureCache.js */ "./webgl/textureCache.js");
-/* harmony import */ var _createProgramFromString_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./createProgramFromString.js */ "./webgl/createProgramFromString.js");
-/* eslint no-bitwise: 0 */
-
-
-
-
-var renderCanvas = document.createElement('canvas');
-var gl;
-var texCoordBuffer;
-var positionBuffer;
-var isWebGLInitialized = false;
-
-function getRenderCanvas() {
- return renderCanvas;
-}
-
-function initShaders() {
- for (var id in _shaders_index_js__WEBPACK_IMPORTED_MODULE_0__["shaders"]) {
- // Console.log("WEBGL: Loading shader", id);
- var shader = _shaders_index_js__WEBPACK_IMPORTED_MODULE_0__["shaders"][id];
- shader.attributes = {};
- shader.uniforms = {};
- shader.vert = _vertexShader_js__WEBPACK_IMPORTED_MODULE_1__["vertexShader"];
- shader.program = Object(_createProgramFromString_js__WEBPACK_IMPORTED_MODULE_3__["default"])(gl, shader.vert, shader.frag);
- shader.attributes.texCoordLocation = gl.getAttribLocation(shader.program, 'a_texCoord');
- gl.enableVertexAttribArray(shader.attributes.texCoordLocation);
- shader.attributes.positionLocation = gl.getAttribLocation(shader.program, 'a_position');
- gl.enableVertexAttribArray(shader.attributes.positionLocation);
- shader.uniforms.resolutionLocation = gl.getUniformLocation(shader.program, 'u_resolution');
- }
-}
-
-function initRenderer() {
- if (isWebGLInitialized === true) {
- // Console.log("WEBGL Renderer already initialized");
- return;
- }
-
- if (initWebGL(renderCanvas)) {
- initBuffers();
- initShaders(); // Console.log("WEBGL Renderer initialized!");
-
- isWebGLInitialized = true;
- }
-}
-
-function updateRectangle(gl, width, height) {
- gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([width, height, 0, height, width, 0, 0, 0]), gl.STATIC_DRAW);
-}
-
-function handleLostContext(event) {
- event.preventDefault();
- console.warn('WebGL Context Lost!');
-}
-
-function handleRestoredContext(event) {
- event.preventDefault();
- isWebGLInitialized = false;
- _textureCache_js__WEBPACK_IMPORTED_MODULE_2__["default"].purgeCache();
- initRenderer(); // Console.log('WebGL Context Restored.');
-}
-
-function initWebGL(canvas) {
- gl = null;
-
- try {
- // Try to grab the standard context. If it fails, fallback to experimental.
- var options = {
- preserveDrawingBuffer: true // Preserve buffer so we can copy to display canvas element
-
- }; // ---------------- Testing purposes -------------
- // If (debug === true && WebGLDebugUtils) {
- // RenderCanvas = WebGLDebugUtils.makeLostContextSimulatingCanvas(renderCanvas);
- // }
- // ---------------- Testing purposes -------------
-
- gl = canvas.getContext('webgl', options) || canvas.getContext('experimental-webgl', options); // Set up event listeners for context lost / context restored
-
- canvas.removeEventListener('webglcontextlost', handleLostContext, false);
- canvas.addEventListener('webglcontextlost', handleLostContext, false);
- canvas.removeEventListener('webglcontextrestored', handleRestoredContext, false);
- canvas.addEventListener('webglcontextrestored', handleRestoredContext, false);
- } catch (error) {
- throw new Error('Error creating WebGL context');
- } // If we don't have a GL context, give up now
-
-
- if (!gl) {
- console.error('Unable to initialize WebGL. Your browser may not support it.');
- gl = null;
- }
-
- return gl;
-}
-/**
- * Returns the image data type as a string representation.
- * @param {any} image The cornerstone image object
- * @returns {string} image data type (rgb, iint16, uint16, int8 and uint8)
- * @memberof WebGLRendering
- */
-
-
-function getImageDataType(image) {
- if (image.color) {
- return 'rgb';
- }
-
- var pixelData = image.getPixelData();
-
- if (pixelData instanceof Int16Array) {
- return 'int16';
- }
-
- if (pixelData instanceof Uint16Array) {
- return 'uint16';
- }
-
- if (pixelData instanceof Int8Array) {
- return 'int8';
- }
-
- return 'uint8';
-}
-
-function getShaderProgram(image) {
- var datatype = getImageDataType(image); // We need a mechanism for
- // Choosing the shader based on the image datatype
- // Console.log("Datatype: " + datatype);
-
- if (_shaders_index_js__WEBPACK_IMPORTED_MODULE_0__["shaders"].hasOwnProperty(datatype)) {
- return _shaders_index_js__WEBPACK_IMPORTED_MODULE_0__["shaders"][datatype];
- }
-
- return _shaders_index_js__WEBPACK_IMPORTED_MODULE_0__["shaders"].rgb;
-}
-
-function generateTexture(image) {
- var TEXTURE_FORMAT = {
- uint8: gl.LUMINANCE,
- int8: gl.LUMINANCE_ALPHA,
- uint16: gl.LUMINANCE_ALPHA,
- int16: gl.RGB,
- rgb: gl.RGB
- };
- var TEXTURE_BYTES = {
- int8: 1,
- // Luminance
- uint16: 2,
- // Luminance + Alpha
- int16: 3,
- // RGB
- rgb: 3 // RGB
-
- };
- var imageDataType = getImageDataType(image);
- var format = TEXTURE_FORMAT[imageDataType]; // GL texture configuration
-
- var texture = gl.createTexture();
- gl.bindTexture(gl.TEXTURE_2D, texture);
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
- gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);
- var imageData = _shaders_index_js__WEBPACK_IMPORTED_MODULE_0__["dataUtilities"][imageDataType].storedPixelDataToImageData(image, image.width, image.height);
- gl.texImage2D(gl.TEXTURE_2D, 0, format, image.width, image.height, 0, format, gl.UNSIGNED_BYTE, imageData); // Calculate the size in bytes of this image in memory
-
- var sizeInBytes = image.width * image.height * TEXTURE_BYTES[imageDataType];
- return {
- texture: texture,
- sizeInBytes: sizeInBytes
- };
-}
-
-function getImageTexture(image) {
- var imageTexture = _textureCache_js__WEBPACK_IMPORTED_MODULE_2__["default"].getImageTexture(image.imageId);
-
- if (!imageTexture) {
- // Console.log("Generating texture for imageid: ", image.imageId);
- imageTexture = generateTexture(image);
- _textureCache_js__WEBPACK_IMPORTED_MODULE_2__["default"].putImageTexture(image, imageTexture);
- }
-
- return imageTexture.texture;
-}
-
-function initBuffers() {
- positionBuffer = gl.createBuffer();
- gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);
- gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([1, 1, 0, 1, 1, 0, 0, 0]), gl.STATIC_DRAW);
- texCoordBuffer = gl.createBuffer();
- gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer);
- gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0]), gl.STATIC_DRAW);
-}
-
-function renderQuad(shader, parameters, texture, width, height) {
- gl.clearColor(1.0, 0.0, 0.0, 1.0);
- gl.viewport(0, 0, width, height);
- gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
- gl.useProgram(shader.program);
- gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer);
- gl.vertexAttribPointer(shader.attributes.texCoordLocation, 2, gl.FLOAT, false, 0, 0);
- gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);
- gl.vertexAttribPointer(shader.attributes.positionLocation, 2, gl.FLOAT, false, 0, 0);
-
- for (var key in parameters) {
- var uniformLocation = gl.getUniformLocation(shader.program, key);
-
- if (!uniformLocation) {
- continue; // Disabling this error for now since RGB requires minPixelValue
- // but the other shaders do not.
- // throw `Could not access location for uniform: ${key}`;
- }
-
- var uniform = parameters[key];
- var type = uniform.type;
- var value = uniform.value;
-
- if (type === 'i') {
- gl.uniform1i(uniformLocation, value);
- } else if (type === 'f') {
- gl.uniform1f(uniformLocation, value);
- } else if (type === '2f') {
- gl.uniform2f(uniformLocation, value[0], value[1]);
- }
- }
-
- updateRectangle(gl, width, height);
- gl.activeTexture(gl.TEXTURE0);
- gl.bindTexture(gl.TEXTURE_2D, texture);
- gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
-}
-
-function render(enabledElement) {
- // Resize the canvas
- var image = enabledElement.image;
- renderCanvas.width = image.width;
- renderCanvas.height = image.height;
- var viewport = enabledElement.viewport; // Render the current image
-
- var shader = getShaderProgram(image);
- var texture = getImageTexture(image);
- var parameters = {
- u_resolution: {
- type: '2f',
- value: [image.width, image.height]
- },
- wc: {
- type: 'f',
- value: viewport.voi.windowCenter
- },
- ww: {
- type: 'f',
- value: viewport.voi.windowWidth
- },
- slope: {
- type: 'f',
- value: image.slope
- },
- intercept: {
- type: 'f',
- value: image.intercept
- },
- minPixelValue: {
- type: 'f',
- value: image.minPixelValue
- },
- invert: {
- type: 'i',
- value: viewport.invert ? 1 : 0
- }
- };
- renderQuad(shader, parameters, texture, image.width, image.height);
- return renderCanvas;
-}
-function isWebGLAvailable() {
- // Adapted from
- // http://stackoverflow.com/questions/9899807/three-js-detect-webgl-support-and-fallback-to-regular-canvas
- var options = {
- failIfMajorPerformanceCaveat: true
- };
-
- try {
- var canvas = document.createElement('canvas');
- return Boolean(window.WebGLRenderingContext) && (canvas.getContext('webgl', options) || canvas.getContext('experimental-webgl', options));
- } catch (e) {
- return false;
- }
-}
-
-/***/ }),
-
-/***/ "./webgl/shaders/index.js":
-/*!********************************!*\
- !*** ./webgl/shaders/index.js ***!
- \********************************/
-/*! exports provided: shaders, dataUtilities */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "shaders", function() { return shaders; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dataUtilities", function() { return dataUtilities; });
-/* harmony import */ var _int16_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./int16.js */ "./webgl/shaders/int16.js");
-/* harmony import */ var _int8_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./int8.js */ "./webgl/shaders/int8.js");
-/* harmony import */ var _rgb_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./rgb.js */ "./webgl/shaders/rgb.js");
-/* harmony import */ var _uint16_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./uint16.js */ "./webgl/shaders/uint16.js");
-/* harmony import */ var _uint8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./uint8.js */ "./webgl/shaders/uint8.js");
-
-
-
-
-
-var shaders = {
- int16: _int16_js__WEBPACK_IMPORTED_MODULE_0__["int16Shader"],
- int8: _int8_js__WEBPACK_IMPORTED_MODULE_1__["int8Shader"],
- rgb: _rgb_js__WEBPACK_IMPORTED_MODULE_2__["rgbShader"],
- uint16: _uint16_js__WEBPACK_IMPORTED_MODULE_3__["uint16Shader"],
- uint8: _uint8_js__WEBPACK_IMPORTED_MODULE_4__["uint8Shader"]
-};
-var dataUtilities = {
- int16: _int16_js__WEBPACK_IMPORTED_MODULE_0__["int16DataUtilities"],
- int8: _int8_js__WEBPACK_IMPORTED_MODULE_1__["int8DataUtilities"],
- rgb: _rgb_js__WEBPACK_IMPORTED_MODULE_2__["rgbDataUtilities"],
- uint16: _uint16_js__WEBPACK_IMPORTED_MODULE_3__["uint16DataUtilities"],
- uint8: _uint8_js__WEBPACK_IMPORTED_MODULE_4__["uint8DataUtilities"]
-};
-
-
-/***/ }),
-
-/***/ "./webgl/shaders/int16.js":
-/*!********************************!*\
- !*** ./webgl/shaders/int16.js ***!
- \********************************/
-/*! exports provided: int16DataUtilities, int16Shader */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "int16DataUtilities", function() { return int16DataUtilities; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "int16Shader", function() { return int16Shader; });
-/* eslint no-bitwise: 0 */
-var int16Shader = {};
-/**
- * Convert stored pixel data to image data.
- *
- * Pack int16 into three uint8 channels (r, g, b)
- *
- * @param {Image} image A Cornerstone Image Object
- * @returns {Uint8Array} The image data for use by the WebGL shader
- * @memberof WebGLRendering
- */
-
-function storedPixelDataToImageData(image) {
- // Transfer image data to alpha and luminance channels of WebGL texture
- // Credit to @jpambrun and @fernandojsg
- // Pack int16 into three uint8 channels (r, g, b)
- var pixelData = image.getPixelData();
- var numberOfChannels = 3;
- var data = new Uint8Array(image.width * image.height * numberOfChannels);
- var offset = 0;
-
- for (var i = 0; i < pixelData.length; i++) {
- var val = Math.abs(pixelData[i]);
- data[offset++] = val & 0xFF;
- data[offset++] = val >> 8;
- data[offset++] = pixelData[i] < 0 ? 0 : 1; // 0 For negative, 1 for positive
- }
-
- return data;
-}
-
-var int16DataUtilities = {
- storedPixelDataToImageData: storedPixelDataToImageData
-};
-int16Shader.frag = 'precision mediump float;' + 'uniform sampler2D u_image;' + 'uniform float ww;' + 'uniform float wc;' + 'uniform float slope;' + 'uniform float intercept;' + 'uniform int invert;' + 'varying vec2 v_texCoord;' + 'void main() {' + // Get texture
-'vec4 color = texture2D(u_image, v_texCoord);' + // Calculate luminance from packed texture
-'float intensity = color.r*256.0 + color.g*65536.0;' + 'if (color.b == 0.0)' + 'intensity = -intensity;' + // Rescale based on slope and window settings
-'intensity = intensity * slope + intercept;' + 'float center0 = wc - 0.5;' + 'float width0 = max(ww, 1.0);' + 'intensity = (intensity - center0) / width0 + 0.5;' + // Clamp intensity
-'intensity = clamp(intensity, 0.0, 1.0);' + // RGBA output
-'gl_FragColor = vec4(intensity, intensity, intensity, 1.0);' + // Apply any inversion necessary
-'if (invert == 1)' + 'gl_FragColor.rgb = 1.0 - gl_FragColor.rgb;' + '}';
-
-
-/***/ }),
-
-/***/ "./webgl/shaders/int8.js":
-/*!*******************************!*\
- !*** ./webgl/shaders/int8.js ***!
- \*******************************/
-/*! exports provided: int8DataUtilities, int8Shader */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "int8DataUtilities", function() { return int8DataUtilities; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "int8Shader", function() { return int8Shader; });
-var int8Shader = {};
-/**
- * Convert stored pixel data to image data.
- *
- * Store data in Uint8Array
- *
- * @param {Image} image A Cornerstone Image Object
- * @returns {Uint8Array} The image data for use by the WebGL shader
- * @memberof WebGLRendering
- */
-
-function storedPixelDataToImageData(image) {
- // Transfer image data to alpha channel of WebGL texture
- // Store data in Uint8Array
- var pixelData = image.getPixelData();
- var numberOfChannels = 2;
- var data = new Uint8Array(image.width * image.height * numberOfChannels);
- var offset = 0;
-
- for (var i = 0; i < pixelData.length; i++) {
- data[offset++] = pixelData[i];
- data[offset++] = pixelData[i] < 0 ? 0 : 1; // 0 For negative, 1 for positive
- }
-
- return data;
-}
-
-var int8DataUtilities = {
- storedPixelDataToImageData: storedPixelDataToImageData
-};
-int8Shader.frag = 'precision mediump float;' + 'uniform sampler2D u_image;' + 'uniform float ww;' + 'uniform float wc;' + 'uniform float slope;' + 'uniform float intercept;' + 'uniform int invert;' + 'varying vec2 v_texCoord;' + 'void main() {' + // Get texture
-'vec4 color = texture2D(u_image, v_texCoord);' + // Calculate luminance from packed texture
-'float intensity = color.r*256.;' + 'if (color.a == 0.0)' + 'intensity = -intensity;' + // Rescale based on slope and window settings
-'intensity = intensity * slope + intercept;' + 'float center0 = wc - 0.5;' + 'float width0 = max(ww, 1.0);' + 'intensity = (intensity - center0) / width0 + 0.5;' + // Clamp intensity
-'intensity = clamp(intensity, 0.0, 1.0);' + // RGBA output
-'gl_FragColor = vec4(intensity, intensity, intensity, 1.0);' + // Apply any inversion necessary
-'if (invert == 1)' + 'gl_FragColor.rgb = 1.0 - gl_FragColor.rgb;' + '}';
-
-
-/***/ }),
-
-/***/ "./webgl/shaders/rgb.js":
-/*!******************************!*\
- !*** ./webgl/shaders/rgb.js ***!
- \******************************/
-/*! exports provided: rgbDataUtilities, rgbShader */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rgbDataUtilities", function() { return rgbDataUtilities; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rgbShader", function() { return rgbShader; });
-var rgbShader = {};
-/**
- * Convert stored pixel data to image data.
- *
- * Pack RGB images into a 3-channel RGB texture
- *
- * @param {Image} image A Cornerstone Image Object
- * @returns {Uint8Array} The image data for use by the WebGL shader
- * @memberof WebGLRendering
- */
-
-function storedPixelDataToImageData(image) {
- var minPixelValue = image.minPixelValue;
- var canvasImageDataIndex = 0;
- var storedPixelDataIndex = 0; // Only 3 channels, since we use WebGL's RGB texture format
-
- var numStoredPixels = image.width * image.height * 4;
- var numOutputPixels = image.width * image.height * 3;
- var storedPixelData = image.getPixelData();
- var data = new Uint8Array(numOutputPixels); // NOTE: As of Nov 2014, most javascript engines have lower performance when indexing negative indexes.
- // We have a special code path for this case that improves performance. Thanks to @jpambrun for this enhancement
-
- if (minPixelValue < 0) {
- while (storedPixelDataIndex < numStoredPixels) {
- data[canvasImageDataIndex++] = storedPixelData[storedPixelDataIndex++] + -minPixelValue; // Red
-
- data[canvasImageDataIndex++] = storedPixelData[storedPixelDataIndex++] + -minPixelValue; // Green
-
- data[canvasImageDataIndex++] = storedPixelData[storedPixelDataIndex++] + -minPixelValue; // Blue
-
- storedPixelDataIndex += 1; // The stored pixel data has 4 channels
- }
- } else {
- while (storedPixelDataIndex < numStoredPixels) {
- data[canvasImageDataIndex++] = storedPixelData[storedPixelDataIndex++]; // Red
-
- data[canvasImageDataIndex++] = storedPixelData[storedPixelDataIndex++]; // Green
-
- data[canvasImageDataIndex++] = storedPixelData[storedPixelDataIndex++]; // Blue
-
- storedPixelDataIndex += 1; // The stored pixel data has 4 channels
- }
- }
-
- return data;
-}
-
-var rgbDataUtilities = {
- storedPixelDataToImageData: storedPixelDataToImageData
-};
-rgbShader.frag = 'precision mediump float;' + 'uniform sampler2D u_image;' + 'uniform float ww;' + 'uniform float wc;' + 'uniform float slope;' + 'uniform float intercept;' + 'uniform float minPixelValue;' + 'uniform int invert;' + 'varying vec2 v_texCoord;' + 'void main() {' + // Get texture
-'vec3 color = texture2D(u_image, v_texCoord).xyz;' + // Rescale based on slope and intercept
-'color = color * 256.0 * slope + intercept;' + // Apply window settings
-'float center0 = wc - 0.5 - minPixelValue;' + 'float width0 = max(ww, 1.0);' + 'color = (color - center0) / width0 + 0.5;' + // RGBA output
-'gl_FragColor = vec4(color, 1);' + // Apply any inversion necessary
-'if (invert == 1)' + 'gl_FragColor.rgb = 1. - gl_FragColor.rgb;' + '}';
-
-
-/***/ }),
-
-/***/ "./webgl/shaders/uint16.js":
-/*!*********************************!*\
- !*** ./webgl/shaders/uint16.js ***!
- \*********************************/
-/*! exports provided: uint16DataUtilities, uint16Shader */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uint16DataUtilities", function() { return uint16DataUtilities; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uint16Shader", function() { return uint16Shader; });
-/* eslint no-bitwise: 0 */
-var uint16Shader = {};
-/**
- * Convert stored pixel data to image data.
- *
- * For uint16 pack uint16 into two uint8 channels (r and a).
- *
- * @param {Image} image A Cornerstone Image Object
- * @returns {Uint8Array} The image data for use by the WebGL shader
- * @memberof WebGLRendering
- */
-
-function storedPixelDataToImageData(image) {
- // Transfer image data to alpha and luminance channels of WebGL texture
- // Credit to @jpambrun and @fernandojsg
- // Pack uint16 into two uint8 channels (r and a)
- var pixelData = image.getPixelData();
- var numberOfChannels = 2;
- var data = new Uint8Array(image.width * image.height * numberOfChannels);
- var offset = 0;
-
- for (var i = 0; i < pixelData.length; i++) {
- var val = pixelData[i];
- data[offset++] = val & 0xFF;
- data[offset++] = val >> 8;
- }
-
- return data;
-}
-
-var uint16DataUtilities = {
- storedPixelDataToImageData: storedPixelDataToImageData
-};
-uint16Shader.frag = 'precision mediump float;' + 'uniform sampler2D u_image;' + 'uniform float ww;' + 'uniform float wc;' + 'uniform float slope;' + 'uniform float intercept;' + 'uniform int invert;' + 'varying vec2 v_texCoord;' + 'void main() {' + // Get texture
-'vec4 color = texture2D(u_image, v_texCoord);' + // Calculate luminance from packed texture
-'float intensity = color.r*256.0 + color.a*65536.0;' + // Rescale based on slope and window settings
-'intensity = intensity * slope + intercept;' + 'float center0 = wc - 0.5;' + 'float width0 = max(ww, 1.0);' + 'intensity = (intensity - center0) / width0 + 0.5;' + // Clamp intensity
-'intensity = clamp(intensity, 0.0, 1.0);' + // RGBA output
-'gl_FragColor = vec4(intensity, intensity, intensity, 1.0);' + // Apply any inversion necessary
-'if (invert == 1)' + 'gl_FragColor.rgb = 1.0 - gl_FragColor.rgb;' + '}';
-
-
-/***/ }),
-
-/***/ "./webgl/shaders/uint8.js":
-/*!********************************!*\
- !*** ./webgl/shaders/uint8.js ***!
- \********************************/
-/*! exports provided: uint8DataUtilities, uint8Shader */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uint8DataUtilities", function() { return uint8DataUtilities; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uint8Shader", function() { return uint8Shader; });
-var uint8Shader = {};
-/**
- * Convert stored pixel data to image data. Here we will store
- * all data in the alpha channel.
- *
- * @param {Image} image A Cornerstone Image Object
- * @returns {Uint8Array} The image data for use by the WebGL shader
- * @memberof WebGLRendering
- */
-
-function storedPixelDataToImageData(image) {
- // Transfer image data to alpha channel of WebGL texture
- return image.getPixelData();
-}
-
-var uint8DataUtilities = {
- storedPixelDataToImageData: storedPixelDataToImageData
-};
-uint8Shader.frag = 'precision mediump float;' + 'uniform sampler2D u_image;' + 'uniform float ww;' + 'uniform float wc;' + 'uniform float slope;' + 'uniform float intercept;' + 'uniform int invert;' + 'varying vec2 v_texCoord;' + 'void main() {' + // Get texture
-'vec4 color = texture2D(u_image, v_texCoord);' + // Calculate luminance from packed texture
-'float intensity = color.r*256.0;' + // Rescale based on slope and window settings
-'intensity = intensity * slope + intercept;' + 'float center0 = wc - 0.5;' + 'float width0 = max(ww, 1.0);' + 'intensity = (intensity - center0) / width0 + 0.5;' + // Clamp intensity
-'intensity = clamp(intensity, 0.0, 1.0);' + // RGBA output
-'gl_FragColor = vec4(intensity, intensity, intensity, 1.0);' + // Apply any inversion necessary
-'if (invert == 1)' + 'gl_FragColor.rgb = 1.0 - gl_FragColor.rgb;' + '}';
-
-
-/***/ }),
-
-/***/ "./webgl/textureCache.js":
-/*!*******************************!*\
- !*** ./webgl/textureCache.js ***!
- \*******************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../events.js */ "./events.js");
-/* harmony import */ var _triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../triggerEvent.js */ "./triggerEvent.js");
-
-
-/**
- * This module deals with caching image textures in VRAM for WebGL
- * @module WebGLTextureCache
- */
-
-var imageCache = {};
-var cachedImages = [];
-var maximumSizeInBytes = 1024 * 1024 * 256; // 256 MB
-
-var cacheSizeInBytes = 0;
-
-function getCacheInfo() {
- return {
- maximumSizeInBytes: maximumSizeInBytes,
- cacheSizeInBytes: cacheSizeInBytes,
- numberOfImagesCached: cachedImages.length
- };
-}
-
-function purgeCacheIfNecessary() {
- // If max cache size has not been exceeded, do nothing
- if (cacheSizeInBytes <= maximumSizeInBytes) {
- return;
- } // Cache size has been exceeded, create list of images sorted by timeStamp
- // So we can purge the least recently used image
-
-
- function compare(a, b) {
- if (a.timeStamp > b.timeStamp) {
- return -1;
- }
-
- if (a.timeStamp < b.timeStamp) {
- return 1;
- }
-
- return 0;
- }
-
- cachedImages.sort(compare); // Remove images as necessary
-
- while (cacheSizeInBytes > maximumSizeInBytes) {
- var lastCachedImage = cachedImages[cachedImages.length - 1];
- cacheSizeInBytes -= lastCachedImage.sizeInBytes;
- delete imageCache[lastCachedImage.imageId];
- cachedImages.pop();
- Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__["default"])(_events_js__WEBPACK_IMPORTED_MODULE_0__["events"], _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].WEBGL_TEXTURE_REMOVED, {
- imageId: lastCachedImage.imageId
- });
- }
-
- var cacheInfo = getCacheInfo();
- Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__["default"])(_events_js__WEBPACK_IMPORTED_MODULE_0__["events"], _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].WEBGL_TEXTURE_CACHE_FULL, cacheInfo);
-}
-
-function setMaximumSizeBytes(numBytes) {
- if (numBytes === undefined) {
- throw new Error('setMaximumSizeBytes: parameter numBytes must not be undefined');
- }
-
- if (numBytes.toFixed === undefined) {
- throw new Error('setMaximumSizeBytes: parameter numBytes must be a number');
- }
-
- maximumSizeInBytes = numBytes;
- purgeCacheIfNecessary();
-}
-
-function putImageTexture(image, imageTexture) {
- var imageId = image.imageId;
-
- if (image === undefined) {
- throw new Error('putImageTexture: image must not be undefined');
- }
-
- if (imageId === undefined) {
- throw new Error('putImageTexture: imageId must not be undefined');
- }
-
- if (imageTexture === undefined) {
- throw new Error('putImageTexture: imageTexture must not be undefined');
- }
-
- if (Object.prototype.hasOwnProperty.call(imageCache, imageId) === true) {
- throw new Error('putImageTexture: imageId already in cache');
- }
-
- var cachedImage = {
- imageId: imageId,
- imageTexture: imageTexture,
- timeStamp: new Date(),
- sizeInBytes: imageTexture.sizeInBytes
- };
- imageCache[imageId] = cachedImage;
- cachedImages.push(cachedImage);
-
- if (imageTexture.sizeInBytes === undefined) {
- throw new Error('putImageTexture: imageTexture.sizeInBytes must not be undefined');
- }
-
- if (imageTexture.sizeInBytes.toFixed === undefined) {
- throw new Error('putImageTexture: imageTexture.sizeInBytes is not a number');
- }
-
- cacheSizeInBytes += cachedImage.sizeInBytes;
- purgeCacheIfNecessary();
-}
-
-function getImageTexture(imageId) {
- if (imageId === undefined) {
- throw new Error('getImageTexture: imageId must not be undefined');
- }
-
- var cachedImage = imageCache[imageId];
-
- if (cachedImage === undefined) {
- return;
- } // Bump time stamp for cached image
-
-
- cachedImage.timeStamp = new Date();
- return cachedImage.imageTexture;
-}
-
-function removeImageTexture(imageId) {
- if (imageId === undefined) {
- throw new Error('removeImageTexture: imageId must not be undefined');
- }
-
- var cachedImage = imageCache[imageId];
-
- if (cachedImage === undefined) {
- throw new Error('removeImageTexture: imageId must not be undefined');
- }
-
- cachedImages.splice(cachedImages.indexOf(cachedImage), 1);
- cacheSizeInBytes -= cachedImage.sizeInBytes;
- delete imageCache[imageId];
- return cachedImage.imageTexture;
-}
-
-function purgeCache() {
- while (cachedImages.length > 0) {
- var removedCachedImage = cachedImages.pop();
- delete imageCache[removedCachedImage.imageId];
- }
-
- cacheSizeInBytes = 0;
-}
-
-/* harmony default export */ __webpack_exports__["default"] = ({
- purgeCache: purgeCache,
- getImageTexture: getImageTexture,
- putImageTexture: putImageTexture,
- removeImageTexture: removeImageTexture,
- setMaximumSizeBytes: setMaximumSizeBytes
-});
-
-/***/ }),
-
-/***/ "./webgl/vertexShader.js":
-/*!*******************************!*\
- !*** ./webgl/vertexShader.js ***!
- \*******************************/
-/*! exports provided: vertexShader */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "vertexShader", function() { return vertexShader; });
-var vertexShader = 'attribute vec2 a_position;' + 'attribute vec2 a_texCoord;' + 'uniform vec2 u_resolution;' + 'varying vec2 v_texCoord;' + 'void main() {' + 'vec2 zeroToOne = a_position / u_resolution;' + 'vec2 zeroToTwo = zeroToOne * 2.0;' + 'vec2 clipSpace = zeroToTwo - 1.0;' + 'gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1);' + 'v_texCoord = a_texCoord;' + '}';
-
-/***/ })
-
-/******/ });
-});
-//# sourceMappingURL=cornerstone.js.map
-});
-
-var cornerstone$3 = unwrapExports(cornerstone$2);
-
-var cornerstoneWADOImageLoader_min = createCommonjsModule(function (module, exports) {
-/*! cornerstone-wado-image-loader - 2.2.2 - 2018-12-05 | (c) 2016 Chris Hafey | https://github.com/cornerstonejs/cornerstoneWADOImageLoader */
-!function(e,t){module.exports=t();}(commonjsGlobal,function(){return function(r){var a={};function n(e){if(a[e])return a[e].exports;var t=a[e]={i:e,l:!1,exports:{}};return r[e].call(t.exports,t,t.exports,n),t.l=!0,t.exports}return n.m=r,n.c=a,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r});},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0});},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var a in t)n.d(r,a,function(e){return t[e]}.bind(null,a));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=6)}([function(e,t,r){t.a=function(e){for(var t,r=e[0],a=e[0],n=e.length,o=1;o>8&255;}else 8===e.bitsAllocated&&(e.pixelData=t);var i;return e};var d=function(e,t){if(8===e.bitsAllocated)return e.planarConfiguration?function(e,t){for(var r=t,a=e.rows*e.columns,n=new ArrayBuffer(a*e.samplesPerPixel),o=new DataView(r.buffer,r.byteOffset),i=new Int8Array(r.buffer,r.byteOffset),l=new Int8Array(n),s=0,u=o.getInt32(0,!0),c=0;c>l;var u=(new Date).getTime();return e.decodeTimeInMS=u-o,e};},function(e,t,r){r.r(t);var a=function(e,t){if(void 0===e)throw new Error("decodeRGB: rgbBuffer must not be undefined");if(e.length%3!=0)throw new Error("decodeRGB: rgbBuffer length must be divisible by 3");for(var r=e.length/3,a=0,n=0,o=0;o>t;return a}var l=function(e,t){for(var r=e.columns*e.rows,a=e.pixelData,n=e.redPaletteColorLookupTableData,o=e.greenPaletteColorLookupTableData,i=e.bluePaletteColorLookupTableData,l=e.redPaletteColorLookupTableData.length,s=0,u=0,c=e.redPaletteColorLookupTableDescriptor[1],f=8===e.redPaletteColorLookupTableDescriptor[2]?0:8,d=x(n,f),p=x(o,f),m=x(i,f),g=0;gt.length)return !1;for(var a=r,n=0;n=E.maxWebWorkers)){var e=new Worker(E.webWorkerPath);R.push({worker:e,status:"initializing"}),e.addEventListener("message",F),e.postMessage({taskType:"initialize",workerIndex:R.length-1,config:E});}}function G(e){if(e=e||W,E)throw new Error("WebWorkerManager already initialized");if((E=e).maxWebWorkers=E.maxWebWorkers||navigator.hardwareConcurrency||1,!E.startWebWorkersOnDemand)for(var t=0;t=e.byteArray.length)throw new Error("frame exceeds size of pixelData");return new Uint8Array(e.byteArray.buffer,r,u)}if(16===n){if((r=s+t*u*2)>=e.byteArray.length)throw new Error("frame exceeds size of pixelData");return new Uint8Array(e.byteArray.buffer,r,2*u)}if(1===n){if((r=s+t*u*.125)>=e.byteArray.length)throw new Error("frame exceeds size of pixelData");return Pe(e.byteArray,r,u)}if(32!==n)throw new Error("unsupported pixel format");if((r=s+t*u*4)>=e.byteArray.length)throw new Error("frame exceeds size of pixelData");return new Uint8Array(e.byteArray.buffer,r,4*u)};var Ie=function(e){var t=de(e),r=parseInt(t.url,10),a=be.get(r);return new Promise(function(r,e){var t=new FileReader;t.onload=function(e){var t=e.target.result;r(t);},t.onerror=e,t.readAsArrayBuffer(a);})};var Te=function(e){var t=1i?i:t},e.degToRad=function(t){return t*(Math.PI/180)},e.radToDeg=function(t){return t*(180/Math.PI)},e.sign=function(t){return "number"==typeof t?t?t<0?-1:1:t==t?0:NaN:NaN};},function(t,e,i){Object.defineProperty(e,"__esModule",{value:!0});var n,o=i(3),s=(n=o)&&n.__esModule?n:{default:n},r=i(0);var a,h,u,c,l,f=function(t,e,i){this.x=t||0,this.y=e||0,this.z=i||0;};f.prototype={constructor:f,set:function(t,e,i){return this.x=t,this.y=e,this.z=i,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setZ:function(t){return this.z=t,this},setComponent:function(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}},getComponent:function(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}},copy:function(t){return this.x=t.x,this.y=t.y,this.z=t.z,this},add:function(t,e){return void 0!==e?(console.warn("DEPRECATED: Vector3's .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this)},addScalar:function(t){return this.x+=t,this.y+=t,this.z+=t,this},addVectors:function(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this},sub:function(t,e){return void 0!==e?(console.warn("DEPRECATED: Vector3's .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this)},subVectors:function(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this},multiply:function(t,e){return void 0!==e?(console.warn("DEPRECATED: Vector3's .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(t,e)):(this.x*=t.x,this.y*=t.y,this.z*=t.z,this)},multiplyScalar:function(t){return this.x*=t,this.y*=t,this.z*=t,this},multiplyVectors:function(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this},applyAxisAngle:(l=void 0,function(t,e){return void 0===l&&(l=new s.default),this.applyQuaternion(l.setFromAxisAngle(t.normalize(),e)),this}),applyMatrix3:function(t){var e=this.x,i=this.y,n=this.z,o=t.elements;return this.x=o[0]*e+o[3]*i+o[6]*n,this.y=o[1]*e+o[4]*i+o[7]*n,this.z=o[2]*e+o[5]*i+o[8]*n,this},applyMatrix4:function(t){var e=this.x,i=this.y,n=this.z,o=t.elements;return this.x=o[0]*e+o[4]*i+o[8]*n+o[12],this.y=o[1]*e+o[5]*i+o[9]*n+o[13],this.z=o[2]*e+o[6]*i+o[10]*n+o[14],this},applyProjection:function(t){var e=this.x,i=this.y,n=this.z,o=t.elements,s=1/(o[3]*e+o[7]*i+o[11]*n+o[15]);return this.x=(o[0]*e+o[4]*i+o[8]*n+o[12])*s,this.y=(o[1]*e+o[5]*i+o[9]*n+o[13])*s,this.z=(o[2]*e+o[6]*i+o[10]*n+o[14])*s,this},applyQuaternion:function(t){var e=this.x,i=this.y,n=this.z,o=t.x,s=t.y,r=t.z,a=t.w,h=a*e+s*n-r*i,u=a*i+r*e-o*n,c=a*n+o*i-s*e,l=-o*e-s*i-r*n;return this.x=h*a+l*-o+u*-r-c*-s,this.y=u*a+l*-s+c*-o-h*-r,this.z=c*a+l*-r+h*-s-u*-o,this},transformDirection:function(t){var e=this.x,i=this.y,n=this.z,o=t.elements;return this.x=o[0]*e+o[4]*i+o[8]*n,this.y=o[1]*e+o[5]*i+o[9]*n,this.z=o[2]*e+o[6]*i+o[10]*n,this.normalize(),this},divide:function(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this},divideScalar:function(t){if(0!==t){var e=1/t;this.x*=e,this.y*=e,this.z*=e;}else this.x=0,this.y=0,this.z=0;return this},min:function(t){return this.x>t.x&&(this.x=t.x),this.y>t.y&&(this.y=t.y),this.z>t.z&&(this.z=t.z),this},max:function(t){return this.xe.x&&(this.x=e.x),this.ye.y&&(this.y=e.y),this.ze.z&&(this.z=e.z),this},clampScalar:(u=void 0,c=void 0,function(t,e){return void 0===u&&(u=new f,c=new f),u.set(t,t,t),c.set(e,e,e),this.clamp(u,c)}),floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this},roundToZero:function(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this},negate:function(){return this.multiplyScalar(-1)},dot:function(t){return this.x*t.x+this.y*t.y+this.z*t.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length())},setLength:function(t){var e=this.length();return 0!==e&&t!==e&&this.multiplyScalar(t/e),this},lerp:function(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this},cross:function(t,e){if(void 0!==e)return console.warn("DEPRECATED: Vector3's .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(t,e);var i=this.x,n=this.y,o=this.z;return this.x=n*t.z-o*t.y,this.y=o*t.x-i*t.z,this.z=i*t.y-n*t.x,this},crossVectors:function(t,e){var i=t.x,n=t.y,o=t.z,s=e.x,r=e.y,a=e.z;return this.x=n*a-o*r,this.y=o*s-i*a,this.z=i*r-n*s,this},projectOnVector:(a=void 0,h=void 0,function(t){return void 0===a&&(a=new f),a.copy(t).normalize(),h=this.dot(a),this.copy(a).multiplyScalar(h)}),projectOnPlane:function(){var t=void 0;return function(e){return void 0===t&&(t=new f),t.copy(this).projectOnVector(e),this.sub(t)}}(),reflect:function(){var t=void 0;return function(e){return void 0===t&&(t=new f),this.sub(t.copy(e).multiplyScalar(2*this.dot(e)))}}(),angleTo:function(t){var e=this.dot(t)/(this.length()*t.length());return Math.acos((0, r.clamp)(e,-1,1))},distanceTo:function(t){return Math.sqrt(this.distanceToSquared(t))},distanceToSquared:function(t){var e=this.x-t.x,i=this.y-t.y,n=this.z-t.z;return e*e+i*i+n*n},setFromMatrixPosition:function(t){return this.x=t.elements[12],this.y=t.elements[13],this.z=t.elements[14],this},setFromMatrixScale:function(t){var e=this.set(t.elements[0],t.elements[1],t.elements[2]).length(),i=this.set(t.elements[4],t.elements[5],t.elements[6]).length(),n=this.set(t.elements[8],t.elements[9],t.elements[10]).length();return this.x=e,this.y=i,this.z=n,this},setFromMatrixColumn:function(t,e){var i=4*t,n=e.elements;return this.x=n[i],this.y=n[i+1],this.z=n[i+2],this},equals:function(t){return t.x===this.x&&t.y===this.y&&t.z===this.z},fromArray:function(t){return this.x=t[0],this.y=t[1],this.z=t[2],this},toArray:function(){return [this.x,this.y,this.z]},clone:function(){return new f(this.x,this.y,this.z)}},e.default=f;},function(t,e,i){Object.defineProperty(e,"__esModule",{value:!0});var n=i(0);function o(t){return t*t}function s(t,e){return o(t.x-e.x)+o(t.y-e.y)}var r={distanceToPoint:function(t,e){return Math.sqrt(function(t,e){var i=s(t.start,t.end);if(0===i)return s(e,t.start);var n=((e.x-t.start.x)*(t.end.x-t.start.x)+(e.y-t.start.y)*(t.end.y-t.start.y))/i;return s(e,n<0?t.start:n>1?t.end:{x:t.start.x+n*(t.end.x-t.start.x),y:t.start.y+n*(t.end.y-t.start.y)})}(t,e))},intersectLine:function(t,e){var i,o,s,r,a,h,u,c,l,f,y,d={},p=t.start.x,x=t.start.y,m=t.end.x,v=t.end.y,g=e.start.x,z=e.start.y,b=e.end.x,M=e.end.y,w=void 0;if(f=(i=v-x)*b+(s=p-m)*M+(a=m*x-p*v),(0===(l=i*g+s*z+a)||0===f||(0, n.sign)(l)!==(0, n.sign)(f))&&(c=(o=M-z)*m+(r=g-b)*v+(h=b*z-g*M),0===(u=o*p+r*x+h)||0===c||(0, n.sign)(u)!==(0, n.sign)(c))){y=i*r-o*s,w=s*h-r*a;var R=parseFloat(w/y);w=o*a-i*h;var P=parseFloat(w/y);return d.x=R,d.y=P,d}}};e.default=r;},function(t,e,i){Object.defineProperty(e,"__esModule",{value:!0});var n=function(t,e,i,n){this.x=t||0,this.y=e||0,this.z=i||0,this.w=void 0!==n?n:1;};n.prototype.setFromAxisAngle=function(t,e){var i=e/2,n=Math.sin(i);return this.x=t.x*n,this.y=t.y*n,this.z=t.z*n,this.w=Math.cos(i),this},n.prototype.multiplyQuaternions=function(t,e){var i=t.x,n=t.y,o=t.z,s=t.w,r=e.x,a=e.y,h=e.z,u=e.w;return this.x=i*u+s*r+n*h-o*a,this.y=n*u+s*a+o*r-i*h,this.z=o*u+s*h+i*a-n*r,this.w=s*u-i*r-n*a-o*h,this},n.prototype.setFromRotationMatrix=function(t){var e=t.elements,i=e[0],n=e[4],o=e[8],s=e[1],r=e[5],a=e[9],h=e[2],u=e[6],c=e[10],l=i+r+c,f=void 0;return l>0?(f=.5/Math.sqrt(l+1),this.w=.25/f,this.x=(u-a)*f,this.y=(o-h)*f,this.z=(s-n)*f):i>r&&i>c?(f=2*Math.sqrt(1+i-r-c),this.w=(u-a)/f,this.x=.25*f,this.y=(n+s)/f,this.z=(o+h)/f):r>c?(f=2*Math.sqrt(1+r-i-c),this.w=(o-h)/f,this.x=(n+s)/f,this.y=.25*f,this.z=(a+u)/f):(f=2*Math.sqrt(1+c-i-r),this.w=(s-n)/f,this.x=(o+h)/f,this.y=(a+u)/f,this.z=.25*f),this},e.default=n;},function(t,e,i){Object.defineProperty(e,"__esModule",{value:!0});var n,o=i(2),s=(n=o)&&n.__esModule?n:{default:n};function r(t){return {topLeft:{x:t.left,y:t.top},bottomRight:{x:t.left+t.width,y:t.top+t.height}}}var a={distanceToPoint:function(t,e){var i=655535;return function(t){return [{start:{x:t.left,y:t.top},end:{x:t.left+t.width,y:t.top}},{start:{x:t.left+t.width,y:t.top},end:{x:t.left+t.width,y:t.top+t.height}},{start:{x:t.left+t.width,y:t.top+t.height},end:{x:t.left,y:t.top+t.height}},{start:{x:t.left,y:t.top+t.height},end:{x:t.left,y:t.top}}]}(t).forEach(function(t){var n=s.default.distanceToPoint(t,e);n=0?e.width>=0?!(o.bottomRight.x<=s.topLeft.x||s.bottomRight.x<=o.topLeft.x):!(o.bottomRight.x<=s.bottomRight.x||s.topLeft.x<=o.topLeft.x):e.width>=0?!(o.topLeft.x<=s.topLeft.x||s.bottomRight.x<=o.bottomRight.x):!(o.topLeft.x<=s.bottomRight.x||s.topLeft.x<=o.bottomRight.x),n=t.height>=0?e.height>=0?!(o.bottomRight.y<=s.topLeft.y||s.bottomRight.y<=o.topLeft.y):!(o.bottomRight.y<=s.bottomRight.y||s.topLeft.y<=o.topLeft.y):e.height>=0?!(o.topLeft.y<=s.topLeft.y||s.bottomRight.y<=o.bottomRight.y):!(o.topLeft.y<=s.bottomRight.y||s.top<=o.bottomRight.y),i&&n}(t,e)){var n=r(t),o=r(e);return t.width>=0?e.width>=0?(i.topLeft.x=Math.max(n.topLeft.x,o.topLeft.x),i.bottomRight.x=Math.min(n.bottomRight.x,o.bottomRight.x)):(i.topLeft.x=Math.max(n.topLeft.x,o.bottomRight.x),i.bottomRight.x=Math.min(n.bottomRight.x,o.topLeft.x)):e.width>=0?(i.topLeft.x=Math.min(n.topLeft.x,o.bottomRight.x),i.bottomRight.x=Math.max(n.bottomRight.x,o.topLeft.x)):(i.topLeft.x=Math.min(n.topLeft.x,o.topLeft.x),i.bottomRight.x=Math.max(n.bottomRight.x,o.bottomRight.x)),t.height>=0?e.height>=0?(i.topLeft.y=Math.max(n.topLeft.y,o.topLeft.y),i.bottomRight.y=Math.min(n.bottomRight.y,o.bottomRight.y)):(i.topLeft.y=Math.max(n.topLeft.y,o.bottomRight.y),i.bottomRight.y=Math.min(n.bottomRight.y,o.topLeft.y)):e.height>=0?(i.topLeft.y=Math.min(n.topLeft.y,o.bottomRight.y),i.bottomRight.y=Math.max(n.bottomRight.y,o.topLeft.y)):(i.topLeft.y=Math.min(n.topLeft.y,o.topLeft.y),i.bottomRight.y=Math.max(n.bottomRight.y,o.bottomRight.y)),i}}};e.default=a;},function(t,e,i){function n(t,e){return {x:t.x-e.x,y:t.y-e.y}}function o(t,e){return Math.sqrt(s(t,e))}function s(t,e){var i=n(t,e);return i.x*i.x+i.y*i.y}Object.defineProperty(e,"__esModule",{value:!0});var r={subtract:n,copy:function(t){return {x:t.x,y:t.y}},pageToPoint:function(t){return {x:t.pageX,y:t.pageY}},distance:o,distanceSquared:s,insideRect:function(t,e){return !(t.xe.left+e.width||t.ye.top+e.height)},findClosestPoint:function(t,e){var i=[],n=void 0;return t.forEach(function(t,s){var r=o(t,e);i.push(r),n=0===s?r:Math.min(r,n);}),t[i.indexOf(n)]}};e.default=r;},function(t,e,i){Object.defineProperty(e,"__esModule",{value:!0});var n,o=i(1),s=(n=o)&&n.__esModule?n:{default:n};var r,a,h=function(t,e){this.normal=void 0!==t?t:new s.default(1,0,0),this.constant=void 0!==e?e:0;};h.prototype={constructor:h,set:function(t,e){return this.normal.copy(t),this.constant=e,this},setComponents:function(t,e,i,n){return this.normal.set(t,e,i),this.constant=n,this},setFromNormalAndCoplanarPoint:function(t,e){return this.normal.copy(t),this.constant=-e.dot(this.normal),this},setFromCoplanarPoints:(r=new s.default,a=new s.default,function(t,e,i){var n=r.subVectors(i,e).cross(a.subVectors(t,e)).normalize();return this.setFromNormalAndCoplanarPoint(n,t),this}),copy:function(t){return this.normal.copy(t.normal),this.constant=t.constant,this},normalize:function(){var t=1/this.normal.length();return this.normal.multiplyScalar(t),this.constant*=t,this},negate:function(){return this.constant*=-1,this.normal.negate(),this},distanceToPoint:function(t){return this.normal.dot(t)+this.constant},distanceToSphere:function(t){return this.distanceToPoint(t.center)-t.radius},projectPoint:function(t,e){return this.orthoPoint(t,e).sub(t).negate()},orthoPoint:function(t,e){var i=this.distanceToPoint(t);return (e||new s.default).copy(this.normal).multiplyScalar(i)},isIntersectionLine:function(t){var e=this.distanceToPoint(t.start),i=this.distanceToPoint(t.end);return e<0&&i>0||i<0&&e>0},intersectLine:function(){var t=new s.default;return function(e,i){var n=i||new s.default,o=e.delta(t),r=this.normal.dot(o);if(0===r)return 0===this.distanceToPoint(e.start)?n.copy(e.start):void 0;var a=-(e.start.dot(this.normal)+this.constant)/r;return a<0||a>1?void 0:n.copy(o).multiplyScalar(a).add(e.start)}}(),intersectPlane:function(t){var e=this.normal.clone().cross(t.normal),i={origin:new s.default,direction:e};if(this.normal.clone().cross(t.normal).length<1e-10)return i.direction=new s.default,i;var n=this.constant,o=t.constant,r=this.normal.clone().dot(t.normal),a=-(n-o*r)/(1-r*r),h=-(o-n*r)/(1-r*r);return i.origin=this.normal.clone().multiplyScalar(a).add(t.normal.clone().multiplyScalar(h)),i},coplanarPoint:function(t){return (t||new s.default).copy(this.normal).multiplyScalar(-this.constant)},translate:function(t){return this.constant=this.constant-t.dot(this.normal),this},equals:function(t){return t.normal.equals(this.normal)&&t.constant===this.constant},clone:function(){return (new h).copy(this)}},e.default=h;},function(t,e,i){Object.defineProperty(e,"__esModule",{value:!0});var n,o=i(1),s=(n=o)&&n.__esModule?n:{default:n};var r=function(t,e,i,n,o,s,r,a,h,u,c,l,f,y,d,p){this.elements=new Float32Array(16);var x=this.elements;x[0]=void 0!==t?t:1,x[4]=e||0,x[8]=i||0,x[12]=n||0,x[1]=o||0,x[5]=void 0!==s?s:1,x[9]=r||0,x[13]=a||0,x[2]=h||0,x[6]=u||0,x[10]=void 0!==c?c:1,x[14]=l||0,x[3]=f||0,x[7]=y||0,x[11]=d||0,x[15]=void 0!==p?p:1;};r.prototype.makeRotationFromQuaternion=function(t){var e=this.elements,i=t.x,n=t.y,o=t.z,s=t.w,r=i+i,a=n+n,h=o+o,u=i*r,c=i*a,l=i*h,f=n*a,y=n*h,d=o*h,p=s*r,x=s*a,m=s*h;return e[0]=1-(f+d),e[4]=c-m,e[8]=l+x,e[1]=c+m,e[5]=1-(u+d),e[9]=y-p,e[2]=l-x,e[6]=y+p,e[10]=1-(u+f),e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this},r.prototype.multiplyMatrices=function(t,e){var i=t.elements,n=e.elements,o=this.elements,s=i[0],r=i[4],a=i[8],h=i[12],u=i[1],c=i[5],l=i[9],f=i[13],y=i[2],d=i[6],p=i[10],x=i[14],m=i[3],v=i[7],g=i[11],z=i[15],b=n[0],M=n[4],w=n[8],R=n[12],P=n[1],L=n[5],T=n[9],S=n[13],_=n[2],V=n[6],q=n[10],j=n[14],E=n[3],k=n[7],O=n[11],A=n[15];return o[0]=s*b+r*P+a*_+h*E,o[4]=s*M+r*L+a*V+h*k,o[8]=s*w+r*T+a*q+h*O,o[12]=s*R+r*S+a*j+h*A,o[1]=u*b+c*P+l*_+f*E,o[5]=u*M+c*L+l*V+f*k,o[9]=u*w+c*T+l*q+f*O,o[13]=u*R+c*S+l*j+f*A,o[2]=y*b+d*P+p*_+x*E,o[6]=y*M+d*L+p*V+x*k,o[10]=y*w+d*T+p*q+x*O,o[14]=y*R+d*S+p*j+x*A,o[3]=m*b+v*P+g*_+z*E,o[7]=m*M+v*L+g*V+z*k,o[11]=m*w+v*T+g*q+z*O,o[15]=m*R+v*S+g*j+z*A,this},r.prototype.multiply=function(t,e){return void 0!==e?(console.warn("DEPRECATED: Matrix4's .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(t,e)):this.multiplyMatrices(this,t)},r.prototype.getInverse=function(t,e){var i=this.elements,n=t.elements,o=n[0],s=n[4],r=n[8],a=n[12],h=n[1],u=n[5],c=n[9],l=n[13],f=n[2],y=n[6],d=n[10],p=n[14],x=n[3],m=n[7],v=n[11],g=n[15];i[0]=c*p*m-l*d*m+l*y*v-u*p*v-c*y*g+u*d*g,i[4]=a*d*m-r*p*m-a*y*v+s*p*v+r*y*g-s*d*g,i[8]=r*l*m-a*c*m+a*u*v-s*l*v-r*u*g+s*c*g,i[12]=a*c*y-r*l*y-a*u*d+s*l*d+r*u*p-s*c*p,i[1]=l*d*x-c*p*x-l*f*v+h*p*v+c*f*g-h*d*g,i[5]=r*p*x-a*d*x+a*f*v-o*p*v-r*f*g+o*d*g,i[9]=a*c*x-r*l*x-a*h*v+o*l*v+r*h*g-o*c*g,i[13]=r*l*f-a*c*f+a*h*d-o*l*d-r*h*p+o*c*p,i[2]=u*p*x-l*y*x+l*f*m-h*p*m-u*f*g+h*y*g,i[6]=a*y*x-s*p*x-a*f*m+o*p*m+s*f*g-o*y*g,i[10]=s*l*x-a*u*x+a*h*m-o*l*m-s*h*g+o*u*g,i[14]=a*u*f-s*l*f-a*h*y+o*l*y+s*h*p-o*u*p,i[3]=c*y*x-u*d*x-c*f*m+h*d*m+u*f*v-h*y*v,i[7]=s*d*x-r*y*x+r*f*m-o*d*m-s*f*v+o*y*v,i[11]=r*u*x-s*c*x-r*h*m+o*c*m+s*h*v-o*u*v,i[15]=s*c*f-r*u*f+r*h*y-o*c*y-s*h*d+o*u*d;var z=o*i[0]+h*i[4]+f*i[8]+x*i[12];if(0===z){var b="Matrix4.getInverse(): can't invert matrix, determinant is 0";if(e)throw new Error(b);return console.warn(b),this.identity(),this}return this.multiplyScalar(1/z),this},r.prototype.applyToVector3Array=function(){var t=new s.default;return function(e,i,n){void 0===i&&(i=0),void 0===n&&(n=e.length);for(var o=0,s=i;o1||isNaN(r))){var a=this.start.clone().add(e.clone().multiplyScalar(r));return a.clone().sub(t.start).lengthSq()+a.clone().sub(t.end).lengthSq()<=t.distanceSq()?a:void 0}}}}]),t}();e.default=h;},function(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.Vector3=e.rect=e.quaternion=e.point=e.Plane=e.Matrix4=e.sign=e.radToDeg=e.degToRad=e.clamp=e.lineSegment=e.Line3=void 0;var n=f(i(8)),o=f(i(2)),s=i(0),r=f(i(7)),a=f(i(6)),h=f(i(5)),u=f(i(3)),c=f(i(4)),l=f(i(1));function f(t){return t&&t.__esModule?t:{default:t}}var y={Line3:n.default,lineSegment:o.default,clamp:s.clamp,degToRad:s.degToRad,radToDeg:s.radToDeg,sign:s.sign,Matrix4:r.default,Plane:a.default,point:h.default,quaternion:u.default,rect:c.default,Vector3:l.default};e.Line3=n.default,e.lineSegment=o.default,e.clamp=s.clamp,e.degToRad=s.degToRad,e.radToDeg=s.radToDeg,e.sign=s.sign,e.Matrix4=r.default,e.Plane=a.default,e.point=h.default,e.quaternion=u.default,e.rect=c.default,e.Vector3=l.default,e.default=y;}])});
-//# sourceMappingURL=cornerstoneMath.min.js.map
-});
-
-var cornerstoneMath$1 = unwrapExports(cornerstoneMath_min);
-
-var cornerstoneTools_min = createCommonjsModule(function (module, exports) {
-/*! cornerstone-tools - 3.0.0-b.1512 - 2018-12-17 | (c) 2017 Chris Hafey | https://github.com/cornerstonejs/cornerstoneTools */
-!function(e,t){module.exports=t();}(window,function(){return function(e){var t={};function n(a){if(t[a])return t[a].exports;var o=t[a]={i:a,l:!1,exports:{}};return e[a].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,a){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:a});},n.r=function(e){Object.defineProperty(e,"__esModule",{value:!0});},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=10)}([function(e,t){e.exports=function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e};},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")};},function(e,t){function n(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:null;return "function"==typeof window.CustomEvent?n=new CustomEvent(t,{detail:a,cancelable:!0}):(n=document.createEvent("CustomEvent")).initCustomEvent(t,!0,!0,a),e.dispatchEvent(n)}var b={drawColorId:0,radius:10,minRadius:1,maxRadius:50,alpha:.4,renderBrushIfHiddenButActive:!0,hiddenButActiveAlpha:.2,colorMapId:"BrushColorMap",visibleSegmentations:{},imageBitmapCache:{},segmentationMetadata:{}},E={radius:function(e){b.radius=Math.min(Math.max(e,b.minRadius),b.maxRadius);},brushColorMap:function(e){var t=f.cornerstone.colors.getColormap(b.colorMapId);t.setNumberOfColors(e.length);for(var n=0;n2&&void 0!==arguments[2])||arguments[2];b.visibleSegmentations[e]||(b.imageBitmapCache[e]=[]),b.visibleSegmentations[e][t]=n;},imageBitmapCacheForElement:function(e,t,n){b.imageBitmapCache[e]||(b.imageBitmapCache[e]=[]),b.imageBitmapCache[e][t]=n;},clearImageBitmapCacheForElement:function(e){b.imageBitmapCache[e]=[];},metadata:function(e,t,n){b.segmentationMetadata[e]||(b.segmentationMetadata[e]=[]),b.segmentationMetadata[e][t]=n;}};var M={state:b,onRegisterCallback:function(){!function(){var e=f.cornerstone.colors.getColormap(b.colorMapId);e.setNumberOfColors(19);for(var t=0;t<19;t++)t0}).forEach(function(t){var n=!1;t.supportedInteractionTypes.forEach(function(e){t.options["is".concat(e,"Active")]&&(n=!0);}),n||(console.info("Setting tool ".concat(t.name,"'s to PASSIVE")),N(e,t.name));});}(e,o,n,a),o.supportedInteractionTypes.forEach(function(e){void 0===a||a.includes(e)?n["is".concat(e,"Active")]=!0:n["is".concat(e,"Active")]=!1;})),F("active",null,e,t,n);},L=function(e,t,n){z("active",e,t,n),_.state.enabledElements.forEach(function(a){D(a,e,t,n);});},A=F.bind(null,"disabled",null),H=V.bind(null,"disabled",null),R=F.bind(null,"enabled",null),U=V.bind(null,"enabled",null),N=F.bind(null,"passive",x.TOOL_DEACTIVATED),B=V.bind(null,"passive",x.TOOL_DEACTIVATED);function F(e,t,n,a,o){var i=O(n,a);i?(o=G(o),Array.isArray(o.mouseButtonMask)&&0!==o.mouseButtonMask.length&&Array.isArray(i.options.mouseButtonMask)&&(o.mouseButtonMask=o.mouseButtonMask.concat(i.options.mouseButtonMask)),i.mode=e,i.mergeOptions(o),i["".concat(e,"Callback")]&&i["".concat(e,"Callback")](n,o),t&&T(n,t,{options:o,toolName:a,type:t})):console.warn("Unable to find tool '".concat(a,"' for enabledElement"));}function V(e,t,n,a){z(e,n,a),_.state.enabledElements.forEach(function(o){F(e,t,o,n,a);});}function j(e,t,n,a){var o=_.state.tools.find(function(t){return t.element===n&&"active"===t.mode&&!0===t.options["is".concat(e,"Active")]});o&&(console.info("Setting tool ".concat(o.name,"'s is").concat(e,"Active to false")),o.options["is".concat(e,"Active")]=!1);}function z(e,t,n,a){if(_.modules.globalConfiguration.state.globalToolSyncEnabled){var o={mode:e,args:[t,n]};a&&o.push(a),_.state.globalToolChangeHistory.push(o);_.state.globalToolChangeHistory.length>50&&_.state.globalToolChangeHistory.shift();var i=_.state.globalTools[t];if("active"===e){var r=function(e,t,n){void 0===n&&Array.isArray(t)&&(n=t,t=null);var a=[],o=_.state.globalTools[e];if(o){var i=new o.tool(o.configuration);i.supportedInteractionTypes.forEach(function(e){if(void 0===n||n.includes(e))if("Mouse"===e){var o=G(t).mouseButtonMask;Array.isArray(o)&&o.length>0?o.forEach(function(t){return a.push("".concat(e,"-").concat(t))}):Array.isArray(o)&&0===o.length&&a.push("".concat(e,"-DELETE"));}else"MultiTouch"===e?a.push("".concat(e,"-").concat(i.configuration.touchPointers)):a.push(e);});}return a}(t,n,a);Object.keys(_.state.globalTools).forEach(function(e){var t=_.state.globalTools[e];t.activeBindings=t.activeBindings.filter(function(e){return !r.includes(e)});}),r.some(function(e){return e.includes("Mouse-DELETE")})&&(i.activeBindings=i.activeBindings.filter(function(e){return !e.includes("Mouse")}),r=r.filter(function(e){return !e.includes("Mouse")})),i.activeBindings=i.activeBindings.concat(r);}else i.activeBindings=[];}}var W={Mouse:function(e,t,n){var a=G(n).mouseButtonMask;if(Array.isArray(a)&&a.length>0){var o=_.state.tools.find(function(e){return e.element===t&&"active"===e.mode&&!0===e.options.isMouseActive&&Array.isArray(e.options.mouseButtonMask)&&e.options.mouseButtonMask.some(function(e){return a.includes(e)})});o&&(o.options.mouseButtonMask=o.options.mouseButtonMask.filter(function(e){return !a.includes(e)}),0===o.options.mouseButtonMask.length&&(o.options.isMouseActive=!1));}},MouseWheel:j.bind(void 0,"MouseWheel"),Touch:function(e,t,n){var a=_.state.tools.find(function(e){return e.element===t&&"active"===e.mode&&!0===e.options.isTouchActive}),o=_.state.tools.find(function(e){return e.element===t&&"active"===e.mode&&!0===e.options.isMultiTouchActive&&1===e.configuration.touchPointers});a&&(console.info("Setting tool ".concat(a.name,"'s isTouchActive to false")),a.options.isTouchActive=!1),o&&(console.info("Setting tool ".concat(o.name,"'s isTouchActive to false")),o.options.isMultiTouchActive=!1);},TouchPinch:j.bind(void 0,"TouchPinch"),TouchRotate:j.bind(void 0,"TouchRotate"),DoubleTap:j.bind(void 0,"DoubleTap"),MultiTouch:function(e,t,n){var a,o=_.state.tools.find(function(n){return n.element===t&&"active"===n.mode&&!0===n.options.isMultiTouchActive&&n.configuration.touchPointers===e.configuration.touchPointers});1===e.configuration.touchPointers&&(a=_.state.tools.find(function(e){return e.element===t&&"active"===e.mode&&!0===e.options.isTouchActive})),o&&(console.info("Setting tool ".concat(o.name,"'s isMultiTouchActive to false")),o.options.isMultiTouchActive=!1),a&&(console.info("Setting tool ".concat(a.name,"'s isTouchActive to false")),a.options.isTouchActive=!1);}};function G(e){if(e!==Object(e)||Array.isArray(e))if("number"==typeof e){var t=[];t.push(e),e={mouseButtonMask:0===e?[]:t};}else null===e?e={mouseButtonMask:[]}:(console.info("No options provided when changing tool mode"),e={});else if(0===e.mouseButtonMask||null===e.mouseButtonMask)e.mouseButtonMask=[];else if("number"==typeof e.mouseButtonMask){var n=[];n.push(e.mouseButtonMask),e.mouseButtonMask=n;}return e}var q={activeOrDisabledBinaryTool:{passiveCallback:function(e){A(e,this.name);},enabledCallback:function(e){D(e,this.name);}},enabledOrDisabledBinaryTool:{passiveCallback:function(e){A(e,this.name);},activeCallback:function(e){R(e,this.name);}}},Y=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.name,a=t.strategies,i=t.defaultStrategy,r=t.configuration,s=t.supportedInteractionTypes,l=t.mixins;o()(this,e),this.name=n,this.mode="disabled",this.element=void 0,this.supportedInteractionTypes=s||[],this.strategies=a||{},this.defaultStrategy=i||Object.keys(this.strategies)[0]||void 0,this.activeStrategy=this.defaultStrategy,this._options={},this._configuration=Object.assign({},r),this.hasCursor=!1,l&&l.length&&this._applyMixins(l);}return r()(e,[{key:"mergeOptions",value:function(e){this._options=Object.assign({},this._options,e);}},{key:"clearOptions",value:function(){this._options={};}},{key:"applyActiveStrategy",value:function(e){return this.strategies[this.activeStrategy](e,this.configuration)}},{key:"_applyMixins",value:function(e){for(var t=0;t4&&void 0!==arguments[4]?arguments[4]:{}),i=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"mouse";o=Object.assign({deleteIfHandleOutsideImage:S.deleteIfHandleOutsideImage,preventHandleOutsideImage:S.preventHandleOutsideImage},o);var r=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=arguments.length>3?arguments[3]:void 0,o=a.detail,i=o.element,r=o.image,s=a.detail.deltaPoints.image,l=s.x,c=s.y;t.active=!0;for(var u=Object.keys(t.handles),d=0;d2&&void 0!==arguments[2]?arguments[2]:{},a=arguments.length>3?arguments[3]:void 0,o=arguments.length>4?arguments[4]:void 0,i=o.dragHandler,r=o.upOrEndHandler,s=arguments.length>5?arguments[5]:void 0,l=s.detail,c=s.detail.element;t.active=!1,t.invalidated=!0,S.isToolLocked=!1,ce[a].forEach(function(e){c.removeEventListener(e,i);}),ue[a].forEach(function(e){c.removeEventListener(e,r);}),n.deleteIfHandleOutsideImage&&re(l,t.handles)&&$(c,e,t);"function"==typeof n.doneMovingCallback&&n.doneMovingCallback();f.cornerstone.updateImage(c);}(t,n,o,i,{dragHandler:r,upOrEndHandler:e},a);};n.active=!0,S.isToolLocked=!0,ce[i].forEach(function(e){a.addEventListener(e,r);}),ue[i].forEach(function(e){a.addEventListener(e,s);});};var he={value:!1},ve={mouse:[x.MOUSE_DRAG],touch:[x.TOUCH_DRAG]},ge={mouse:[x.MOUSE_UP,x.MOUSE_CLICK],touch:[x.TOUCH_END,x.TOUCH_DRAG_END,x.TOUCH_PINCH,x.TOUCH_PRESS,x.TAP]},me=function(e,t,n,a){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},i=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"mouse";o=Object.assign({deleteIfHandleOutsideImage:S.deleteIfHandleOutsideImage,preventHandleOutsideImage:S.preventHandleOutsideImage},o);var r=e.element,s=function(e,t,n,a,o,i){var r=i.detail,s=r.image,l=r.currentPoints,c=r.element,u=l.page,d=f.cornerstone.pageToPixel(c,u.x,"touch"===o?u.y+-57:u.y);!1===n.hasMoved&&(n.hasMoved=!0);he.value=!1,n.active=!0,n.x=d.x,n.y=d.y,a.preventHandleOutsideImage&&le(n,s);f.cornerstone.updateImage(c);var h=x.MEASUREMENT_MODIFIED;T(c,h,{toolName:e,element:c,measurementData:t});}.bind(this,t,n,a,o,i),l=function r(l){!function(e,t,n,a){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},i=arguments.length>5?arguments[5]:void 0,r=arguments.length>6?arguments[6]:void 0,s=r.dragHandler,l=r.upOrEndHandler,c=arguments.length>7?arguments[7]:void 0,u=t.currentPoints.image,d=c.detail.element;a.active=!1,n.active=!1,n.invalidated=!0,S.isToolLocked=!1,he.value=!1,ve[i].forEach(function(e){d.removeEventListener(e,s);}),ge[i].forEach(function(e){d.removeEventListener(e,l);}),o.deleteIfHandleOutsideImage&&re(t,n.handles)&&$(d,e,n);c.type===x.TOUCH_PRESS&&(c.detail.handlePressed=n,a.x=u.x,a.y=u.y);"function"==typeof o.doneMovingCallback&&o.doneMovingCallback();f.cornerstone.updateImage(d);}(t,e,n,a,o,i,{dragHandler:s,upOrEndHandler:r},l);};if(a.active=!0,n.active=!0,S.isToolLocked=!0,ve[i].forEach(function(e){r.addEventListener(e,s);}),ge[i].forEach(function(e){r.addEventListener(e,l);}),"touch"===i){he.value=!0;var c=f.cornerstone.getEnabledElement(r),u={x:e.currentPoints.page.x,y:e.currentPoints.page.y+-57},d=f.cornerstone.pageToPixel(r,u.x,u.y);!function e(t,n,a,o){if(!n.value)return;var i=Math.abs(t.y-o.y);var r=i/10;if(i<1)return t.y=o.y,void(n.value=!1);t.y>o.y?t.y-=r:t.y5&&void 0!==arguments[5]?arguments[5]:"mouse";o=Object.assign({deleteIfHandleOutsideImage:S.deleteIfHandleOutsideImage,preventHandleOutsideImage:S.preventHandleOutsideImage},o);var r=e.element;S.isToolLocked=!0,a.active=!0,n.active=!0;var s=function(e,t,n,a,o,i){var r=i.detail,s=r.currentPoints,l=r.image,c=r.element,u=s.page,d=f.cornerstone.pageToPixel(c,"touch"===o?u.x+-57:u.x,"touch"===o?u.y+-57:u.y);n.active=!0,n.x=d.x,n.y=d.y,a&&a.preventHandleOutsideImage&&le(n,l);f.cornerstone.updateImage(c);var h=x.MEASUREMENT_MODIFIED;T(c,h,{toolName:e,element:c,measurementData:t});}.bind(this,t,n,a,o,i),l=function e(r){!function(e,t,n,a,o,i,r){var s=i.moveHandler,l=i.moveEndHandler,c=r.detail,u=c.element,d=c.currentPoints.page,h=f.cornerstone.pageToPixel(u,"touch"===o?d.x+-57:d.x,"touch"===o?d.y+-57:d.y);if(n.active=!1,t.active=!1,S.isToolLocked=!1,n.x=h.x,n.y=h.y,fe[o].forEach(function(e){u.removeEventListener(e,s);}),pe[o].forEach(function(e){u.removeEventListener(e,l);}),u.removeEventListener(x.TOUCH_START,xe),r.type===x.TOUCH_PINCH||r.type===x.TOUCH_PRESS)return n.active=!1,f.cornerstone.updateImage(u),void("function"==typeof a.doneMovingCallback&&a.doneMovingCallback());a.preventHandleOutsideImage&&le(n,r.detail.image);a.deleteIfHandleOutsideImage&&re(r.detail,t.handles)&&$(u,e,t);"function"==typeof a.doneMovingCallback&&a.doneMovingCallback();f.cornerstone.updateImage(u);}(t,n,a,o,i,{moveHandler:s,moveEndHandler:e},r);};fe[i].forEach(function(e){r.addEventListener(e,s);}),pe[i].forEach(function(e){r.addEventListener(e,l);}),r.addEventListener(x.TOUCH_START,xe);};function xe(e){return e.stopImmediatePropagation(),!1}var Te=function(e,t,n,a,o){n.active=!0,S.isToolLocked=!0,me(e.detail,t.name,n,a,t.options,o),e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault();},be=function(e,t,n,a){for(var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"mouse",i=0;i3&&void 0!==arguments[3]?arguments[3]:"mouse",o=Object.assign({},{doneMovingCallback:function(){n.active=!1,S.isToolLocked=!1;}},t.options);n.active=!0,S.isToolLocked=!0,de(e.detail,t.name,n,null,o,a),e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault();},Me=function(e){function t(e){var n=e.name,a=e.strategies,i=e.defaultStrategy,r=e.configuration,s=e.supportedInteractionTypes,c=e.mixins;return o()(this,t),l()(this,u()(t).call(this,{name:n,strategies:a,defaultStrategy:i,configuration:r,supportedInteractionTypes:s,mixins:c}))}return h()(t,e),r()(t,[{key:"createNewMeasurement",value:function(e){throw new Error("Method createNewMeasurement not implemented for ".concat(this.name,"."))}},{key:"pointNearTool",value:function(e,t,n){throw new Error("Method pointNearTool not implemented for ".concat(this.name,"."))}},{key:"distanceFromPoint",value:function(e,t,n){throw new Error("Method distanceFromPoint not implemented for ".concat(this.name,"."))}},{key:"renderToolData",value:function(e){throw new Error("renderToolData not implemented for ".concat(this.name,"."))}},{key:"mouseMoveCallback",value:function(e){for(var t=e.detail,n=t.element,a=t.currentPoints.canvas,o=Q(n,this.name),i=!1,r=0;r3&&void 0!==arguments[3]?arguments[3]:"mouse";Te(e,this,t,n,a);}},{key:"toolSelectedCallback",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"mouse";Ee(e,this,t,n);}}]),t}(Y),Ce=1,we=2;var Ie={setToolWidth:function(e){Ce=e;},getToolWidth:function(){return Ce},setActiveWidth:function(e){we=e;},getActiveWidth:function(){return we}},Se="white",ke="greenyellow",Pe="transparent";var _e={setFillColor:function(e){Pe=e;},getFillColor:function(){return Pe},setToolColor:function(e){Se=e;},getToolColor:function(){return Se},setActiveColor:function(e){ke=e;},getActiveColor:function(){return ke},getColorIfActive:function(e){return e.color?e.color:e.active?ke:Se}},Oe=function(e,t){e.save(),t(e),e.restore();},De=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0,a=t.color,o=t.lineWidth,i=t.fillStyle,r=t.lineDash;e.beginPath(),e.strokeStyle=a||e.strokeStyle,e.lineWidth=o||void 0===o&&Ie.getToolWidth()||e.lineWidth,r&&e.setLineDash(r),n(e),i&&(e.fillStyle=i,e.fill()),e.stroke(),r&&e.setLineDash([]);};function Le(e,t,n,a,o){var i=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"pixel";De(e,o,function(e){"pixel"===i&&(n=f.cornerstone.pixelToCanvas(t,n),a=f.cornerstone.pixelToCanvas(t,a)),e.moveTo(n.x,n.y),e.lineTo(a.x,a.y);});}var Ae=function(e,t,n,a,o){var i=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"pixel";De(e,o,function(e){"pixel"===i&&(n=f.cornerstone.pixelToCanvas(t,n),a=a.map(function(e){return f.cornerstone.pixelToCanvas(t,e)})),e.moveTo(n.x,n.y),a.forEach(function(t){var n=t.x,a=t.y;e.lineTo(n,a);});});},He=function(e,t,n,a,o){var i=Math.atan2(n.y-t.y,n.x-t.x),r={color:a,lineWidth:o};Le(e,void 0,t,n,r,"canvas"),r={color:a,lineWidth:o,fillStyle:a};var s=[{x:n.x-10*Math.cos(i-Math.PI/7),y:n.y-10*Math.sin(i-Math.PI/7)},{x:n.x-10*Math.cos(i+Math.PI/7),y:n.y-10*Math.sin(i+Math.PI/7)},n];Ae(e,void 0,n,s,r,"canvas");},Re=function(e,t,n,a,o){"pixel"===(arguments.length>5&&void 0!==arguments[5]?arguments[5]:"pixel")&&(n=f.cornerstone.pixelToCanvas(t,n)),De(e,o,function(e){e.arc(n.x,n.y,a,0,2*Math.PI);});},Ue=function(e,t,n,a,o){"pixel"===(arguments.length>5&&void 0!==arguments[5]?arguments[5]:"pixel")&&(n=f.cornerstone.pixelToCanvas(t,n),a=f.cornerstone.pixelToCanvas(t,a));var i=Math.min(n.x,a.x),r=Math.min(n.y,a.y),s=Math.abs(n.x-a.x),l=Math.abs(n.y-a.y),c=s/2*.5522848,u=l/2*.5522848,d=i+s,h=r+l,v=i+s/2,g=r+l/2;De(e,o,function(e){e.moveTo(i,g),e.bezierCurveTo(i,g-u,v-c,r,v,r),e.bezierCurveTo(v+c,r,d,g-u,d,g),e.bezierCurveTo(d,g+u,v+c,h,v,h),e.bezierCurveTo(v-c,h,i,g+u,i,g),e.closePath();});},Ne=function(e,t,n){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=t.element,i=_e.getToolColor();e.strokeStyle=a.color||i;for(var r=Object.keys(n),s=function(t){var i=r[t],s=n[i];if(!0===s.drawnIndependently)return "continue";if(!0===a.drawHandlesIfActive&&!s.active)return "continue";var l=s.active?Ie.getActiveWidth():Ie.getToolWidth(),c=a.fill;De(e,{lineWidth:l,fillStyle:c},function(e){var t=f.cornerstone.pixelToCanvas(o,s),n=s.radius||a.handleRadius||S.handleRadius;e.arc(t.x,t.y,n,0,2*Math.PI);});},l=0;l0?f.cornerstoneMath.point.findClosestPoint(e,t):t,s=[{x:n.left+n.width/2,y:n.top},{x:n.left,y:n.top+n.height/2},{x:n.left+n.width/2,y:n.top+n.height},{x:n.left+n.width,y:n.top+n.height/2}];Le(a,void 0,r,f.cornerstoneMath.point.findClosestPoint(s,r),{color:o,lineWidth:i,lineDash:[2,3]},"canvas");},Fe=15,Ve="".concat(Fe,"px Arial"),je="transparent";var ze={setFont:function(e){Ve=e;},getFont:function(){return Ve},setFontSize:function(e){Fe=e;},getFontSize:function(){return Fe},setBackgroundColor:function(e){je=e;},getBackgroundColor:function(){return je}},We=function(e,t,n,a,o){var i=ze.getFontSize();e.font=ze.getFont(),e.textBaseline="top",e.fillStyle=a,n.forEach(function(n,a){e.fillText(n,t.left+o,t.top+o+a*(i+o));});},Ge=function(e,t,n){e.fillStyle=n,e.fillRect(t.left,t.top,t.width,t.height);};function qe(e,t,n){var a=ze.getFont(),o=e.font;a&&a!==o&&(e.font=a);var i=e.measureText(t).width;return a&&a!==o&&(e.font=o),i+2*n}var Ye=function(e,t,n,a,o,i){"[object Array]"!==Object.prototype.toString.call(t)&&(t=[t]);var r=ze.getFontSize(),s=ze.getBackgroundColor(),l=0;t.forEach(function(t){var n=qe(e,t,5);l=Math.max(l,n);});var c={width:l,height:5+t.length*(r+5)};return Oe(e,function(e){e.strokeStyle=o,i&&i.centering&&!0===i.centering.x&&(n-=c.width/2),i&&i.centering&&!0===i.centering.y&&(a-=c.height/2),c.left=n,c.top=a;var r=i&&!0===i.debug?"#FF0000":s;Ge(e,c,r),We(e,c,t,o,5);}),c},Xe=function(e,t,n,a,o,i,r,s,l,c){var u=f.cornerstone,d=u.pixelToCanvas(t,n);l&&(d.x+=l);var h={centering:{x:!1,y:c}};if(n.boundingBox=Ye(e,a,d.x,d.y,r,h),n.hasMoved){var v=i(o).map(function(e){return u.pixelToCanvas(t,e)});Be(v,d,n.boundingBox,e,r,s);}},Ke=function(e,t,n,a,o){if("pixel"===(arguments.length>5&&void 0!==arguments[5]?arguments[5]:"pixel")){var i=f.cornerstone;n=i.pixelToCanvas(t,n),a=i.pixelToCanvas(t,a);}var r=Math.min(n.x,a.x),s=Math.min(n.y,a.y),l=Math.abs(n.x-a.x),c=Math.abs(n.y-a.y);De(e,o,function(e){e.rect(r,s,l,c);});},Ze=function(e){var t=e.getContext("2d");return t.setTransform(1,0,0,1,0,0),t},Je=function(e,t){return void 0===e?t:e},Qe=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};t.shadow&&(e.shadowColor=Je(t.shadowColor,"#000000"),e.shadowBlur=Je(t.shadowBlur,0),e.shadowOffsetX=Je(t.shadowOffsetX,1),e.shadowOffsetY=Je(t.shadowOffsetY,1));},$e=function(e,t,n){if(n.vflip||n.vflip||n.rotation){var a={x:t.width/2+n.translation.x*n.scale,y:t.height/2+n.translation.y*n.scale};e.translate(a.x,a.y),n.rotation&&e.rotate(n.rotation*Math.PI/180),n.vflip&&e.scale(1,-1),n.hflip&&e.scale(-1,1),e.translate(-a.x,-a.y);}},et=function(e){e.setTransform(1,0,0,1,0,0);},tt=function(e,t,n,a){var o=f.cornerstone,i={start:o.pixelToCanvas(e,t),end:o.pixelToCanvas(e,n)};return f.cornerstoneMath.lineSegment.distanceToPoint(i,a)},nt=function(e,t){var n=Math.pow(10,t);return Math.round(e*n)/n};function at(e){return Math.sqrt(Math.pow(e.x,2)+Math.pow(e.y,2))}var ot=function(e){function t(){var e,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};o()(this,t);var a=Object.assign({name:"Angle",supportedInteractionTypes:["Mouse","Touch"]},n);return (e=l()(this,u()(t).call(this,a))).initialConfiguration=a,e.preventNewMeasurement=!1,e}return h()(t,e),r()(t,[{key:"createNewMeasurement",value:function(e){return {visible:!0,active:!0,color:void 0,handles:{start:{x:e.currentPoints.image.x,y:e.currentPoints.image.y,highlight:!0,active:!1},middle:{x:e.currentPoints.image.x,y:e.currentPoints.image.y,highlight:!0,active:!0},end:{x:e.currentPoints.image.x,y:e.currentPoints.image.y,highlight:!0,active:!1},textBox:{active:!1,hasMoved:!1,movesIndependently:!1,drawnIndependently:!0,allowedOutsideImage:!0,hasBoundingBox:!0}}}}},{key:"pointNearTool",value:function(e,t,n){return !1!==t.visible&&(tt(e,t.handles.start,t.handles.middle,n)<25||tt(e,t.handles.middle,t.handles.end,n)<25)}},{key:"renderToolData",value:function(e){var t=this,n=e.detail,a=n.enabledElement,o=this.configuration,i=o.handleRadius,r=o.drawHandlesOnHover,s=Q(e.currentTarget,this.name);if(s)for(var l=Ze(n.canvasContext.canvas),c=Ie.getToolWidth(),u=function(e){var o=s.data[e];if(!1===o.visible)return "continue";Oe(l,function(e){Qe(e,t.configuration);var s=_e.getColorIfActive(o),l=f.cornerstone.pixelToCanvas(n.element,o.handles.start),u=f.cornerstone.pixelToCanvas(n.element,o.handles.middle);Ae(e,n.element,o.handles.start,[o.handles.middle,o.handles.end],{color:s});var d={color:s,handleRadius:i,drawHandlesIfActive:r};Ne(e,n,o.handles,d);var v=n.image.columnPixelSpacing||1,g=n.image.rowPixelSpacing||1,m={x:(o.handles.middle.x-o.handles.start.x)*v,y:(o.handles.middle.y-o.handles.start.y)*g},p={x:(o.handles.end.x-o.handles.middle.x)*v,y:(o.handles.end.y-o.handles.middle.y)*g},y={x:(o.handles.end.x-o.handles.start.x)*v,y:(o.handles.end.y-o.handles.start.y)*g},x=at(m),T=at(p),b=at(y),E=Math.acos((Math.pow(x,2)+Math.pow(T,2)-Math.pow(b,2))/(2*x*T));if(E*=180/Math.PI,o.rAngle=nt(E,2),o.rAngle){var M,C=function(e,t,n){var a=t&&n?"":" (isotropic)";return e.rAngle.toString()+String.fromCharCode(parseInt("00B0",16))+a}(o,n.image.rowPixelSpacing,n.image.columnPixelSpacing);if(!o.handles.textBox.hasMoved){M={x:u.x,y:u.y};var w=qe(e,C,5);u.x0&&void 0!==arguments[0]?arguments[0]:{};o()(this,t);var a={name:"ArrowAnnotate",supportedInteractionTypes:["Mouse","Touch"],configuration:{getTextCallback:rt,changeTextCallback:st,drawHandles:!1,drawHandlesOnHover:!0,arrowFirst:!0}},i=Object.assign(a,n);return (e=l()(this,u()(t).call(this,i))).initialConfiguration=i,e.preventNewMeasurement=!1,e}return h()(t,e),r()(t,[{key:"createNewMeasurement",value:function(e){return {visible:!0,active:!0,color:void 0,handles:{start:{x:e.detail.currentPoints.image.x,y:e.detail.currentPoints.image.y,highlight:!0,active:!1},end:{x:e.detail.currentPoints.image.x,y:e.detail.currentPoints.image.y,highlight:!0,active:!1},textBox:{active:!1,hasMoved:!1,movesIndependently:!1,drawnIndependently:!0,allowedOutsideImage:!0,hasBoundingBox:!0}}}}},{key:"pointNearTool",value:function(e,t,n){return !1!==t.visible&&tt(e,t.handles.start,t.handles.end,n)<25}},{key:"renderToolData",value:function(e){var t=this,n=e.detail,a=n.element,o=n.enabledElement,i=this.configuration,r=i.handleRadius,s=i.drawHandlesOnHover,l=Q(a,this.name);if(l)for(var c=e.detail.canvasContext.canvas,u=Ze(c),d=Ie.getToolWidth(),h=function(n){var i=l.data[n];if(!1===i.visible)return "continue";Oe(u,function(n){Qe(n,t.configuration);var l=_e.getColorIfActive(i),c=f.cornerstone.pixelToCanvas(a,i.handles.start),u=f.cornerstone.pixelToCanvas(a,i.handles.end);t.configuration.arrowFirst?He(n,u,c,l,d):He(n,c,u,l,d);var h={color:l,handleRadius:r,drawHandlesIfActive:s};t.configuration.drawHandles&&Ne(n,e.detail,i.handles,h);var v=function(e){return e.text}(i);if(v&&""!==v){var m=qe(n,v,5),p=ze.getFontSize()+10,y=Math.max(m,p)/2+5;if(u.x3&&void 0!==arguments[3]?arguments[3]:{};return Object.assign({x:e,y:t,index:n,drawnIndependently:!1,allowedOutsideImage:!1,highlight:!0,active:!1},a)},ht=function(e){var t=e.currentPoints.image,n=t.x,a=t.y;return {toolType:this.name,isCreating:!0,visible:!0,active:!0,handles:{start:dt(n,a,0),end:dt(n,a,1,{active:!0}),perpendicularStart:dt(n,a,2,{locked:!0}),perpendicularEnd:dt(n,a,3),textBox:dt(n-50,a-70,null,{highlight:!1,hasMoved:!0,active:!1,movesIndependently:!1,drawnIndependently:!0,allowedOutsideImage:!0,hasBoundingBox:!0})},longestDiameter:0,shortestDiameter:0}},vt=function(e,t,n){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"mouse",o=f.cornerstone,i=f.cornerstoneMath,r=t.handles,s={start:o.pixelToCanvas(e,r.start),end:o.pixelToCanvas(e,r.end)},l=i.lineSegment.distanceToPoint(s,n);if(ne(r.textBox,n))return !0;var c="mouse"===a?S.clickProximity:S.touchProximity;return !!function(e,t,n,a){var o=f.cornerstone,i=f.cornerstoneMath,r={start:o.pixelToCanvas(e,t.perpendicularStart),end:o.pixelToCanvas(e,t.perpendicularEnd)};return i.lineSegment.distanceToPoint(r,n)u){var g=u;u=v,v=g;}e.longestDiameter=u.toFixed(1),e.shortestDiameter=v.toFixed(1);},ft=function(e,t,n){var a=" mm";return t&&n||(a=" pixels"),[" L ".concat(e.longestDiameter).concat(a)," W ".concat(e.shortestDiameter).concat(a)]},pt=function(e,t){var n=this,a=e.detail,o=a.element,i=a.image,r=this.configuration;if(!yt(i)){var s=this.createNewMeasurement(a),l=function(){s.active=!1,f.cornerstone.updateImage(o);};J(o,this.name,s),f.cornerstone.updateImage(o);var c=(new Date).getTime(),u=s.handles,d=u.end,h=u.perpendicularStart;ye(a,this.name,s,d,{doneMovingCallback:function(){var e=s.handles,t=s.longestDiameter,i=s.shortestDiameter,u=re(a,e),d=parseFloat(t)||0,v=parseFloat(i)||0,g=d<1||v<1,m=(new Date).getTime()-c<150;u||g||m?(s.cancelled=!0,$(o,n.name,s)):r.getMeasurementLocationCallback(s,a,l),h.locked=!1,f.cornerstone.updateImage(o);}},t);}},yt=function(e){var t=f.cornerstone.metaData.get("imagePlaneModule",e.imageId),n=e.rowPixelSpacing,a=e.columnPixelSpacing;return t&&(n=t.rowPixelSpacing||t.rowImagePixelSpacing,a=t.columnPixelSpacing||t.colImagePixelSpacing),!n||!a};var xt={setCoords:function(e){lt=e.currentPoints.canvas;},getCoords:function(){return lt}},Tt=function(e){var t=this,n=e.detail,a=n.element;xt.setCoords(n);var o=Q(a,this.name);if(o){for(var i=!1,r=function(e){var r=n.currentPoints.canvas,s=o.data[e],l=function(e,t,n){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:6,o=oe(e,t,n,a),i=!1;return Object.keys(t).forEach(function(e){if("textBox"!==e){var n=t[e],a=n===o;n.active!==a&&(i=!0),n.active=a;}}),i}(a,s.handles,r);Object.keys(s.handles).forEach(function(e){if("textBox"!==e){var t=s.handles[e];t.hover=t.active;}}),l&&(i=!0);var c=t.pointNearTool(a,s,r,"mouse"),u=c&&!s.active,d=!c&&s.active;(u||d)&&(s.active=!s.active,i=!0);},s=0;sn(e,i)?(r.x=y+u*g,r.y=x-u*v,s.x=r.x-d*g,s.y=r.y+d*v):(r.x=m+u*g,r.y=p-u*v,s.x=r.x-d*g,s.y=r.y+d*v)),!0}(u,n)||(t.currentPoints.image.x=n.handles.perpendicularStart.x,t.currentPoints.image.y=n.handles.perpendicularStart.y)):3===e.index&&(o=!1,l.start={x:n.handles.start.x,y:n.handles.start.y},l.end={x:n.handles.end.x,y:n.handles.end.y},c.start={x:n.handles.perpendicularStart.x,y:n.handles.perpendicularStart.y},c.end={x:u.x,y:u.y},(i=f.cornerstoneMath.lineSegment.intersectLine(l,c))||(c.end={x:n.handles.perpendicularEnd.x,y:n.handles.perpendicularEnd.y},i=f.cornerstoneMath.lineSegment.intersectLine(l,c),r=f.cornerstoneMath.point.distance(i,n.handles.start),s=f.cornerstoneMath.point.distance(i,n.handles.end),(!i||r<3||s<3)&&(o=!0)),o||function(e,t){var n=f.cornerstoneMath.point.distance,a=t.handles,o=a.start,i=a.end,r=a.perpendicularStart,s=a.perpendicularEnd,l=r,c=f.cornerstoneMath.lineSegment.distanceToPoint(t.handles,l),u=f.cornerstoneMath.lineSegment.distanceToPoint(t.handles,e),d=c+u;if(n(l,e)<=c)return !1;var h=n(o,i),v=(o.x-i.x)/h,g=(o.y-i.y)/h,m=o.x-1*v,p=o.y-1*g,y=i.x+1*v,x=i.y+1*g;r.x=e.x+d*g,r.y=e.y-d*v,s.x=e.x,s.y=e.y,s.locked=!1,r.locked=!1;var T={start:{x:o.x,y:o.y},end:{x:i.x,y:i.y}},b={start:{x:r.x,y:r.y},end:{x:s.x,y:s.y}};return f.cornerstoneMath.lineSegment.intersectLine(T,b)||(n(e,o)>n(e,i)?(s.x=y-u*g,s.y=x+u*v,r.x=s.x+d*g,r.y=s.y-d*v):(s.x=m-u*g,s.y=p+u*v,r.x=s.x+d*g,r.y=s.y-d*v)),!0}(u,n)||(t.currentPoints.image.x=n.handles.perpendicularEnd.x,t.currentPoints.image.y=n.handles.perpendicularEnd.y));},Et=function(e,t,n){var a=e[n],o=t[n];e[n]=o,t[n]=a;},Mt=function(e,t){Et(e,t,"x"),Et(e,t,"y"),Et(e,t,"moving"),Et(e,t,"hover"),Et(e,t,"active"),Et(e,t,"selected");};var Ct=function(e){var t,n=this,a=e.detail,o=a.element,i=S.clickProximity,r=function(e){t.invalidated=!0,re(a,t.handles)&&$(o,n.name,t),e&&(e.moving=!1,e.selected=!0),o.style.cursor="",f.cornerstone.updateImage(o),o.addEventListener(x.MOUSE_MOVE,n._moveCallback),o.addEventListener(x.TOUCH_START,n._moveCallback);},s=a.startPoints.canvas,l=Q(e.currentTarget,this.name);if(l){for(var c=function(c){t=l.data[c];var u=[o,t.handles,s,i],d=oe.apply(void 0,u);if(d)return o.removeEventListener(x.MOUSE_MOVE,n._moveCallback),o.removeEventListener(x.TOUCH_START,n._moveCallback),t.active=!0,wt(t.handles),d.moving=!0,d=function(e,t,n){var a=e.image,o=a.rowPixelSpacing,i=a.columnPixelSpacing,r=t.handles,s=r.start,l=r.end,c=r.perpendicularStart,u=r.perpendicularEnd,d=(s.x-l.x)*(i||1),h=(s.y-l.y)*(o||1),v=Math.sqrt(d*d+h*h),g=(c.x-u.x)*(i||1),m=(c.y-u.y)*(o||1);return (Math.sqrt(g*g+m*m)||0)>v?(Mt(s,l),Mt(s,c),Mt(l,u),Object.values(r).find(function(e){return !0===e.moving})):n}(a,t,d),o.style.cursor=d.hasBoundingBox?"move":"none",function(e,t,n,a,o,i){var r=e.element,s={x:a.x-e.currentPoints.image.x,y:a.y-e.currentPoints.image.y},l=function(e){var o=e.detail;a.active=!0,a.hasMoved=!0,void 0===a.index||null===a.index?(a.x=o.currentPoints.image.x+s.x,a.y=o.currentPoints.image.y+s.y):bt(a,o,n,s),i&&(a.x=Math.max(a.x,0),a.x=Math.min(a.x,o.image.width),a.y=Math.max(a.y,0),a.y=Math.min(a.y,o.image.height)),f.cornerstone.updateImage(r);var l={toolType:t,element:r,measurementData:n};f.cornerstone.triggerEvent(r,x.MEASUREMENT_MODIFIED,l);};r.addEventListener(x.MOUSE_DRAG,l),r.addEventListener(x.TOUCH_DRAG,l);var c=f.cornerstone.getImage(r),u=function(){f.cornerstone.getImage(r).imageId!==c.imageId&&d();};r.addEventListener(f.cornerstone.EVENTS.IMAGE_RENDERED,u);var d=function e(){r.removeEventListener(f.cornerstone.EVENTS.IMAGE_RENDERED,u),r.removeEventListener(x.MOUSE_DRAG,l),r.removeEventListener(x.MOUSE_UP,e),r.removeEventListener(x.MOUSE_CLICK,e),r.removeEventListener(x.TOUCH_DRAG,l),r.removeEventListener(x.TOUCH_DRAG_END,e),r.removeEventListener(x.TAP,e),f.cornerstone.updateImage(r),"function"==typeof o&&o();};r.addEventListener(x.MOUSE_UP,d),r.addEventListener(x.MOUSE_CLICK,d),r.addEventListener(x.TOUCH_DRAG_END,d),r.addEventListener(x.TAP,d);}(a,n.name,t,d,function(){return r(d)}),St(e),{v:!0}},u=0;u0&&void 0!==arguments[0]?arguments[0]:{};o()(this,t);var a={name:"Bidirectional",supportedInteractionTypes:["Mouse","Touch"],configuration:{changeMeasurementLocationCallback:Lt,getMeasurementLocationCallback:Lt,textBox:"",shadow:"",drawHandlesOnHover:!0,additionalData:[]}},i=Object.assign(a.configuration,n),r=Object.assign(a,{configuration:i});return (e=l()(this,u()(t).call(this,r))).createNewMeasurement=ht.bind(ut()(ut()(e))),e.pointNearTool=vt.bind(ut()(ut()(e))),e.renderToolData=gt.bind(ut()(ut()(e))),e.addNewMeasurement=pt.bind(ut()(ut()(e))),e._moveCallback=Tt.bind(ut()(ut()(e))),e.preMouseDownCallback=Ct.bind(ut()(ut()(e))),e.preTouchStartCallback=Pt.bind(ut()(ut()(e))),e}return h()(t,e),t}(Me),Ht=function(e){function t(){var e,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};o()(this,t);var a=Object.assign({name:"CobbAngle",supportedInteractionTypes:["Mouse","Touch"]},n);return (e=l()(this,u()(t).call(this,a))).initialConfiguration=a,e.hasIncomplete=!1,e}return h()(t,e),r()(t,[{key:"createNewMeasurement",value:function(e){return this.hasIncomplete=!0,{visible:!0,active:!0,color:void 0,complete:!1,value:"",handles:{start:{x:e.currentPoints.image.x,y:e.currentPoints.image.y,highlight:!0,active:!1},end:{x:e.currentPoints.image.x,y:e.currentPoints.image.y,highlight:!0,active:!0},start2:{x:e.currentPoints.image.x,y:e.currentPoints.image.y,highlight:!0,active:!1,drawnIndependently:!0},end2:{x:e.currentPoints.image.x+1,y:e.currentPoints.image.y,highlight:!0,active:!1,drawnIndependently:!0},textBox:{active:!1,hasMoved:!1,movesIndependently:!1,drawnIndependently:!0,allowedOutsideImage:!0,hasBoundingBox:!0}}}}},{key:"pointNearTool",value:function(e,t,n){return !1!==t.visible&&(!this.hasIncomplete&&(tt(e,t.handles.start,t.handles.end,n)<25||tt(e,t.handles.start2,t.handles.end2,n)<25))}},{key:"renderToolData",value:function(e){var t=this,n=e.detail,a=this.configuration,o=a.handleRadius,i=a.drawHandlesOnHover,r=Q(e.currentTarget,this.name);if(r)for(var s=Ze(n.canvasContext.canvas),l=Ie.getToolWidth(),c=ze.getFont(),u=function(e){var a=r.data[e];if(!1===a.visible)return "continue";Oe(s,function(e){Qe(e,t.configuration);var r=_e.getColorIfActive(a);Le(e,n.element,a.handles.start,a.handles.end,{color:r}),a.complete&&Le(e,n.element,a.handles.start2,a.handles.end2,{color:r});var s={color:r,handleRadius:o,drawHandlesIfActive:i};Ne(e,n,a.handles,s),e.fillStyle=r;var u=a.value;if(!a.handles.textBox.hasMoved){var d={x:(a.handles.start.x+a.handles.end.x)/2,y:(a.handles.start.y+a.handles.end.y)/2-10};e.font=c,a.handles.textBox.x=d.x,a.handles.textBox.y=d.y;}Xe(e,n.element,a.handles.textBox,u,a.handles,h,r,l,0,!0);});},d=0;d0&&void 0!==arguments[0]?arguments[0]:{};o()(this,t);var a=Object.assign({name:"EllipticalRoi",supportedInteractionTypes:["Mouse","Touch"]},n);return (e=l()(this,u()(t).call(this,a))).initialConfiguration=a,e}return h()(t,e),r()(t,[{key:"createNewMeasurement",value:function(e){if(e&&e.currentPoints&&e.currentPoints.image)return {visible:!0,active:!0,color:void 0,invalidated:!0,handles:{start:{x:e.currentPoints.image.x,y:e.currentPoints.image.y,highlight:!0,active:!1},end:{x:e.currentPoints.image.x,y:e.currentPoints.image.y,highlight:!0,active:!0},textBox:{active:!1,hasMoved:!1,movesIndependently:!1,drawnIndependently:!0,allowedOutsideImage:!0,hasBoundingBox:!0}}};console.error("required eventData not supplied to tool ".concat(this.name,"'s createNewMeasurement"));}},{key:"pointNearTool",value:function(e,t,n){var a=t&&t.handles&&t.handles.start&&t.handles.end;if(a||console.warn("invalid parameters supplieed to tool ".concat(this.name,"'s pointNearTool")),!a||!1===t.visible)return !1;var o=f.cornerstone.pixelToCanvas(e,t.handles.start),i=f.cornerstone.pixelToCanvas(e,t.handles.end),r={left:Math.min(o.x,i.x)+7.5,top:Math.min(o.y,i.y)+7.5,width:Math.abs(o.x-i.x)-15,height:Math.abs(o.y-i.y)-15},s={left:Math.min(o.x,i.x)-7.5,top:Math.min(o.y,i.y)-7.5,width:Math.abs(o.x-i.x)+15,height:Math.abs(o.y-i.y)+15},l=Vt(r,n);return !(!Vt(s,n)||l)}},{key:"renderToolData",value:function(e){var t=this,n=e.detail,a=this.configuration,o=a.handleRadius,i=a.drawHandlesOnHover,r=Q(e.currentTarget,this.name);if(r){var s,l=Ze(n.canvasContext.canvas),c=n.image,u=n.element,d=Ie.getToolWidth(),h=f.cornerstone.metaData.get("generalSeriesModule",c.imageId),v=f.cornerstone.metaData.get("imagePlaneModule",c.imageId),g=c.rowPixelSpacing,m=c.columnPixelSpacing;v&&(g=v.rowPixelSpacing||v.rowImagePixelSpacing,m=v.columnPixelSpacing||v.colImagePixelSpacing),h&&(s=h.modality);for(var p=function(e){var a=r.data[e];if(!1===a.visible)return "continue";Oe(l,function(e){Qe(e,t.configuration);var r=_e.getColorIfActive(a);Ue(e,u,a.handles.start,a.handles.end,{color:r});var l,h,v,p={color:r,handleRadius:o,drawHandlesIfActive:i};if(Ne(e,n,a.handles,p),!1===a.invalidated)h=a.meanStdDev,v=a.meanStdDevSUV,l=a.area;else{var y={left:Math.round(Math.min(a.handles.start.x,a.handles.end.x)),top:Math.round(Math.min(a.handles.start.y,a.handles.end.y)),width:Math.round(Math.abs(a.handles.start.x-a.handles.end.x)),height:Math.round(Math.abs(a.handles.start.y-a.handles.end.y))};if(!c.color){var T=f.cornerstone.getPixels(u,y.left,y.top,y.width,y.height);h=jt(T,y),"PT"===s&&(v={mean:Rt(c,(h.mean-c.intercept)/c.slope),stdDev:Rt(c,(h.stdDev-c.intercept)/c.slope)}),h&&!isNaN(h.mean)&&(a.meanStdDev=h,a.meanStdDevSUV=v);}l=Math.PI*(y.width*(m||1)/2)*(y.height*(g||1)/2),isNaN(l)||(a.area=l),a.invalidated=!1;}a.handles.textBox.hasMoved||(a.handles.textBox.x=Math.max(a.handles.start.x,a.handles.end.x),a.handles.textBox.y=(a.handles.start.y+a.handles.end.y)/2);var b=function(e){var t=e.meanStdDev,n=e.meanStdDevSUV,a=e.area,o=[];if(t&&void 0!==t.mean){var i="";"CT"===s&&(i=" HU");var r="Mean: ".concat(Nt(t.mean.toFixed(2))).concat(i),l="StdDev: ".concat(Nt(t.stdDev.toFixed(2))).concat(i);if(n&&void 0!==n.mean){r+=" SUV: "+Nt(n.mean.toFixed(2)),l+=" SUV: "+Nt(n.stdDev.toFixed(2));}o.push(r),o.push(l);}if(a){var c=" mm".concat(String.fromCharCode(178));g&&m||(c=" pixels".concat(String.fromCharCode(178)));var u="Area: ".concat(Nt(a.toFixed(2))).concat(c);o.push(u);}return o}(a);Xe(e,u,a.handles.textBox,b,a.handles,x,r,d,0,!0);});},y=0;ye.x&&n.x>e.x)return !0;if(t.x===n.x)return e.xn.x){var a=t;t=n,n=a;}var o=function(e,t,n){var a=(n.y-t.y)/(n.x-t.x);return {value:t.x+a*(e.x-t.x),gradient:a}}(e,t,n);return Math.sign(o.gradient)*e.y>o.value}(e,t,n));var a,o,i;}function Xt(e,t,n,a){qt(e,t)&&(n.value+=a,n.squared+=a*a,n.count++);}var Kt=function e(t,n){o()(this,e),this.toolIndex=t,this.handleIndexArray=n;},Zt=function e(t){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],a=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];o()(this,e),this.x=t.x,this.y=t.y,this.highlight=n,this.active=a,this.lines=[];};function Jt(e,t,n,a){for(var o=e.length-1,i=0;i0?1:2}function tn(e,t,n){return t.x<=Math.max(e.x,n.x)&&t.x>=Math.min(e.x,n.x)&&t.y<=Math.max(e.y,n.y)&&t.y>=Math.min(e.y,n.y)}var nn={newHandle:function(e,t){var n=t.length-1;return Jt(t,$t(t[n]),$t(e),[n])},end:function(e){var t=e.length-1;return Jt(e,$t(e[t]),$t(e[0]),[t,0])},modify:function(e,t){var n=$t(e[t]),a=t-1;0===t&&(a=e.length-1);var o=$t(e[a]);return !!Jt(e,n,o,[t,a])||Jt(e,n,o=$t(e[a=t===e.length-1?0:t+1]),[t,a])}},an=function(){function e(t){o()(this,e),this._eventData=t;}return r()(e,[{key:"findLine",value:function(){var e=this.findTool();if(null===e)return null;var t=this._getCloseLinesInTool(e);return t?this._findCorrectLine(e,t):null}},{key:"findTool",value:function(){return this._toolData=Q(this._eventData.element,"FreehandMouse"),this._mousePoint=this._eventData.currentPoints.canvas,this._toolData?this._nearestHandleToPointAllTools().toolIndex:null}},{key:"_nearestHandleToPointAllTools",value:function(){for(var e=this._toolData,t={toolIndex:null,handleIndex:null,distance:1/0},n=0;n0&&u0&&void 0!==arguments[0]?arguments[0]:{};o()(this,t);var a={name:"FreehandMouse",supportedInteractionTypes:["Mouse"],configuration:{mouseLocation:{handles:{start:{highlight:!0,active:!0}}},spacing:5,activeHandleRadius:3,completeHandleRadius:6,alwaysShowHandles:!1,invalidColor:"crimson",currentHandle:0,currentTool:-1}},i=Object.assign(a,n);return (e=l()(this,u()(t).call(this,i))).initialConfiguration=i,e._drawing=!1,e._dragging=!1,e._modifying=!1,e._drawingMouseDownCallback=e._drawingMouseDownCallback.bind(ut()(ut()(e))),e._drawingMouseMoveCallback=e._drawingMouseMoveCallback.bind(ut()(ut()(e))),e._drawingMouseDragCallback=e._drawingMouseDragCallback.bind(ut()(ut()(e))),e._drawingMouseUpCallback=e._drawingMouseUpCallback.bind(ut()(ut()(e))),e._editMouseUpCallback=e._editMouseUpCallback.bind(ut()(ut()(e))),e._editMouseDragCallback=e._editMouseDragCallback.bind(ut()(ut()(e))),e}return h()(t,e),r()(t,[{key:"createNewMeasurement",value:function(e){if(e&&e.currentPoints&&e.currentPoints.image){var t={visible:!0,active:!0,invalidated:!0,color:void 0,handles:[]};return t.handles.textBox={active:!1,hasMoved:!1,movesIndependently:!1,drawnIndependently:!0,allowedOutsideImage:!0,hasBoundingBox:!0},t}console.error("required eventData not supplied to tool ".concat(this.name,"'s createNewMeasurement"));}},{key:"pointNearTool",value:function(e,t,n){var a=t&&t.handles;if(!a)throw new Error("invalid parameters supplied to tool ".concat(this.name,"'s pointNearTool"));return !(!a||!1===t.visible)&&void 0!==this._pointNearHandle(e,t,n)}},{key:"distanceFromPoint",value:function(e,t,n){for(var a=1/0,o=0;o3&&void 0!==arguments[3]?arguments[3]:"mouse",o=e.detail,i=o.element;if(n.hasBoundingBox)Te(e,this,t,n,a);else{var r=this.configuration;r.dragOrigin={x:n.x,y:n.y};var s=this._pointNearHandleAllTools(o),l=s.handleNearby,c=s.toolIndex;this._modifying=!0,r.currentHandle=l,r.currentTool=c,this._activateModify(i),S.isToolLocked=!0,vn(e);}}},{key:"_drawingMouseMoveCallback",value:function(e){var t=e.detail,n=t.element,a=Q(t.element,this.name),o=this.configuration,i=o.currentTool,r=a.data[i],s=t.currentPoints.canvas;this._getMouseLocation(t),this._checkInvalidHandleLocation(r,t);var l=this._pointNearHandle(n,r,s);void 0!==l&&!l.hasBoundingBox&&l