/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.24/esri/copyright.txt for details. */ import{_ as e}from"../chunks/tslib.es6.js";import"../intl.js";import t from"../core/Collection.js";import{handlesGroup as o}from"../core/handleUtils.js";import{removeMaybe as i,destroyMaybe as s,isNone as n,isSome as l}from"../core/maybe.js";import{when as r,watch as a}from"../core/reactiveUtils.js";import{aliasOf as c}from"../core/accessorSupport/decorators/aliasOf.js";import"../core/arrayUtils.js";import"../core/has.js";import{cast as p}from"../core/accessorSupport/decorators/cast.js";import{property as d}from"../core/accessorSupport/decorators/property.js";import{subclass as u}from"../core/accessorSupport/decorators/subclass.js";import h from"../views/interactive/sketch/SketchLabelOptions.js";import v from"../views/interactive/sketch/SketchTooltipOptions.js";import g from"../views/interactive/snapping/SnappingOptions.js";import m from"./Widget.js";import _ from"./Sketch/SketchViewModel.js";import b from"./support/SelectionToolbar.js";import f from"./support/SnappingControls.js";import{isRTL as w}from"./support/widgetUtils.js";import{messageBundle as y}from"./support/decorators/messageBundle.js";import{vmEvent as C}from"./support/decorators/vmEvent.js";import{tsx as T}from"./support/jsxFactory.js";import{substitute as M}from"../intl/substitute.js";const k={base:"esri-sketch",verticalLayout:"esri-sketch--vertical",panel:"esri-sketch__panel",infoPanel:"esri-sketch__info-panel",section:"esri-sketch__section",toolSection:"esri-sketch__tool-section",infoSection:"esri-sketch__info-section",infoCountSection:"esri-sketch__info-count-section",menuContainer:"esri-sketch__menu-container",menuHeader:"esri-sketch__menu-header",menuTitle:"esri-sketch__menu-title",featureCountBadge:"esri-sketch__feature-count-badge",featureCountText:"esri-sketch__feature-count-text",featureCountNumber:"esri-sketch__feature-count-number",actionToggle:"esri-sketch__action-toggle",actionToggleOn:"esri-sketch__action-toggle--on",actionTitle:"esri-sketch__item-action-title",actionIcon:"esri-sketch__item-action-icon",disabled:"esri-disabled",esriWidget:"esri-widget",rotating:"esri-rotating",widgetIcon:"esri-icon-edit"},S={createTools:{point:!0,polyline:!0,polygon:!0,rectangle:!0,circle:!0},selectionTools:{"rectangle-selection":!0,"lasso-selection":!0},undoRedoMenu:!0,settingsMenu:!0,snappingControls:!0,snappingControlsElements:{header:!1,enabledToggle:!0,selfEnabledToggle:!0,featureEnabledToggle:!0,layerList:!0}};let O=class extends m{constructor(e,o){super(e,o),this._activeCreateOptions=null,this._defaultViewModel=null,this._menuOpen=!1,this._selectionToolbar=null,this._selectionHandlesGroup=null,this._snappingControls=null,this._viewModelHandlesGroup=null,this.availableCreateTools=["point","polyline","polygon","rectangle","circle"],this.createGraphic=null,this.creationMode="continuous",this.defaultCreateOptions=null,this.defaultUpdateOptions=null,this.iconClass=k.widgetIcon,this.label=void 0,this.labelOptions=new h,this.layer=null,this.layout="horizontal",this.messages=null,this.snappingOptions=new g,this.tooltipOptions=new v,this.updateGraphics=new t,this.view=null,this.visibleElements={...S},this._activateCreateTool=this._activateCreateTool.bind(this),e?.viewModel||(this._defaultViewModel=new _,this.viewModel=this._defaultViewModel)}initialize(){const{layer:e,view:t}=this,i=new b({view:"2d"===t?.type?t:null,layers:e?[e]:null});this._selectionHandlesGroup=o([r((()=>i.activeToolInfo),(()=>this.viewModel.cancel())),i.on("complete",(e=>this._onSelectionOperationComplete(e)))]),this._selectionToolbar=i,this._setUpSnappingControls()}loadDependencies(){return Promise.all([import("@esri/calcite-components/dist/components/calcite-action.js"),import("@esri/calcite-components/dist/components/calcite-icon.js")])}destroy(){this._selectionToolbar.destroy(),this._cleanupViewModel(),this._selectionHandlesGroup=i(this._selectionHandlesGroup),this._snappingControls=s(this._snappingControls)}get activeTool(){const e=this._selectionToolbar.activeToolInfo;if(e)switch(e.toolName){case"lasso":return"lasso-selection";case"rectangle":return"rectangle-selection";case"default":return"custom-selection"}return this.viewModel.activeTool}get state(){return this._selectionToolbar.activeToolInfo?"active":this.viewModel.state}set viewModel(e){e!==this._get("viewModel")&&((n(this._defaultViewModel)||this._defaultViewModel!==e)&&this._cleanupViewModel(),this._set("viewModel",e),e&&(this._viewModelHandlesGroup=o([e.on("create",(e=>{this.scheduleRender(),this._onCreateOperation(e)})),e.on("update",(()=>this.scheduleRender())),e.on("delete",(e=>this.emit("delete",e))),e.on("undo",(()=>this.scheduleRender())),e.on("redo",(()=>this.scheduleRender())),a((()=>e.layer),(e=>{this._selectionToolbar.layers=e?[e]:null})),a((()=>e.view),(e=>{this._selectionToolbar.view="2d"===e?.type?e:null,this._setUpSnappingControls()})),a((()=>e.state),(()=>this.notifyChange("state")))])))}castVisibleElements(e){const t={...S,...e,createTools:{...S.createTools,...e?.createTools},selectionTools:{...S.selectionTools,...e?.selectionTools},snappingControlsElements:{...S.snappingControlsElements,...e?.snappingControlsElements}};return l(this._snappingControls)&&(this._snappingControls.visibleElements=t.snappingControlsElements),t}create(e,t){this._activeCreateOptions=t||null,this.viewModel.create(e,t)}update(e,t){return this.viewModel.update(e,t)}complete(){}cancel(){this._selectionToolbar.cancel(),this.viewModel.cancel()}undo(){this.viewModel.undo(),this.view?.focus()}redo(){this.viewModel.redo(),this.view?.focus()}delete(){}render(){const{label:e,layout:t,viewModel:{state:o}}=this;return T("div",{"aria-label":e,class:this.classes(k.base,k.esriWidget,{[k.disabled]:"disabled"===o,[k.verticalLayout]:"vertical"===t})},T("div",{role:"toolbar",class:k.panel},this.renderTopPanelContents()),T("div",{class:this.classes(k.panel,k.infoPanel)},this.renderInfoPanelContents()))}renderTopPanelContents(){const e=this.classes(k.section,k.toolSection),{availableCreateTools:t,visibleElements:o}=this;return[T("div",{role:"menu",key:"selection-button-container",class:e},this.renderDefaultSelectionButton(),this.renderSelectionToolbar()),t&&t.length?T("div",{role:"menu",class:e},this.renderDrawButtons()):null,o.undoRedoMenu?T("div",{role:"menu",key:"undo-redo-menu-button-container",class:e},this.renderUndoRedoMenuButtons()):null,o.settingsMenu?T("div",{key:"settings-menu-button-container",class:k.section},this.renderSettingsMenuButton()):null]}renderInfoPanelContents(){return this._menuOpen?this.renderSettingsMenu():this.updateGraphics.length?[T("div",{class:this.classes(k.section,k.infoSection,k.infoCountSection),key:"feature-count-container"},this.renderFeatureCount()),T("div",{class:this.classes(k.section,k.infoSection),key:"delete-button-container"},this.renderDeleteButton())]:void 0}renderSettingsMenu(){const{settings:e}=this.messages;return[T("div",{role:"menu",class:k.menuContainer,key:"settings-menu-container"},T("header",{class:k.menuHeader,key:"settings-menu-header"},T("span",{class:k.menuTitle},e)),this.renderSnappingControls())]}renderSnappingControls(){const{snappingControls:e}=this.visibleElements;if(l(this._snappingControls)&&e)return this._snappingControls.render()}renderFeatureCount(){const{layout:e,messages:t,updateGraphics:{length:o}}=this,i=M(1===o?t.featureCount:t.featuresCount,{count:o});return T("div",{class:k.featureCountBadge,"aria-label":i},T("span",{class:k.featureCountNumber},"vertical"===e?o:i))}renderDeleteButton(){const e=this.messages.deleteFeature;return T("calcite-action",{bind:this,label:e,onclick:this.delete,scale:"s",text:e,title:e},T("calcite-icon",{scale:"s",icon:"trash"}))}renderDefaultSelectionButton(){if(!this.viewModel.updateOnGraphicClick)return;const e=this.messages.selectFeature;return T("calcite-action",{active:"ready"===this.state,bind:this,label:e,onclick:this._activateDefaultSelectTool,scale:"s",text:e,title:e},T("calcite-icon",{scale:"s",icon:"cursor"}))}renderSelectionToolbar(){if("2d"!==this.view?.type)return;const e=this.visibleElements.selectionTools;return this._selectionToolbar.visibleElements={lassoTool:!!e["lasso-selection"],rectangleTool:!!e["rectangle-selection"]},this._selectionToolbar.render()}renderDrawButtons(){const e=this.visibleElements.createTools;return this.availableCreateTools.map((t=>"point"===t&&e.point?this.renderPointButton():"polyline"===t&&e.polyline?this.renderPolylineButton():"polygon"===t&&e.polygon?this.renderPolygonButton():"rectangle"===t&&e.rectangle?this.renderRectangleButton():"circle"===t&&e.circle?this.renderCircleButton():void 0))}renderPointButton(){const e="point",t=this.messages.drawPoint;return T("calcite-action",{active:this.activeTool===e,bind:this,label:t,onclick:()=>this._activateCreateTool(e),scale:"s",text:t,title:t},T("calcite-icon",{scale:"s",icon:"pin"}))}renderPolygonButton(){const e="polygon",t=this.messages.drawPolygon;return T("calcite-action",{active:this.activeTool===e,bind:this,label:t,onclick:()=>this._activateCreateTool(e),scale:"s",text:t,title:t},T("calcite-icon",{scale:"s",icon:"polygon"}))}renderPolylineButton(){const e="polyline",t=this.messages.drawPolyline;return T("calcite-action",{active:this.activeTool===e,bind:this,label:t,onclick:()=>this._activateCreateTool(e),scale:"s",text:t,title:t},T("calcite-icon",{scale:"s",icon:"line"}))}renderCircleButton(){const e="circle",t=this.messages.drawCircle;return T("calcite-action",{active:this.activeTool===e,bind:this,label:t,onclick:()=>this._activateCreateTool(e),scale:"s",text:t,title:t},T("calcite-icon",{scale:"s",icon:"circle"}))}renderRectangleButton(){const e="rectangle",t=this.messages.drawRectangle;return T("calcite-action",{active:this.activeTool===e,bind:this,label:t,onclick:()=>this._activateCreateTool(e),scale:"s",text:t,title:t},T("calcite-icon",{scale:"s",icon:"rectangle"}))}renderUndoRedoMenuButtons(){return[this.renderUndoButton(),this.renderRedoButton()]}renderUndoButton(){const e=this.messages.undo;return T("calcite-action",{disabled:!this.viewModel.canUndo(),bind:this,label:e,onclick:this.undo,scale:"s",text:e,title:e},T("calcite-icon",{scale:"s",icon:w(this.container)?"redo":"undo"}))}renderRedoButton(){const e=this.messages.redo;return T("calcite-action",{disabled:!this.viewModel.canRedo(),bind:this,label:e,onclick:this.redo,scale:"s",text:e,title:e},T("calcite-icon",{scale:"s",icon:w(this.container)?"undo":"redo"}))}renderSettingsMenuButton(){const e=this.messages.settings;return T("calcite-action",{active:this._menuOpen,bind:this,label:e,onclick:this._toggleMenu,scale:"s",text:e,title:e},T("calcite-icon",{scale:"s",icon:"gear"}))}_activateCreateTool(e){this.activeTool!==e?(this._selectionToolbar.cancel(),this.create(e)):this.cancel()}_onCreateOperation(e){if("complete"!==e.state)return;const{creationMode:t}=this,{type:o}=e;if("create"===o){const{tool:o,graphic:i}=e,s=this._activeCreateOptions;this._activeCreateOptions=null,"continuous"===t?this.create(o,s):"update"===t&&this.update([i])}}_toggleMenu(){this._menuOpen=!this._menuOpen,this.scheduleRender()}_onSelectionOperationComplete(e){const{viewModel:{defaultUpdateOptions:t}}=this,{selection:o}=e;if(!e.aborted&&o.length){const e=t.tool,i=o.length>1&&"reshape"===e?"transform":e;this.update(o,{...t,tool:i})}this.notifyChange("state")}_activateDefaultSelectTool(){this.cancel(),this.view?.focus()}_cleanupViewModel(){this._defaultViewModel=s(this._defaultViewModel),this._viewModelHandlesGroup=i(this._viewModelHandlesGroup)}_setUpSnappingControls(){const{snappingOptions:e,view:t}=this;if(this._snappingControls=s(this._snappingControls),!e||!t)return;const o=new f({snappingOptions:e,view:t,visibleElements:this.visibleElements.snappingControlsElements});this._snappingControls=o}};e([d()],O.prototype,"activeTool",null),e([d({cast:e=>{if(!e||!e.length)return null;const t=new Set(["point","polyline","polygon","rectangle","circle"]);return e.filter((e=>t.has(e)))}})],O.prototype,"availableCreateTools",void 0),e([c("viewModel.createGraphic")],O.prototype,"createGraphic",void 0),e([d()],O.prototype,"creationMode",void 0),e([c("viewModel.defaultCreateOptions")],O.prototype,"defaultCreateOptions",void 0),e([c("viewModel.defaultUpdateOptions")],O.prototype,"defaultUpdateOptions",void 0),e([d()],O.prototype,"iconClass",void 0),e([d({aliasOf:{source:"messages.widgetLabel",overridable:!0}})],O.prototype,"label",void 0),e([c("viewModel.labelOptions")],O.prototype,"labelOptions",void 0),e([c("viewModel.layer")],O.prototype,"layer",void 0),e([d({type:["horizontal","vertical"]})],O.prototype,"layout",void 0),e([d(),y("esri/widgets/Sketch/t9n/Sketch")],O.prototype,"messages",void 0),e([c("viewModel.snappingOptions")],O.prototype,"snappingOptions",void 0),e([d()],O.prototype,"state",null),e([c("viewModel.tooltipOptions")],O.prototype,"tooltipOptions",void 0),e([c("viewModel.updateGraphics")],O.prototype,"updateGraphics",void 0),e([c("viewModel.view")],O.prototype,"view",void 0),e([d(),C(["create","update","undo","redo"])],O.prototype,"viewModel",null),e([d()],O.prototype,"visibleElements",void 0),e([p("visibleElements")],O.prototype,"castVisibleElements",null),e([c("viewModel.complete")],O.prototype,"complete",null),e([c("viewModel.delete")],O.prototype,"delete",null),O=e([u("esri.widgets.Sketch")],O);const j=O;export{j as default};