// All material copyright Esri, All Rights Reserved, unless otherwise specified. // See https://js.arcgis.com/4.30/esri/copyright.txt for details. //>>built define("require ../chunks/tslib.es6 ../core/promiseUtils ../core/reactiveUtils ../core/accessorSupport/decorators/property ../core/has ../core/Logger ../core/RandomLCG ../core/accessorSupport/decorators/subclass ./Widget ./Measurement/MeasurementViewModel ./support/widgetUtils ./support/decorators/messageBundle ./support/jsxFactory".split(" "),function(n,d,t,q,f,b,y,z,u,v,r,A,w,x){const p=a=>Object.freeze(Object.defineProperty({__proto__:null,default:a},Symbol.toStringTag,{value:"Module"}));b=class extends v{constructor(a, e){super(a,e);this._widgets=new Map;this.messages=this.activeWidget=null;this.viewModel=new r}initialize(){this.activeWidget&&this.viewModel.set("activeViewModel",this.activeWidget.viewModel);this.view&&this.activeTool&&this._getActiveWidget().then(a=>{this._set("activeWidget",a)});this.addHandles([q.watch(()=>[this.view,this.activeTool],async()=>{this._set("activeWidget",await this._getActiveWidget())}),q.watch(()=>this.activeWidget,(a,e)=>{this.viewModel.set("activeViewModel",a?a.viewModel:null); e&&(e.visible=!1)}),q.watch(()=>[this.areaUnit,this.linearUnit,this.uiStrings],()=>this._updateSubWidgetProperties())])}destroy(){this._destroyWidgets()}get activeTool(){return this.viewModel.activeTool}set activeTool(a){this.viewModel.activeTool=a}get areaUnit(){return this.viewModel.areaUnit}set areaUnit(a){this.viewModel.areaUnit=a}get icon(){return"measure"}set icon(a){this._overrideIfSome("icon",a)}get label(){return this.messages?.widgetLabel??""}set label(a){this._overrideIfSome("label",a)}get linearUnit(){return this.viewModel.linearUnit}set linearUnit(a){this.viewModel.linearUnit= a}get view(){return this.viewModel.view}set view(a){this.viewModel.view=a}render(){var {activeWidget:a}=this;a=a&&!a.destroyed?a.render():null;return x.tsx("div",{class:"esri-measurement"},a)}clear(){this.activeTool=null;this._destroyWidgets()}startMeasurement(){const {activeViewModel:a}=this.viewModel;a&&t.ignoreAbortErrors(a.start())}async _createWidget(a){const {areaUnit:e,linearUnit:c,view:g}=this;if(!g)return null;switch(a){case "area":var {type:m}=g;switch(m){case "2d":return new (await new Promise((h, k)=>n(["./AreaMeasurement2D"],l=>h(p(l)),k))).default({view:g,unit:e,uiStrings:this._createUIStringsForWidget(a)});case "3d":return new (await new Promise((h,k)=>n(["./AreaMeasurement3D"],l=>h(p(l)),k))).default({view:g,unit:e,uiStrings:this._createUIStringsForWidget(a)});default:return null}case "distance":switch({type:m}=g,m){case "2d":return new (await new Promise((h,k)=>n(["./DistanceMeasurement2D"],l=>h(p(l)),k))).default({view:g,unit:c,uiStrings:this._createUIStringsForWidget(a)});default:return null}case "direct-line":switch({type:m}= g,m){case "3d":return new (await new Promise((h,k)=>n(["./DirectLineMeasurement3D"],l=>h(p(l)),k))).default({view:g,unit:c,uiStrings:this._createUIStringsForWidget(a)});default:return null}default:return null}}_destroyWidgets(){this._widgets.forEach(a=>a.destroy());this._widgets.clear()}async _getActiveWidget(){const {activeTool:a,view:e}=this;if(!e||!a)return null;let c=null;if(this._widgets.has(a))c=this._widgets.get(a),c.visible=!0;else{c=await this._createWidget(a);if(!c)return null;await c.viewModel.start(); this._widgets.set(a,c)}return c}_createUIStringsForWidget(a){if(this.uiStrings)return this.uiStrings[a+"-"+this.view?.type]}_updateSubWidgetProperties(){this._widgets.forEach((a,e)=>{const {areaUnit:c,linearUnit:g}=this;a.unit="esri.widgets.AreaMeasurement2D"===a?.declaredClass||"esri.widgets.AreaMeasurement3D"===a?.declaredClass?c:g;a.uiStrings=this._createUIStringsForWidget(e)})}};d.__decorate([f.property()],b.prototype,"activeTool",null);d.__decorate([f.property({readOnly:!0})],b.prototype,"activeWidget", void 0);d.__decorate([f.property()],b.prototype,"areaUnit",null);d.__decorate([f.property()],b.prototype,"icon",null);d.__decorate([f.property()],b.prototype,"label",null);d.__decorate([f.property()],b.prototype,"linearUnit",null);d.__decorate([f.property(),w.messageBundle("esri/widgets/Measurement/t9n/Measurement")],b.prototype,"messages",void 0);d.__decorate([f.property()],b.prototype,"uiStrings",void 0);d.__decorate([f.property()],b.prototype,"view",null);d.__decorate([f.property({type:r})],b.prototype, "viewModel",void 0);return b=d.__decorate([u.subclass("esri.widgets.Measurement")],b)});