dicomweb-proxy
Version:
A proxy to translate between dicomweb and dimse
1 lines • 88.6 kB
JavaScript
"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7759],{74690:(t,e,n)=>{n.d(e,{u:()=>u,L:()=>g});var o=n(99737),i=n(83638),r=n(68014),s=n(77609);const{Active:a}=o.ToolModes;function l(t){const{renderingEngineId:e,viewportId:n}=t.detail,o=(0,r.kg)(),l=i.kt.getModifierKey(),c=(0,s.getToolGroupForViewport)(n,e);if(!c)return null;const u=Object.keys(c.toolOptions),d=c.getDefaultMousePrimary();for(let t=0;t<u.length;t++){const e=u[t],n=c.toolOptions[e];if(n.mode!==a)continue;if(n.bindings.length&&n.bindings.some((t=>t.mouseButton===(o??d)&&t.modifierKey===l)))return c.getToolInstance(e)}}var c=n(49892);function u(t){const e=l(t);if(e){const{renderingEngineId:n,viewportId:o}=t.detail,i=(0,s.getToolGroupForViewport)(o,n),r=e.getToolName();Object.keys(i.toolOptions).includes(r)&&i.setViewportsCursorByToolName(r)}const n=function(t,e){const n=new Map,{renderingEngineId:o,viewportId:i}=t.detail,r=(0,s.getToolGroupForViewport)(i,o);if(!r)return n;const a=Object.keys(r.toolOptions),l=t.detail.key;for(let t=0;t<a.length;t++){const o=a[t],i=r.getToolInstance(o),s=i.configuration?.actions;if(!s)continue;const c=Object.values(s);if(!c?.length||!e.includes(i.mode))continue;const u=c.find((t=>t.bindings?.some((t=>t.key===l))));u&&n.set(i,u)}return n}(t,[c.A.Active]);if(n?.size){const{element:e}=t.detail;for(const[o,i]of[...n.entries()]){("function"==typeof i.method?i.method:o[i.method]).call(o,e,i,t)}}}var d=n(40776);function g(t){const e=l(t);if(!e)return;const{renderingEngineId:n,viewportId:o}=t.detail,i=(0,s.getToolGroupForViewport)(o,n);(0,d.Ud)();const r=e.getToolName();Object.keys(i.toolOptions).includes(r)&&i.setViewportsCursorByToolName(r)}},40100:(t,e,n)=>{n.d(e,{q_:()=>i,LM:()=>r,cT:()=>E,Xd:()=>x,al:()=>k,tG:()=>O,Je:()=>L,rO:()=>N});var o=n(96198);const i=o.A.bind(null,"Mouse","mouseClickCallback"),r=o.A.bind(null,"Mouse","doubleClickCallback");var s=n(85204),a=n(99737),l=n(17343),c=n(2076),u=n(29601),d=n(35486),g=n(57725),h=n(25972),p=n(83638),m=n(77609),f=n(76910);const{Active:v}=a.ToolModes;function w(t){const{renderingEngineId:e,viewportId:n,event:o}=t.detail,i=(0,f.A)(o)||p.kt.getModifierKey(),r=(0,m.getToolGroupForViewport)(n,e);if(!r)return null;const s=Object.keys(r.toolOptions),a=r.getDefaultMousePrimary(),l=t.detail.buttons??o?.buttons??a;for(let t=0;t<s.length;t++){const e=s[t],n=r.toolOptions[e],o=n.bindings.length&&n.bindings.some((t=>t.mouseButton===l&&t.modifierKey===i));if(n.mode===v&&o)return r.getToolInstance(e)}}var P=n(70333),I=n(15327);const{Active:y,Passive:b}=a.ToolModes;function A(t){if(s.wk.isInteractingWithTool)return!1;const e=t.detail,{element:n}=e,o=(0,I.getEnabledElement)(n),{canvas:i}=e.currentPoints;if(!o)return!1;const r=function(t,e){const n=new Map,{renderingEngineId:o,viewportId:i}=t.detail,r=(0,m.getToolGroupForViewport)(i,o);if(!r)return n;const s=Object.keys(r.toolOptions),a=r.getDefaultMousePrimary(),l=t.detail.event,c=l?.buttons??a,u=(0,f.A)(l)||p.kt.getModifierKey();for(let t=0;t<s.length;t++){const o=s[t],i=r.getToolInstance(o),a=i.configuration?.actions??{},l=Object.values(a);if(!l?.length||!e.includes(i.mode))continue;const d=l.find((t=>t.bindings?.length&&t.bindings.some((t=>t.mouseButton===c&&t.modifierKey===u))));d&&n.set(i,d)}return n}(t,[y,b]),a=Array.from(r.keys()),l=(0,g.A)(n,a),c=(0,h.A)(n,l,i);if(c.length>0){const{tool:e,annotation:n}=c[0],o=r.get(e);return("string"==typeof o.method?e[o.method]:o.method).call(e,t,n),!0}return!1}const{Active:T,Passive:C}=a.ToolModes;function E(t){if(s.wk.isInteractingWithTool)return;const e=w(t);if(e&&"function"==typeof e.preMouseDownCallback){if(e.preMouseDownCallback(t))return}const n=1===t.detail.event.buttons,o=[...(0,P.A)(t,[T],t.detail.event.buttons)||[],...(n?(0,P.A)(t,[C]):void 0)||[]];if(A(t))return;const i=t.detail,{element:r}=i,a=(0,g.A)(r,o),l=i.currentPoints.canvas,c=(0,d.A)(r,a,l,"mouse"),u=!!t.detail.event.shiftKey;if(c.length>0){const{tool:e,annotation:n,handle:o}=_(c);return M(n.annotationUID,u),void e.handleSelectedCallback(t,n,o,"Mouse")}const p=(0,h.A)(r,a,l,"mouse");if(p.length>0){const{tool:e,annotation:n}=_(p);return M(n.annotationUID,u),void e.toolSelectedCallback(t,n,"Mouse",l)}if(e&&"function"==typeof e.postMouseDownCallback){if(e.postMouseDownCallback(t))return}}function _(t){if(t.length>1){const e=t.find((t=>{const e=!(0,c.isAnnotationLocked)(t.annotation.annotationUID),n=(0,u.isAnnotationVisible)(t.annotation.annotationUID);return e&&n}));if(e)return e}return t[0]}function M(t,e=!1){if(e)if((0,l.isAnnotationSelected)(t))(0,l.setAnnotationSelected)(t,!1);else{const e=!0;(0,l.setAnnotationSelected)(t,!0,e)}else{const e=!1;(0,l.setAnnotationSelected)(t,!0,e)}}function x(t){if(s.wk.isInteractingWithTool)return;const e=w(t);if(e&&!s.wk.isMultiPartToolActive&&e.addNewAnnotation){const n=e.addNewAnnotation(t,"mouse");(0,l.setAnnotationSelected)(n.annotationUID)}}function k(t){if(s.wk.isInteractingWithTool)return;const e=w(t);!e||"function"!=typeof e.mouseDragCallback||e.mouseDragCallback(t)}var S=n(56069);const{Active:D,Passive:R}=a.ToolModes;function O(t){if(s.wk.isInteractingWithTool||s.wk.isMultiPartToolActive)return;const e=(0,P.A)(t,[D,R]),n=t.detail,{element:o}=n,i=(0,g.A)(o,e),r=e.filter((t=>!i.some((e=>e.tool.getToolName()===t.getToolName()))));let a=!1;for(const{tool:e,annotations:n}of i)"function"==typeof e.mouseMoveCallback&&(a=e.mouseMoveCallback(t,n)||a);r.forEach((e=>{"function"==typeof e.mouseMoveCallback&&e.mouseMoveCallback(t)})),!0===a&&(0,S.A)(o)}const L=o.A.bind(null,"Mouse","mouseUpCallback");var F=n(66452);const N=function(t){if(s.wk.isInteractingWithTool)return;t.detail.buttons=F.i.Wheel|(t.detail.event.buttons||0);const e=w(t);return e?e.mouseWheelCallback(t):void 0}},96198:(t,e,n)=>{n.d(e,{A:()=>a});var o=n(85204),i=n(49892),r=n(77609);const{Active:s}=i.A;function a(t,e,n){if(o.wk.isInteractingWithTool)return!1;const{renderingEngineId:i,viewportId:a}=n.detail,l=(0,r.getToolGroupForViewport)(a,i);if(!l)return!1;let c;const u=Object.keys(l.toolOptions);for(let t=0;t<u.length;t++){const n=u[t],o=l.toolOptions[n],i=l.getToolInstance(n);if(o.mode===s&&"function"==typeof i[e]){c=l.getToolInstance(n);break}}c&&c[e](n)}},70333:(t,e,n)=>{n.d(e,{A:()=>i});var o=n(77609);function i(t,e,n){const{renderingEngineId:i,viewportId:r}=t.detail,s=(0,o.getToolGroupForViewport)(r,i);if(!s)return[];const a=[],l=Object.keys(s.toolOptions);for(let t=0;t<l.length;t++){const o=l[t],i=s.toolOptions[o],r=null!=n&&i.bindings.length&&i.bindings.some((t=>t.mouseButton===n));if(e.includes(i.mode)&&(!n||r)){const t=s.getToolInstance(o);a.push(t)}}return a}},84971:(t,e,n)=>{n.d(e,{Oz:()=>A,ls:()=>C,x5:()=>_,gX:()=>P,$F:()=>b,lI:()=>E});var o=n(85204),i=n(99737),r=n(17343),s=n(2076),a=n(29601),l=n(35486),c=n(57725),u=n(25972),d=n(76910),g=n(83638),h=n(77609);const{Active:p}=i.ToolModes;function m(t){const{renderingEngineId:e,viewportId:n}=t.detail,o=t.detail.event,i=(0,h.getToolGroupForViewport)(n,e);if(!i)return null;const r=Object.keys(i.toolOptions),s=Object.keys(o.touches).length,a=(0,d.A)(o)||g.kt.getModifierKey(),l=i.getDefaultMousePrimary();for(let t=0;t<r.length;t++){const e=r[t],n=i.toolOptions[e],o=n.bindings.length&&n.bindings.some((t=>(t.numTouchPoints===s||1===s&&t.mouseButton===l)&&t.modifierKey===a));if(n.mode===p&&o)return i.getToolInstance(e)}}function f(t,e,n){const{renderingEngineId:o,viewportId:i}=t.detail,r=(0,h.getToolGroupForViewport)(i,o);if(!r)return[];const s=[],a=Object.keys(r.toolOptions);for(let t=0;t<a.length;t++){const o=a[t],i=r.toolOptions[o],l=null!=n&&i.bindings.length&&i.bindings.some((t=>t.numTouchPoints===n));if(e.includes(i.mode)&&(!n||l)){const t=r.getToolInstance(o);s.push(t)}}return s}const{Active:v,Passive:w}=i.ToolModes;function P(t){if(o.wk.isInteractingWithTool)return;const e=m(t);if(e&&"function"==typeof e.preTouchStartCallback){if(e.preTouchStartCallback(t))return}const n=1===Object.keys(t.detail.event.touches).length,i=[...f(t,[v],Object.keys(t.detail.event.touches).length)||[],...(n?f(t,[w]):void 0)||[],e],r=t.detail,{element:s}=r,a=(0,c.A)(s,i),d=r.currentPoints.canvas,g=(0,l.A)(s,a,d,"touch"),h=!1;if(g.length>0){const{tool:e,annotation:n,handle:o}=I(g);return y(n.annotationUID,h),void e.handleSelectedCallback(t,n,o,"Touch")}const p=(0,u.A)(s,a,d,"touch");if(p.length>0){const{tool:e,annotation:n}=I(p);return y(n.annotationUID,h),void e.toolSelectedCallback(t,n,"Touch",d)}if(e&&"function"==typeof e.postTouchStartCallback){if(e.postTouchStartCallback(t))return}}function I(t){return t.length>1&&t.find((t=>!(0,s.isAnnotationLocked)(t.annotation.annotationUID)&&(0,a.isAnnotationVisible)(t.annotation.annotationUID)))||t[0]}function y(t,e=!1){if(e)if((0,r.isAnnotationSelected)(t))(0,r.setAnnotationSelected)(t,!1);else{const e=!0;(0,r.setAnnotationSelected)(t,!0,e)}else{const e=!1;(0,r.setAnnotationSelected)(t,!0,e)}}function b(t){if(o.wk.isInteractingWithTool)return;const e=m(t);if(e&&!o.wk.isMultiPartToolActive&&e.addNewAnnotation){const n=e.addNewAnnotation(t,"touch");(0,r.setAnnotationSelected)(n.annotationUID)}}function A(t){if(o.wk.isInteractingWithTool)return;const e=m(t);!e||"function"!=typeof e.touchDragCallback||e.touchDragCallback(t)}var T=n(96198);const C=T.A.bind(null,"Touch","touchEndCallback"),E=T.A.bind(null,"Touch","touchTapCallback"),_=T.A.bind(null,"Touch","touchPressCallback")},39595:(t,e,n)=>{n.d(e,{A:()=>r});var o=n(40776);function i(t){t.removeEventListener("keydown",o.Ay)}const r={enable:function(t){i(t),t.addEventListener("keydown",o.Ay)},disable:i,getModifierKey:o.vh}},40776:(t,e,n)=>{n.d(e,{Ay:()=>g,Ud:()=>d,vh:()=>u});var o=n(15327),i=n(94021);const r={renderingEngineId:void 0,viewportId:void 0,key:void 0,keyCode:void 0,element:null};let s={renderingEngineId:void 0,viewportId:void 0,key:void 0,keyCode:void 0,element:null};function a(t){s.element=t.currentTarget;const e=(0,o.getEnabledElement)(s.element),{renderingEngineId:n,viewportId:r}=e;s.renderingEngineId=n,s.viewportId=r,s.key=t.key,s.keyCode=t.keyCode,t.preventDefault();const u={renderingEngineId:s.renderingEngineId,viewportId:s.viewportId,element:s.element,key:s.key,keyCode:s.keyCode};(0,o.triggerEvent)(u.element,i.A.KEY_DOWN,u),document.addEventListener("keyup",c),document.addEventListener("visibilitychange",l),s.element.removeEventListener("keydown",a)}function l(){document.removeEventListener("visibilitychange",l),"hidden"===document.visibilityState&&d()}function c(t){const e={renderingEngineId:s.renderingEngineId,viewportId:s.viewportId,element:s.element,key:s.key,keyCode:s.keyCode};document.removeEventListener("keyup",c),document.removeEventListener("visibilitychange",l),s.element.addEventListener("keydown",a),s=structuredClone(r),(0,o.triggerEvent)(e.element,i.A.KEY_UP,e)}function u(){return s.keyCode}function d(){s.keyCode=void 0}const g=a},99019:(t,e,n)=>{n.d(e,{A:()=>i});var o=n(15327);function i(t,e){const n=e||t.currentTarget,{viewport:i}=(0,o.getEnabledElement)(n)||{};if(!i)return;const r=function(t){return[t.clientX,t.clientY]}(t),s=function(t){return[t.pageX,t.pageY]}(t),a=function(t,e){const n=t.getBoundingClientRect();return[e[0]-n.left-window.pageXOffset,e[1]-n.top-window.pageYOffset]}(n,s);return{page:s,client:r,canvas:a,world:i.canvasToWorld(a)}}},91099:(t,e,n)=>{n.d(e,{A:()=>s});var o=n(15327),i=n(94021),r=n(99019);const s=function(t){const e=t.currentTarget,{viewportId:n,renderingEngineId:s}=(0,o.getEnabledElement)(e),a=(0,r.A)(t,e),l={event:t,eventName:i.A.MOUSE_DOUBLE_CLICK,viewportId:n,renderingEngineId:s,camera:{},element:e,startPoints:a,lastPoints:a,currentPoints:a,deltaPoints:{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]}};!(0,o.triggerEvent)(e,i.A.MOUSE_DOUBLE_CLICK,l)&&(t.stopImmediatePropagation(),t.preventDefault())}},68014:(t,e,n)=>{n.d(e,{Ay:()=>k,DF:()=>x,kg:()=>M});var o=n(15327),i=n(94021),r=n(41343),s=n(99019);const{MOUSE_DOWN:a,MOUSE_DOWN_ACTIVATE:l,MOUSE_CLICK:c,MOUSE_UP:u,MOUSE_DRAG:d}=i.A,g=3,h={mouseButton:void 0,element:null,renderingEngineId:void 0,viewportId:void 0,isClickEvent:!0,clickDelay:200,preventClickTimeout:null,startPoints:{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]},lastPoints:{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]}};let p={mouseButton:void 0,renderingEngineId:void 0,viewportId:void 0,isClickEvent:!0,clickDelay:200,element:null,preventClickTimeout:null,startPoints:{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]},lastPoints:{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]}};const m={doubleClickTimeout:null,mouseDownEvent:null,mouseUpEvent:null,ignoreDoubleClick:!1};function f(t){const e=(0,o.getEnabledElement)(p.element);if(!e?.viewport)return;const n=(0,s.A)(t,p.element),i=C(p.element,p.lastPoints),r=E(n,i);if(m.doubleClickTimeout){if(!P(r.canvas))return;y()}const a={event:t,eventName:d,mouseButton:p.mouseButton,renderingEngineId:p.renderingEngineId,viewportId:p.viewportId,camera:{},element:p.element,startPoints:T(p.startPoints),lastPoints:T(i),currentPoints:n,deltaPoints:r};!(0,o.triggerEvent)(p.element,d,a)&&(t.stopImmediatePropagation(),t.preventDefault()),p.lastPoints=T(n)}function v(t){if(clearTimeout(p.preventClickTimeout),m.doubleClickTimeout)m.mouseUpEvent?A():(m.mouseUpEvent=t,p.element.addEventListener("mousemove",w));else{const e=p.isClickEvent?c:u,n=(0,s.A)(t,p.element),i=E(n,p.lastPoints),r={event:t,eventName:e,mouseButton:p.mouseButton,element:p.element,renderingEngineId:p.renderingEngineId,viewportId:p.viewportId,camera:{},startPoints:T(p.startPoints),lastPoints:T(p.lastPoints),currentPoints:n,deltaPoints:i};(0,o.triggerEvent)(r.element,e,r),A()}document.removeEventListener("mousemove",f)}function w(t){P(E((0,s.A)(t,p.element),C(p.element,p.lastPoints)).canvas)&&(y(),(0,r.A)(t))}function P(t){return Math.abs(t[0])+Math.abs(t[1])>g}function I(){p.isClickEvent=!1}function y(){m.ignoreDoubleClick=!0;const t=m.mouseDownEvent,e=m.mouseUpEvent;b(),function(t){const e=E(p.startPoints,p.startPoints),n={event:t,eventName:a,element:p.element,mouseButton:p.mouseButton,renderingEngineId:p.renderingEngineId,viewportId:p.viewportId,camera:{},startPoints:p.startPoints,lastPoints:p.startPoints,currentPoints:p.startPoints,deltaPoints:e};p.lastPoints=T(n.lastPoints),(0,o.triggerEvent)(n.element,a,n)&&(0,o.triggerEvent)(n.element,l,n)}(t),e&&v(e)}function b(){m.doubleClickTimeout&&(clearTimeout(m.doubleClickTimeout),m.doubleClickTimeout=null),m.mouseDownEvent=null,m.mouseUpEvent=null}function A(){document.removeEventListener("mouseup",v),p.element?.removeEventListener("mousemove",w),p.element?.addEventListener("mousemove",r.A),b(),p=JSON.parse(JSON.stringify(h))}function T(t){return JSON.parse(JSON.stringify(t))}function C(t,e){const{viewport:n}=(0,o.getEnabledElement)(t)||{};if(!n)return e;const i=n.canvasToWorld(e.canvas);return{page:e.page,client:e.client,canvas:e.canvas,world:i}}function E(t,e){return t&&e?{page:_(t.page,e.page),client:_(t.client,e.client),canvas:_(t.canvas,e.canvas),world:(n=t.world,o=e.world,[n[0]-o[0],n[1]-o[1],n[2]-o[2]])}:{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]};var n,o}function _(t,e){return[t[0]-e[0],t[1]-e[1]]}function M(){return p.mouseButton}function x(t){m.ignoreDoubleClick?(m.ignoreDoubleClick=!1,t.stopImmediatePropagation(),t.preventDefault()):A()}const k=function(t){if(m.doubleClickTimeout){if(t.buttons===m.mouseDownEvent.buttons)return;return m.mouseDownEvent=t,void y()}m.doubleClickTimeout=setTimeout(y,1===t.buttons?400:150),m.mouseDownEvent=t,m.ignoreDoubleClick=!1,p.element=t.currentTarget,p.mouseButton=t.buttons;const e=(0,o.getEnabledElement)(p.element),{renderingEngineId:n,viewportId:i}=e;p.renderingEngineId=n,p.viewportId=i,p.preventClickTimeout=setTimeout(I,p.clickDelay),p.element.removeEventListener("mousemove",r.A);const a=(0,s.A)(t,p.element);p.startPoints=T(a),p.lastPoints=T(a),document.addEventListener("mouseup",v),document.addEventListener("mousemove",f)}},41343:(t,e,n)=>{n.d(e,{A:()=>a});var o=n(15327),i=n(94021),r=n(99019);const s=i.A.MOUSE_MOVE;const a=function(t){const e=t.currentTarget,n=(0,o.getEnabledElement)(e);if(!n)return;const{renderingEngineId:i,viewportId:a}=n,l={renderingEngineId:i,viewportId:a,camera:{},element:e,currentPoints:(0,r.A)(t),eventName:s,event:t};!(0,o.triggerEvent)(e,s,l)&&(t.stopImmediatePropagation(),t.preventDefault())}},41666:(t,e,n)=>{n.d(e,{A:()=>p});const o={mouse:0,touch:1};let i,r;function s(t,e){const n=Date.now();if(t!==i){if(n-r<=2e3)return e.preventDefault(),e.stopPropagation(),e.stopImmediatePropagation(),!1;i=t}r=n}const a=s.bind(null,o.mouse),l=s.bind(null,o.touch);function c(t,e,n){const o=n?a:l;e.forEach((function(e){t.addEventListener(e,o,{passive:!1})}))}function u(t,e,n){const o=n?a:l;e.forEach((function(e){t.removeEventListener(e,o)}))}const d=["mousedown","mouseup","mousemove"],g=["touchstart","touchend"];function h(t){u(t,d,o.mouse),u(t,g,o.touch)}const p={enable:function(t){h(t),c(t,d,o.mouse),c(t,g,o.touch)},disable:h}},82603:(t,e,n)=>{n.d(e,{A:()=>C});var o=n(15327),i=n(94021),r=n(10401);function s(t,e){const n=e||t.currentTarget,i="touchend"===t.type?t.changedTouches:t.touches;return Object.keys(i).map((t=>{const e=function(t){return[t.clientX,t.clientY]}(i[t]),r=function(t){return[t.pageX,t.pageY]}(i[t]),s=function(t,e){const n=t.getBoundingClientRect();return[e[0]-n.left-window.pageXOffset,e[1]-n.top-window.pageYOffset]}(n,r),{viewport:a}=(0,o.getEnabledElement)(n);return{page:r,client:e,canvas:s,world:a.canvasToWorld(s),touch:{identifier:t,radiusX:i[t].radiusX,radiusY:i[t].radiusY,force:i[t].force,rotationAngle:i[t].rotationAngle}}}))}var a=n(76260);o.Settings.getRuntimeSettings();const{TOUCH_START:l,TOUCH_START_ACTIVATE:c,TOUCH_PRESS:u,TOUCH_DRAG:d,TOUCH_END:g,TOUCH_TAP:h,TOUCH_SWIPE:p}=i.A,m={page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]},f={page:0,client:0,canvas:0,world:0},v={renderingEngineId:void 0,viewportId:void 0,element:null,startPointsList:[{...m,touch:null}],lastPointsList:[{...m,touch:null}],isTouchStart:!1,startTime:null,pressTimeout:null,pressDelay:700,pressMaxDistance:5,accumulatedDistance:f,swipeDistanceThreshold:48,swiped:!1,swipeToleranceMs:300},w={renderingEngineId:void 0,viewportId:void 0,element:null,startPointsList:[{...m,touch:null}],taps:0,tapTimeout:null,tapMaxDistance:24,tapToleranceMs:300};let P=JSON.parse(JSON.stringify(v)),I=JSON.parse(JSON.stringify(w));function y(t,e,n){return(0,o.triggerEvent)(t,e,n)}function b(t){const e=s(t,P.element),n=T(P.element,P.lastPointsList),o=e.length===n.length?(0,a.getDeltaPoints)(e,n):m,i=e.length===n.length?(0,a.getDeltaDistanceBetweenIPoints)(e,n):f,l=e.length===n.length?(0,a.getDeltaDistance)(e,P.lastPointsList):f;P.accumulatedDistance={page:P.accumulatedDistance.page+l.page,client:P.accumulatedDistance.client+l.client,canvas:P.accumulatedDistance.canvas+l.canvas,world:P.accumulatedDistance.world+l.world};const c={event:t,eventName:d,renderingEngineId:P.renderingEngineId,viewportId:P.viewportId,camera:{},element:P.element,startPoints:(0,a.getMeanTouchPoints)(P.startPointsList),lastPoints:(0,a.getMeanTouchPoints)(n),currentPoints:(0,a.getMeanTouchPoints)(e),startPointsList:(0,a.copyPointsList)(P.startPointsList),lastPointsList:(0,a.copyPointsList)(n),currentPointsList:e,deltaPoints:o,deltaDistance:i};y(P.element,d,c),function(t,e){const n=(new Date).getTime(),o=P.startTime.getTime();if(P.swiped||n-o>P.swipeToleranceMs)return;const[i,s]=e.canvas,a={event:t,eventName:p,renderingEngineId:P.renderingEngineId,viewportId:P.viewportId,camera:{},element:P.element,swipe:null};Math.abs(i)>P.swipeDistanceThreshold&&(a.swipe=i>0?r.H.RIGHT:r.H.LEFT,y(a.element,p,a),P.swiped=!0);Math.abs(s)>P.swipeDistanceThreshold&&(a.swipe=s>0?r.H.DOWN:r.H.UP,y(a.element,p,a),P.swiped=!0)}(t,o),P.lastPointsList=(0,a.copyPointsList)(e)}function A(t){clearTimeout(P.pressTimeout);const e=s(t,P.element),n=T(P.element,P.lastPointsList),o=e.length===n.length?(0,a.getDeltaPoints)(e,n):(0,a.getDeltaPoints)(e,e),i=e.length===n.length?(0,a.getDeltaDistanceBetweenIPoints)(e,n):(0,a.getDeltaDistanceBetweenIPoints)(e,e),r={event:t,eventName:g,element:P.element,renderingEngineId:P.renderingEngineId,viewportId:P.viewportId,camera:{},startPointsList:(0,a.copyPointsList)(P.startPointsList),lastPointsList:(0,a.copyPointsList)(n),currentPointsList:e,startPoints:(0,a.getMeanTouchPoints)(P.startPointsList),lastPoints:(0,a.getMeanTouchPoints)(n),currentPoints:(0,a.getMeanTouchPoints)(e),deltaPoints:o,deltaDistance:i};y(r.element,g,r),function(t){const e=(new Date).getTime(),n=P.startTime.getTime();if(e-n>I.tapToleranceMs)return;0===I.taps&&(I.element=P.element,I.renderingEngineId=P.renderingEngineId,I.viewportId=P.viewportId,I.startPointsList=P.startPointsList);if(I.taps>0&&(I.element!=P.element||I.renderingEngineId!=P.renderingEngineId||I.viewportId!=P.viewportId))return;const o=s(t,I.element),i=(0,a.getDeltaDistance)(o,I.startPointsList).canvas;if(i>I.tapMaxDistance)return;clearTimeout(I.tapTimeout),I.taps+=1,I.tapTimeout=setTimeout((()=>{const e={event:t,eventName:h,element:I.element,renderingEngineId:I.renderingEngineId,viewportId:I.viewportId,camera:{},currentPointsList:o,currentPoints:(0,a.getMeanTouchPoints)(o),taps:I.taps};y(e.element,h,e),I=JSON.parse(JSON.stringify(w))}),I.tapToleranceMs)}(t),P=JSON.parse(JSON.stringify(v)),document.removeEventListener("touchmove",b),document.removeEventListener("touchend",A)}function T(t,e){const{viewport:n}=(0,o.getEnabledElement)(t);return e.map((t=>{const e=n.canvasToWorld(t.canvas);return{page:t.page,client:t.client,canvas:t.canvas,world:e,touch:t.touch}}))}const C=function(t){P.element=t.currentTarget;const e=(0,o.getEnabledElement)(P.element),{renderingEngineId:n,viewportId:i}=e;P.renderingEngineId=n,P.viewportId=i,P.isTouchStart||(clearTimeout(P.pressTimeout),P.pressTimeout=setTimeout((()=>function(t){if(P.accumulatedDistance.canvas>P.pressMaxDistance)return;const e={event:t,eventName:u,renderingEngineId:P.renderingEngineId,viewportId:P.viewportId,camera:{},element:P.element,startPointsList:(0,a.copyPointsList)(P.startPointsList),lastPointsList:(0,a.copyPointsList)(P.lastPointsList),startPoints:(0,a.copyPoints)((0,a.getMeanTouchPoints)(P.startPointsList)),lastPoints:(0,a.copyPoints)((0,a.getMeanTouchPoints)(P.lastPointsList))};y(e.element,u,e)}(t)),P.pressDelay),function(t){P.isTouchStart=!0,P.startTime=new Date;const e=s(t,P.element),n=(0,a.getMeanTouchPoints)(e),o=m,i=f,r={event:t,eventName:l,element:P.element,renderingEngineId:P.renderingEngineId,viewportId:P.viewportId,camera:{},startPointsList:e,lastPointsList:e,currentPointsList:e,startPoints:n,lastPoints:n,currentPoints:n,deltaPoints:o,deltaDistance:i};P.startPointsList=(0,a.copyPointsList)(r.startPointsList),P.lastPointsList=(0,a.copyPointsList)(r.lastPointsList);y(r.element,l,r)&&y(r.element,c,r)}(t),document.addEventListener("touchmove",b),document.addEventListener("touchend",A))}},17806:(t,e,n)=>{n.d(e,{A:()=>c});var o=n(15327);const i=10,r=40,s=800;var a=n(94021),l=n(99019);const c=function(t){const e=t.currentTarget,n=(0,o.getEnabledElement)(e),{renderingEngineId:c,viewportId:u}=n;if(t.deltaY>-1&&t.deltaY<1)return;t.preventDefault();const{spinX:d,spinY:g,pixelX:h,pixelY:p}=function(t){let e=0,n=0,o=0,a=0;return"detail"in t&&(n=t.detail),"wheelDelta"in t&&(n=-t.wheelDelta/120),"wheelDeltaY"in t&&(n=-t.wheelDeltaY/120),"wheelDeltaX"in t&&(e=-t.wheelDeltaX/120),o=e*i,a=n*i,"deltaY"in t&&(a=t.deltaY),"deltaX"in t&&(o=t.deltaX),(o||a)&&t.deltaMode&&(1===t.deltaMode?(o*=r,a*=r):(o*=s,a*=s)),o&&!e&&(e=o<1?-1:1),a&&!n&&(n=a<1?-1:1),{spinX:e,spinY:n,pixelX:o,pixelY:a}}(t),m=g<0?-1:1,f={event:t,eventName:a.A.MOUSE_WHEEL,renderingEngineId:c,viewportId:u,element:e,camera:{},detail:t,wheel:{spinX:d,spinY:g,pixelX:h,pixelY:p,direction:m},points:(0,l.A)(t)};(0,o.triggerEvent)(e,a.A.MOUSE_WHEEL,f)}},6802:(t,e,n)=>{n.d(e,{O8:()=>o.removeAnnotation,Rh:()=>o.getAnnotations,gw:()=>o.getAnnotation,lC:()=>o.addAnnotation});n(67013),n(2076),n(17343);var o=n(82056);n(97)},6273:(t,e,n)=>{n.d(e,{p:()=>r});var o=n(59475),i=n(49906);async function r(t){const e=(0,o.cC)(t);return(0,i.triggerSegmentationModified)(t.segmentationId),e}},98149:(t,e,n)=>{n.d(e,{X:()=>l});var o=n(15327),i=n(99737),r=n(33283),s=n(49906),a=n(74283);async function l({segmentationId:t,viewportId:e,imageIds:n,options:l}){const c=(0,r.T)(t);if(l?.removeOriginal){const t=c.representationData.Labelmap;o.cache.getVolume(t.volumeId)&&o.cache.removeVolumeLoadObject(t.volumeId),c.representationData.Labelmap={imageIds:n}}else c.representationData.Labelmap={...c.representationData.Labelmap,imageIds:n};await(0,a.gR)(e,[{segmentationId:t,type:i.SegmentationRepresentations.Labelmap}]),o.eventTarget.addEventListenerOnce(i.Events.SEGMENTATION_RENDERED,(()=>(0,s.triggerSegmentationDataModified)(t)))}},25972:(t,e,n)=>{function o(t,e,n,o="mouse"){const i="touch"===o?36:6,r=[];return e.forEach((({tool:e,annotations:s})=>{for(const a of s){if(a.isLocked||!a.isVisible)continue;if(e.isPointNearTool(t,a,n,i,o)){r.push({tool:e,annotation:a});break}}})),r}n.d(e,{A:()=>o})},57725:(t,e,n)=>{n.d(e,{A:()=>i});var o=n(82056);function i(t,e){const n=[];for(let i=0;i<e.length;i++){const r=e[i];if(!r){console.warn("undefined tool in filterToolsWithAnnotationsForElement");continue}let s=(0,o.getAnnotations)(r.constructor.toolName,t);s?.length&&("function"==typeof r.filterInteractableAnnotationsForElement&&(s=r.filterInteractableAnnotationsForElement(t,s)),s?.length>0&&n.push({tool:r,annotations:s}))}return n}},35486:(t,e,n)=>{function o(t,e,n,o="mouse"){const i="touch"===o?36:6,r=[];return e.forEach((({tool:e,annotations:o})=>{for(const s of o){if(s.isLocked||!s.isVisible)continue;const o=e.getHandleNearImagePoint(t,s,n,i);if(o){r.push({tool:e,annotation:s,handle:o});break}}})),r}n.d(e,{A:()=>o})},16175:(t,e,n)=>{n.d(e,{A:()=>l});var o=n(15327),i=n(13271),r=n(17328),s=n(95527);class a{constructor(){this.toolInfo={toolSize:null,maxToolSize:null}}static{this.shapeName="Circle"}renderShape(t,e,n){(0,r.drawCircle)(t,"SculptorTool","0",e,this.toolInfo.toolSize,n)}pushHandles(t,e){const{points:n,mouseCanvasPoint:o}=e,i={first:void 0,last:void 0};for(let r=0;r<n.length;r++){const a=t.worldToCanvas(n[r]),l=s.point.distanceToPoint(a,o);l>this.toolInfo.toolSize||(this.pushOneHandle(r,l,e),void 0===i.first?(i.first=r,i.last=r):i.last=r)}return i}configureToolSize(t){const e=this.toolInfo;if(e.toolSize&&e.maxToolSize)return;const n=t.detail.element,o=Math.min(n.clientWidth,n.clientHeight)/12;e.toolSize=o,e.maxToolSize=o}updateToolSize(t,e,n){const o=this.toolInfo,r=(0,i.X)(e,n,t);r>0&&(o.toolSize=Math.min(o.maxToolSize,r))}getMaxSpacing(t){return Math.max(this.toolInfo.toolSize/4,t)}getInsertPosition(t,e,n){let i;const{points:r,element:a,mouseCanvasPoint:l}=n,c=this.toolInfo.toolSize,u=(0,o.getEnabledElement)(a),{viewport:d}=u,g=d.worldToCanvas(r[t]),h=d.worldToCanvas(r[e]),p=[(g[0]+h[0])/2,(g[1]+h[1])/2],m=s.point.distanceToPoint(l,p);if(m<c){const t={x:(p[0]-l[0])/m,y:(p[1]-l[1])/m};i=[l[0]+c*t.x,l[1]+c*t.y]}else i=p;return d.canvasToWorld(i)}pushOneHandle(t,e,n){const{points:o,mousePoint:i}=n,r=this.toolInfo.toolSize,s=o[t],a=(s[0]-i[0])/e,l=(s[1]-i[1])/e,c=(s[2]-i[2])/e,u={x:i[0]+r*a,y:i[1]+r*l,z:i[2]+r*c};s[0]=u.x,s[1]=u.y,s[2]=u.z}}const l=a},10639:(t,e,n)=>{n.d(e,{A:()=>f});var o=n(15327),i=n(85817),r=n(99737),s=n(44595),a=n(49906),l=n(10564),c=n(86644),u=n(67912),d=n(93759),g=n(97577);const{transformWorldToIndex:h,transformIndexToWorld:p}=o.utilities;class m extends i.oS{static{this.lastGrowCutCommand=null}constructor(t,e){super(t,o.utilities.deepMerge({configuration:{positiveStdDevMultiplier:l.ee,shrinkExpandIncrement:.1,islandRemoval:{enabled:!1}}},e))}async preMouseDownCallback(t){const e=t.detail,{element:n,currentPoints:i}=e,{world:r}=i,s=(0,o.getEnabledElement)(n),{viewport:a,renderingEngine:l}=s,{viewUp:c}=a.getCamera(),{segmentationId:u,segmentIndex:d,labelmapVolumeId:g,referencedVolumeId:h}=await this.getLabelmapSegmentationData(a);if(!this._isOrthogonalView(a,h))throw new Error("Oblique view is not supported yet");return this.growCutData={metadata:{...a.getViewReference({points:[r]}),viewUp:c},segmentation:{segmentationId:u,segmentIndex:d,labelmapVolumeId:g,referencedVolumeId:h},viewportId:a.id,renderingEngineId:l.id},t.preventDefault(),!0}shrink(){this._runLastCommand({shrinkExpandAmount:-this.configuration.shrinkExpandIncrement})}expand(){this._runLastCommand({shrinkExpandAmount:this.configuration.shrinkExpandIncrement})}refresh(){this._runLastCommand()}async getGrowCutLabelmap(t){throw new Error("Not implemented")}async runGrowCut(){const{growCutData:t,configuration:e}=this,{segmentation:{segmentationId:n,segmentIndex:i,labelmapVolumeId:r}}=t,s=o.cache.getVolume(r);let a=0;const c=async({shrinkExpandAmount:o=0}={})=>{0!==o&&(this.seeds=null),a+=o;const r=Math.max(.1,e.positiveStdDevMultiplier+a),c=o<0?Math.max(1,l.BX-3*Math.abs(a)):l.BX+3*a,u={...t,options:{...t.options||{},positiveSeedValue:i,negativeSeedValue:255,positiveStdDevMultiplier:r,negativeSeedMargin:c}},d=await this.getGrowCutLabelmap(u),{isPartialVolume:g}=e;(g?this.applyPartialGrowCutLabelmap:this.applyGrowCutLabelmap)(n,i,s,d),this._removeIslands(u)};await c(),m.lastGrowCutCommand=c,this.growCutData=null}applyPartialGrowCutLabelmap(t,e,n,o){const i=o.voxelManager.getCompleteScalarDataArray(),r=n.voxelManager,[s,l,c]=o.dimensions,[u,d]=n.dimensions,g=s*l,m=u*d;for(let t=0;t<c;t++)for(let a=0;a<l;a++){const l=[0,a,t],c=p(o.imageData,l),d=h(n.imageData,c),[f,v,w]=d,P=a*s+t*g,I=f+v*u+w*m;for(let t=0;t<s;t++){const n=i[P+t]===e?e:0;r.setAtIndex(I+t,n)}}(0,a.triggerSegmentationDataModified)(t)}applyGrowCutLabelmap(t,e,n,o){const i=n.voxelManager;o.voxelManager.forEach((({value:t,index:n})=>{t===e&&i.setAtIndex(n,t)})),(0,a.triggerSegmentationDataModified)(t)}_runLastCommand({shrinkExpandAmount:t=0}={}){const e=m.lastGrowCutCommand;e&&e({shrinkExpandAmount:t})}async getLabelmapSegmentationData(t){const e=s.activeSegmentation.getActiveSegmentation(t.id);if(!e)throw new Error("No active segmentation found");const{segmentationId:n}=e,i=s.segmentIndex.getActiveSegmentIndex(n),{representationData:a}=s.state.getSegmentation(n),l=a[r.SegmentationRepresentations.Labelmap];let{volumeId:c,referencedVolumeId:u}=l;if(!c){const e=t.getImageIds();if(o.utilities.isValidVolume(e)){c=(0,d.getOrCreateSegmentationVolume)(n).volumeId}else{const e=t.getCurrentImageId(),i=o.cache.getImage(e),r=o.imageLoader.createAndCacheDerivedImage(e);u=this._createFakeVolume([i.imageId,r.imageId]).volumeId;const s=(0,g.vl)(t.id,n),a=o.imageLoader.createAndCacheDerivedImage(s);c=this._createFakeVolume([s,a.imageId]).volumeId}}if(!u){const{imageIds:t}=l,e=t.map((t=>o.cache.getImage(t).referencedImageId)),n=o.cache.generateVolumeId(e),i=o.cache.getVolume(n);u=i?i.volumeId:(await o.volumeLoader.createAndCacheVolumeFromImagesSync(n,e)).volumeId}return{segmentationId:n,segmentIndex:i,labelmapVolumeId:c,referencedVolumeId:u}}_createFakeVolume(t){const e=o.cache.generateVolumeId(t),n=o.cache.getVolume(e);if(n)return n;const i=o.utilities.generateVolumePropsFromImageIds(t,e),r=i.spacing;0===r[2]&&(r[2]=1);const s=new o.ImageVolume({volumeId:e,dataType:i.dataType,metadata:structuredClone(i.metadata),dimensions:i.dimensions,spacing:i.spacing,origin:i.origin,direction:i.direction,referencedVolumeId:i.referencedVolumeId,imageIds:i.imageIds,referencedImageIds:i.referencedImageIds});return o.cache.putVolumeSync(e,s),s}_isOrthogonalView(t,e){const n=o.cache.getVolume(e).imageData,i=t.getCamera(),{ijkVecColDir:r,ijkVecSliceDir:s}=o.utilities.getVolumeDirectionVectors(n,i);return[r,s].every((t=>o.utilities.isEqual(Math.abs(t[0]),1)||o.utilities.isEqual(Math.abs(t[1]),1)||o.utilities.isEqual(Math.abs(t[2]),1)))}getRemoveIslandData(t){}_removeIslands(t){const{islandRemoval:e}=this.configuration;if(!e.enabled)return;const{segmentation:{segmentIndex:n,labelmapVolumeId:i},renderingEngineId:r,viewportId:s}=t,a=o.cache.getVolume(i),l=this.getRemoveIslandData(t);if(!l)return;const[c,d]=a.dimensions,g=c*d,{worldIslandPoints:p=[],islandPointIndexes:m=[]}=l;let f=[...l?.ijkIslandPoints??[]];const v=(0,o.getRenderingEngine)(r).getViewport(s),{voxelManager:w}=a,P=new u.A;f=f.concat(p.map((t=>h(a.imageData,t)))),f=f.concat(m.map((t=>[t%c,Math.floor(t/c)%d,Math.floor(t/g)]))),P.initialize(v,w,{points:f,previewSegmentIndex:n,segmentIndex:n}),P.floodFillSegmentIsland(),P.removeExternalIslands(),P.removeInternalIslands()}getSegmentStyle({segmentationId:t,viewportId:e,segmentIndex:n}){return(0,c.u)({segmentationId:t,segmentIndex:n,viewportId:e})}}m.toolName="GrowCutBaseTool";const f=m},13271:(t,e,n)=>{n.d(e,{X:()=>i});var o=n(95527);const i=(t,e,n)=>{if(!e?.data?.contour?.polyline?.length)return;const{polyline:i}=e.data.contour,{length:r}=i;let s=1/0;for(let e=0;e<r;e++){const r=t.worldToCanvas(i[e]),a=o.point.distanceToPoint(r,n);s=Math.min(s,a)}return s===1/0||isNaN(s)?void 0:s}},47347:(t,e,n)=>{n.d(e,{M:()=>r});var o=n(10088);function i(t,e,n=!0){const i=Object.assign({},e,{segmentIndex:0});(0,o.pY)(t,i)}function r(t,e){i(t,e,!0)}},5565:(t,e,n)=>{function o(t){if(!Array.isArray(t)||9!==t.length)throw new Error("Matrix must be an array of 9 numbers");if(!t.every((t=>"number"==typeof t&&!isNaN(t))))throw new Error("Matrix must contain only valid numbers")}function i(t){o(t);const e=[[t[0],t[1],t[2]],[t[3],t[4],t[5]],[t[6],t[7],t[8]]],n=e[0][0]*(e[1][1]*e[2][2]-e[1][2]*e[2][1])-e[0][1]*(e[1][0]*e[2][2]-e[1][2]*e[2][0])+e[0][2]*(e[1][0]*e[2][1]-e[1][1]*e[2][0]);if(Math.abs(n)<1e-10)throw new Error("Matrix is not invertible (determinant is zero)");const i=[[e[1][1]*e[2][2]-e[1][2]*e[2][1],-(e[0][1]*e[2][2]-e[0][2]*e[2][1]),e[0][1]*e[1][2]-e[0][2]*e[1][1]],[-(e[1][0]*e[2][2]-e[1][2]*e[2][0]),e[0][0]*e[2][2]-e[0][2]*e[2][0],-(e[0][0]*e[1][2]-e[0][2]*e[1][0])],[e[1][0]*e[2][1]-e[1][1]*e[2][0],-(e[0][0]*e[2][1]-e[0][1]*e[2][0]),e[0][0]*e[1][1]-e[0][1]*e[1][0]]],r=[];for(let t=0;t<3;t++)for(let e=0;e<3;e++)r.push(i[t][e]/n);return r}function r(t){const e=Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);return t.map((t=>t/e))}function s(t){o(t);const e=t.slice(0,3),n=t.slice(3,6),s=t.slice(6,9),a=r(e),l=r(n),c=r(s),u={x:[1,0,0],y:[0,1,0],z:[0,0,1]},d=1e-10,g=a.every(((t,e)=>Math.abs(t-u.x[e])<d))&&l.every(((t,e)=>Math.abs(t-u.y[e])<d))&&c.every(((t,e)=>Math.abs(t-u.z[e])<d));return{isStandard:g,rotationMatrix:g?[...u.x,...u.y,...u.z]:i([...a,...l,...c])}}function a(t,e,n){const o=t[0]-e[0],i=t[1]-e[1],r=t[2]-e[2];return[n[0]*o+n[1]*i+n[2]*r+e[0],n[3]*o+n[4]*i+n[5]*r+e[1],n[6]*o+n[7]*i+n[8]*r+e[2]]}function l(t,e,n){const o=[];for(let i=0;i<n.length;i+=3){const r=a(n.slice(i,i+3),e,t);o.push(...r)}return o}n.r(e),n.d(e,{checkStandardBasis:()=>s,inverse3x3Matrix:()=>i,rotatePoints:()=>l})},39848:(t,e,n)=>{n.d(e,{A:()=>r});var o=n(15327),i=n(77609);function r(t,e){const n=(0,o.getEnabledElement)(t),{renderingEngineId:r,viewportId:s}=n,a=(0,i.getToolGroupForViewport)(s,r);if(!a)return[];const l=[],c=Object.keys(a.toolOptions);for(let t=0;t<c.length;t++){const n=c[t],o=a.toolOptions[n];if(o&&e.includes(o.mode)){const t=a.getToolInstance(n);l.push(t)}}return l}},22658:(t,e,n)=>{n.d(e,{j:()=>s});var o=n(15327),i=n(19027);const r=4;function s(t,e,n){if("PT"===o.utilities.getViewportModality(t,e)){const{clientWidth:o,clientHeight:s}=t.element,a=5/Math.max(o,s),l=(0,i.isViewportPreScaled)(t,e),{fixedPTWindowWidth:c=!0}=n??{},u=c?0:a;return l?[u,a]:[u,r]}return[r,r]}},38776:(t,e,n)=>{n.d(e,{j:()=>o});class o{constructor(t,e){this.pointArray=t?t.slice():[],this._controlPointIndexes=e?e.slice():[]}getPoint(t){return this.pointArray[t]}getLastPoint(){return this.pointArray[this.pointArray.length-1]}isControlPoint(t){const e=this.pointArray.indexOf(t);if(-1!==e)return-1!==this._controlPointIndexes.indexOf(e);throw new Error("Error: isControlPoint called with not in list point.")}addPoint(t){this.pointArray.push(t)}addControlPoint(t){const e=this.pointArray.indexOf(t);if(-1===e)throw new Error("Cannot mark a non registered point as control point.");this._controlPointIndexes.push(e)}getControlPoints(){return this._controlPointIndexes.map((t=>this.pointArray[t]))}getNumControlPoints(){return this._controlPointIndexes.length}removeLastControlPoint(){this._controlPointIndexes.length&&this._controlPointIndexes.pop()}getLastControlPoint(){if(this._controlPointIndexes.length)return this.pointArray[this._controlPointIndexes[this._controlPointIndexes.length-1]]}removeLastPoints(t){this.pointArray.splice(this.pointArray.length-t,t)}addPoints(t){this.pointArray=this.pointArray.concat(t)}prependPath(t){const e=t.pointArray.length,n=[];this.pointArray=t.pointArray.concat(this.pointArray);for(let t=0;t<this._controlPointIndexes.length;++t)n[t]=this._controlPointIndexes[t]+e;this._controlPointIndexes=t._controlPointIndexes.concat(n)}appendPath(t){this.addPoints(t.pointArray),t._controlPointIndexes.forEach((t=>this._controlPointIndexes.push(t)))}}},78044:(t,e,n)=>{n.d(e,{f:()=>l});var o=n(15327);class i{constructor({numBits:t,getPriority:e,areEqual:n}){this._bucketCount=1<<t,this._mask=this._bucketCount-1,this._size=0,this._currentBucketIndex=0,this._buckets=this._buildArray(this._bucketCount),this._getPriority=void 0!==e?e:t=>t,this._areEqual="function"==typeof n?n:(t,e)=>t===e}push(t){const e=this._getBucketIndex(t),n={value:t,next:this._buckets[e]};this._buckets[e]=n,this._size++}pop(){if(0===this._size)throw new Error("Cannot pop because the queue is empty.");for(;null===this._buckets[this._currentBucketIndex];)this._currentBucketIndex=(this._currentBucketIndex+1)%this._bucketCount;const t=this._buckets[this._currentBucketIndex];return this._buckets[this._currentBucketIndex]=t.next,this._size--,t.value}remove(t){if(!t)return!1;const e=this._getBucketIndex(t),n=this._buckets[e];let o,i=n;for(;null!==i&&!this._areEqual(t,i.value);)o=i,i=i.next;return null!==i&&(i===n?this._buckets[e]=i.next:o.next=i.next,this._size--,!0)}isEmpty(){return 0===this._size}_getBucketIndex(t){return this._getPriority(t)&this._mask}_buildArray(t){const e=new Array(t);return e.fill(null),e}}const{isEqual:r}=o.utilities,s=4294967295,a=2/(3*Math.PI);class l{constructor(t,e,n){this._getPointIndex=(t,e)=>{const{width:n}=this;return t*n+e},this._getPointCoordinate=t=>[t%this.width,Math.floor(t/this.width)],this._getPointCost=t=>Math.round(this.searchGranularity*this.costs[t]);const o=t.length;this.searchGranularityBits=8,this.searchGranularity=1<<this.searchGranularityBits,this.width=e,this.height=n,this.grayscalePixelData=t,this.laplace=null,this.gradXNew=null,this.gradYNew=null,this.laplace=this._computeLaplace(),this.gradMagnitude=this._computeGradient(),this.gradXNew=this._computeGradientX(),this.gradYNew=this._computeGradientY(),this.visited=new Array(o),this.parents=new Uint32Array(o),this.costs=new Float32Array(o)}startSearch(t){const e=this._getPointIndex(t[1],t[0]);this.startPoint=null,this.visited.fill(!1),this.parents.fill(s),this.costs.fill(1/0),this.priorityQueueNew=new i({numBits:this.searchGranularityBits,getPriority:this._getPointCost}),this.startPoint=t,this.costs[e]=0,this.priorityQueueNew.push(e)}findMinNearby(t,e=2){const[n,o]=t,{costs:i}=this,r=[Math.max(0,n-e),Math.min(n+e+1,this.width)],s=[Math.max(0,o-e),Math.min(o+e+1,this.height)];let a=.8*i[this._getPointIndex(o,n)],l=t;for(let n=r[0];n<r[1];n++)for(let o=s[0];o<s[1];o++){const r=1-(Math.abs(n-t[0])+Math.abs(o-t[1]))/e/2,s=.8*i[this._getPointIndex(o,n)]+.2*r;s<a&&(l=[n,o],a=s)}return l}findPathToPoint(t){if(!this.startPoint)throw new Error("There is no search in progress");const{startPoint:e,_getPointIndex:n,_getPointCoordinate:o}=this,i=n(e[1],e[0]),r=n(t[1],t[0]),{visited:a,parents:l,costs:c,priorityQueueNew:u}=this;if(r===i)return[];for(;!u.isEmpty()&&l[r]===s;){const t=u.pop();if(a[t])continue;const e=o(t),i=this._getNeighborPoints(e);a[t]=!0;for(let o=0,r=i.length;o<r;o++){const r=i[o],s=n(r[1],r[0]),a=this._getWeightedDistance(e,r),d=c[t]+a;d<c[s]&&(c[s]!==1/0&&u.remove(s),c[s]=d,l[s]=t,u.push(s))}}const d=[];let g=r;for(;g!==s;)d.push(o(g)),g=l[g];return d.reverse()}_getDeltaX(t,e){const{grayscalePixelData:n,width:o}=this;let i=this._getPointIndex(e,t);return t+1===o&&i--,n[i+1]-n[i]}_getDeltaY(t,e){const{grayscalePixelData:n,width:o,height:i}=this;let r=this._getPointIndex(e,t);return e+1===i&&(r-=o),n[r]-n[r+o]}_getGradientMagnitude(t,e){const n=this._getDeltaX(t,e),o=this._getDeltaY(t,e);return Math.sqrt(n*n+o*o)}_getLaplace(t,e){const{grayscalePixelData:n,_getPointIndex:o}=this;let i=n[o(e-2,t)];return i+=n[o(e-1,t-1)]+2*n[o(e-1,t)]+n[o(e-1,t+1)],i+=n[o(e,t-2)]+2*n[o(e,t-1)]-16*n[o(e,t)]+2*n[o(e,t+1)]+n[o(e,t+2)],i+=n[o(e+1,t-1)]+2*n[o(e+1,t)]+n[o(e+1,t+1)],i+=n[o(e+2,t)],i}_computeGradient(){const{width:t,height:e}=this,n=new Float32Array(t*e);let o=0,i=0,r=0,s=0;for(s=0;s<e-1;s++){for(r=0;r<t-1;r++)n[o]=this._getGradientMagnitude(r,s),i=Math.max(n[o],i),o++;n[o]=n[o-1],o++}for(let e=n.length;o<e;o++)n[o]=n[o-t];for(let t=0,e=n.length;t<e;t++)n[t]=1-n[t]/i;return n}_computeLaplace(){const{width:t,height:e,_getPointIndex:n}=this,o=new Float32Array(t*e);o.fill(1,0,n(2,0));for(let i=2;i<e-2;i++){o[n(i,0)]=1,o[n(i,1)]=1;for(let e=2;e<t-2;e++)o[n(i,e)]=this._getLaplace(e,i)>.33?0:1;o[n(i,t-2)]=1,o[n(i,t-1)]=1}return o.fill(1,n(e-2,0)),o}_computeGradientX(){const{width:t,height:e}=this,n=new Float32Array(t*e);let o=0;for(let i=0;i<e;i++)for(let e=0;e<t;e++)n[o++]=this._getDeltaX(e,i);return n}_computeGradientY(){const{width:t,height:e}=this,n=new Float32Array(t*e);let o=0;for(let i=0;i<e;i++)for(let e=0;e<t;e++)n[o++]=this._getDeltaY(e,i);return n}_getGradientUnitVector(t,e){const{gradXNew:n,gradYNew:o,_getPointIndex:i}=this,r=n[i(e,t)],s=o[i(e,t)];let a=Math.sqrt(r*r+s*s);return a=Math.max(a,1e-100),[r/a,s/a]}_getGradientDirection(t,e,n,o){const i=this._getGradientUnitVector(t,e),r=this._getGradientUnitVector(n,o);let s=i[1]*(n-t)-i[0]*(o-e),l=r[1]*(n-t)-r[0]*(o-e);s<0&&(s=-s,l=-l),t!==n&&e!==o&&(s*=Math.SQRT1_2,l*=Math.SQRT1_2),l=Math.min(Math.max(l,-1),1);const c=a*(Math.acos(Math.min(s,1))+Math.acos(l));return isNaN(c)||!isFinite(c)?(console.warn("Found non-direction:",t,e,n,o,s,l,c),1):c}getCost(t,e){return this._getWeightedDistance(t,e)}_getWeightedDistance(t,e){const{_getPointIndex:n,width:o,height:i}=this,[r,s]=t,[a,l]=e;if(a<0||a>=o||l<0||l>=i)return 1;if(r<0||s<0||r>=o||s>=i)return 0;const c=n(l,a);let u=this.gradMagnitude[c];r!==a&&s!==l||(u*=Math.SQRT1_2);return.43*u+.43*this.laplace[c]+.11*this._getGradientDirection(r,s,a,l)}_getNeighborPoints(t){const{width:e,height:n}=this,o=[],i=Math.max(t[0]-1,0),r=Math.max(t[1]-1,0),s=Math.min(t[0]+1,e-1),a=Math.min(t[1]+1,n-1);for(let e=r;e<=a;e++)for(let n=i;n<=s;n++)n===t[0]&&e===t[1]||o.push([n,e]);return o}static createInstanceFromRawPixelData(t,e,n,o){const i=t.length,r=new Float32Array(i),{lower:s,upper:a}=o,c=a-s;for(let e=0,n=t.length;e<n;e++)r[e]=Math.max(0,Math.min(1,(t[e]-s)/c));return new l(r,e,n)}}},88638:(t,e,n)=>{function o(t,e){return t.minX<=e.maxX&&t.maxX>=e.minX&&t.minY<=e.maxY&&t.maxY>=e.minY}function i(t,e){const n=t.maxX-t.minX,o=t.maxY-t.minY,i=[n,o],r=[t.minX+n/2,t.minY+o/2],s=[Math.abs(e[0]-r[0]),Math.abs(e[1]-r[1])],a=s[0]-.5*i[0],l=s[1]-.5*i[1];if(a>0&&l>0)return a*a+l*l;const c=Math.max(a,0)+Math.max(l,0);return c*c}function r(t,e){return Math.sqrt(i(t,e))}n.r(e),n.d(e,{distanceToPoint:()=>r,distanceToPointSquared:()=>i,intersectAABB:()=>o})},25963:(t,e,n)=>{n.d(e,{A:()=>i});var o=n(3823);function i(t,e){return 3===t[0].length?function(t,e){const[n,i]=t,[r,s]=e,a=o.eR.sub(o.eR.create(),i,n),l=o.eR.sub(o.eR.create(),r,s),c=o.eR.dot(a,l)/(o.eR.length(a)*o.eR.length(l));return 180*Math.acos(c)/Math.PI}(t,e):function(t,e){const[n,i]=t,[r,s]=e,a=o.Zc.sub(o.Zc.create(),i,n),l=o.Zc.sub(o.Zc.create(),r,s),c=o.Zc.dot(a,l)/(o.Zc.length(a)*o.Zc.length(l));return Math.acos(c)*(180/Math.PI)}(t,e)}},83923:(t,e,n)=>{n.r(e),n.d(e,{angleBetweenLines:()=>o.A});var o=n(25963)},28364:(t,e,n)=>{n.d(e,{I:()=>i,t:()=>o});class o{}class i{constructor(t){this.storePointData=t.storePointData}getStatistics(){console.debug("InstanceCalculator getStatistics called")}}},73262:(t,e,n)=>{n.r(e),n.d(e,{BasicStatsCalculator:()=>o.O,Calculator:()=>i.t,InstanceBasicStatsCalculator:()=>o.B,InstanceCalculator:()=>i.I});var o=n(69013),i=n(28364)},77081:(t,e,n)=>{n.r(e),n.d(e,{getCanvasCircleCorners:()=>r,getCanvasCircleRadius:()=>i});var o=n(82216);function i(t){const[e,n]=t;return(0,o.distanceToPoint)(e,n)}function r(t){const[e,n]=t,i=(0,o.distanceToPoint)(e,n);return[[e[0]-i,e[1]-i],[e[0]+i,e[1]+i]]}},11683:(t,e,n)=>{function o(t,e,n={}){return n.precalculated||i(t,n),n.precalculated(e)}n.r(e),n.d(e,{getCanvasEllipseCorners:()=>r.A,pointInEllipse:()=>o,precalculatePointInEllipse:()=>i});const i=(t,e={})=>{const{xRadius:n,yRadius:o,zRadius:i}=t;void 0!==e.invXRadiusSq&&void 0!==e.invYRadiusSq&&void 0!==e.invZRadiusSq||(e.invXRadiusSq=0!==n?1/n**2:0,e.invYRadiusSq=0!==o?1/o**2:0,e.invZRadiusSq=0!==i?1/i**2:0);const{invXRadiusSq:r,invYRadiusSq:s,invZRadiusSq:a}=e,{center:l}=t,[c,u,d]=l;return e.precalculated=t=>{const e=t[0]-c;let n=e*e*r;if(n>1)return!1;const o=t[1]-u;if(n+=o*o*s,n>1)return!1;const i=t[2]-d;return n+=i*i*a,n<=1},e};var r=n(2222)},18989:(t,e,n)=>{n.d(e,{A:()=>i});var o=n(73149);function i(t,e,n){return(0,o.A)(t,e,n).distanceSquared}},73149:(t,e,n)=>{n.d(e,{A:()=>i});var o=n(82216);function i(t,e,n){let i;const r=(0,o.distanceToPointSquared)(t,e);if(t[0]===e[0]&&t[1]===e[1]&&(i=t),!i){const o=((n[0]-t[0])*(e[0]-t[0])+(n[1]-t[1])*(e[1]-t[1]))/r;i=o<0?t:o>1?e:[t[0]+o*(e[0]-t[0]),t[1]+o*(e[1]-t[1])]}return{point:[...i],distanceSquared:(0,o.distanceToPointSquared)(n,i)}}},15305:(t,e,n)=>{n.r(e),n.d(e,{distanceToPoint:()=>o.A,distanceToPointSquared:()=>i.A,distanceToPointSquaredInfo:()=>r.A,intersectLine:()=>s.A,isPointOnLineSegment:()=>l});var o=n(86978),i=n(18989),r=n(73149),s=n(81205);const a=.01;function l(t,e,n){const o=t[0]<=e[0]?t[0]:e[0],i=t[0]>=e[0]?t[0]:e[0],r=t[1]<=e[1]?t[1]:e[1],s=t[1]>=e[1]?t[1]:e[1];if(!(n[0]>=o-a&&n[0]<=i+a&&n[1]>=r-a&&n[1]<=s+a))return!1;const l=(e[1]-t[1])*(n[0]-e[0])-(e[0]-t[0])*(n[1]-e[1]);return(l>=0?l:-l)<=a}},82983:(t,e,n)=>{n.d(e,{f:()=>i});const o=(...t)=>{const e=2===t[0].length?[0,0]:[0,0,0],n=t.length;for(const o of t)e[0]+=o[0]/n,e[1]+=o[1]/n,3===e.length&&(e[2]+=o[2]/n);return e},i=o},82216:(t,e,n)=>{function o(t,e){if(t.length!==e.length)throw Error("Both points should have the same dimensionality");const[n,o,i=0]=t,[r,s,a=0]=e,l=r-n,c=s-o,u=a-i;return l*l+c*c+u*u}function i(t,e){return Math.sqrt(o(t,e))}function r(t,e){const[n,o]=t,[i,r]=e;return[2*i-n,2*r-o]}n.r(e),n.d(e,{distanceToPoint:()=>i,distanceToPointSquared:()=>o,mirror:()=>r})},97792:(t,e,n)=>{n.d(e,{A:()=>r});var o=n(15327),i=n(3823);const r=(t,e,n,r)=>{const{xDir:s,yDir:a,spacing:l}=r,c=(0,o.getEnabledElement)(t),{viewport:u}=c;if(!e.length)return e.push(n),console.log(">>>>> !canvasPoints. :: RETURN"),1;const d=u.canvasToWorld(e[e.length-1]),g=u.canvasToWorld(n),h=i.eR.create();i.eR.subtract(h,g,d);const p=Math.abs(i.eR.dot(h,s)),m=Math.abs(i.eR.dot(h,a)),f=Math.max(Math.floor(p/l[0]),Math.floor(m/l[0]));if(f>1){const t=e[e.length-1],o=i.Zc.dist(t,n),r=i.Zc.create();i.Zc.subtract(r,n,t),i.Zc.set(r,r[0]/o,r[1]/o);const s=o/f;for(let n=1;n<=f;n++)e.push([t[0]+s*r[0]*n,t[1]+s*r[1]*n])}else e.push(n);return f}},56777:(t,e,n)=>{function o(t,e,n,o){let s=!1;const a=t[0]<e[0]?t[0]:e[0],l=t[1]<e[1]?t[1]:e[1],c=t[0]>e[0]?t[0]:e[0],u=t[1]>e[1]?t[1]:e[1],d=n[0]<o[0]?n[0]:o[0],g=n[1]<o[1]?n[1]:o[1],h=n[0]>o[0]?n[0]:o[0],p=n[1]>o[1]?n[1]:o[1];if(a>h||c<d||l>p||u<g)return!1;const m=[i(t,e,n),i(t,e,o),i(n,o,t),i(n,o,e)];return m[0]!==m[1]&&m[2]!==m[3]||((0===m[0]&&r(t,n,e)||0===m[1]&&r(t,o,e)||0===m[2]&&r(n,t,o)||0===m[3]&&r(n,e,o))&&(s=!0),s)}function i(t,e,n){const o=(e[1]-t[1])*(n[0]-e[0])-(e[0]-t[0])*(n[1]-e[1]);return 0===o?0:o>0?1:2}function r(t,e,n){return e[0]<=Math.max(t[0],n[0])&&e[0]>=Math.min(t[0],n[0])&&e[1]<=Math.max(t[1],n[1])&&e[1]>=Math.min(t[1],n[1])}n.d(e,{A:()=>o})},68385:(t,e,n)=>{n.d(e,{S:()=>m,Y:()=>f});var o,i,r,s=n(82216),a=n(37135),l=n(46513),c=n(11377),u=n(3823),d=n(10812);function g(t){for(let e=0,n=t.length;e<n;e++){const o=t[e];o.next||(o.next=t[e===n-1?0:e+1])}}function h(t,e){const n=[],c=[],u=new Map;let h=(0,l.A)(e,t[0])?r.Exiting:r.Entering;for(let c=0,g=t.length;c<g;c++){const p=t[c],m=(0,l.A)(e,p),f={type:o.Vertex,coordinates:p,position:m?i.Inside:i.Outside,visited:!1,next:null};n.push(f);const v=t[c===g-1?0:c+1],w=(0,a.A)(e,p,v).map((t=>{const n=t[0],o=e[t[0]],i=e[t[1]],r=(0,d.A)(p,v,o,i);return{sourceLineSegmentId:n,coordinate:r,targetStartPointDistSquared:s.distanceToPointSquared(p,r)}}));w.sort(((t,e)=>t.targetStartPointDistSquared-e.targetStartPointDistSquared)),w.forEach((t=>{const{sourceLineSegmentId:e,coordinate:s}=t,a={type:o.Intersection,coordinates:s,position:i.Edge,direction:h,visited:!1,next:null},l={...a,direction:r.Unknown,cloned:!0};h===r.Entering?a.next=l:l.next=a;let c=u.get(e);c||(c=[],u.set(e,c)),n.push(a),c.push(l),h*=-1}))}for(let t=0,n=e.length;t<n;t++){const n=t,i=e[t],r={type:o.Vertex,coordinates:i,visited:!1,next:null};c.push(r);const a=u.get(n);a?.length&&a.map((t=>({intersectionPoint:t,lineSegStartDistSquared:s.distanceToPointSquared(i,t.coordinates)}))).sort(((t,e)=>t.lineSegStartDistSquared-e.lineSegStartDistSquared)).map((({intersectionPoint:t})=>t)).forEach((t=>c.push(t)))}return g(n),g(c),{targetPolylinePoints:n,sourcePolylinePoints:c}}function p(t){for(let e=0,n=t.length;e<n;e++){const n=t[e];if(!n.visited&&n.position===i.Outside)return n}}function m(t,e){const n=(0,c.A)(t),i=(0,c.A)(e),r=u.eR.dot(i,n);u.Fd.equals(1,r)||(e=e.slice().reverse());const{targetPolylinePoints:s}=h(t,e),a=p(s);if(!a)return t.slice();const l=[a.coordinates];let d=a.next;for(;d!==a;)d.type===o.Intersection&&d.cloned||l.push(d.coordinates),d=d.next;return l}function f(t,e){const n=(0,c.A)(t),i=(0,c.A)(e),r=u.eR.dot(i,n);u.Fd.equals(-1,r)||(e=e.slice().reverse());const{targetPolylinePoints:s}=h(t,e);let a=null;const l=[];for(;a=p(s);){const t=[a.coordinates];let e=a.next;for(a.visited=!0;e!==a;)e.visited=!0,e.type===o.Intersection&&e.cloned||t.push(e.coor