@ohif/extension-cornerstone-dicom-seg 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2023 Open Health Imaging Foundation
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
6
|
+
this software and associated documentation files (the "Software"), to deal in
|
|
7
|
+
the Software without restriction, including without limitation the rights to
|
|
8
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
9
|
+
the Software, and to permit persons to whom the Software is furnished to do so,
|
|
10
|
+
subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
17
|
+
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
18
|
+
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
19
|
+
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
20
|
+
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# dicom-seg
|
|
2
|
+
## Description
|
|
3
|
+
|
|
4
|
+
DICOM SEG read workflow. This extension will allow you to load a DICOM SEG image
|
|
5
|
+
and display it on OHIF. Currently Segmentations are loaded as a volumetric labelmap
|
|
6
|
+
and displayed as a 3D volume.
|
|
7
|
+
|
|
8
|
+
This extension provides a SEG viewport, which enables rendering and reviewing
|
|
9
|
+
of the DICOM SEG images. However, in order to fully load all the segments
|
|
10
|
+
you will need to click on the SEG Pill button on the viewport action bar
|
|
11
|
+
to fully load the segments.
|
|
12
|
+
|
|
13
|
+
## Author
|
|
14
|
+
|
|
15
|
+
OHIF
|
|
16
|
+
|
|
17
|
+
## License
|
|
18
|
+
MIT
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
/*! For license information please see ohif-extension-cornerstone-dicom-seg.umd.js.LICENSE.txt */
|
|
2
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@kitware/vtk.js/Common/Core/Math"),require("@ohif/core"),require("dcmjs"),require("@ohif/ui")):"function"==typeof define&&define.amd?define(["@kitware/vtk.js/Common/Core/Math","@ohif/core","dcmjs","@ohif/ui"],t):"object"==typeof exports?exports["ohif-extension-cornerstone-dicom-seg"]=t(require("@kitware/vtk.js/Common/Core/Math"),require("@ohif/core"),require("dcmjs"),require("@ohif/ui")):e["ohif-extension-cornerstone-dicom-seg"]=t(e["@kitware/vtk.js/Common/Core/Math"],e["@ohif/core"],e.dcmjs,e["@ohif/ui"])}(globalThis,((e,t,n,r)=>(()=>{var o,i,a={580:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>S});var r=n(216),o=n.n(r),i=n(735),a=n(281),s=n(762),c=n.n(s),l=n(369);const u=function(e,t,n){const{tools:r}=t.get("cornerstone.overlayViewportTools")??{};return e.createToolGroupAndAddTools(n,r,{})};const p=async function(e){let{segDisplaySet:t,viewportIndex:n,servicesManager:r}=e;const{segmentationService:o,hangingProtocolService:i,viewportGridService:a}=r.services,s=t.referencedDisplaySetInstanceUID;let c=null;c=await o.createSegmentationForSEGDisplaySet(t,c,!1),o.hydrateSegmentation(t.displaySetInstanceUID);const{viewports:l}=a.getState(),u=i.getViewportsRequireUpdate(n,s);return l.forEach(((e,r)=>{if(r===n)return;o.shouldRenderSegmentation(e.displaySetInstanceUIDs,t.displaySetInstanceUID)&&u.push({viewportIndex:r,displaySetInstanceUIDs:e.displaySetInstanceUIDs,viewportOptions:{initialImageOptions:{preset:"middle"}}})})),a.setDisplaySetsForViewports(u),!0},f={NO_NEVER:-1,CANCEL:0,HYDRATE_SEG:5};const d=function(e){let{servicesManager:t,segDisplaySet:n,viewportIndex:r}=e;const{uiViewportDialogService:o}=t.services;return new Promise((async function(e,i){const a=await function(e,t){return new Promise((function(n,r){const o="Do you want to open this Segmentation?",i=[{type:"secondary",text:"No",value:f.CANCEL},{type:"primary",text:"Yes",value:f.HYDRATE_SEG}],a=t=>{e.hide(),n(t)};e.show({viewportIndex:t,type:"info",message:o,actions:i,onSubmit:a,onOutsideClick:()=>{e.hide(),n(f.CANCEL)}})}))}(o,r);if(a===f.HYDRATE_SEG){e(await p({segDisplaySet:n,viewportIndex:r,servicesManager:t}))}}))};function m(){return m=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},m.apply(this,arguments)}const{formatDate:g}=s.utils;function y(e){const{children:t,displaySets:n,viewportOptions:r,viewportIndex:o,viewportLabel:s,servicesManager:f,extensionManager:y}=e,{t:S}=(0,a.$G)("SEGViewport"),{displaySetService:v,toolGroupService:b,segmentationService:h,uiNotificationService:w,customizationService:E}=f.services,I=`SEGToolGroup-${o}`;if(n.length>1)throw new Error("SEG viewport should only have a single display set");const O=n[0],[D,C]=(0,l.useViewportGrid)(),[P,x]=(0,i.useState)(!1),[j,k]=(0,i.useState)(1),[N,T]=(0,i.useState)(O.isHydrated),[R,M]=(0,i.useState)(!O.isLoaded),[_,U]=(0,i.useState)(null),[A,G]=(0,i.useState)({percentComplete:null,totalSegments:null}),q=(0,i.useRef)(null),{viewports:V,activeViewportIndex:F}=D,L=O.getReferenceDisplaySet(),$=function(e){const t=e.images[0],n={PatientID:t.PatientID,PatientName:t.PatientName,PatientSex:t.PatientSex,PatientAge:t.PatientAge,SliceThickness:t.SliceThickness,StudyDate:t.StudyDate,SeriesDescription:t.SeriesDescription,SeriesInstanceUID:t.SeriesInstanceUID,SeriesNumber:t.SeriesNumber,ManufacturerModelName:t.ManufacturerModelName,SpacingBetweenSlices:t.SpacingBetweenSlices};return n}(L);q.current={displaySet:L,metadata:$};const z=e=>{U(e.detail.element)},B=()=>{U(null)},H=(0,i.useCallback)((()=>{const{component:t}=y.getModuleEntry("@ohif/extension-cornerstone.viewportModule.cornerstone"),{displaySet:n}=q.current;return i.createElement(t,m({},e,{displaySets:[n,O],viewportOptions:{viewportType:"volume",toolGroupId:I,orientation:r.orientation,viewportId:r.viewportId},onElementEnabled:z,onElementDisabled:B}))}),[o,O,I]),W=(0,i.useCallback)((e=>{e="left"===e?-1:1;const t=O.displaySetInstanceUID,n=h.getSegmentation(t),{segments:r}=n,o=Object.keys(r).length;let i=j+e;i>o-1?i=1:0===i&&(i=o-1),h.jumpToSegmentCenter(t,i,I),k(i)}),[j]);(0,i.useEffect)((()=>{R||d({servicesManager:f,viewportIndex:o,segDisplaySet:O}).then((e=>{e&&T(!0)}))}),[f,o,O,R]),(0,i.useEffect)((()=>{const{unsubscribe:e}=h.subscribe(h.EVENTS.SEGMENTATION_LOADING_COMPLETE,(e=>{e.segDisplaySet.displaySetInstanceUID===O.displaySetInstanceUID&&M(!1),e.overlappingSegments&&w.show({title:"Overlapping Segments",message:"Overlapping segments detected which is not currently supported",type:"warning"})}));return()=>{e()}}),[O]),(0,i.useEffect)((()=>{const{unsubscribe:e}=h.subscribe(h.EVENTS.SEGMENT_LOADING_COMPLETE,(e=>{let{percentComplete:t,numSegments:n}=e;G({percentComplete:t,totalSegments:n})}));return()=>{e()}}),[O]),(0,i.useEffect)((()=>{const e=v.subscribe(v.EVENTS.DISPLAY_SETS_REMOVED,(e=>{let{displaySetInstanceUIDs:t}=e;const n=V[F];t.includes(n.displaySetInstanceUID)&&C.setDisplaySetsForViewport({viewportIndex:F,displaySetInstanceUIDs:[]})}));return()=>{e.unsubscribe()}}),[]),(0,i.useEffect)((()=>{let e=b.getToolGroup(I);if(!e)return e=u(b,E,I),x(!0),()=>{h.removeSegmentationRepresentationFromToolGroup(I),b.destroyToolGroup(I)}}),[]),(0,i.useEffect)((()=>(T(O.isHydrated),()=>{h.removeSegmentationRepresentationFromToolGroup(I),q.current=null})),[O]);let Y=null;if(!q.current||L.displaySetInstanceUID!==q.current.displaySet.displaySetInstanceUID)return null;t&&t.length&&(Y=t.map(((e,t)=>e&&i.cloneElement(e,{viewportIndex:o,key:t}))));const{PatientID:J,PatientName:K,PatientSex:Z,PatientAge:Q,SliceThickness:X,ManufacturerModelName:ee,StudyDate:te,SeriesDescription:ne,SpacingBetweenSlices:re}=q.current.metadata,oe=async()=>{const e=await p({segDisplaySet:O,viewportIndex:o,servicesManager:f});T(e)};return i.createElement(i.Fragment,null,i.createElement(l.ViewportActionBar,{onDoubleClick:e=>{e.stopPropagation(),e.preventDefault()},onArrowsClick:W,getStatusComponent:()=>function(e){let{isHydrated:t,onStatusClick:n}=e,r=null,o=null;const{t:s}=(0,a.$G)("Common"),c=s("LOAD");switch(t){case!0:o=()=>i.createElement(l.Icon,{name:"status-alert"}),r=()=>i.createElement("div",null,"This Segmentation is loaded in the segmentation panel");break;case!1:o=()=>i.createElement(l.Icon,{name:"status-untracked"}),r=()=>i.createElement("div",null,"Click LOAD to load segmentation.")}const u=()=>i.createElement("div",{className:"flex h-6 leading-6 cursor-default text-sm text-white"},i.createElement("div",{className:"min-w-[45px] flex items-center p-1 rounded-l-xl rounded-r bg-customgray-100"},i.createElement(o,null),i.createElement("span",{className:"ml-1"},"SEG")),!t&&i.createElement("div",{className:"ml-1 px-1.5 rounded cursor-pointer hover:text-black bg-primary-main hover:bg-primary-light",onMouseUp:n},c));return i.createElement(i.Fragment,null,r&&i.createElement(l.Tooltip,{content:i.createElement(r,null),position:"bottom-left"},i.createElement(u,null)),!r&&i.createElement(u,null))}({isHydrated:N,onStatusClick:oe}),studyData:{label:s,useAltStyling:!0,studyDate:g(te),seriesDescription:`SEG Viewport ${ne}`,patientInformation:{patientName:K?c().utils.formatPN(K.Alphabetic):"",patientSex:Z||"",patientAge:Q||"",MRN:J||"",thickness:X?`${X.toFixed(2)}mm`:"",spacing:void 0!==re?`${re.toFixed(2)}mm`:"",scanner:ee||""}}}),i.createElement("div",{className:"relative flex flex-row w-full h-full overflow-hidden"},R&&i.createElement(l.LoadingIndicatorTotalPercent,{className:"w-full h-full",totalNumbers:A.totalSegments,percentComplete:A.percentComplete,loadingText:"Loading SEG..."}),H(),Y))}y.propTypes={displaySets:o().arrayOf(o().object),viewportIndex:o().number.isRequired,dataSource:o().object,children:o().node,customProps:o().object},y.defaultProps={customProps:{}};const S=y},516:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,o){for(var i,a,s=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),c=1;c<arguments.length;c++){for(var l in i=Object(arguments[c]))n.call(i,l)&&(s[l]=i[l]);if(t){a=t(i);for(var u=0;u<a.length;u++)r.call(i,a[u])&&(s[a[u]]=i[a[u]])}}return s}},459:(e,t,n)=>{"use strict";var r=n(704);function o(){}function i(){}i.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,i,a){if(a!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:o};return n.PropTypes=n,n}},216:(e,t,n)=>{e.exports=n(459)()},704:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},447:(e,t,n)=>{"use strict";var r=n(516),o=60103,i=60106;t.Fragment=60107,t.StrictMode=60108,t.Profiler=60114;var a=60109,s=60110,c=60112;t.Suspense=60113;var l=60115,u=60116;if("function"==typeof Symbol&&Symbol.for){var p=Symbol.for;o=p("react.element"),i=p("react.portal"),t.Fragment=p("react.fragment"),t.StrictMode=p("react.strict_mode"),t.Profiler=p("react.profiler"),a=p("react.provider"),s=p("react.context"),c=p("react.forward_ref"),t.Suspense=p("react.suspense"),l=p("react.memo"),u=p("react.lazy")}var f="function"==typeof Symbol&&Symbol.iterator;function d(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var m={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g={};function y(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||m}function S(){}function v(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||m}y.prototype.isReactComponent={},y.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error(d(85));this.updater.enqueueSetState(this,e,t,"setState")},y.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},S.prototype=y.prototype;var b=v.prototype=new S;b.constructor=v,r(b,y.prototype),b.isPureReactComponent=!0;var h={current:null},w=Object.prototype.hasOwnProperty,E={key:!0,ref:!0,__self:!0,__source:!0};function I(e,t,n){var r,i={},a=null,s=null;if(null!=t)for(r in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(a=""+t.key),t)w.call(t,r)&&!E.hasOwnProperty(r)&&(i[r]=t[r]);var c=arguments.length-2;if(1===c)i.children=n;else if(1<c){for(var l=Array(c),u=0;u<c;u++)l[u]=arguments[u+2];i.children=l}if(e&&e.defaultProps)for(r in c=e.defaultProps)void 0===i[r]&&(i[r]=c[r]);return{$$typeof:o,type:e,key:a,ref:s,props:i,_owner:h.current}}function O(e){return"object"==typeof e&&null!==e&&e.$$typeof===o}var D=/\/+/g;function C(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function P(e,t,n,r,a){var s=typeof e;"undefined"!==s&&"boolean"!==s||(e=null);var c=!1;if(null===e)c=!0;else switch(s){case"string":case"number":c=!0;break;case"object":switch(e.$$typeof){case o:case i:c=!0}}if(c)return a=a(c=e),e=""===r?"."+C(c,0):r,Array.isArray(a)?(n="",null!=e&&(n=e.replace(D,"$&/")+"/"),P(a,t,n,"",(function(e){return e}))):null!=a&&(O(a)&&(a=function(e,t){return{$$typeof:o,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(a,n+(!a.key||c&&c.key===a.key?"":(""+a.key).replace(D,"$&/")+"/")+e)),t.push(a)),1;if(c=0,r=""===r?".":r+":",Array.isArray(e))for(var l=0;l<e.length;l++){var u=r+C(s=e[l],l);c+=P(s,t,n,u,a)}else if(u=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=f&&e[f]||e["@@iterator"])?e:null}(e),"function"==typeof u)for(e=u.call(e),l=0;!(s=e.next()).done;)c+=P(s=s.value,t,n,u=r+C(s,l++),a);else if("object"===s)throw t=""+e,Error(d(31,"[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t));return c}function x(e,t,n){if(null==e)return e;var r=[],o=0;return P(e,r,"","",(function(e){return t.call(n,e,o++)})),r}function j(e){if(-1===e._status){var t=e._result;t=t(),e._status=0,e._result=t,t.then((function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)}),(function(t){0===e._status&&(e._status=2,e._result=t)}))}if(1===e._status)return e._result;throw e._result}var k={current:null};function N(){var e=k.current;if(null===e)throw Error(d(321));return e}var T={ReactCurrentDispatcher:k,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:h,IsSomeRendererActing:{current:!1},assign:r};t.Children={map:x,forEach:function(e,t,n){x(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return x(e,(function(){t++})),t},toArray:function(e){return x(e,(function(e){return e}))||[]},only:function(e){if(!O(e))throw Error(d(143));return e}},t.Component=y,t.PureComponent=v,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=T,t.cloneElement=function(e,t,n){if(null==e)throw Error(d(267,e));var i=r({},e.props),a=e.key,s=e.ref,c=e._owner;if(null!=t){if(void 0!==t.ref&&(s=t.ref,c=h.current),void 0!==t.key&&(a=""+t.key),e.type&&e.type.defaultProps)var l=e.type.defaultProps;for(u in t)w.call(t,u)&&!E.hasOwnProperty(u)&&(i[u]=void 0===t[u]&&void 0!==l?l[u]:t[u])}var u=arguments.length-2;if(1===u)i.children=n;else if(1<u){l=Array(u);for(var p=0;p<u;p++)l[p]=arguments[p+2];i.children=l}return{$$typeof:o,type:e.type,key:a,ref:s,props:i,_owner:c}},t.createContext=function(e,t){return void 0===t&&(t=null),(e={$$typeof:s,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:a,_context:e},e.Consumer=e},t.createElement=I,t.createFactory=function(e){var t=I.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:c,render:e}},t.isValidElement=O,t.lazy=function(e){return{$$typeof:u,_payload:{_status:-1,_result:e},_init:j}},t.memo=function(e,t){return{$$typeof:l,type:e,compare:void 0===t?null:t}},t.useCallback=function(e,t){return N().useCallback(e,t)},t.useContext=function(e,t){return N().useContext(e,t)},t.useDebugValue=function(){},t.useEffect=function(e,t){return N().useEffect(e,t)},t.useImperativeHandle=function(e,t,n){return N().useImperativeHandle(e,t,n)},t.useLayoutEffect=function(e,t){return N().useLayoutEffect(e,t)},t.useMemo=function(e,t){return N().useMemo(e,t)},t.useReducer=function(e,t,n){return N().useReducer(e,t,n)},t.useRef=function(e){return N().useRef(e)},t.useState=function(e){return N().useState(e)},t.version="17.0.2"},735:(e,t,n)=>{"use strict";e.exports=n(447)},432:e=>{e.exports={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}},807:t=>{"use strict";t.exports=e},762:e=>{"use strict";e.exports=t},369:e=>{"use strict";e.exports=r},836:e=>{"use strict";e.exports=n},281:(e,t,n)=>{"use strict";n.d(t,{$G:()=>O});var r=n(735);n(432);Object.create(null);function o(){if(console&&console.warn){for(var e,t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];"string"==typeof n[0]&&(n[0]="react-i18next:: ".concat(n[0])),(e=console).warn.apply(e,n)}}var i={};function a(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];"string"==typeof t[0]&&i[t[0]]||("string"==typeof t[0]&&(i[t[0]]=new Date),o.apply(void 0,t))}function s(e,t,n){e.loadNamespaces(t,(function(){if(e.isInitialized)n();else{e.on("initialized",(function t(){setTimeout((function(){e.off("initialized",t)}),0),n()}))}}))}function c(e){return c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c(e)}function l(e){var t=function(e,t){if("object"!==c(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==c(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===c(t)?t:String(t)}function u(e,t,n){return(t=l(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var p=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,f={"&":"&","&":"&","<":"<","<":"<",">":">",">":">","'":"'","'":"'",""":'"',""":'"'," ":" "," ":" ","©":"©","©":"©","®":"®","®":"®","…":"…","…":"…","/":"/","/":"/"},d=function(e){return f[e]};var m={bindI18n:"languageChanged",bindI18nStore:"",transEmptyNodeValue:"",transSupportBasicHtmlNodes:!0,transWrapTextNodes:"",transKeepBasicHtmlNodesFor:["br","strong","i","p"],useSuspense:!0,unescape:function(e){return e.replace(p,d)}};var g;function y(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,l(r.key),r)}}var S=(0,r.createContext)(),v=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.usedNamespaces={}}var t,n,r;return t=e,(n=[{key:"addUsedNamespaces",value:function(e){var t=this;e.forEach((function(e){t.usedNamespaces[e]||(t.usedNamespaces[e]=!0)}))}},{key:"getUsedNamespaces",value:function(){return Object.keys(this.usedNamespaces)}}])&&y(t.prototype,n),r&&y(t,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();function b(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function h(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,i,a,s=[],c=!0,l=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=i.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){l=!0,o=e}finally{try{if(!c&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(l)throw o}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return b(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?b(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function w(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function E(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?w(Object(n),!0).forEach((function(t){u(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):w(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var I=function(e,t){var n=(0,r.useRef)();return(0,r.useEffect)((function(){n.current=t?n.current:e}),[e,t]),n.current};function O(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.i18n,o=(0,r.useContext)(S)||{},i=o.i18n,l=o.defaultNS,u=n||i||g;if(u&&!u.reportNamespaces&&(u.reportNamespaces=new v),!u){a("You will need to pass in an i18next instance by using initReactI18next");var p=function(e,t){return"string"==typeof t?t:t&&"object"===c(t)&&"string"==typeof t.defaultValue?t.defaultValue:Array.isArray(e)?e[e.length-1]:e},f=[p,{},!1];return f.t=p,f.i18n={},f.ready=!1,f}u.options.react&&void 0!==u.options.react.wait&&a("It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.");var d=E(E(E({},m),u.options.react),t),y=d.useSuspense,b=d.keyPrefix,w=e||l||u.options&&u.options.defaultNS;w="string"==typeof w?[w]:w||["translation"],u.reportNamespaces.addUsedNamespaces&&u.reportNamespaces.addUsedNamespaces(w);var O=(u.isInitialized||u.initializedStoreOnce)&&w.every((function(e){return function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return t.languages&&t.languages.length?void 0!==t.options.ignoreJSONStructure?t.hasLoadedNamespace(e,{precheck:function(t,r){if(n.bindI18n&&n.bindI18n.indexOf("languageChanging")>-1&&t.services.backendConnector.backend&&t.isLanguageChangingTo&&!r(t.isLanguageChangingTo,e))return!1}}):function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=t.languages[0],o=!!t.options&&t.options.fallbackLng,i=t.languages[t.languages.length-1];if("cimode"===r.toLowerCase())return!0;var a=function(e,n){var r=t.services.backendConnector.state["".concat(e,"|").concat(n)];return-1===r||2===r};return!(n.bindI18n&&n.bindI18n.indexOf("languageChanging")>-1&&t.services.backendConnector.backend&&t.isLanguageChangingTo&&!a(t.isLanguageChangingTo,e)||!t.hasResourceBundle(r,e)&&t.services.backendConnector.backend&&(!t.options.resources||t.options.partialBundledLanguages)&&(!a(r,e)||o&&!a(i,e)))}(e,t,n):(a("i18n.languages were undefined or empty",t.languages),!0)}(e,u,d)}));function D(){return u.getFixedT(null,"fallback"===d.nsMode?w:w[0],b)}var C=h((0,r.useState)(D),2),P=C[0],x=C[1],j=w.join(),k=I(j),N=(0,r.useRef)(!0);(0,r.useEffect)((function(){var e=d.bindI18n,t=d.bindI18nStore;function n(){N.current&&x(D)}return N.current=!0,O||y||s(u,w,(function(){N.current&&x(D)})),O&&k&&k!==j&&N.current&&x(D),e&&u&&u.on(e,n),t&&u&&u.store.on(t,n),function(){N.current=!1,e&&u&&e.split(" ").forEach((function(e){return u.off(e,n)})),t&&u&&t.split(" ").forEach((function(e){return u.store.off(e,n)}))}}),[u,j]);var T=(0,r.useRef)(!0);(0,r.useEffect)((function(){N.current&&!T.current&&x(D),T.current=!1}),[u,b]);var R=[P,u,O];if(R.t=P,R.i18n=u,R.ready=O,O)return R;if(!O&&!y)return R;throw new Promise((function(e){s(u,w,(function(){e()}))}))}}},s={};function c(e){var t=s[e];if(void 0!==t)return t.exports;var n=s[e]={exports:{}};return a[e](n,n.exports,c),n.exports}c.m=a,o=[],c.O=(e,t,n,r)=>{if(!t){var i=1/0;for(u=0;u<o.length;u++){for(var[t,n,r]=o[u],a=!0,s=0;s<t.length;s++)(!1&r||i>=r)&&Object.keys(c.O).every((e=>c.O[e](t[s])))?t.splice(s--,1):(a=!1,r<i&&(i=r));if(a){o.splice(u--,1);var l=n();void 0!==l&&(e=l)}}return e}r=r||0;for(var u=o.length;u>0&&o[u-1][2]>r;u--)o[u]=o[u-1];o[u]=[t,n,r]},c.F={},c.E=e=>{Object.keys(c.F).map((t=>{c.F[t](e)}))},c.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return c.d(t,{a:t}),t},c.d=(e,t)=>{for(var n in t)c.o(t,n)&&!c.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},c.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),c.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i={143:0},c.F.j=e=>{if(!c.o(i,e)||void 0===i[e]){i[e]=null;var t=document.createElement("link");c.nc&&t.setAttribute("nonce",c.nc),t.rel="prefetch",t.as="script",t.href=c.p+c.u(e),document.head.appendChild(t)}},c.O.j=e=>0===i[e],c.O(0,[143],(()=>{c.E(143)}),5);var l={};return(()=>{"use strict";c.r(l),c.d(l,{default:()=>x,protocols:()=>e.protocols});var e={};c.r(e),c.d(e,{Z:()=>y});const t=JSON.parse('{"u2":"@ohif/extension-cornerstone-dicom-seg"}').u2,n=`${t}.sopClassHandlerModule.dicom-seg`;var r=c(735),o=c(807),i=c.n(o),a=c(762),s=c(836),u=c.n(s);const{DicomMessage:p,DicomMetaDictionary:f}=u().data,d=["1.2.840.10008.5.1.4.1.1.66.4"];let m={};function g(e,t,r){const o=e[0],{StudyInstanceUID:s,SeriesInstanceUID:c,SOPInstanceUID:l,SeriesDescription:g,SeriesNumber:y,SeriesDate:S,SOPClassUID:v,wadoRoot:b,wadoUri:h,wadoUriRoot:w}=o,E={Modality:"SEG",loading:!1,isReconstructable:!0,displaySetInstanceUID:a.utils.guid(),SeriesDescription:g,SeriesNumber:y,SeriesDate:S,SOPInstanceUID:l,SeriesInstanceUID:c,StudyInstanceUID:s,SOPClassHandlerId:n,SOPClassUID:v,referencedImages:null,referencedSeriesInstanceUID:null,referencedDisplaySetInstanceUID:null,isDerivedDisplaySet:!0,isLoaded:!1,isHydrated:!1,segments:{},sopClassUids:d,instance:o,instances:[o],wadoRoot:b,wadoUriRoot:w,wadoUri:h,isOverlayDisplaySet:!0},I=o.ReferencedSeriesSequence;if(!I)throw new Error("ReferencedSeriesSequence is missing for the SEG");const O=I[0];return E.referencedImages=o.ReferencedSeriesSequence.ReferencedInstanceSequence,E.referencedSeriesInstanceUID=O.SeriesInstanceUID,E.getReferenceDisplaySet=()=>{const{displaySetService:e}=t.services,n=e.getDisplaySetsForSeries(E.referencedSeriesInstanceUID);if(!n||0===n.length)throw new Error("Referenced DisplaySet is missing for the SEG");const r=n[0];E.referencedDisplaySetInstanceUID=r.displaySetInstanceUID,E.referencedVolumeURI=r.displaySetInstanceUID;const o=`cornerstoneStreamingImageVolume:${E.referencedVolumeURI}`;return E.referencedVolumeId=o,r},E.load=async e=>{let{headers:n}=e;return await function(e,t,n,r){const{SOPInstanceUID:o}=e,{segmentationService:a}=t.services;if((e.loading||e.isLoaded)&&m[o]&&function(e,t){return t.getSegmentation(e.displaySetInstanceUID)}(e,a))return m[o];return e.loading=!0,m[o]=new Promise((async(t,o)=>{if(!e.segments||0===Object.keys(e.segments).length){const t=await async function(e,t,n){const r=e.getModuleEntry("@ohif/extension-cornerstone.utilityModule.common"),{dicomLoaderService:o}=r.exports,a=await o.findDicomDataPromise(t,null,n),s=p.readFile(a),c=f.naturalizeDataset(s.dict);c._meta=f.namifyDataset(s.meta),Array.isArray(c.SegmentSequence)||(c.SegmentSequence=[c.SegmentSequence]);const l=function(e){const t={};return e.SegmentSequence.forEach((e=>{const n=e.RecommendedDisplayCIELabValue,r=u().data.Colors.dicomlab2RGB(n).map((e=>Math.round(255*e)));r.push(255);const o=e.SegmentNumber;t[o]={color:r,functionalGroups:[],offset:null,size:null,pixelData:null,label:e.SegmentLabel}})),e.PerFrameFunctionalGroupsSequence.forEach((e=>{const n=e.SegmentIdentificationSequence.ReferencedSegmentNumber;t[n].functionalGroups.push(e)})),function(e,t){let n=Math.ceil(e.Rows*e.Columns/8),r=0;return Object.keys(t).forEach((o=>{const a=t[o];a.numberOfFrames=a.functionalGroups.length,a.size=a.numberOfFrames*n,a.offset=r,r=a.offset+a.size;const s=e.PixelData[0].slice(a.offset,r);a.pixelData=u().data.BitArray.unpack(s),a.geometry=function(e,t){let n=e.SharedFunctionalGroupsSequence.PixelMeasuresSequence,r=e.SharedFunctionalGroupsSequence.PlaneOrientationSequence,o=t[0].PlanePositionSequence;const a={};let s=n.SpacingBetweenSlices;s||n.SliceThickness&&(console.log("Using SliceThickness as SpacingBetweenSlices"),s=n.SliceThickness);a.spacing=[n.PixelSpacing[1],n.PixelSpacing[0],s].map(Number),a.dimensions=[e.Columns,e.Rows,t.length].map(Number);let c=r.ImageOrientationPatient.map(Number);const l=c.slice(0,3),u=c.slice(3,6);a.planeNormal=[],i().cross(l,u,a.planeNormal);let p=t[0].PlanePositionSequence.ImagePositionPatient.map(Number),f=t[t.length-1].PlanePositionSequence.ImagePositionPatient.map(Number);return a.sliceStep=[],i().subtract(f,p,a.sliceStep),i().normalize(a.sliceStep),a.direction=l.concat(u).concat(a.sliceStep),a.origin=o.ImagePositionPatient.map(Number),a}(e,a.functionalGroups)})),t}(e,t)}(c);return l}(n,e,r);e.segments=t}const s=!0;a.createSegmentationForSEGDisplaySet(e,null,s).then((()=>{e.loading=!1,t()})).catch((t=>{e.loading=!1,o(t)}))})),m[o]}(E,t,r,n)},[E]}const y=function(e){let{servicesManager:t,extensionManager:n}=e;return[{name:"dicom-seg",sopClassUids:d,getDisplaySetsFromSeries:e=>g(e,t,n)}]};var S=c(216),v=c.n(S),b=c(369);const h=function(e,t,n){const o="enter-segment-label",i=t=>{let{action:r,value:i}=t;switch(r.id){case"save":n(i.label,r.id);break;case"cancel":n("",r.id)}e.dismiss({id:o})};e&&e.create({id:o,centralize:!0,isDraggable:!1,showOverlay:!0,content:b.Dialog,contentProps:{title:"Enter Segment Label",value:{label:t},noCloseButton:!0,onClose:()=>e.dismiss({id:o}),actions:[{id:"cancel",text:"Cancel",type:"primary"},{id:"save",text:"Confirm",type:"secondary"}],onSubmit:i,body:e=>{let{value:t,setValue:n}=e;return r.createElement("div",{className:"p-4 bg-primary-dark"},r.createElement(b.Input,{autoFocus:!0,className:"mt-2 bg-black border-primary-main",type:"text",containerClassName:"mr-2",value:t.label,onChange:e=>{e.persist(),n((t=>({...t,label:e.target.value})))},onKeyPress:e=>{"Enter"===e.key&&i({value:t,action:{id:"save"}})}}))}}})};var w=c(281);function E(e){let{servicesManager:t,commandsManager:n}=e;const{segmentationService:o,uiDialogService:i}=t.services,{t:a}=(0,w.$G)("PanelSegmentation"),[s,c]=(0,r.useState)(null),[l,u]=(0,r.useState)(o.getConfiguration()),[p,f]=(0,r.useState)((()=>o.getSegmentations())),[d,m]=(0,r.useState)({}),g=(0,r.useCallback)((e=>{m((t=>({...t,[e]:!t[e]})))}),[m]);(0,r.useEffect)((()=>{const e=p[p.length-1]?.id;e&&m((t=>({...t,[e]:!1})))}),[p,m]),(0,r.useEffect)((()=>{const e=o.EVENTS.SEGMENTATION_ADDED,t=o.EVENTS.SEGMENTATION_UPDATED,n=o.EVENTS.SEGMENTATION_REMOVED,r=[];return[e,t,n].forEach((e=>{const{unsubscribe:t}=o.subscribe(e,(()=>{const e=o.getSegmentations();f(e),u(o.getConfiguration())}));r.push(t)})),()=>{r.forEach((e=>{e()}))}}),[]);const y=e=>o.getToolGroupIdsWithSegmentation(e),S=(0,r.useCallback)(((e,t,n)=>{o.setConfiguration({segmentationId:e,[t]:n})}),[o]);return r.createElement("div",{className:"flex flex-col flex-auto min-h-0 justify-between mt-1"},p?.length?r.createElement(b.SegmentationGroupTable,{title:a("Segmentations"),showAddSegmentation:!1,segmentations:p,isMinimized:d,activeSegmentationId:s||"",onSegmentationClick:e=>{o.setActiveSegmentationForToolGroup(e)},onSegmentationDelete:e=>{o.remove(e)},onSegmentationEdit:e=>{const t=o.getSegmentation(e),{label:n}=t;h(i,n,((t,n)=>{""!==t&&o.addOrUpdateSegmentation({id:e,label:t},!1,!0)}))},onSegmentClick:(e,t)=>{o.setActiveSegmentForSegmentation(e,t);y(e).forEach((n=>{o.setActiveSegmentationForToolGroup(e,n),o.jumpToSegmentCenter(e,t,n)}))},onSegmentEdit:(e,t)=>{const n=o.getSegmentation(e).segments[t],{label:r}=n;h(i,r,((n,r)=>{""!==n&&o.setSegmentLabelForSegmentation(e,t,n)}))},onSegmentColorClick:(e,t)=>{},onSegmentDelete:(e,t)=>{console.warn("not implemented yet")},onToggleSegmentVisibility:(e,t)=>{const n=!o.getSegmentation(e).segments[t].isVisible;y(e).forEach((r=>{o.setSegmentVisibility(e,t,n,r)}))},onToggleSegmentationVisibility:e=>{o.toggleSegmentationVisibility(e)},onToggleMinimizeSegmentation:g,segmentationConfig:{initialConfig:l},setRenderOutline:e=>S(s,"renderOutline",e),setOutlineOpacityActive:e=>S(s,"outlineOpacity",e),setRenderFill:e=>S(s,"renderFill",e),setRenderInactiveSegmentations:e=>S(s,"renderInactiveSegmentations",e),setOutlineWidthActive:e=>S(s,"outlineWidthActive",e),setFillAlpha:e=>S(s,"fillAlpha",e),setFillAlphaInactive:e=>S(s,"fillAlphaInactive",e)}):null)}E.propTypes={commandsManager:v().shape({runCommand:v().func.isRequired}),servicesManager:v().shape({services:v().shape({segmentationService:v().shape({getSegmentation:v().func.isRequired,getSegmentations:v().func.isRequired,toggleSegmentationVisibility:v().func.isRequired,subscribe:v().func.isRequired,EVENTS:v().object.isRequired}).isRequired}).isRequired}).isRequired};const I={id:"@ohif/seg",hasUpdatedPriorsInformation:!1,name:"Segmentations",protocolMatchingRules:[],toolGroupIds:["default"],numberOfPriorsReferenced:0,defaultViewport:{viewportOptions:{viewportType:"stack",toolGroupId:"default",allowUnmatchedView:!0},displaySets:[{id:"segDisplaySetId",matchedDisplaySetsIndex:-1}]},displaySetSelectors:{segDisplaySetId:{seriesMatchingRules:[{attribute:"Modality",constraint:{equals:"SEG"}}]}},stages:[{name:"Segmentations",viewportStructure:{layoutType:"grid",properties:{rows:1,columns:1}},viewports:[{viewportOptions:{allowUnmatchedView:!0},displaySets:[{id:"segDisplaySetId"}]}]}]};const O=function(){return[{name:I.id,protocol:I}]};function D(){return D=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},D.apply(this,arguments)}const C=r.lazy((()=>Promise.resolve().then(c.bind(c,580)))),P=e=>r.createElement(r.Suspense,{fallback:r.createElement("div",null,"Loading...")},r.createElement(C,e)),x={id:t,getPanelModule:e=>{let{servicesManager:t,commandsManager:n,extensionManager:o}=e;return[{name:"panelSegmentation",iconName:"tab-segmentation",iconLabel:"Segmentation",label:"Segmentation",component:()=>r.createElement(E,{commandsManager:n,servicesManager:t,extensionManager:o})}]},getViewportModule(e){let{servicesManager:t,extensionManager:n}=e;return[{name:"dicom-seg",component:e=>r.createElement(P,D({servicesManager:t,extensionManager:n},e))}]},getSopClassHandlerModule:y,getHangingProtocolModule:O}})(),l=c.O(l)})()));
|
|
3
|
+
//# sourceMappingURL=ohif-extension-cornerstone-dicom-seg.umd.js.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/*
|
|
2
|
+
object-assign
|
|
3
|
+
(c) Sindre Sorhus
|
|
4
|
+
@license MIT
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/** @license React v17.0.2
|
|
8
|
+
* react.production.min.js
|
|
9
|
+
*
|
|
10
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
11
|
+
*
|
|
12
|
+
* This source code is licensed under the MIT license found in the
|
|
13
|
+
* LICENSE file in the root directory of this source tree.
|
|
14
|
+
*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dist/ohif-extension-cornerstone-dicom-seg.umd.js","mappings":"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","sources":["webpack://ohif-extension-cornerstone-dicom-seg/webpack/universalModuleDefinition","webpack://ohif-extension-cornerstone-dicom-seg/webpack/runtime/chunk loaded","webpack://ohif-extension-cornerstone-dicom-seg/webpack/runtime/jsonp chunk loading","webpack://ohif-extension-cornerstone-dicom-seg/./utils/initSEGToolGroup.ts","webpack://ohif-extension-cornerstone-dicom-seg/./utils/_hydrateSEG.ts","webpack://ohif-extension-cornerstone-dicom-seg/./utils/promptHydrateSEG.ts","webpack://ohif-extension-cornerstone-dicom-seg/./viewports/OHIFCornerstoneSEGViewport.tsx","webpack://ohif-extension-cornerstone-dicom-seg/./viewports/_getStatusComponent.tsx","webpack://ohif-extension-cornerstone-dicom-seg/../../../node_modules/object-assign/index.js","webpack://ohif-extension-cornerstone-dicom-seg/../../../node_modules/prop-types/factoryWithThrowingShims.js","webpack://ohif-extension-cornerstone-dicom-seg/../../../node_modules/prop-types/index.js","webpack://ohif-extension-cornerstone-dicom-seg/../../../node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack://ohif-extension-cornerstone-dicom-seg/../../../node_modules/react/cjs/react.production.min.js","webpack://ohif-extension-cornerstone-dicom-seg/../../../node_modules/react/index.js","webpack://ohif-extension-cornerstone-dicom-seg/../../../node_modules/void-elements/index.js","webpack://ohif-extension-cornerstone-dicom-seg/external umd \"@kitware/vtk.js/Common/Core/Math\"","webpack://ohif-extension-cornerstone-dicom-seg/external umd \"@ohif/core\"","webpack://ohif-extension-cornerstone-dicom-seg/external umd \"@ohif/ui\"","webpack://ohif-extension-cornerstone-dicom-seg/external umd \"dcmjs\"","webpack://ohif-extension-cornerstone-dicom-seg/../../../node_modules/html-parse-stringify/dist/html-parse-stringify.module.js","webpack://ohif-extension-cornerstone-dicom-seg/../../../node_modules/react-i18next/dist/es/utils.js","webpack://ohif-extension-cornerstone-dicom-seg/../../../node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://ohif-extension-cornerstone-dicom-seg/../../../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://ohif-extension-cornerstone-dicom-seg/../../../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://ohif-extension-cornerstone-dicom-seg/../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://ohif-extension-cornerstone-dicom-seg/../../../node_modules/react-i18next/dist/es/unescape.js","webpack://ohif-extension-cornerstone-dicom-seg/../../../node_modules/react-i18next/dist/es/defaults.js","webpack://ohif-extension-cornerstone-dicom-seg/../../../node_modules/react-i18next/dist/es/TransWithoutContext.js","webpack://ohif-extension-cornerstone-dicom-seg/../../../node_modules/react-i18next/dist/es/i18nInstance.js","webpack://ohif-extension-cornerstone-dicom-seg/../../../node_modules/@babel/runtime/helpers/esm/createClass.js","webpack://ohif-extension-cornerstone-dicom-seg/../../../node_modules/react-i18next/dist/es/context.js","webpack://ohif-extension-cornerstone-dicom-seg/../../../node_modules/@babel/runtime/helpers/esm/classCallCheck.js","webpack://ohif-extension-cornerstone-dicom-seg/../../../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","webpack://ohif-extension-cornerstone-dicom-seg/../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js","webpack://ohif-extension-cornerstone-dicom-seg/../../../node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","webpack://ohif-extension-cornerstone-dicom-seg/../../../node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","webpack://ohif-extension-cornerstone-dicom-seg/../../../node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","webpack://ohif-extension-cornerstone-dicom-seg/../../../node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","webpack://ohif-extension-cornerstone-dicom-seg/../../../node_modules/react-i18next/dist/es/useTranslation.js","webpack://ohif-extension-cornerstone-dicom-seg/webpack/bootstrap","webpack://ohif-extension-cornerstone-dicom-seg/webpack/runtime/chunk prefetch function","webpack://ohif-extension-cornerstone-dicom-seg/webpack/runtime/compat get default export","webpack://ohif-extension-cornerstone-dicom-seg/webpack/runtime/define property getters","webpack://ohif-extension-cornerstone-dicom-seg/webpack/runtime/hasOwnProperty shorthand","webpack://ohif-extension-cornerstone-dicom-seg/webpack/runtime/make namespace object","webpack://ohif-extension-cornerstone-dicom-seg/webpack/runtime/startup prefetch","webpack://ohif-extension-cornerstone-dicom-seg/./id.js","webpack://ohif-extension-cornerstone-dicom-seg/./getSopClassHandlerModule.js","webpack://ohif-extension-cornerstone-dicom-seg/./panels/callInputDialog.tsx","webpack://ohif-extension-cornerstone-dicom-seg/./panels/PanelSegmentation.tsx","webpack://ohif-extension-cornerstone-dicom-seg/./getHangingProtocolModule.ts","webpack://ohif-extension-cornerstone-dicom-seg/./index.tsx"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"@kitware/vtk.js/Common/Core/Math\"), require(\"@ohif/core\"), require(\"dcmjs\"), require(\"@ohif/ui\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"@kitware/vtk.js/Common/Core/Math\", \"@ohif/core\", \"dcmjs\", \"@ohif/ui\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ohif-extension-cornerstone-dicom-seg\"] = factory(require(\"@kitware/vtk.js/Common/Core/Math\"), require(\"@ohif/core\"), require(\"dcmjs\"), require(\"@ohif/ui\"));\n\telse\n\t\troot[\"ohif-extension-cornerstone-dicom-seg\"] = factory(root[\"@kitware/vtk.js/Common/Core/Math\"], root[\"@ohif/core\"], root[\"dcmjs\"], root[\"@ohif/ui\"]);\n})(globalThis, (__WEBPACK_EXTERNAL_MODULE__807__, __WEBPACK_EXTERNAL_MODULE__762__, __WEBPACK_EXTERNAL_MODULE__836__, __WEBPACK_EXTERNAL_MODULE__369__) => {\nreturn ","var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t143: 0\n};\n\n// no chunk on demand loading\n\n__webpack_require__.F.j = (chunkId) => {\n\tif((!__webpack_require__.o(installedChunks, chunkId) || installedChunks[chunkId] === undefined) && true) {\n\t\tinstalledChunks[chunkId] = null;\n\t\tvar link = document.createElement('link');\n\n\t\tif (__webpack_require__.nc) {\n\t\t\tlink.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tlink.rel = \"prefetch\";\n\t\tlink.as = \"script\";\n\t\tlink.href = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\tdocument.head.appendChild(link);\n\t}\n};\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// no jsonp function","function createSEGToolGroupAndAddTools(\n ToolGroupService,\n customizationService,\n toolGroupId\n) {\n const { tools } =\n customizationService.get('cornerstone.overlayViewportTools') ?? {};\n\n return ToolGroupService.createToolGroupAndAddTools(toolGroupId, tools, {});\n}\n\nexport default createSEGToolGroupAndAddTools;\n","async function _hydrateSEGDisplaySet({\n segDisplaySet,\n viewportIndex,\n servicesManager,\n}) {\n const {\n segmentationService,\n hangingProtocolService,\n viewportGridService,\n } = servicesManager.services;\n\n const displaySetInstanceUID = segDisplaySet.referencedDisplaySetInstanceUID;\n\n let segmentationId = null;\n\n // We need the hydration to notify panels about the new segmentation added\n const suppressEvents = false;\n\n segmentationId = await segmentationService.createSegmentationForSEGDisplaySet(\n segDisplaySet,\n segmentationId,\n suppressEvents\n );\n\n segmentationService.hydrateSegmentation(segDisplaySet.displaySetInstanceUID);\n\n const { viewports } = viewportGridService.getState();\n\n const updatedViewports = hangingProtocolService.getViewportsRequireUpdate(\n viewportIndex,\n displaySetInstanceUID\n );\n\n // Todo: fix this after we have a better way for stack viewport segmentations\n\n // check every viewport in the viewports to see if the displaySetInstanceUID\n // is being displayed, if so we need to update the viewport to use volume viewport\n // (if already is not using it) since Cornerstone3D currently only supports\n // volume viewport for segmentation\n viewports.forEach((viewport, index) => {\n if (index === viewportIndex) {\n return;\n }\n\n const shouldDisplaySeg = segmentationService.shouldRenderSegmentation(\n viewport.displaySetInstanceUIDs,\n segDisplaySet.displaySetInstanceUID\n );\n\n if (shouldDisplaySeg) {\n updatedViewports.push({\n viewportIndex: index,\n displaySetInstanceUIDs: viewport.displaySetInstanceUIDs,\n viewportOptions: {\n initialImageOptions: {\n preset: 'middle',\n },\n },\n });\n }\n });\n\n // Do the entire update at once\n viewportGridService.setDisplaySetsForViewports(updatedViewports);\n\n return true;\n}\n\nexport default _hydrateSEGDisplaySet;\n","import hydrateSEGDisplaySet from './_hydrateSEG';\n\nconst RESPONSE = {\n NO_NEVER: -1,\n CANCEL: 0,\n HYDRATE_SEG: 5,\n};\n\nfunction promptHydrateSEG({\n servicesManager,\n segDisplaySet,\n viewportIndex,\n}) {\n const { uiViewportDialogService } = servicesManager.services;\n\n return new Promise(async function(resolve, reject) {\n const promptResult = await _askHydrate(\n uiViewportDialogService,\n viewportIndex\n );\n\n if (promptResult === RESPONSE.HYDRATE_SEG) {\n const isHydrated = await hydrateSEGDisplaySet({\n segDisplaySet,\n viewportIndex,\n servicesManager,\n });\n\n resolve(isHydrated);\n }\n });\n}\n\nfunction _askHydrate(uiViewportDialogService, viewportIndex) {\n return new Promise(function(resolve, reject) {\n const message = 'Do you want to open this Segmentation?';\n const actions = [\n {\n type: 'secondary',\n text: 'No',\n value: RESPONSE.CANCEL,\n },\n {\n type: 'primary',\n text: 'Yes',\n value: RESPONSE.HYDRATE_SEG,\n },\n ];\n const onSubmit = result => {\n uiViewportDialogService.hide();\n resolve(result);\n };\n\n uiViewportDialogService.show({\n viewportIndex,\n type: 'info',\n message,\n actions,\n onSubmit,\n onOutsideClick: () => {\n uiViewportDialogService.hide();\n resolve(RESPONSE.CANCEL);\n },\n });\n });\n}\n\nexport default promptHydrateSEG;\n","import PropTypes from 'prop-types';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport OHIF, { utils } from '@ohif/core';\nimport {\n LoadingIndicatorTotalPercent,\n useViewportGrid,\n ViewportActionBar,\n} from '@ohif/ui';\nimport createSEGToolGroupAndAddTools from '../utils/initSEGToolGroup';\nimport promptHydrateSEG from '../utils/promptHydrateSEG';\nimport hydrateSEGDisplaySet from '../utils/_hydrateSEG';\nimport _getStatusComponent from './_getStatusComponent';\n\nconst { formatDate } = utils;\nconst SEG_TOOLGROUP_BASE_NAME = 'SEGToolGroup';\n\nfunction OHIFCornerstoneSEGViewport(props) {\n const {\n children,\n displaySets,\n viewportOptions,\n viewportIndex,\n viewportLabel,\n servicesManager,\n extensionManager,\n } = props;\n\n const { t } = useTranslation('SEGViewport');\n\n const {\n displaySetService,\n toolGroupService,\n segmentationService,\n uiNotificationService,\n customizationService,\n } = servicesManager.services;\n\n const toolGroupId = `${SEG_TOOLGROUP_BASE_NAME}-${viewportIndex}`;\n\n // SEG viewport will always have a single display set\n if (displaySets.length > 1) {\n throw new Error('SEG viewport should only have a single display set');\n }\n\n const segDisplaySet = displaySets[0];\n\n const [viewportGrid, viewportGridService] = useViewportGrid();\n\n // States\n const [isToolGroupCreated, setToolGroupCreated] = useState(false);\n const [selectedSegment, setSelectedSegment] = useState(1);\n\n // Hydration means that the SEG is opened and segments are loaded into the\n // segmentation panel, and SEG is also rendered on any viewport that is in the\n // same frameOfReferenceUID as the referencedSeriesUID of the SEG. However,\n // loading basically means SEG loading over network and bit unpacking of the\n // SEG data.\n const [isHydrated, setIsHydrated] = useState(segDisplaySet.isHydrated);\n const [segIsLoading, setSegIsLoading] = useState(!segDisplaySet.isLoaded);\n const [element, setElement] = useState(null);\n const [processingProgress, setProcessingProgress] = useState({\n percentComplete: null,\n totalSegments: null,\n });\n\n // refs\n const referencedDisplaySetRef = useRef(null);\n\n const { viewports, activeViewportIndex } = viewportGrid;\n\n const referencedDisplaySet = segDisplaySet.getReferenceDisplaySet();\n const referencedDisplaySetMetadata = _getReferencedDisplaySetMetadata(\n referencedDisplaySet\n );\n\n referencedDisplaySetRef.current = {\n displaySet: referencedDisplaySet,\n metadata: referencedDisplaySetMetadata,\n };\n /**\n * OnElementEnabled callback which is called after the cornerstoneExtension\n * has enabled the element. Note: we delegate all the image rendering to\n * cornerstoneExtension, so we don't need to do anything here regarding\n * the image rendering, element enabling etc.\n */\n const onElementEnabled = evt => {\n setElement(evt.detail.element);\n };\n\n const onElementDisabled = () => {\n setElement(null);\n };\n\n const getCornerstoneViewport = useCallback(() => {\n const { component: Component } = extensionManager.getModuleEntry(\n '@ohif/extension-cornerstone.viewportModule.cornerstone'\n );\n\n const {\n displaySet: referencedDisplaySet,\n } = referencedDisplaySetRef.current;\n\n // Todo: jump to the center of the first segment\n return (\n <Component\n {...props}\n displaySets={[referencedDisplaySet, segDisplaySet]}\n viewportOptions={{\n viewportType: 'volume',\n toolGroupId: toolGroupId,\n orientation: viewportOptions.orientation,\n viewportId: viewportOptions.viewportId,\n }}\n onElementEnabled={onElementEnabled}\n onElementDisabled={onElementDisabled}\n // initialImageIndex={initialImageIndex}\n ></Component>\n );\n }, [viewportIndex, segDisplaySet, toolGroupId]);\n\n const onSegmentChange = useCallback(\n direction => {\n direction = direction === 'left' ? -1 : 1;\n const segmentationId = segDisplaySet.displaySetInstanceUID;\n const segmentation = segmentationService.getSegmentation(segmentationId);\n\n const { segments } = segmentation;\n\n const numberOfSegments = Object.keys(segments).length;\n\n let newSelectedSegmentIndex = selectedSegment + direction;\n\n // Segment 0 is always background\n\n if (newSelectedSegmentIndex > numberOfSegments - 1) {\n newSelectedSegmentIndex = 1;\n } else if (newSelectedSegmentIndex === 0) {\n newSelectedSegmentIndex = numberOfSegments - 1;\n }\n\n segmentationService.jumpToSegmentCenter(\n segmentationId,\n newSelectedSegmentIndex,\n toolGroupId\n );\n setSelectedSegment(newSelectedSegmentIndex);\n },\n [selectedSegment]\n );\n\n useEffect(() => {\n if (segIsLoading) {\n return;\n }\n\n promptHydrateSEG({\n servicesManager,\n viewportIndex,\n segDisplaySet,\n }).then(isHydrated => {\n if (isHydrated) {\n setIsHydrated(true);\n }\n });\n }, [servicesManager, viewportIndex, segDisplaySet, segIsLoading]);\n\n useEffect(() => {\n const { unsubscribe } = segmentationService.subscribe(\n segmentationService.EVENTS.SEGMENTATION_LOADING_COMPLETE,\n evt => {\n if (\n evt.segDisplaySet.displaySetInstanceUID ===\n segDisplaySet.displaySetInstanceUID\n ) {\n setSegIsLoading(false);\n }\n\n if (evt.overlappingSegments) {\n uiNotificationService.show({\n title: 'Overlapping Segments',\n message:\n 'Overlapping segments detected which is not currently supported',\n type: 'warning',\n });\n }\n }\n );\n\n return () => {\n unsubscribe();\n };\n }, [segDisplaySet]);\n\n useEffect(() => {\n const { unsubscribe } = segmentationService.subscribe(\n segmentationService.EVENTS.SEGMENT_LOADING_COMPLETE,\n ({ percentComplete, numSegments }) => {\n setProcessingProgress({\n percentComplete,\n totalSegments: numSegments,\n });\n }\n );\n\n return () => {\n unsubscribe();\n };\n }, [segDisplaySet]);\n\n /**\n Cleanup the SEG viewport when the viewport is destroyed\n */\n useEffect(() => {\n const onDisplaySetsRemovedSubscription = displaySetService.subscribe(\n displaySetService.EVENTS.DISPLAY_SETS_REMOVED,\n ({ displaySetInstanceUIDs }) => {\n const activeViewport = viewports[activeViewportIndex];\n if (\n displaySetInstanceUIDs.includes(activeViewport.displaySetInstanceUID)\n ) {\n viewportGridService.setDisplaySetsForViewport({\n viewportIndex: activeViewportIndex,\n displaySetInstanceUIDs: [],\n });\n }\n }\n );\n\n return () => {\n onDisplaySetsRemovedSubscription.unsubscribe();\n };\n }, []);\n\n useEffect(() => {\n let toolGroup = toolGroupService.getToolGroup(toolGroupId);\n\n if (toolGroup) {\n return;\n }\n\n // This creates a custom tool group which has the lifetime of this view\n // only, and does NOT interfere with currently displayed segmentations.\n toolGroup = createSEGToolGroupAndAddTools(\n toolGroupService,\n customizationService,\n toolGroupId\n );\n\n setToolGroupCreated(true);\n\n return () => {\n // remove the segmentation representations if seg displayset changed\n segmentationService.removeSegmentationRepresentationFromToolGroup(\n toolGroupId\n );\n\n // Only destroy the viewport specific implementation\n toolGroupService.destroyToolGroup(toolGroupId);\n };\n }, []);\n\n useEffect(() => {\n setIsHydrated(segDisplaySet.isHydrated);\n\n return () => {\n // remove the segmentation representations if seg displayset changed\n segmentationService.removeSegmentationRepresentationFromToolGroup(\n toolGroupId\n );\n referencedDisplaySetRef.current = null;\n };\n }, [segDisplaySet]);\n\n // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n let childrenWithProps = null;\n\n if (\n !referencedDisplaySetRef.current ||\n referencedDisplaySet.displaySetInstanceUID !==\n referencedDisplaySetRef.current.displaySet.displaySetInstanceUID\n ) {\n return null;\n }\n\n if (children && children.length) {\n childrenWithProps = children.map((child, index) => {\n return (\n child &&\n React.cloneElement(child, {\n viewportIndex,\n key: index,\n })\n );\n });\n }\n\n const {\n PatientID,\n PatientName,\n PatientSex,\n PatientAge,\n SliceThickness,\n ManufacturerModelName,\n StudyDate,\n SeriesDescription,\n SpacingBetweenSlices,\n } = referencedDisplaySetRef.current.metadata;\n\n const onStatusClick = async () => {\n const isHydrated = await hydrateSEGDisplaySet({\n segDisplaySet,\n viewportIndex,\n servicesManager,\n });\n\n setIsHydrated(isHydrated);\n };\n\n return (\n <>\n <ViewportActionBar\n onDoubleClick={evt => {\n evt.stopPropagation();\n evt.preventDefault();\n }}\n onArrowsClick={onSegmentChange}\n getStatusComponent={() => {\n return _getStatusComponent({\n isHydrated,\n onStatusClick,\n });\n }}\n studyData={{\n label: viewportLabel,\n useAltStyling: true,\n studyDate: formatDate(StudyDate),\n seriesDescription: `SEG Viewport ${SeriesDescription}`,\n patientInformation: {\n patientName: PatientName\n ? OHIF.utils.formatPN(PatientName.Alphabetic)\n : '',\n patientSex: PatientSex || '',\n patientAge: PatientAge || '',\n MRN: PatientID || '',\n thickness: SliceThickness ? `${SliceThickness.toFixed(2)}mm` : '',\n spacing:\n SpacingBetweenSlices !== undefined\n ? `${SpacingBetweenSlices.toFixed(2)}mm`\n : '',\n scanner: ManufacturerModelName || '',\n },\n }}\n />\n\n <div className=\"relative flex flex-row w-full h-full overflow-hidden\">\n {segIsLoading && (\n <LoadingIndicatorTotalPercent\n className=\"w-full h-full\"\n totalNumbers={processingProgress.totalSegments}\n percentComplete={processingProgress.percentComplete}\n loadingText=\"Loading SEG...\"\n />\n )}\n {getCornerstoneViewport()}\n {childrenWithProps}\n </div>\n </>\n );\n}\n\nOHIFCornerstoneSEGViewport.propTypes = {\n displaySets: PropTypes.arrayOf(PropTypes.object),\n viewportIndex: PropTypes.number.isRequired,\n dataSource: PropTypes.object,\n children: PropTypes.node,\n customProps: PropTypes.object,\n};\n\nOHIFCornerstoneSEGViewport.defaultProps = {\n customProps: {},\n};\n\nfunction _getReferencedDisplaySetMetadata(referencedDisplaySet) {\n const image0 = referencedDisplaySet.images[0];\n const referencedDisplaySetMetadata = {\n PatientID: image0.PatientID,\n PatientName: image0.PatientName,\n PatientSex: image0.PatientSex,\n PatientAge: image0.PatientAge,\n SliceThickness: image0.SliceThickness,\n StudyDate: image0.StudyDate,\n SeriesDescription: image0.SeriesDescription,\n SeriesInstanceUID: image0.SeriesInstanceUID,\n SeriesNumber: image0.SeriesNumber,\n ManufacturerModelName: image0.ManufacturerModelName,\n SpacingBetweenSlices: image0.SpacingBetweenSlices,\n };\n\n return referencedDisplaySetMetadata;\n}\n\nexport default OHIFCornerstoneSEGViewport;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Icon, Tooltip } from '@ohif/ui';\n\n\nexport default function _getStatusComponent({ isHydrated, onStatusClick }) {\n let ToolTipMessage = null;\n let StatusIcon = null;\n\n const {t} = useTranslation(\"Common\");\n const loadStr = t(\"LOAD\");\n\n switch (isHydrated) {\n case true:\n StatusIcon = () => <Icon name=\"status-alert\" />;\n\n ToolTipMessage = () => (\n <div>This Segmentation is loaded in the segmentation panel</div>\n );\n break;\n case false:\n StatusIcon = () => <Icon name=\"status-untracked\" />;\n\n ToolTipMessage = () => <div>Click LOAD to load segmentation.</div>;\n }\n\n const StatusArea = () => (\n <div className=\"flex h-6 leading-6 cursor-default text-sm text-white\">\n <div className=\"min-w-[45px] flex items-center p-1 rounded-l-xl rounded-r bg-customgray-100\">\n <StatusIcon />\n <span className=\"ml-1\">SEG</span>\n </div>\n {!isHydrated && (\n <div\n className=\"ml-1 px-1.5 rounded cursor-pointer hover:text-black bg-primary-main hover:bg-primary-light\"\n // Using onMouseUp here because onClick is not working when the viewport is not active and is styled with pointer-events:none\n onMouseUp={onStatusClick}\n >\n {loadStr}\n </div>\n )}\n </div>\n );\n\n\n return (\n <>\n {ToolTipMessage && (\n <Tooltip content={<ToolTipMessage />} position=\"bottom-left\">\n <StatusArea />\n </Tooltip>\n )}\n {!ToolTipMessage && <StatusArea />}\n </>\n );\n}\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","/** @license React v17.0.2\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var l=require(\"object-assign\"),n=60103,p=60106;exports.Fragment=60107;exports.StrictMode=60108;exports.Profiler=60114;var q=60109,r=60110,t=60112;exports.Suspense=60113;var u=60115,v=60116;\nif(\"function\"===typeof Symbol&&Symbol.for){var w=Symbol.for;n=w(\"react.element\");p=w(\"react.portal\");exports.Fragment=w(\"react.fragment\");exports.StrictMode=w(\"react.strict_mode\");exports.Profiler=w(\"react.profiler\");q=w(\"react.provider\");r=w(\"react.context\");t=w(\"react.forward_ref\");exports.Suspense=w(\"react.suspense\");u=w(\"react.memo\");v=w(\"react.lazy\")}var x=\"function\"===typeof Symbol&&Symbol.iterator;\nfunction y(a){if(null===a||\"object\"!==typeof a)return null;a=x&&a[x]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}function z(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;c<arguments.length;c++)b+=\"&args[]=\"+encodeURIComponent(arguments[c]);return\"Minified React error #\"+a+\"; visit \"+b+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}\nvar A={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},B={};function C(a,b,c){this.props=a;this.context=b;this.refs=B;this.updater=c||A}C.prototype.isReactComponent={};C.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(z(85));this.updater.enqueueSetState(this,a,b,\"setState\")};C.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};\nfunction D(){}D.prototype=C.prototype;function E(a,b,c){this.props=a;this.context=b;this.refs=B;this.updater=c||A}var F=E.prototype=new D;F.constructor=E;l(F,C.prototype);F.isPureReactComponent=!0;var G={current:null},H=Object.prototype.hasOwnProperty,I={key:!0,ref:!0,__self:!0,__source:!0};\nfunction J(a,b,c){var e,d={},k=null,h=null;if(null!=b)for(e in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=\"\"+b.key),b)H.call(b,e)&&!I.hasOwnProperty(e)&&(d[e]=b[e]);var g=arguments.length-2;if(1===g)d.children=c;else if(1<g){for(var f=Array(g),m=0;m<g;m++)f[m]=arguments[m+2];d.children=f}if(a&&a.defaultProps)for(e in g=a.defaultProps,g)void 0===d[e]&&(d[e]=g[e]);return{$$typeof:n,type:a,key:k,ref:h,props:d,_owner:G.current}}\nfunction K(a,b){return{$$typeof:n,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}}function L(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===n}function escape(a){var b={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+a.replace(/[=:]/g,function(a){return b[a]})}var M=/\\/+/g;function N(a,b){return\"object\"===typeof a&&null!==a&&null!=a.key?escape(\"\"+a.key):b.toString(36)}\nfunction O(a,b,c,e,d){var k=typeof a;if(\"undefined\"===k||\"boolean\"===k)a=null;var h=!1;if(null===a)h=!0;else switch(k){case \"string\":case \"number\":h=!0;break;case \"object\":switch(a.$$typeof){case n:case p:h=!0}}if(h)return h=a,d=d(h),a=\"\"===e?\".\"+N(h,0):e,Array.isArray(d)?(c=\"\",null!=a&&(c=a.replace(M,\"$&/\")+\"/\"),O(d,b,c,\"\",function(a){return a})):null!=d&&(L(d)&&(d=K(d,c+(!d.key||h&&h.key===d.key?\"\":(\"\"+d.key).replace(M,\"$&/\")+\"/\")+a)),b.push(d)),1;h=0;e=\"\"===e?\".\":e+\":\";if(Array.isArray(a))for(var g=\n0;g<a.length;g++){k=a[g];var f=e+N(k,g);h+=O(k,b,c,f,d)}else if(f=y(a),\"function\"===typeof f)for(a=f.call(a),g=0;!(k=a.next()).done;)k=k.value,f=e+N(k,g++),h+=O(k,b,c,f,d);else if(\"object\"===k)throw b=\"\"+a,Error(z(31,\"[object Object]\"===b?\"object with keys {\"+Object.keys(a).join(\", \")+\"}\":b));return h}function P(a,b,c){if(null==a)return a;var e=[],d=0;O(a,e,\"\",\"\",function(a){return b.call(c,a,d++)});return e}\nfunction Q(a){if(-1===a._status){var b=a._result;b=b();a._status=0;a._result=b;b.then(function(b){0===a._status&&(b=b.default,a._status=1,a._result=b)},function(b){0===a._status&&(a._status=2,a._result=b)})}if(1===a._status)return a._result;throw a._result;}var R={current:null};function S(){var a=R.current;if(null===a)throw Error(z(321));return a}var T={ReactCurrentDispatcher:R,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:G,IsSomeRendererActing:{current:!1},assign:l};\nexports.Children={map:P,forEach:function(a,b,c){P(a,function(){b.apply(this,arguments)},c)},count:function(a){var b=0;P(a,function(){b++});return b},toArray:function(a){return P(a,function(a){return a})||[]},only:function(a){if(!L(a))throw Error(z(143));return a}};exports.Component=C;exports.PureComponent=E;exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=T;\nexports.cloneElement=function(a,b,c){if(null===a||void 0===a)throw Error(z(267,a));var e=l({},a.props),d=a.key,k=a.ref,h=a._owner;if(null!=b){void 0!==b.ref&&(k=b.ref,h=G.current);void 0!==b.key&&(d=\"\"+b.key);if(a.type&&a.type.defaultProps)var g=a.type.defaultProps;for(f in b)H.call(b,f)&&!I.hasOwnProperty(f)&&(e[f]=void 0===b[f]&&void 0!==g?g[f]:b[f])}var f=arguments.length-2;if(1===f)e.children=c;else if(1<f){g=Array(f);for(var m=0;m<f;m++)g[m]=arguments[m+2];e.children=g}return{$$typeof:n,type:a.type,\nkey:d,ref:k,props:e,_owner:h}};exports.createContext=function(a,b){void 0===b&&(b=null);a={$$typeof:r,_calculateChangedBits:b,_currentValue:a,_currentValue2:a,_threadCount:0,Provider:null,Consumer:null};a.Provider={$$typeof:q,_context:a};return a.Consumer=a};exports.createElement=J;exports.createFactory=function(a){var b=J.bind(null,a);b.type=a;return b};exports.createRef=function(){return{current:null}};exports.forwardRef=function(a){return{$$typeof:t,render:a}};exports.isValidElement=L;\nexports.lazy=function(a){return{$$typeof:v,_payload:{_status:-1,_result:a},_init:Q}};exports.memo=function(a,b){return{$$typeof:u,type:a,compare:void 0===b?null:b}};exports.useCallback=function(a,b){return S().useCallback(a,b)};exports.useContext=function(a,b){return S().useContext(a,b)};exports.useDebugValue=function(){};exports.useEffect=function(a,b){return S().useEffect(a,b)};exports.useImperativeHandle=function(a,b,c){return S().useImperativeHandle(a,b,c)};\nexports.useLayoutEffect=function(a,b){return S().useLayoutEffect(a,b)};exports.useMemo=function(a,b){return S().useMemo(a,b)};exports.useReducer=function(a,b,c){return S().useReducer(a,b,c)};exports.useRef=function(a){return S().useRef(a)};exports.useState=function(a){return S().useState(a)};exports.version=\"17.0.2\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.min.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n","/**\n * This file automatically generated from `pre-publish.js`.\n * Do not manually edit.\n */\n\nmodule.exports = {\n \"area\": true,\n \"base\": true,\n \"br\": true,\n \"col\": true,\n \"embed\": true,\n \"hr\": true,\n \"img\": true,\n \"input\": true,\n \"link\": true,\n \"meta\": true,\n \"param\": true,\n \"source\": true,\n \"track\": true,\n \"wbr\": true\n};\n","module.exports = __WEBPACK_EXTERNAL_MODULE__807__;","module.exports = __WEBPACK_EXTERNAL_MODULE__762__;","module.exports = __WEBPACK_EXTERNAL_MODULE__369__;","module.exports = __WEBPACK_EXTERNAL_MODULE__836__;","import e from\"void-elements\";var t=/\\s([^'\"/\\s><]+?)[\\s/>]|([^\\s=]+)=\\s?(\".*?\"|'.*?')/g;function n(n){var r={type:\"tag\",name:\"\",voidElement:!1,attrs:{},children:[]},i=n.match(/<\\/?([^\\s]+?)[/\\s>]/);if(i&&(r.name=i[1],(e[i[1]]||\"/\"===n.charAt(n.length-2))&&(r.voidElement=!0),r.name.startsWith(\"!--\"))){var s=n.indexOf(\"--\\x3e\");return{type:\"comment\",comment:-1!==s?n.slice(4,s):\"\"}}for(var a=new RegExp(t),c=null;null!==(c=a.exec(n));)if(c[0].trim())if(c[1]){var o=c[1].trim(),l=[o,\"\"];o.indexOf(\"=\")>-1&&(l=o.split(\"=\")),r.attrs[l[0]]=l[1],a.lastIndex--}else c[2]&&(r.attrs[c[2]]=c[3].trim().substring(1,c[3].length-1));return r}var r=/<[a-zA-Z0-9\\-\\!\\/](?:\"[^\"]*\"|'[^']*'|[^'\">])*>/g,i=/^\\s*$/,s=Object.create(null);function a(e,t){switch(t.type){case\"text\":return e+t.content;case\"tag\":return e+=\"<\"+t.name+(t.attrs?function(e){var t=[];for(var n in e)t.push(n+'=\"'+e[n]+'\"');return t.length?\" \"+t.join(\" \"):\"\"}(t.attrs):\"\")+(t.voidElement?\"/>\":\">\"),t.voidElement?e:e+t.children.reduce(a,\"\")+\"</\"+t.name+\">\";case\"comment\":return e+\"\\x3c!--\"+t.comment+\"--\\x3e\"}}var c={parse:function(e,t){t||(t={}),t.components||(t.components=s);var a,c=[],o=[],l=-1,m=!1;if(0!==e.indexOf(\"<\")){var u=e.indexOf(\"<\");c.push({type:\"text\",content:-1===u?e:e.substring(0,u)})}return e.replace(r,function(r,s){if(m){if(r!==\"</\"+a.name+\">\")return;m=!1}var u,f=\"/\"!==r.charAt(1),h=r.startsWith(\"\\x3c!--\"),p=s+r.length,d=e.charAt(p);if(h){var v=n(r);return l<0?(c.push(v),c):((u=o[l]).children.push(v),c)}if(f&&(l++,\"tag\"===(a=n(r)).type&&t.components[a.name]&&(a.type=\"component\",m=!0),a.voidElement||m||!d||\"<\"===d||a.children.push({type:\"text\",content:e.slice(p,e.indexOf(\"<\",p))}),0===l&&c.push(a),(u=o[l-1])&&u.children.push(a),o[l]=a),(!f||a.voidElement)&&(l>-1&&(a.voidElement||a.name===r.slice(2,-1))&&(l--,a=-1===l?c:o[l]),!m&&\"<\"!==d&&d)){u=-1===l?c:o[l].children;var x=e.indexOf(\"<\",p),g=e.slice(p,-1===x?void 0:x);i.test(g)&&(g=\" \"),(x>-1&&l+u.length>=0||\" \"!==g)&&u.push({type:\"text\",content:g})}}),c},stringify:function(e){return e.reduce(function(e,t){return e+a(\"\",t)},\"\")}};export default c;\n//# sourceMappingURL=html-parse-stringify.module.js.map\n","export function warn() {\n if (console && console.warn) {\n var _console;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n if (typeof args[0] === 'string') args[0] = \"react-i18next:: \".concat(args[0]);\n\n (_console = console).warn.apply(_console, args);\n }\n}\nvar alreadyWarned = {};\nexport function warnOnce() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n if (typeof args[0] === 'string' && alreadyWarned[args[0]]) return;\n if (typeof args[0] === 'string') alreadyWarned[args[0]] = new Date();\n warn.apply(void 0, args);\n}\nexport function loadNamespaces(i18n, ns, cb) {\n i18n.loadNamespaces(ns, function () {\n if (i18n.isInitialized) {\n cb();\n } else {\n var initialized = function initialized() {\n setTimeout(function () {\n i18n.off('initialized', initialized);\n }, 0);\n cb();\n };\n\n i18n.on('initialized', initialized);\n }\n });\n}\n\nfunction oldI18nextHasLoadedNamespace(ns, i18n) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var lng = i18n.languages[0];\n var fallbackLng = i18n.options ? i18n.options.fallbackLng : false;\n var lastLng = i18n.languages[i18n.languages.length - 1];\n if (lng.toLowerCase() === 'cimode') return true;\n\n var loadNotPending = function loadNotPending(l, n) {\n var loadState = i18n.services.backendConnector.state[\"\".concat(l, \"|\").concat(n)];\n return loadState === -1 || loadState === 2;\n };\n\n if (options.bindI18n && options.bindI18n.indexOf('languageChanging') > -1 && i18n.services.backendConnector.backend && i18n.isLanguageChangingTo && !loadNotPending(i18n.isLanguageChangingTo, ns)) return false;\n if (i18n.hasResourceBundle(lng, ns)) return true;\n if (!i18n.services.backendConnector.backend || i18n.options.resources && !i18n.options.partialBundledLanguages) return true;\n if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;\n return false;\n}\n\nexport function hasLoadedNamespace(ns, i18n) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (!i18n.languages || !i18n.languages.length) {\n warnOnce('i18n.languages were undefined or empty', i18n.languages);\n return true;\n }\n\n var isNewerI18next = i18n.options.ignoreJSONStructure !== undefined;\n\n if (!isNewerI18next) {\n return oldI18nextHasLoadedNamespace(ns, i18n, options);\n }\n\n return i18n.hasLoadedNamespace(ns, {\n precheck: function precheck(i18nInstance, loadNotPending) {\n if (options.bindI18n && options.bindI18n.indexOf('languageChanging') > -1 && i18nInstance.services.backendConnector.backend && i18nInstance.isLanguageChangingTo && !loadNotPending(i18nInstance.isLanguageChangingTo, ns)) return false;\n }\n });\n}\nexport function getDisplayName(Component) {\n return Component.displayName || Component.name || (typeof Component === 'string' && Component.length > 0 ? Component : 'Unknown');\n}","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","var matchHtmlEntity = /&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g;\nvar htmlEntities = {\n '&': '&',\n '&': '&',\n '<': '<',\n '<': '<',\n '>': '>',\n '>': '>',\n ''': \"'\",\n ''': \"'\",\n '"': '\"',\n '"': '\"',\n ' ': ' ',\n ' ': ' ',\n '©': '©',\n '©': '©',\n '®': '®',\n '®': '®',\n '…': '…',\n '…': '…',\n '/': '/',\n '/': '/'\n};\n\nvar unescapeHtmlEntity = function unescapeHtmlEntity(m) {\n return htmlEntities[m];\n};\n\nexport var unescape = function unescape(text) {\n return text.replace(matchHtmlEntity, unescapeHtmlEntity);\n};","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport { unescape } from './unescape.js';\nvar defaultOptions = {\n bindI18n: 'languageChanged',\n bindI18nStore: '',\n transEmptyNodeValue: '',\n transSupportBasicHtmlNodes: true,\n transWrapTextNodes: '',\n transKeepBasicHtmlNodesFor: ['br', 'strong', 'i', 'p'],\n useSuspense: true,\n unescape: unescape\n};\nexport function setDefaults() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n defaultOptions = _objectSpread(_objectSpread({}, defaultOptions), options);\n}\nexport function getDefaults() {\n return defaultOptions;\n}","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nvar _excluded = [\"format\"],\n _excluded2 = [\"children\", \"count\", \"parent\", \"i18nKey\", \"context\", \"tOptions\", \"values\", \"defaults\", \"components\", \"ns\", \"i18n\", \"t\", \"shouldUnescape\"];\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport { isValidElement, cloneElement, createElement } from 'react';\nimport HTML from 'html-parse-stringify';\nimport { warn, warnOnce } from './utils.js';\nimport { getDefaults } from './defaults.js';\nimport { getI18n } from './i18nInstance.js';\n\nfunction hasChildren(node, checkLength) {\n if (!node) return false;\n var base = node.props ? node.props.children : node.children;\n if (checkLength) return base.length > 0;\n return !!base;\n}\n\nfunction getChildren(node) {\n if (!node) return [];\n return node.props ? node.props.children : node.children;\n}\n\nfunction hasValidReactChildren(children) {\n if (Object.prototype.toString.call(children) !== '[object Array]') return false;\n return children.every(function (child) {\n return isValidElement(child);\n });\n}\n\nfunction getAsArray(data) {\n return Array.isArray(data) ? data : [data];\n}\n\nfunction mergeProps(source, target) {\n var newTarget = _objectSpread({}, target);\n\n newTarget.props = Object.assign(source.props, target.props);\n return newTarget;\n}\n\nexport function nodesToString(children, i18nOptions) {\n if (!children) return '';\n var stringNode = '';\n var childrenArray = getAsArray(children);\n var keepArray = i18nOptions.transSupportBasicHtmlNodes && i18nOptions.transKeepBasicHtmlNodesFor ? i18nOptions.transKeepBasicHtmlNodesFor : [];\n childrenArray.forEach(function (child, childIndex) {\n if (typeof child === 'string') {\n stringNode += \"\".concat(child);\n } else if (isValidElement(child)) {\n var childPropsCount = Object.keys(child.props).length;\n var shouldKeepChild = keepArray.indexOf(child.type) > -1;\n var childChildren = child.props.children;\n\n if (!childChildren && shouldKeepChild && childPropsCount === 0) {\n stringNode += \"<\".concat(child.type, \"/>\");\n } else if (!childChildren && (!shouldKeepChild || childPropsCount !== 0)) {\n stringNode += \"<\".concat(childIndex, \"></\").concat(childIndex, \">\");\n } else if (child.props.i18nIsDynamicList) {\n stringNode += \"<\".concat(childIndex, \"></\").concat(childIndex, \">\");\n } else if (shouldKeepChild && childPropsCount === 1 && typeof childChildren === 'string') {\n stringNode += \"<\".concat(child.type, \">\").concat(childChildren, \"</\").concat(child.type, \">\");\n } else {\n var content = nodesToString(childChildren, i18nOptions);\n stringNode += \"<\".concat(childIndex, \">\").concat(content, \"</\").concat(childIndex, \">\");\n }\n } else if (child === null) {\n warn(\"Trans: the passed in value is invalid - seems you passed in a null child.\");\n } else if (_typeof(child) === 'object') {\n var format = child.format,\n clone = _objectWithoutProperties(child, _excluded);\n\n var keys = Object.keys(clone);\n\n if (keys.length === 1) {\n var value = format ? \"\".concat(keys[0], \", \").concat(format) : keys[0];\n stringNode += \"{{\".concat(value, \"}}\");\n } else {\n warn(\"react-i18next: the passed in object contained more than one variable - the object should look like {{ value, format }} where format is optional.\", child);\n }\n } else {\n warn(\"Trans: the passed in value is invalid - seems you passed in a variable like {number} - please pass in variables for interpolation as full objects like {{number}}.\", child);\n }\n });\n return stringNode;\n}\n\nfunction renderNodes(children, targetString, i18n, i18nOptions, combinedTOpts, shouldUnescape) {\n if (targetString === '') return [];\n var keepArray = i18nOptions.transKeepBasicHtmlNodesFor || [];\n var emptyChildrenButNeedsHandling = targetString && new RegExp(keepArray.join('|')).test(targetString);\n if (!children && !emptyChildrenButNeedsHandling) return [targetString];\n var data = {};\n\n function getData(childs) {\n var childrenArray = getAsArray(childs);\n childrenArray.forEach(function (child) {\n if (typeof child === 'string') return;\n if (hasChildren(child)) getData(getChildren(child));else if (_typeof(child) === 'object' && !isValidElement(child)) Object.assign(data, child);\n });\n }\n\n getData(children);\n var ast = HTML.parse(\"<0>\".concat(targetString, \"</0>\"));\n\n var opts = _objectSpread(_objectSpread({}, data), combinedTOpts);\n\n function renderInner(child, node, rootReactNode) {\n var childs = getChildren(child);\n var mappedChildren = mapAST(childs, node.children, rootReactNode);\n return hasValidReactChildren(childs) && mappedChildren.length === 0 ? childs : mappedChildren;\n }\n\n function pushTranslatedJSX(child, inner, mem, i, isVoid) {\n if (child.dummy) child.children = inner;\n mem.push(cloneElement(child, _objectSpread(_objectSpread({}, child.props), {}, {\n key: i\n }), isVoid ? undefined : inner));\n }\n\n function mapAST(reactNode, astNode, rootReactNode) {\n var reactNodes = getAsArray(reactNode);\n var astNodes = getAsArray(astNode);\n return astNodes.reduce(function (mem, node, i) {\n var translationContent = node.children && node.children[0] && node.children[0].content && i18n.services.interpolator.interpolate(node.children[0].content, opts, i18n.language);\n\n if (node.type === 'tag') {\n var tmp = reactNodes[parseInt(node.name, 10)];\n if (!tmp && rootReactNode.length === 1 && rootReactNode[0][node.name]) tmp = rootReactNode[0][node.name];\n if (!tmp) tmp = {};\n var child = Object.keys(node.attrs).length !== 0 ? mergeProps({\n props: node.attrs\n }, tmp) : tmp;\n var isElement = isValidElement(child);\n var isValidTranslationWithChildren = isElement && hasChildren(node, true) && !node.voidElement;\n var isEmptyTransWithHTML = emptyChildrenButNeedsHandling && _typeof(child) === 'object' && child.dummy && !isElement;\n var isKnownComponent = _typeof(children) === 'object' && children !== null && Object.hasOwnProperty.call(children, node.name);\n\n if (typeof child === 'string') {\n var value = i18n.services.interpolator.interpolate(child, opts, i18n.language);\n mem.push(value);\n } else if (hasChildren(child) || isValidTranslationWithChildren) {\n var inner = renderInner(child, node, rootReactNode);\n pushTranslatedJSX(child, inner, mem, i);\n } else if (isEmptyTransWithHTML) {\n var _inner = mapAST(reactNodes, node.children, rootReactNode);\n\n mem.push(cloneElement(child, _objectSpread(_objectSpread({}, child.props), {}, {\n key: i\n }), _inner));\n } else if (Number.isNaN(parseFloat(node.name))) {\n if (isKnownComponent) {\n var _inner2 = renderInner(child, node, rootReactNode);\n\n pushTranslatedJSX(child, _inner2, mem, i, node.voidElement);\n } else if (i18nOptions.transSupportBasicHtmlNodes && keepArray.indexOf(node.name) > -1) {\n if (node.voidElement) {\n mem.push(createElement(node.name, {\n key: \"\".concat(node.name, \"-\").concat(i)\n }));\n } else {\n var _inner3 = mapAST(reactNodes, node.children, rootReactNode);\n\n mem.push(createElement(node.name, {\n key: \"\".concat(node.name, \"-\").concat(i)\n }, _inner3));\n }\n } else if (node.voidElement) {\n mem.push(\"<\".concat(node.name, \" />\"));\n } else {\n var _inner4 = mapAST(reactNodes, node.children, rootReactNode);\n\n mem.push(\"<\".concat(node.name, \">\").concat(_inner4, \"</\").concat(node.name, \">\"));\n }\n } else if (_typeof(child) === 'object' && !isElement) {\n var content = node.children[0] ? translationContent : null;\n if (content) mem.push(content);\n } else if (node.children.length === 1 && translationContent) {\n mem.push(cloneElement(child, _objectSpread(_objectSpread({}, child.props), {}, {\n key: i\n }), translationContent));\n } else {\n mem.push(cloneElement(child, _objectSpread(_objectSpread({}, child.props), {}, {\n key: i\n })));\n }\n } else if (node.type === 'text') {\n var wrapTextNodes = i18nOptions.transWrapTextNodes;\n\n var _content = shouldUnescape ? i18nOptions.unescape(i18n.services.interpolator.interpolate(node.content, opts, i18n.language)) : i18n.services.interpolator.interpolate(node.content, opts, i18n.language);\n\n if (wrapTextNodes) {\n mem.push(createElement(wrapTextNodes, {\n key: \"\".concat(node.name, \"-\").concat(i)\n }, _content));\n } else {\n mem.push(_content);\n }\n }\n\n return mem;\n }, []);\n }\n\n var result = mapAST([{\n dummy: true,\n children: children || []\n }], ast, getAsArray(children || []));\n return getChildren(result[0]);\n}\n\nexport function Trans(_ref) {\n var children = _ref.children,\n count = _ref.count,\n parent = _ref.parent,\n i18nKey = _ref.i18nKey,\n context = _ref.context,\n _ref$tOptions = _ref.tOptions,\n tOptions = _ref$tOptions === void 0 ? {} : _ref$tOptions,\n values = _ref.values,\n defaults = _ref.defaults,\n components = _ref.components,\n ns = _ref.ns,\n i18nFromProps = _ref.i18n,\n tFromProps = _ref.t,\n shouldUnescape = _ref.shouldUnescape,\n additionalProps = _objectWithoutProperties(_ref, _excluded2);\n\n var i18n = i18nFromProps || getI18n();\n\n if (!i18n) {\n warnOnce('You will need to pass in an i18next instance by using i18nextReactModule');\n return children;\n }\n\n var t = tFromProps || i18n.t.bind(i18n) || function (k) {\n return k;\n };\n\n if (context) tOptions.context = context;\n\n var reactI18nextOptions = _objectSpread(_objectSpread({}, getDefaults()), i18n.options && i18n.options.react);\n\n var namespaces = ns || t.ns || i18n.options && i18n.options.defaultNS;\n namespaces = typeof namespaces === 'string' ? [namespaces] : namespaces || ['translation'];\n var defaultValue = defaults || nodesToString(children, reactI18nextOptions) || reactI18nextOptions.transEmptyNodeValue || i18nKey;\n var hashTransKey = reactI18nextOptions.hashTransKey;\n var key = i18nKey || (hashTransKey ? hashTransKey(defaultValue) : defaultValue);\n var interpolationOverride = values ? tOptions.interpolation : {\n interpolation: _objectSpread(_objectSpread({}, tOptions.interpolation), {}, {\n prefix: '#$?',\n suffix: '?$#'\n })\n };\n\n var combinedTOpts = _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, tOptions), {}, {\n count: count\n }, values), interpolationOverride), {}, {\n defaultValue: defaultValue,\n ns: namespaces\n });\n\n var translation = key ? t(key, combinedTOpts) : defaultValue;\n var content = renderNodes(components || children, translation, i18n, reactI18nextOptions, combinedTOpts, shouldUnescape);\n var useAsParent = parent !== undefined ? parent : reactI18nextOptions.defaultTransParent;\n return useAsParent ? createElement(useAsParent, additionalProps, content) : content;\n}","var i18nInstance;\nexport function setI18n(instance) {\n i18nInstance = instance;\n}\nexport function getI18n() {\n return i18nInstance;\n}","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, toPropertyKey(descriptor.key), descriptor);\n }\n}\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport { createContext } from 'react';\nimport { getDefaults, setDefaults } from './defaults.js';\nimport { getI18n, setI18n } from './i18nInstance.js';\nimport { initReactI18next } from './initReactI18next.js';\nexport { getDefaults, setDefaults, getI18n, setI18n, initReactI18next };\nexport var I18nContext = createContext();\nexport var ReportNamespaces = function () {\n function ReportNamespaces() {\n _classCallCheck(this, ReportNamespaces);\n\n this.usedNamespaces = {};\n }\n\n _createClass(ReportNamespaces, [{\n key: \"addUsedNamespaces\",\n value: function addUsedNamespaces(namespaces) {\n var _this = this;\n\n namespaces.forEach(function (ns) {\n if (!_this.usedNamespaces[ns]) _this.usedNamespaces[ns] = true;\n });\n }\n }, {\n key: \"getUsedNamespaces\",\n value: function getUsedNamespaces() {\n return Object.keys(this.usedNamespaces);\n }\n }]);\n\n return ReportNamespaces;\n}();\nexport function composeInitialProps(ForComponent) {\n return function (ctx) {\n return new Promise(function (resolve) {\n var i18nInitialProps = getInitialProps();\n\n if (ForComponent.getInitialProps) {\n ForComponent.getInitialProps(ctx).then(function (componentsInitialProps) {\n resolve(_objectSpread(_objectSpread({}, componentsInitialProps), i18nInitialProps));\n });\n } else {\n resolve(i18nInitialProps);\n }\n });\n };\n}\nexport function getInitialProps() {\n var i18n = getI18n();\n var namespaces = i18n.reportNamespaces ? i18n.reportNamespaces.getUsedNamespaces() : [];\n var ret = {};\n var initialI18nStore = {};\n i18n.languages.forEach(function (l) {\n initialI18nStore[l] = {};\n namespaces.forEach(function (ns) {\n initialI18nStore[l][ns] = i18n.getResourceBundle(l, ns) || {};\n });\n });\n ret.initialI18nStore = initialI18nStore;\n ret.initialLanguage = i18n.language;\n return ret;\n}","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(arr, i) {\n var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"];\n if (null != _i) {\n var _s,\n _e,\n _x,\n _r,\n _arr = [],\n _n = !0,\n _d = !1;\n try {\n if (_x = (_i = _i.call(arr)).next, 0 === i) {\n if (Object(_i) !== _i) return;\n _n = !1;\n } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0);\n } catch (err) {\n _d = !0, _e = err;\n } finally {\n try {\n if (!_n && null != _i[\"return\"] && (_r = _i[\"return\"](), Object(_r) !== _r)) return;\n } finally {\n if (_d) throw _e;\n }\n }\n return _arr;\n }\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport { useState, useEffect, useContext, useRef } from 'react';\nimport { getI18n, getDefaults, ReportNamespaces, I18nContext } from './context.js';\nimport { warnOnce, loadNamespaces, hasLoadedNamespace } from './utils.js';\n\nvar usePrevious = function usePrevious(value, ignore) {\n var ref = useRef();\n useEffect(function () {\n ref.current = ignore ? ref.current : value;\n }, [value, ignore]);\n return ref.current;\n};\n\nexport function useTranslation(ns) {\n var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var i18nFromProps = props.i18n;\n\n var _ref = useContext(I18nContext) || {},\n i18nFromContext = _ref.i18n,\n defaultNSFromContext = _ref.defaultNS;\n\n var i18n = i18nFromProps || i18nFromContext || getI18n();\n if (i18n && !i18n.reportNamespaces) i18n.reportNamespaces = new ReportNamespaces();\n\n if (!i18n) {\n warnOnce('You will need to pass in an i18next instance by using initReactI18next');\n\n var notReadyT = function notReadyT(k, optsOrDefaultValue) {\n if (typeof optsOrDefaultValue === 'string') return optsOrDefaultValue;\n if (optsOrDefaultValue && _typeof(optsOrDefaultValue) === 'object' && typeof optsOrDefaultValue.defaultValue === 'string') return optsOrDefaultValue.defaultValue;\n return Array.isArray(k) ? k[k.length - 1] : k;\n };\n\n var retNotReady = [notReadyT, {}, false];\n retNotReady.t = notReadyT;\n retNotReady.i18n = {};\n retNotReady.ready = false;\n return retNotReady;\n }\n\n if (i18n.options.react && i18n.options.react.wait !== undefined) warnOnce('It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.');\n\n var i18nOptions = _objectSpread(_objectSpread(_objectSpread({}, getDefaults()), i18n.options.react), props);\n\n var useSuspense = i18nOptions.useSuspense,\n keyPrefix = i18nOptions.keyPrefix;\n var namespaces = ns || defaultNSFromContext || i18n.options && i18n.options.defaultNS;\n namespaces = typeof namespaces === 'string' ? [namespaces] : namespaces || ['translation'];\n if (i18n.reportNamespaces.addUsedNamespaces) i18n.reportNamespaces.addUsedNamespaces(namespaces);\n var ready = (i18n.isInitialized || i18n.initializedStoreOnce) && namespaces.every(function (n) {\n return hasLoadedNamespace(n, i18n, i18nOptions);\n });\n\n function getT() {\n return i18n.getFixedT(null, i18nOptions.nsMode === 'fallback' ? namespaces : namespaces[0], keyPrefix);\n }\n\n var _useState = useState(getT),\n _useState2 = _slicedToArray(_useState, 2),\n t = _useState2[0],\n setT = _useState2[1];\n\n var joinedNS = namespaces.join();\n var previousJoinedNS = usePrevious(joinedNS);\n var isMounted = useRef(true);\n useEffect(function () {\n var bindI18n = i18nOptions.bindI18n,\n bindI18nStore = i18nOptions.bindI18nStore;\n isMounted.current = true;\n\n if (!ready && !useSuspense) {\n loadNamespaces(i18n, namespaces, function () {\n if (isMounted.current) setT(getT);\n });\n }\n\n if (ready && previousJoinedNS && previousJoinedNS !== joinedNS && isMounted.current) {\n setT(getT);\n }\n\n function boundReset() {\n if (isMounted.current) setT(getT);\n }\n\n if (bindI18n && i18n) i18n.on(bindI18n, boundReset);\n if (bindI18nStore && i18n) i18n.store.on(bindI18nStore, boundReset);\n return function () {\n isMounted.current = false;\n if (bindI18n && i18n) bindI18n.split(' ').forEach(function (e) {\n return i18n.off(e, boundReset);\n });\n if (bindI18nStore && i18n) bindI18nStore.split(' ').forEach(function (e) {\n return i18n.store.off(e, boundReset);\n });\n };\n }, [i18n, joinedNS]);\n var isInitial = useRef(true);\n useEffect(function () {\n if (isMounted.current && !isInitial.current) {\n setT(getT);\n }\n\n isInitial.current = false;\n }, [i18n, keyPrefix]);\n var ret = [t, i18n, ready];\n ret.t = t;\n ret.i18n = i18n;\n ret.ready = ready;\n if (ready) return ret;\n if (!ready && !useSuspense) return ret;\n throw new Promise(function (resolve) {\n loadNamespaces(i18n, namespaces, function () {\n resolve();\n });\n });\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.F = {};\n__webpack_require__.E = (chunkId) => {\n\tObject.keys(__webpack_require__.F).map((key) => {\n\t\t__webpack_require__.F[key](chunkId);\n\t});\n}","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.O(0, [143], () => {\n\t__webpack_require__.E(143);\n}, 5);","import packageJson from '../package.json';\n\nconst id = packageJson.name;\nconst SOPClassHandlerName = 'dicom-seg';\nconst SOPClassHandlerId = `${id}.sopClassHandlerModule.${SOPClassHandlerName}`;\n\nexport { id, SOPClassHandlerId, SOPClassHandlerName };\n","import vtkMath from '@kitware/vtk.js/Common/Core/Math';\n\nimport { utils } from '@ohif/core';\n\nimport { SOPClassHandlerId } from './id';\nimport dcmjs from 'dcmjs';\n\nconst { DicomMessage, DicomMetaDictionary } = dcmjs.data;\n\nconst sopClassUids = ['1.2.840.10008.5.1.4.1.1.66.4'];\n\nlet loadPromises = {};\n\nfunction _getDisplaySetsFromSeries(\n instances,\n servicesManager,\n extensionManager\n) {\n const instance = instances[0];\n\n const {\n StudyInstanceUID,\n SeriesInstanceUID,\n SOPInstanceUID,\n SeriesDescription,\n SeriesNumber,\n SeriesDate,\n SOPClassUID,\n wadoRoot,\n wadoUri,\n wadoUriRoot,\n } = instance;\n\n const displaySet = {\n Modality: 'SEG',\n loading: false,\n isReconstructable: true, // by default for now since it is a volumetric SEG currently\n displaySetInstanceUID: utils.guid(),\n SeriesDescription,\n SeriesNumber,\n SeriesDate,\n SOPInstanceUID,\n SeriesInstanceUID,\n StudyInstanceUID,\n SOPClassHandlerId,\n SOPClassUID,\n referencedImages: null,\n referencedSeriesInstanceUID: null,\n referencedDisplaySetInstanceUID: null,\n isDerivedDisplaySet: true,\n isLoaded: false,\n isHydrated: false,\n segments: {},\n sopClassUids,\n instance,\n instances: [instance],\n wadoRoot,\n wadoUriRoot,\n wadoUri,\n isOverlayDisplaySet: true,\n };\n\n const referencedSeriesSequence = instance.ReferencedSeriesSequence;\n\n if (!referencedSeriesSequence) {\n throw new Error('ReferencedSeriesSequence is missing for the SEG');\n }\n\n const referencedSeries = referencedSeriesSequence[0];\n\n displaySet.referencedImages =\n instance.ReferencedSeriesSequence.ReferencedInstanceSequence;\n displaySet.referencedSeriesInstanceUID = referencedSeries.SeriesInstanceUID;\n\n displaySet.getReferenceDisplaySet = () => {\n const { displaySetService } = servicesManager.services;\n const referencedDisplaySets = displaySetService.getDisplaySetsForSeries(\n displaySet.referencedSeriesInstanceUID\n );\n\n if (!referencedDisplaySets || referencedDisplaySets.length === 0) {\n throw new Error('Referenced DisplaySet is missing for the SEG');\n }\n\n const referencedDisplaySet = referencedDisplaySets[0];\n\n displaySet.referencedDisplaySetInstanceUID =\n referencedDisplaySet.displaySetInstanceUID;\n\n // Todo: this needs to be able to work with other reference volumes (other than streaming) such as nifti, etc.\n displaySet.referencedVolumeURI = referencedDisplaySet.displaySetInstanceUID;\n const referencedVolumeId = `cornerstoneStreamingImageVolume:${displaySet.referencedVolumeURI}`;\n displaySet.referencedVolumeId = referencedVolumeId;\n\n return referencedDisplaySet;\n };\n\n displaySet.load = async ({ headers }) =>\n await _load(displaySet, servicesManager, extensionManager, headers);\n\n return [displaySet];\n}\n\nfunction _load(segDisplaySet, servicesManager, extensionManager, headers) {\n const { SOPInstanceUID } = segDisplaySet;\n const { segmentationService } = servicesManager.services;\n\n if (\n (segDisplaySet.loading || segDisplaySet.isLoaded) &&\n loadPromises[SOPInstanceUID] &&\n _segmentationExists(segDisplaySet, segmentationService)\n ) {\n return loadPromises[SOPInstanceUID];\n }\n\n segDisplaySet.loading = true;\n\n // We don't want to fire multiple loads, so we'll wait for the first to finish\n // and also return the same promise to any other callers.\n loadPromises[SOPInstanceUID] = new Promise(async (resolve, reject) => {\n if (\n !segDisplaySet.segments ||\n Object.keys(segDisplaySet.segments).length === 0\n ) {\n const segments = await _loadSegments(\n extensionManager,\n segDisplaySet,\n headers\n );\n\n segDisplaySet.segments = segments;\n }\n\n const suppressEvents = true;\n segmentationService\n .createSegmentationForSEGDisplaySet(segDisplaySet, null, suppressEvents)\n .then(() => {\n segDisplaySet.loading = false;\n resolve();\n })\n .catch(error => {\n segDisplaySet.loading = false;\n reject(error);\n });\n });\n\n return loadPromises[SOPInstanceUID];\n}\n\nasync function _loadSegments(extensionManager, segDisplaySet, headers) {\n const utilityModule = extensionManager.getModuleEntry(\n '@ohif/extension-cornerstone.utilityModule.common'\n );\n\n const { dicomLoaderService } = utilityModule.exports;\n const segArrayBuffer = await dicomLoaderService.findDicomDataPromise(\n segDisplaySet,\n null,\n headers\n );\n\n const dicomData = DicomMessage.readFile(segArrayBuffer);\n const dataset = DicomMetaDictionary.naturalizeDataset(dicomData.dict);\n dataset._meta = DicomMetaDictionary.namifyDataset(dicomData.meta);\n\n if (!Array.isArray(dataset.SegmentSequence)) {\n dataset.SegmentSequence = [dataset.SegmentSequence];\n }\n\n const segments = _getSegments(dataset);\n return segments;\n}\n\nfunction _segmentationExists(segDisplaySet, segmentationService) {\n // This should be abstracted with the CornerstoneCacheService\n return segmentationService.getSegmentation(\n segDisplaySet.displaySetInstanceUID\n );\n}\n\nfunction _getPixelData(dataset, segments) {\n let frameSize = Math.ceil((dataset.Rows * dataset.Columns) / 8);\n let nextOffset = 0;\n\n Object.keys(segments).forEach(segmentKey => {\n const segment = segments[segmentKey];\n segment.numberOfFrames = segment.functionalGroups.length;\n segment.size = segment.numberOfFrames * frameSize;\n segment.offset = nextOffset;\n nextOffset = segment.offset + segment.size;\n const packedSegment = dataset.PixelData[0].slice(\n segment.offset,\n nextOffset\n );\n\n segment.pixelData = dcmjs.data.BitArray.unpack(packedSegment);\n segment.geometry = geometryFromFunctionalGroups(\n dataset,\n segment.functionalGroups\n );\n });\n\n return segments;\n}\n\nfunction geometryFromFunctionalGroups(dataset, perFrame) {\n let pixelMeasures =\n dataset.SharedFunctionalGroupsSequence.PixelMeasuresSequence;\n let planeOrientation =\n dataset.SharedFunctionalGroupsSequence.PlaneOrientationSequence;\n let planePosition = perFrame[0].PlanePositionSequence; // TODO: assume sorted frames!\n\n const geometry = {};\n\n // NB: DICOM PixelSpacing is defined as Row then Column,\n // unlike ImageOrientationPatient\n let spacingBetweenSlices = pixelMeasures.SpacingBetweenSlices;\n if (!spacingBetweenSlices) {\n if (pixelMeasures.SliceThickness) {\n console.log('Using SliceThickness as SpacingBetweenSlices');\n spacingBetweenSlices = pixelMeasures.SliceThickness;\n }\n }\n geometry.spacing = [\n pixelMeasures.PixelSpacing[1],\n pixelMeasures.PixelSpacing[0],\n spacingBetweenSlices,\n ].map(Number);\n\n geometry.dimensions = [dataset.Columns, dataset.Rows, perFrame.length].map(\n Number\n );\n\n let orientation = planeOrientation.ImageOrientationPatient.map(Number);\n const columnStepToPatient = orientation.slice(0, 3);\n const rowStepToPatient = orientation.slice(3, 6);\n geometry.planeNormal = [];\n vtkMath.cross(columnStepToPatient, rowStepToPatient, geometry.planeNormal);\n\n let firstPosition = perFrame[0].PlanePositionSequence.ImagePositionPatient.map(\n Number\n );\n let lastPosition = perFrame[\n perFrame.length - 1\n ].PlanePositionSequence.ImagePositionPatient.map(Number);\n geometry.sliceStep = [];\n vtkMath.subtract(lastPosition, firstPosition, geometry.sliceStep);\n vtkMath.normalize(geometry.sliceStep);\n geometry.direction = columnStepToPatient\n .concat(rowStepToPatient)\n .concat(geometry.sliceStep);\n geometry.origin = planePosition.ImagePositionPatient.map(Number);\n\n return geometry;\n}\n\nfunction _getSegments(dataset) {\n const segments = {};\n\n dataset.SegmentSequence.forEach(segment => {\n const cielab = segment.RecommendedDisplayCIELabValue;\n const rgba = dcmjs.data.Colors.dicomlab2RGB(cielab).map(x =>\n Math.round(x * 255)\n );\n\n rgba.push(255);\n const segmentNumber = segment.SegmentNumber;\n\n segments[segmentNumber] = {\n color: rgba,\n functionalGroups: [],\n offset: null,\n size: null,\n pixelData: null,\n label: segment.SegmentLabel,\n };\n });\n\n // make a list of functional groups per segment\n dataset.PerFrameFunctionalGroupsSequence.forEach(functionalGroup => {\n const segmentNumber =\n functionalGroup.SegmentIdentificationSequence.ReferencedSegmentNumber;\n segments[segmentNumber].functionalGroups.push(functionalGroup);\n });\n\n return _getPixelData(dataset, segments);\n}\n\nfunction getSopClassHandlerModule({ servicesManager, extensionManager }) {\n const getDisplaySetsFromSeries = instances => {\n return _getDisplaySetsFromSeries(\n instances,\n servicesManager,\n extensionManager\n );\n };\n\n return [\n {\n name: 'dicom-seg',\n sopClassUids,\n getDisplaySetsFromSeries,\n },\n ];\n}\n\nexport default getSopClassHandlerModule;\n","import React from 'react';\nimport { Input, Dialog } from '@ohif/ui';\n\nfunction callInputDialog(uiDialogService, label, callback) {\n const dialogId = 'enter-segment-label';\n\n const onSubmitHandler = ({ action, value }) => {\n switch (action.id) {\n case 'save':\n callback(value.label, action.id);\n break;\n case 'cancel':\n callback('', action.id);\n break;\n }\n uiDialogService.dismiss({ id: dialogId });\n };\n\n if (uiDialogService) {\n uiDialogService.create({\n id: dialogId,\n centralize: true,\n isDraggable: false,\n showOverlay: true,\n content: Dialog,\n contentProps: {\n title: 'Enter Segment Label',\n value: { label },\n noCloseButton: true,\n onClose: () => uiDialogService.dismiss({ id: dialogId }),\n actions: [\n { id: 'cancel', text: 'Cancel', type: 'primary' },\n { id: 'save', text: 'Confirm', type: 'secondary' },\n ],\n onSubmit: onSubmitHandler,\n body: ({ value, setValue }) => {\n return (\n <div className=\"p-4 bg-primary-dark\">\n <Input\n autoFocus\n className=\"mt-2 bg-black border-primary-main\"\n type=\"text\"\n containerClassName=\"mr-2\"\n value={value.label}\n onChange={event => {\n event.persist();\n setValue(value => ({ ...value, label: event.target.value }));\n }}\n onKeyPress={event => {\n if (event.key === 'Enter') {\n onSubmitHandler({ value, action: { id: 'save' } });\n }\n }}\n />\n </div>\n );\n },\n },\n });\n }\n}\n\nexport default callInputDialog;\n","import React, { useEffect, useState, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport { SegmentationGroupTable } from '@ohif/ui';\nimport callInputDialog from './callInputDialog';\n\nimport { useTranslation } from 'react-i18next';\n\nexport default function PanelSegmentation({\n servicesManager,\n commandsManager,\n}) {\n const { segmentationService, uiDialogService } = servicesManager.services;\n\n const { t } = useTranslation('PanelSegmentation');\n const [selectedSegmentationId, setSelectedSegmentationId] = useState(null);\n const [segmentationConfiguration, setSegmentationConfiguration] = useState(\n segmentationService.getConfiguration()\n );\n\n const [segmentations, setSegmentations] = useState(() =>\n segmentationService.getSegmentations()\n );\n\n const [isMinimized, setIsMinimized] = useState({});\n\n const onToggleMinimizeSegmentation = useCallback(\n id => {\n setIsMinimized(prevState => ({\n ...prevState,\n [id]: !prevState[id],\n }));\n },\n [setIsMinimized]\n );\n\n // Only expand the last segmentation added to the list and collapse the rest\n useEffect(() => {\n const lastSegmentationId = segmentations[segmentations.length - 1]?.id;\n if (lastSegmentationId) {\n setIsMinimized(prevState => ({\n ...prevState,\n [lastSegmentationId]: false,\n }));\n }\n }, [segmentations, setIsMinimized]);\n\n useEffect(() => {\n // ~~ Subscription\n const added = segmentationService.EVENTS.SEGMENTATION_ADDED;\n const updated = segmentationService.EVENTS.SEGMENTATION_UPDATED;\n const removed = segmentationService.EVENTS.SEGMENTATION_REMOVED;\n const subscriptions = [];\n\n [added, updated, removed].forEach(evt => {\n const { unsubscribe } = segmentationService.subscribe(evt, () => {\n const segmentations = segmentationService.getSegmentations();\n setSegmentations(segmentations);\n setSegmentationConfiguration(segmentationService.getConfiguration());\n });\n subscriptions.push(unsubscribe);\n });\n\n return () => {\n subscriptions.forEach(unsub => {\n unsub();\n });\n };\n }, []);\n\n const onSegmentationClick = (segmentationId: string) => {\n segmentationService.setActiveSegmentationForToolGroup(segmentationId);\n };\n\n const onSegmentationDelete = (segmentationId: string) => {\n segmentationService.remove(segmentationId);\n };\n\n const getToolGroupIds = segmentationId => {\n const toolGroupIds = segmentationService.getToolGroupIdsWithSegmentation(\n segmentationId\n );\n\n return toolGroupIds;\n };\n\n const onSegmentClick = (segmentationId, segmentIndex) => {\n segmentationService.setActiveSegmentForSegmentation(\n segmentationId,\n segmentIndex\n );\n\n const toolGroupIds = getToolGroupIds(segmentationId);\n\n toolGroupIds.forEach(toolGroupId => {\n // const toolGroupId =\n segmentationService.setActiveSegmentationForToolGroup(\n segmentationId,\n toolGroupId\n );\n segmentationService.jumpToSegmentCenter(\n segmentationId,\n segmentIndex,\n toolGroupId\n );\n });\n };\n\n const onSegmentEdit = (segmentationId, segmentIndex) => {\n const segmentation = segmentationService.getSegmentation(segmentationId);\n\n const segment = segmentation.segments[segmentIndex];\n const { label } = segment;\n\n callInputDialog(uiDialogService, label, (label, actionId) => {\n if (label === '') {\n return;\n }\n\n segmentationService.setSegmentLabelForSegmentation(\n segmentationId,\n segmentIndex,\n label\n );\n });\n };\n\n const onSegmentationEdit = segmentationId => {\n const segmentation = segmentationService.getSegmentation(segmentationId);\n const { label } = segmentation;\n\n callInputDialog(uiDialogService, label, (label, actionId) => {\n if (label === '') {\n return;\n }\n\n segmentationService.addOrUpdateSegmentation(\n {\n id: segmentationId,\n label,\n },\n false, // suppress event\n true // notYetUpdatedAtSource\n );\n });\n };\n\n const onSegmentColorClick = (segmentationId, segmentIndex) => {\n // Todo: Implement color picker later\n return;\n };\n\n const onSegmentDelete = (segmentationId, segmentIndex) => {\n // segmentationService.removeSegmentFromSegmentation(\n // segmentationId,\n // segmentIndex\n // );\n console.warn('not implemented yet');\n };\n\n const onToggleSegmentVisibility = (segmentationId, segmentIndex) => {\n const segmentation = segmentationService.getSegmentation(segmentationId);\n const segmentInfo = segmentation.segments[segmentIndex];\n const isVisible = !segmentInfo.isVisible;\n const toolGroupIds = getToolGroupIds(segmentationId);\n\n // Todo: right now we apply the visibility to all tool groups\n toolGroupIds.forEach(toolGroupId => {\n segmentationService.setSegmentVisibility(\n segmentationId,\n segmentIndex,\n isVisible,\n toolGroupId\n );\n });\n };\n\n const onToggleSegmentationVisibility = segmentationId => {\n segmentationService.toggleSegmentationVisibility(segmentationId);\n };\n\n const _setSegmentationConfiguration = useCallback(\n (segmentationId, key, value) => {\n segmentationService.setConfiguration({\n segmentationId,\n [key]: value,\n });\n },\n [segmentationService]\n );\n\n return (\n <div className=\"flex flex-col flex-auto min-h-0 justify-between mt-1\">\n {/* show segmentation table */}\n {segmentations?.length ? (\n <SegmentationGroupTable\n title={t('Segmentations')}\n showAddSegmentation={false}\n segmentations={segmentations}\n isMinimized={isMinimized}\n activeSegmentationId={selectedSegmentationId || ''}\n onSegmentationClick={onSegmentationClick}\n onSegmentationDelete={onSegmentationDelete}\n onSegmentationEdit={onSegmentationEdit}\n onSegmentClick={onSegmentClick}\n onSegmentEdit={onSegmentEdit}\n onSegmentColorClick={onSegmentColorClick}\n onSegmentDelete={onSegmentDelete}\n onToggleSegmentVisibility={onToggleSegmentVisibility}\n onToggleSegmentationVisibility={onToggleSegmentationVisibility}\n onToggleMinimizeSegmentation={onToggleMinimizeSegmentation}\n segmentationConfig={{ initialConfig: segmentationConfiguration }}\n setRenderOutline={value =>\n _setSegmentationConfiguration(\n selectedSegmentationId,\n 'renderOutline',\n value\n )\n }\n setOutlineOpacityActive={value =>\n _setSegmentationConfiguration(\n selectedSegmentationId,\n 'outlineOpacity',\n value\n )\n }\n setRenderFill={value =>\n _setSegmentationConfiguration(\n selectedSegmentationId,\n 'renderFill',\n value\n )\n }\n setRenderInactiveSegmentations={value =>\n _setSegmentationConfiguration(\n selectedSegmentationId,\n 'renderInactiveSegmentations',\n value\n )\n }\n setOutlineWidthActive={value =>\n _setSegmentationConfiguration(\n selectedSegmentationId,\n 'outlineWidthActive',\n value\n )\n }\n setFillAlpha={value =>\n _setSegmentationConfiguration(\n selectedSegmentationId,\n 'fillAlpha',\n value\n )\n }\n setFillAlphaInactive={value =>\n _setSegmentationConfiguration(\n selectedSegmentationId,\n 'fillAlphaInactive',\n value\n )\n }\n />\n ) : null}\n </div>\n );\n}\n\nPanelSegmentation.propTypes = {\n commandsManager: PropTypes.shape({\n runCommand: PropTypes.func.isRequired,\n }),\n servicesManager: PropTypes.shape({\n services: PropTypes.shape({\n segmentationService: PropTypes.shape({\n getSegmentation: PropTypes.func.isRequired,\n getSegmentations: PropTypes.func.isRequired,\n toggleSegmentationVisibility: PropTypes.func.isRequired,\n subscribe: PropTypes.func.isRequired,\n EVENTS: PropTypes.object.isRequired,\n }).isRequired,\n }).isRequired,\n }).isRequired,\n};\n","import { Types } from '@ohif/core';\n\nconst segProtocol: Types.HangingProtocol.Protocol = {\n id: '@ohif/seg',\n // Don't store this hanging protocol as it applies to the currently active\n // display set by default\n // cacheId: null,\n hasUpdatedPriorsInformation: false,\n name: 'Segmentations',\n // Just apply this one when specifically listed\n protocolMatchingRules: [],\n toolGroupIds: ['default'],\n // -1 would be used to indicate active only, whereas other values are\n // the number of required priors referenced - so 0 means active with\n // 0 or more priors.\n numberOfPriorsReferenced: 0,\n // Default viewport is used to define the viewport when\n // additional viewports are added using the layout tool\n defaultViewport: {\n viewportOptions: {\n viewportType: 'stack',\n toolGroupId: 'default',\n allowUnmatchedView: true,\n },\n displaySets: [\n {\n id: 'segDisplaySetId',\n matchedDisplaySetsIndex: -1,\n },\n ],\n },\n displaySetSelectors: {\n segDisplaySetId: {\n seriesMatchingRules: [\n {\n attribute: 'Modality',\n constraint: {\n equals: 'SEG',\n },\n },\n ],\n },\n },\n stages: [\n {\n name: 'Segmentations',\n viewportStructure: {\n layoutType: 'grid',\n properties: {\n rows: 1,\n columns: 1,\n },\n },\n viewports: [\n {\n viewportOptions: { allowUnmatchedView: true },\n displaySets: [\n {\n id: 'segDisplaySetId',\n },\n ],\n },\n ],\n },\n ],\n};\n\nfunction getHangingProtocolModule() {\n return [\n {\n name: segProtocol.id,\n protocol: segProtocol,\n },\n ];\n}\n\nexport default getHangingProtocolModule;\nexport { segProtocol };\n","import { id } from './id';\nimport React from 'react';\n\nimport { Types } from '@ohif/core';\n\nimport getSopClassHandlerModule, {\n protocols,\n} from './getSopClassHandlerModule';\nimport PanelSegmentation from './panels/PanelSegmentation';\nimport getHangingProtocolModule from './getHangingProtocolModule';\n\nconst Component = React.lazy(() => {\n return import(\n /* webpackPrefetch: true */ './viewports/OHIFCornerstoneSEGViewport'\n );\n});\n\nconst OHIFCornerstoneSEGViewport = props => {\n return (\n <React.Suspense fallback={<div>Loading...</div>}>\n <Component {...props} />\n </React.Suspense>\n );\n};\n\n/**\n * You can remove any of the following modules if you don't need them.\n */\nconst extension = {\n /**\n * Only required property. Should be a unique value across all extensions.\n * You ID can be anything you want, but it should be unique.\n */\n id,\n\n /**\n * PanelModule should provide a list of panels that will be available in OHIF\n * for Modes to consume and render. Each panel is defined by a {name,\n * iconName, iconLabel, label, component} object. Example of a panel module\n * is the StudyBrowserPanel that is provided by the default extension in OHIF.\n */\n getPanelModule: ({\n servicesManager,\n commandsManager,\n extensionManager,\n }): Types.Panel[] => {\n const wrappedPanelSegmentation = () => {\n return (\n <PanelSegmentation\n commandsManager={commandsManager}\n servicesManager={servicesManager}\n extensionManager={extensionManager}\n />\n );\n };\n\n return [\n {\n name: 'panelSegmentation',\n iconName: 'tab-segmentation',\n iconLabel: 'Segmentation',\n label: 'Segmentation',\n component: wrappedPanelSegmentation,\n },\n ];\n },\n\n getViewportModule({ servicesManager, extensionManager }) {\n const ExtendedOHIFCornerstoneSEGViewport = props => {\n return (\n <OHIFCornerstoneSEGViewport\n servicesManager={servicesManager}\n extensionManager={extensionManager}\n {...props}\n />\n );\n };\n\n return [\n { name: 'dicom-seg', component: ExtendedOHIFCornerstoneSEGViewport },\n ];\n },\n /**\n * SopClassHandlerModule should provide a list of sop class handlers that will be\n * available in OHIF for Modes to consume and use to create displaySets from Series.\n * Each sop class handler is defined by a { name, sopClassUids, getDisplaySetsFromSeries}.\n * Examples include the default sop class handler provided by the default extension\n */\n getSopClassHandlerModule,\n getHangingProtocolModule,\n};\n\nexport default extension;\n\n// Export the protocols separately to allow for extending it at compile time\n// in other modules\nexport { protocols };\n"],"names":["root","factory","exports","module","require","define","amd","globalThis","__WEBPACK_EXTERNAL_MODULE__807__","__WEBPACK_EXTERNAL_MODULE__762__","__WEBPACK_EXTERNAL_MODULE__836__","__WEBPACK_EXTERNAL_MODULE__369__","deferred","installedChunks","ToolGroupService","customizationService","toolGroupId","tools","get","createToolGroupAndAddTools","async","_ref","segDisplaySet","viewportIndex","servicesManager","segmentationService","hangingProtocolService","viewportGridService","services","displaySetInstanceUID","referencedDisplaySetInstanceUID","segmentationId","createSegmentationForSEGDisplaySet","hydrateSegmentation","viewports","getState","updatedViewports","getViewportsRequireUpdate","forEach","viewport","index","shouldRenderSegmentation","displaySetInstanceUIDs","push","viewportOptions","initialImageOptions","preset","setDisplaySetsForViewports","RESPONSE","NO_NEVER","CANCEL","HYDRATE_SEG","uiViewportDialogService","Promise","resolve","reject","promptResult","message","actions","type","text","value","onSubmit","result","hide","show","onOutsideClick","_askHydrate","hydrateSEGDisplaySet","formatDate","utils","OHIFCornerstoneSEGViewport","props","children","displaySets","viewportLabel","extensionManager","t","useTranslation","displaySetService","toolGroupService","uiNotificationService","length","Error","viewportGrid","useViewportGrid","isToolGroupCreated","setToolGroupCreated","useState","selectedSegment","setSelectedSegment","isHydrated","setIsHydrated","segIsLoading","setSegIsLoading","isLoaded","element","setElement","processingProgress","setProcessingProgress","percentComplete","totalSegments","referencedDisplaySetRef","useRef","activeViewportIndex","referencedDisplaySet","getReferenceDisplaySet","referencedDisplaySetMetadata","image0","images","PatientID","PatientName","PatientSex","PatientAge","SliceThickness","StudyDate","SeriesDescription","SeriesInstanceUID","SeriesNumber","ManufacturerModelName","SpacingBetweenSlices","_getReferencedDisplaySetMetadata","current","displaySet","metadata","onElementEnabled","evt","detail","onElementDisabled","getCornerstoneViewport","useCallback","component","Component","getModuleEntry","React","_extends","viewportType","orientation","viewportId","onSegmentChange","direction","segmentation","getSegmentation","segments","numberOfSegments","Object","keys","newSelectedSegmentIndex","jumpToSegmentCenter","useEffect","promptHydrateSEG","then","unsubscribe","subscribe","EVENTS","SEGMENTATION_LOADING_COMPLETE","overlappingSegments","title","SEGMENT_LOADING_COMPLETE","numSegments","onDisplaySetsRemovedSubscription","DISPLAY_SETS_REMOVED","_ref2","activeViewport","includes","setDisplaySetsForViewport","toolGroup","getToolGroup","createSEGToolGroupAndAddTools","removeSegmentationRepresentationFromToolGroup","destroyToolGroup","childrenWithProps","map","child","key","onStatusClick","ViewportActionBar","onDoubleClick","stopPropagation","preventDefault","onArrowsClick","getStatusComponent","ToolTipMessage","StatusIcon","loadStr","Icon","name","StatusArea","className","onMouseUp","Tooltip","content","position","_getStatusComponent","studyData","label","useAltStyling","studyDate","seriesDescription","patientInformation","patientName","OHIF","Alphabetic","patientSex","patientAge","MRN","thickness","toFixed","spacing","undefined","scanner","LoadingIndicatorTotalPercent","totalNumbers","loadingText","propTypes","PropTypes","dataSource","customProps","defaultProps","getOwnPropertySymbols","hasOwnProperty","prototype","propIsEnumerable","propertyIsEnumerable","assign","test1","String","getOwnPropertyNames","test2","i","fromCharCode","n","join","test3","split","letter","err","shouldUseNative","target","source","from","symbols","to","val","TypeError","toObject","s","arguments","call","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","propName","componentName","location","propFullName","secret","getShim","isRequired","ReactPropTypes","array","bigint","bool","func","number","object","string","symbol","any","arrayOf","elementType","instanceOf","node","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes","l","p","Fragment","StrictMode","Profiler","q","r","Suspense","u","v","Symbol","for","w","x","iterator","z","a","b","c","encodeURIComponent","A","isMounted","enqueueForceUpdate","enqueueReplaceState","enqueueSetState","B","C","this","context","refs","updater","D","E","isReactComponent","setState","forceUpdate","F","constructor","isPureReactComponent","G","H","I","ref","__self","__source","J","e","d","k","h","g","f","Array","m","$$typeof","_owner","L","M","N","replace","escape","toString","O","isArray","K","y","next","done","P","Q","_status","_result","default","R","S","T","ReactCurrentDispatcher","ReactCurrentBatchConfig","transition","ReactCurrentOwner","IsSomeRendererActing","Children","apply","count","toArray","only","PureComponent","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","cloneElement","createContext","_calculateChangedBits","_currentValue","_currentValue2","_threadCount","Provider","Consumer","_context","createElement","createFactory","bind","createRef","forwardRef","render","isValidElement","lazy","_payload","_init","memo","compare","useContext","useDebugValue","useImperativeHandle","useLayoutEffect","useMemo","useReducer","version","create","console","warn","_console","_len","args","_key","concat","alreadyWarned","_len2","_key2","Date","loadNamespaces","i18n","ns","cb","isInitialized","on","initialized","setTimeout","off","obj","_toPropertyKey","arg","input","hint","prim","toPrimitive","res","Number","defineProperty","enumerable","configurable","writable","matchHtmlEntity","htmlEntities","unescapeHtmlEntity","defaultOptions","bindI18n","bindI18nStore","transEmptyNodeValue","transSupportBasicHtmlNodes","transWrapTextNodes","transKeepBasicHtmlNodesFor","useSuspense","unescape","i18nInstance","_defineProperties","descriptor","ReportNamespaces","instance","Constructor","_classCallCheck","usedNamespaces","protoProps","staticProps","namespaces","_this","_arrayLikeToArray","arr","len","arr2","_i","_s","_e","_x","_r","_arr","_n","_d","o","minLen","slice","test","enumerableOnly","filter","sym","getOwnPropertyDescriptor","getOwnPropertyDescriptors","defineProperties","usePrevious","ignore","i18nFromProps","i18nFromContext","defaultNSFromContext","defaultNS","reportNamespaces","notReadyT","optsOrDefaultValue","defaultValue","retNotReady","ready","options","react","wait","i18nOptions","keyPrefix","addUsedNamespaces","initializedStoreOnce","every","languages","ignoreJSONStructure","hasLoadedNamespace","precheck","loadNotPending","indexOf","backendConnector","backend","isLanguageChangingTo","lng","fallbackLng","lastLng","toLowerCase","loadState","state","hasResourceBundle","resources","partialBundledLanguages","oldI18nextHasLoadedNamespace","getT","getFixedT","nsMode","_useState2","setT","joinedNS","previousJoinedNS","boundReset","store","isInitial","ret","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","j","splice","chunkId","getter","__esModule","definition","prop","toStringTag","link","document","nc","setAttribute","rel","as","href","head","appendChild","id","packageJson","SOPClassHandlerId","DicomMessage","DicomMetaDictionary","dcmjs","sopClassUids","loadPromises","_getDisplaySetsFromSeries","instances","StudyInstanceUID","SOPInstanceUID","SeriesDate","SOPClassUID","wadoRoot","wadoUri","wadoUriRoot","Modality","loading","isReconstructable","referencedImages","referencedSeriesInstanceUID","isDerivedDisplaySet","isOverlayDisplaySet","referencedSeriesSequence","ReferencedSeriesSequence","referencedSeries","ReferencedInstanceSequence","referencedDisplaySets","getDisplaySetsForSeries","referencedVolumeURI","referencedVolumeId","load","headers","_segmentationExists","utilityModule","dicomLoaderService","segArrayBuffer","findDicomDataPromise","dicomData","readFile","dataset","naturalizeDataset","dict","_meta","namifyDataset","meta","SegmentSequence","segment","cielab","RecommendedDisplayCIELabValue","rgba","Math","round","segmentNumber","SegmentNumber","color","functionalGroups","offset","size","pixelData","SegmentLabel","PerFrameFunctionalGroupsSequence","functionalGroup","SegmentIdentificationSequence","ReferencedSegmentNumber","frameSize","ceil","Rows","Columns","nextOffset","segmentKey","numberOfFrames","packedSegment","PixelData","geometry","perFrame","pixelMeasures","SharedFunctionalGroupsSequence","PixelMeasuresSequence","planeOrientation","PlaneOrientationSequence","planePosition","PlanePositionSequence","spacingBetweenSlices","log","PixelSpacing","dimensions","ImageOrientationPatient","columnStepToPatient","rowStepToPatient","planeNormal","vtkMath","firstPosition","ImagePositionPatient","lastPosition","sliceStep","origin","geometryFromFunctionalGroups","_getPixelData","_getSegments","_loadSegments","suppressEvents","catch","error","_load","getDisplaySetsFromSeries","uiDialogService","callback","dialogId","onSubmitHandler","action","dismiss","centralize","isDraggable","showOverlay","Dialog","contentProps","noCloseButton","onClose","body","setValue","Input","autoFocus","containerClassName","onChange","event","persist","onKeyPress","PanelSegmentation","commandsManager","selectedSegmentationId","setSelectedSegmentationId","segmentationConfiguration","setSegmentationConfiguration","getConfiguration","segmentations","setSegmentations","getSegmentations","isMinimized","setIsMinimized","onToggleMinimizeSegmentation","prevState","lastSegmentationId","added","SEGMENTATION_ADDED","updated","SEGMENTATION_UPDATED","removed","SEGMENTATION_REMOVED","subscriptions","unsub","getToolGroupIds","getToolGroupIdsWithSegmentation","_setSegmentationConfiguration","setConfiguration","SegmentationGroupTable","showAddSegmentation","activeSegmentationId","onSegmentationClick","setActiveSegmentationForToolGroup","onSegmentationDelete","remove","onSegmentationEdit","callInputDialog","actionId","addOrUpdateSegmentation","onSegmentClick","segmentIndex","setActiveSegmentForSegmentation","onSegmentEdit","setSegmentLabelForSegmentation","onSegmentColorClick","onSegmentDelete","onToggleSegmentVisibility","isVisible","setSegmentVisibility","onToggleSegmentationVisibility","toggleSegmentationVisibility","segmentationConfig","initialConfig","setRenderOutline","setOutlineOpacityActive","setRenderFill","setRenderInactiveSegmentations","setOutlineWidthActive","setFillAlpha","setFillAlphaInactive","runCommand","segProtocol","hasUpdatedPriorsInformation","protocolMatchingRules","toolGroupIds","numberOfPriorsReferenced","defaultViewport","allowUnmatchedView","matchedDisplaySetsIndex","displaySetSelectors","segDisplaySetId","seriesMatchingRules","attribute","constraint","equals","stages","viewportStructure","layoutType","properties","rows","columns","protocol","fallback","getPanelModule","iconName","iconLabel","wrappedPanelSegmentation","getViewportModule","getSopClassHandlerModule","getHangingProtocolModule"],"sourceRoot":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ohif/extension-cornerstone-dicom-seg",
|
|
3
|
+
"version": "3.0.0",
|
|
4
|
+
"description": "DICOM SEG read workflow",
|
|
5
|
+
"author": "OHIF",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"main": "dist/ohif-extension-cornerstone-dicom-seg.umd.js",
|
|
8
|
+
"module": "src/index.tsx",
|
|
9
|
+
"files": [
|
|
10
|
+
"dist/**",
|
|
11
|
+
"public/**",
|
|
12
|
+
"README.md"
|
|
13
|
+
],
|
|
14
|
+
"repository": "OHIF/Viewers",
|
|
15
|
+
"keywords": [
|
|
16
|
+
"ohif-extension"
|
|
17
|
+
],
|
|
18
|
+
"publishConfig": {
|
|
19
|
+
"access": "public"
|
|
20
|
+
},
|
|
21
|
+
"engines": {
|
|
22
|
+
"node": ">=14",
|
|
23
|
+
"npm": ">=6",
|
|
24
|
+
"yarn": ">=1.18.0"
|
|
25
|
+
},
|
|
26
|
+
"scripts": {
|
|
27
|
+
"dev": "cross-env NODE_ENV=development webpack --config .webpack/webpack.dev.js --watch --output-pathinfo",
|
|
28
|
+
"dev:dicom-seg": "yarn run dev",
|
|
29
|
+
"build": "cross-env NODE_ENV=production webpack --config .webpack/webpack.prod.js",
|
|
30
|
+
"build:package": "yarn run build",
|
|
31
|
+
"start": "yarn run dev"
|
|
32
|
+
},
|
|
33
|
+
"peerDependencies": {
|
|
34
|
+
"@ohif/core": "^3.0.0",
|
|
35
|
+
"@ohif/extension-default": "^3.0.0",
|
|
36
|
+
"@ohif/extension-cornerstone": "^3.0.0",
|
|
37
|
+
"@ohif/i18n": "^1.0.0",
|
|
38
|
+
"prop-types": "^15.6.2",
|
|
39
|
+
"react": "^17.0.2",
|
|
40
|
+
"react-dom": "^17.0.2",
|
|
41
|
+
"react-i18next": "^12.2.2",
|
|
42
|
+
"react-router": "^6.8.1",
|
|
43
|
+
"react-router-dom": "^6.8.1",
|
|
44
|
+
"webpack": "^5.50.0",
|
|
45
|
+
"webpack-merge": "^5.7.3"
|
|
46
|
+
},
|
|
47
|
+
"dependencies": {
|
|
48
|
+
"@babel/runtime": "^7.20.13",
|
|
49
|
+
"react-color": "^2.19.3"
|
|
50
|
+
},
|
|
51
|
+
"devDependencies": {
|
|
52
|
+
"@babel/core": "^7.21.4",
|
|
53
|
+
"@babel/plugin-proposal-class-properties": "^7.5.0",
|
|
54
|
+
"@babel/plugin-proposal-object-rest-spread": "^7.5.5",
|
|
55
|
+
"@babel/plugin-syntax-dynamic-import": "^7.2.0",
|
|
56
|
+
"@babel/plugin-transform-arrow-functions": "^7.2.0",
|
|
57
|
+
"@babel/plugin-transform-regenerator": "^7.16.7",
|
|
58
|
+
"@babel/plugin-transform-runtime": "^7.17.0",
|
|
59
|
+
"babel-plugin-inline-react-svg": "^2.0.1",
|
|
60
|
+
"@babel/preset-env": "^7.5.0",
|
|
61
|
+
"@babel/preset-react": "^7.16.7",
|
|
62
|
+
"babel-eslint": "^8.0.3",
|
|
63
|
+
"babel-loader": "^8.0.0-beta.4",
|
|
64
|
+
"clean-webpack-plugin": "^4.0.0",
|
|
65
|
+
"copy-webpack-plugin": "^11.0.0",
|
|
66
|
+
"cross-env": "^7.0.3",
|
|
67
|
+
"dotenv": "^14.1.0",
|
|
68
|
+
"eslint": "^5.0.1",
|
|
69
|
+
"eslint-loader": "^2.0.0",
|
|
70
|
+
"webpack": "^5.50.0",
|
|
71
|
+
"webpack-merge": "^5.7.3",
|
|
72
|
+
"webpack-cli": "^4.7.2"
|
|
73
|
+
}
|
|
74
|
+
}
|