/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.24/esri/copyright.txt for details. */ import{_ as i}from"../../chunks/tslib.es6.js";import t from"../../core/Accessor.js";import e from"../../core/Collection.js";import{typeCast as s}from"../../core/compilerUtils.js";import r from"../../core/Handles.js";import{watch as o,initial as l,on as n}from"../../core/reactiveUtils.js";import{property as a}from"../../core/accessorSupport/decorators/property.js";import"../../core/arrayUtils.js";import"../../core/has.js";import"../../core/accessorSupport/ensureType.js";import{subclass as p}from"../../core/accessorSupport/decorators/subclass.js";import c from"../../layers/Layer.js";import h from"../../views/layers/support/ClipRect.js";const y=e.ofType(c);function d(i,t){const e=10**t;return Math.round(i*e)/e}const g={left:0,right:0,top:0,bottom:0};let m=class extends t{constructor(i){super(i),this._handles=new r,this._leadingClips=new Map,this._trailingClips=new Map,this.direction="horizontal",this.leadingLayers=new y,this.max=100,this.min=0,this.precision=4,this.step=.5,this.stepMultiplier=10,this.trailingLayers=new y,this.view=null}initialize(){this._handles.add([o((()=>[this.view,this.view?.ready,this.position,this.direction]),(()=>this._clipLayers()),l),n((()=>this.leadingLayers),"change",(()=>this._clipLeadingLayers())),n((()=>this.trailingLayers),"change",(()=>this._clipTrailingLayers()))])}destroy(){this._removeExistingClips(),this._handles.destroy(),this._handles=null}get position(){return 25}set position(i){const{precision:t,min:e,max:s}=this;this._set("position",d(Math.max(Math.min(i,s),e),t))}get state(){const{view:i}=this;return i&&i.ready?"ready":"disabled"}_clipLayers(){this._clipLeadingLayers(),this._clipTrailingLayers()}_clipLeadingLayers(){this._removeClips("leading");const{leadingLayers:i}=this;i.forEach((i=>this._clipLayer({layer:i,type:"leading"})))}_clipTrailingLayers(){this._removeClips("trailing");const{trailingLayers:i}=this;i.forEach((i=>this._clipLayer({layer:i,type:"trailing"})))}async _getLayerView(i){const{view:t}=this;if(!i||!t)return null;const e=await s(t)().whenLayerView(i);return"clips"in e?e:null}_getVerticalClipRect(i){const{position:t}=this;return"leading"===i?new h({...g,bottom:100-t+"%"}):"trailing"===i?new h({...g,top:`${t}%`}):null}_getHorizontalClipRect(i){const{position:t}=this;return"leading"===i?new h({...g,right:100-t+"%"}):"trailing"===i?new h({...g,left:`${t}%`}):null}_getClipRect(i){const{direction:t}=this;return"vertical"===t?this._getVerticalClipRect(i):"horizontal"===t?this._getHorizontalClipRect(i):null}async _clipLayer(i){const{_leadingClips:t,_trailingClips:e}=this,{layer:s,type:r}=i,o="trailing"===r?e:"leading"===r?t:null,l=await this._getLayerView(s);if(!(l&&"clips"in l&&o&&l.hasOwnProperty("clips")))return;const n=o.get(l);n&&l.clips.remove(n);const a=this._getClipRect(r);a&&(o.set(l,a),l.clips.add(a))}_removeClips(i){const{_leadingClips:t,_trailingClips:e}=this,s="trailing"===i?e:"leading"===i?t:null;s&&(s.forEach(((i,t)=>{t&&t.hasOwnProperty("clips")&&t.clips.remove(i)})),s.clear())}_removeExistingClips(){this._removeClips("leading"),this._removeClips("trailing")}};i([a()],m.prototype,"direction",void 0),i([a({type:y})],m.prototype,"leadingLayers",void 0),i([a({readOnly:!0})],m.prototype,"max",void 0),i([a({readOnly:!0})],m.prototype,"min",void 0),i([a()],m.prototype,"position",null),i([a()],m.prototype,"precision",void 0),i([a({readOnly:!0})],m.prototype,"state",null),i([a()],m.prototype,"step",void 0),i([a()],m.prototype,"stepMultiplier",void 0),i([a({type:y})],m.prototype,"trailingLayers",void 0),i([a()],m.prototype,"view",void 0),m=i([p("esri.widgets.Swipe.SwipeViewModel")],m);const _=m;export{_ as default};