/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.25/esri/copyright.txt for details. */ import{_ as e}from"../chunks/tslib.es6.js";import"../intl.js";import{closest as t}from"../core/domUtils.js";import{on as l,eventKey as i}from"../core/events.js";import{HandleOwnerMixin as s}from"../core/HandleOwner.js";import{watch as a,when as n,initial as c}from"../core/reactiveUtils.js";import{property as r}from"../core/accessorSupport/decorators/property.js";import"../core/arrayUtils.js";import{cast as o}from"../core/accessorSupport/decorators/cast.js";import{subclass as u}from"../core/accessorSupport/decorators/subclass.js";import d from"./Slider.js";import m from"./Widget.js";import{getScalePreviewSource as h,getScalePreviewSpriteBackgroundPosition as v}from"./ScaleRangeSlider/scalePreviewUtils.js";import p from"./ScaleRangeSlider/ScaleRanges.js";import S from"./ScaleRangeSlider/ScaleRangeSliderViewModel.js";import M from"./support/Popover.js";import{accessibleHandler as _}from"./support/decorators/accessibleHandler.js";import{messageBundle as g}from"./support/decorators/messageBundle.js";import{tsx as f}from"./support/jsxFactory.js";import{isRTL as b,storeNode as w}from"./support/widgetUtils.js";import{substitute as y}from"../intl/substitute.js";import{formatNumber as x}from"../intl/number.js";const I={base:"esri-scale-range-slider",scaleIndicator:"esri-scale-range-slider__scale-indicator",scaleIndicatorIcon:"esri-scale-range-slider__scale-indicator-icon",scaleIndicatorContainer:"esri-scale-range-slider__scale-indicator-container",scaleMenuContainer:"esri-scale-range-slider__scale-menu-container",scaleMenuToggle:"esri-scale-range-slider__scale-menu-toggle",scaleMenuToggleText:"esri-scale-range-slider__scale-menu-toggle-text",scaleMenuToggleIcon:"esri-scale-range-slider__scale-menu-toggle-icon",scaleMenuToggleActive:"esri-scale-range-slider__scale-menu-toggle--active",scaleMenu:"esri-scale-range-slider__scale-menu",scaleMenuList:"esri-scale-range-slider__scale-menu-list",scaleMenuListItem:"esri-scale-range-slider__scale-menu-item",scaleMenuListItemActive:"esri-scale-range-slider__scale-menu-item--active",scaleMenuScroller:"esri-scale-range-slider__scale-menu-scroller",scaleItemLabel:"esri-scale-range-slider__scale-item-label",scaleItemValue:"esri-scale-range-slider__scale-item-value",scaleItemValueEditable:"esri-scale-range-slider__scale-item-value--editable",scalePreview:"esri-scale-range-slider__scale-preview",scalePreviewThumbnail:"esri-scale-range-slider__scale-preview-thumbnail",slider:"esri-slider",expandIcon:"esri-icon-down",heading:"esri-widget__heading",hidden:"esri-hidden",input:"esri-input",button:"esri-button",disabled:"esri-disabled",widget:"esri-widget"},T={preview:!0,scaleMenus:{maxScaleMenu:!0,minScaleMenu:!0}},C={maximumFractionDigits:0},L=e=>`1:${x(e,C)}`,R=e=>{const t=/[^\d.\s]/g,l=e.replace(/.*\(/,"").replace(/\).*$/,"").replace(/.*:/,"").replace(t,"");return parseFloat(l)};let P=class extends(s(m)){constructor(e,s){super(e,s),this._activeMenu=null,this._activeMenuNode=null,this._activeMenuToggleNode=null,this._activeThumb=null,this._customMaxScale=-1,this._customMinScale=-1,this._focusedMenuItemIndex=-1,this._maxScaleMenuPopover=new M({owner:this,placement:"bottom-end",anchorElement:()=>this._activeMenuToggleNode,renderContentFunction:()=>this._maxScaleMenuEnabled?this.renderMaxScaleMenu():null}),this._minScaleMenuPopover=new M({owner:this,placement:"bottom-start",anchorElement:()=>this._activeMenuToggleNode,renderContentFunction:()=>this._minScaleMenuEnabled?this.renderMinScaleMenu():null}),this._previewAutoCloseTimeoutId=null,this._previewPopover=new M({owner:this,placement:"top",anchorElement:()=>0===this._activeThumb?this._minThumbNode:this._maxThumbNode,offset:[0,16],renderContentFunction:this.renderScalePreview}),this._scaleMenuNode=null,this._slider=new d({thumbCreatedFunction:(e,t,i)=>{0===e&&(this._minThumbNode=i),1===e&&(this._maxThumbNode=i),this.addHandles([l(i,"mouseenter",(()=>{const{visibleElements:{preview:t}}=this;this._activeThumb=e,this._previewPopover.open=t,this.scheduleRender()})),l(i,"mouseleave",(()=>{this._previewAutoCloseTimeoutId||(this._activeThumb=null,this._previewPopover.open=!1,this.scheduleRender())}))])}}),this.disabled=!1,this.messages=null,this.region="US",this.viewModel=new S,this.visibleElements=T,this._handleScaleMenuToggleClick=e=>{const i=e.currentTarget,s=i.getAttribute("data-type"),a="menu-closing-click-handle";if(this.handles.remove(a),s===this._activeMenu)return this._setActiveMenu(null),void(this._activeMenuToggleNode=null);this._setActiveMenu(s),this._activeMenuToggleNode=i,this.handles.add(l(document,"mousedown",(e=>{const l=e.target,i=t(l,`.${I.scaleMenuToggle}`),s=i&&i.getAttribute("data-type");if(i&&s===this._activeMenu)return;!s&&this._scaleMenuNode&&!this._scaleMenuNode.contains(l)&&(this._setActiveMenu(null),this.handles.remove(a),this.scheduleRender())})),a)},this._afterMenuListCreate=e=>{this._activeMenuNode=e,e.children[0].focus({preventScroll:!0})},this._handleCustomScaleEntry=e=>{this._setScaleFromMenuSelection(e),this._customMaxScale=-1,this._customMinScale=-1},this._handleCustomScaleInputBlur=()=>{"max"===this._activeMenu?this._customMaxScale=-1:this._customMinScale=-1},this._handleCustomScaleInputKeyDown=e=>{const t=e.currentTarget,{handleCustomScaleSelect:l}=t["data-render-props"],{key:i,ctrlKey:s,metaKey:a}=e,{viewModel:{scaleRanges:n}}=this;if("Enter"===i){const i=R(t.value);return l(isNaN(i)?-1:n.clampScale(i)),e.preventDefault(),void e.stopPropagation()}if(i.length>1||s||a)return;/[:,.\d]/.test(i)||(e.preventDefault(),e.stopPropagation())},this._handleScaleMenuKeyDown=e=>{const t=i(e);if("Escape"===t||"Tab"===t)return this._setActiveMenu(null),void this._activeMenuToggleNode.focus();if("ArrowUp"!==t&&"ArrowDown"!==t)return;const l=this._activeMenuNode.children,s=this._focusedMenuItemIndex,a="ArrowUp"===t?(0===s?l.length:s)-1:(s+1)%l.length;e.preventDefault(),e.stopPropagation(),l[a].focus(),this._focusedMenuItemIndex=a}}initialize(){this.addHandles([a((()=>this.viewModel),(e=>this._slider.viewModel=e?e.sliderViewModel:null),c),a((()=>this._interactive),(e=>{this._slider.disabled=!e,e||this._setActiveMenu(null)}),c),this._slider.on("thumb-drag",(({index:e})=>{const{visibleElements:{preview:t}}=this;this._activeThumb=e,this._previewPopover.open=t,clearTimeout(this._previewAutoCloseTimeoutId);const l=250;this._previewAutoCloseTimeoutId=setTimeout((()=>{this._previewAutoCloseTimeoutId=null,this._activeThumb=null,this._previewPopover.open=!1,this.scheduleRender()}),l)})),n((()=>!0===this.view?.stationary),(()=>this.scheduleRender()))])}destroy(){this._previewPopover.destroy(),this._previewPopover=null,this._maxScaleMenuPopover.destroy(),this._maxScaleMenuPopover=null,this._minScaleMenuPopover.destroy(),this._minScaleMenuPopover=null,this._slider.destroy(),this._slider=null}get _maxScaleMenuEnabled(){const{scaleMenus:e}=this.visibleElements;return!0===e||"boolean"!=typeof e&&e.maxScaleMenu}get _minScaleMenuEnabled(){const{scaleMenus:e}=this.visibleElements;return!0===e||"boolean"!=typeof e&&e.minScaleMenu}get _interactive(){return"disabled"!==this.get("viewModel.state")&&!this.disabled}get effectiveMaxScale(){return this.viewModel.effectiveMaxScale}get effectiveMinScale(){return this.viewModel.effectiveMinScale}get effectiveMaxScaleLimit(){return this.viewModel.effectiveMaxScaleLimit}get effectiveMinScaleLimit(){return this.viewModel.effectiveMinScaleLimit}get label(){return this.messages?.widgetLabel??""}set label(e){this._overrideIfSome("label",e)}get layer(){return this.viewModel.layer}set layer(e){this.viewModel.layer=e}get maxScale(){return this.viewModel.maxScale}set maxScale(e){this.viewModel.maxScale=e}get maxScaleLimit(){return this.viewModel.maxScaleLimit}set maxScaleLimit(e){this.viewModel.maxScaleLimit=e}get minScale(){return this.viewModel.minScale}set minScale(e){this.viewModel.minScale=e}get minScaleLimit(){return this.viewModel.minScaleLimit}set minScaleLimit(e){this.viewModel.minScaleLimit=e}get view(){return this.viewModel.view}set view(e){this.viewModel.view=e}castVisibleElements(e){return{...T,...e,scaleMenus:"boolean"==typeof e?.scaleMenus?e.scaleMenus:{...T.scaleMenus,...e?.scaleMenus}}}render(){const{_interactive:e,_slider:t,label:l,messages:i,view:s,viewModel:{scaleRanges:a,state:n}}=this,c=i.scaleRangeLabels[a.findScaleRangeByIndex(t.values[0]).id],r=i.scaleRangeLabels[a.findScaleRangeByIndex(t.values[1]).id];return t.layout=b(this.container)?"horizontal-reversed":"horizontal",f("div",{"aria-label":l,class:this.classes(I.base,I.widget,e?null:I.disabled)},"ready"===n&&s?this.renderCurrentScaleIndicator():null,t.render(),f("div",{class:I.scaleMenuContainer,key:"scale-menu-toggles"},this._minScaleMenuEnabled?this.renderScaleMenuToggle("min",c):null,this._maxScaleMenuEnabled?this.renderScaleMenuToggle("max",r):null))}renderMinScaleMenu(){const{effectiveMaxScale:e,effectiveMinScaleLimit:t,view:l,viewModel:{scaleRanges:i}}=this,s=l?l.scale:void 0;return this.renderScaleMenu({type:"min",min:t,max:i.findScaleRange(e).minScale,map:s})}renderMaxScaleMenu(){const{effectiveMinScale:e,effectiveMaxScaleLimit:t,view:l,viewModel:{scaleRanges:i}}=this,s=l?l.scale:void 0;return this.renderScaleMenu({type:"max",min:i.findScaleRange(e).maxScale,max:t,map:s})}renderScalePreview(){const{_activeThumb:e,_slider:t,region:l,viewModel:{scaleRanges:i}}=this,s=0===e?t.values[0]:t.values[1],a=Object.keys(p.RecommendedScales).indexOf(i.findScaleRangeByIndex(s).id),n={backgroundImage:h(l),backgroundPosition:v(a)};return f("div",{class:I.scalePreview},f("div",{class:I.scalePreviewThumbnail,styles:n}))}renderScaleMenu({map:e,min:t,max:l,type:i}){const s=p.fromScaleRange({minScale:t,maxScale:l}),a=this.messages.featuredScaleLabels,n=p.RecommendedScales,c=Object.keys(n).filter((e=>s.contains(n[e]))).map((e=>this.renderScaleMenuItem({scaleLabel:a[e],scaleValue:n[e],valueVisible:"world"!==e,handleNamedScaleSelect:this._handleRecommendedScaleClick}))),{_customMaxScale:r,_customMinScale:o,messages:u}=this,d="max"===i?r:o;return f("div",{bind:this,class:I.scaleMenu,"data-type":i,id:`${this.id}__scale-menu--${i}`,key:`${i}-scale-menu`,afterCreate:w,"data-node-ref":"_scaleMenuNode",onkeydown:this._handleScaleMenuKeyDown},f("div",{class:I.scaleMenuScroller},f("ul",{class:I.scaleMenuList,afterCreate:this._afterMenuListCreate},this.renderScaleMenuItem({scaleValue:d,scaleLabel:u.featuredScaleLabels.custom,valueVisible:!1,handleNamedScaleSelect:this._handleScaleSelection,handleCustomScaleSelect:this._handleCustomScaleEntry}),null!=e?this.renderScaleMenuItem({scaleValue:e,scaleLabel:u.featuredScaleLabels.current,valueVisible:!0,handleNamedScaleSelect:this._handleRecommendedScaleClick}):null,c)))}_handleScaleSelection(){"max"===this._activeMenu?this._customMaxScale=this.effectiveMaxScale:this._customMinScale=this.effectiveMinScale}renderScaleMenuToggle(e,t){const{_activeMenu:l,_interactive:i}=this,s=l===e;return f("button",{"aria-controls":s?`${this.id}__scale-menu--${e}`:"","aria-pressed":s?"true":"false",class:this.classes(I.scaleMenuToggle,s?I.scaleMenuToggleActive:null),"data-type":e,key:`${e}-scale-menu-toggle`,onclick:this._handleScaleMenuToggleClick,disabled:!i,type:"button"},f("div",{class:I.scaleMenuToggleText,"aria-label":t,title:t},t),f("span",{class:this.classes(I.scaleMenuToggleIcon,I.expandIcon),"aria-hidden":"true"}))}renderScaleMenuItem(e){const{scaleValue:t,scaleLabel:l,valueVisible:i,handleNamedScaleSelect:s,handleCustomScaleSelect:a=null}=e,{id:n}=this,c=`${n}__custom-scale-input`;return f("li",{bind:this,class:I.scaleMenuListItem,"data-scale":t,key:l,onclick:s,onkeydown:s,tabIndex:-1},f("label",{class:I.scaleItemLabel,for:c},l),t>-1?a?f("input",{afterCreate:this._focusAndSelectInputOnCreate,class:this.classes(I.scaleItemValue,I.scaleItemValueEditable),"data-render-props":e,id:c,key:"value",value:L(t),onkeydown:this._handleCustomScaleInputKeyDown,onblur:this._handleCustomScaleInputBlur}):i?f("div",{class:I.scaleItemValue,key:"value"},L(t)):null:null)}_focusAndSelectInputOnCreate(e){e.focus(),e.select()}renderCurrentScaleIndicator(){const{_slider:e,messages:t,view:l,viewModel:{scaleRanges:i}}=this,s=i.clampScale(l.scale),a=this.viewModel.mapScaleToSlider(s),n=a/e.max,c=t.scaleRangeLabels[i.findScaleRangeByIndex(a).id],r=y(t.currentScaleTooltip,{scaleLabel:c});return f("div",{class:I.scaleIndicatorContainer,key:"scale-indicator"},f("div",{"aria-label":r,class:I.scaleIndicator,styles:{left:(b(this.container)?-1:1)*n*100+"%"},title:r},this.renderCurrentScaleIndicatorIcon()))}renderCurrentScaleIndicatorIcon(){return f("svg",{class:I.scaleIndicatorIcon,height:"8",width:"8",viewBox:"0 0 8 8",version:"1.1",xmlns:"http://www.w3.org/2000/svg"},f("polygon",{points:"4 0 8 8 0 8"}))}_handleRecommendedScaleClick(e){const t=e.currentTarget,l=Number(t["data-scale"]);this._setScaleFromMenuSelection(l)}_setScaleFromMenuSelection(e){"max"===this._activeMenu?this.maxScale=Math.min(e,this.effectiveMinScale-1):this.minScale=Math.max(e,this.effectiveMaxScale+1),this._setActiveMenu(null),this._activeMenuToggleNode.focus()}_setActiveMenu(e){this._activeMenu=e,this._maxScaleMenuPopover.open="max"===e,this._minScaleMenuPopover.open="min"===e,this._focusedMenuItemIndex=e?0:-1}};e([r()],P.prototype,"_maxScaleMenuEnabled",null),e([r()],P.prototype,"_minScaleMenuEnabled",null),e([r()],P.prototype,"_slider",void 0),e([r({readOnly:!0})],P.prototype,"_interactive",null),e([r()],P.prototype,"disabled",void 0),e([r()],P.prototype,"effectiveMaxScale",null),e([r()],P.prototype,"effectiveMinScale",null),e([r()],P.prototype,"effectiveMaxScaleLimit",null),e([r()],P.prototype,"effectiveMinScaleLimit",null),e([r()],P.prototype,"label",null),e([r()],P.prototype,"layer",null),e([r()],P.prototype,"maxScale",null),e([r()],P.prototype,"maxScaleLimit",null),e([r(),g("esri/widgets/ScaleRangeSlider/t9n/ScaleRangeSlider")],P.prototype,"messages",void 0),e([r()],P.prototype,"minScale",null),e([r()],P.prototype,"minScaleLimit",null),e([r()],P.prototype,"region",void 0),e([r()],P.prototype,"view",null),e([r()],P.prototype,"viewModel",void 0),e([r()],P.prototype,"visibleElements",void 0),e([o("visibleElements")],P.prototype,"castVisibleElements",null),e([_()],P.prototype,"_handleScaleSelection",null),e([_()],P.prototype,"_handleRecommendedScaleClick",null),P=e([u("esri.widgets.ScaleRangeSlider")],P);const E=P;export{E as default};