UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 29.6 kB
import{_ as e}from"../chunks/tslib.es6.js";import"../intl.js";import{deprecatedProperty as t}from"../core/deprecate.js";import{on as s,pausable as r}from"../core/events.js";import i from"../core/Logger.js";import{isNone as o,isSome as n,unwrap as a,unwrapOrValue as l}from"../core/maybe.js";import{watch as d,initial as c,when as h,on as u}from"../core/reactiveUtils.js";import{property as p}from"../core/accessorSupport/decorators/property.js";import{cast as v}from"../core/accessorSupport/decorators/cast.js";import"../core/arrayUtils.js";import{subclass as m}from"../core/accessorSupport/decorators/subclass.js";import{defaultUnitPropertyMetadata as _}from"../properties/defaultUnit.js";import g from"../rest/support/Stop.js";import y from"../symbols/SimpleMarkerSymbol.js";import S from"./Search.js";import w from"./Widget.js";import M from"./Directions/DirectionsViewModel.js";import{SaveLayer as b}from"./Directions/components/SaveLayer.js";import{formatDistance as f,formatDuration as T}from"./Directions/support/directionsUtils.js";import{DepartureTimeOption as C,CSS as k,getIconPath as I}from"./Directions/support/resources.js";import{isArcGISWorldGeocoder as D,meteredArcGISLocatorUrl as P}from"./Search/support/locatorUtils.js";import L from"./support/DatePicker.js";import{Heading as R,incrementHeadingLevel as B}from"./support/Heading.js";import A from"./support/TimePicker.js";import{accessibleHandler as H}from"./support/decorators/accessibleHandler.js";import{messageBundle as j}from"./support/decorators/messageBundle.js";import{tsx as E}from"./support/jsxFactory.js";import"./support/widgetUtils.js";import x from"sortablejs";import{formatNumber as O}from"../intl/number.js";import{formatDate as U,convertDateFormatToIntlOptions as z}from"../intl/date.js";const $={departureTime:!0,layerDetails:!0,printButton:!1,saveAsButton:!0,saveButton:!0,stops:!0,traveMode:!0};function F(e){const t=e.getTimezoneOffset(),s=t>0?"-":"+",r=60,i=Math.abs(Math.floor(t/r)),o=Math.abs(Math.floor(t)%r),n={minimumIntegerDigits:2};return`GMT${s}${O(i,n)}${O(o,n)}`}function N(e){return!!e.composedPath?.().find((e=>e.classList?.contains("esri-search__suggestions-list")))}const q="search-term",K="date-time-picker",V=100,W=500,G="esri.widgets.Directions",Y=i.getLogger(G);let J=class extends w{constructor(e,t){super(e,t),this._autoStopRemovalDelay=V,this._departureTimeOption=C.NOW,this._datePicker=new L,this._newPlaceholderStop=null,this._pointerPressedSearchSuggestionStop=null,this._renderSavePopoverFunction=null,this._saveAsButtonNode=null,this._saveLayer=new b,this._sections=null,this._stopsToSearches=new Map,this._timePicker=new A,this.headingLevel=2,this.iconClass=k.widgetIcon,this.messages=null,this.messagesCommon=null,this.messagesUnits=null,this.searchProperties=null,this.viewModel=new M,this.visibleElements={...$},this._setUpDragAndDropStops=e=>{this._sortable=x.create(e,{draggable:`.${k.validStopRow}`,ghostClass:k.stopRowGhost,handle:`.${k.stopHandle}`,onEnd:this._handleStopInputDragEnd})},this._handleDragHandlePointerDown=()=>this.viewModel.layer.stops.forEach((e=>this._acquireSearch(e).activeMenu="none")),this._handleStopInputDragEnd=({oldIndex:e,newIndex:t,target:s})=>{if(e===t)return;const{children:r}=s,i=r[t],o=r[e],n=t-e<0;s.insertBefore(i,n?o.nextElementSibling:o);const a=this.viewModel.layer.stops;a.reorder(a.getItemAt(e),t);for(const l of a)l.sequence=null;this._getDirections()}}initialize(){this.addHandles([d((()=>this.viewModel.layer.routeInfo),(()=>{this._activeManeuver=null,this._focusedManeuver=null,this._sections=this._getSections(),this.scheduleRender()}),c),h((()=>this.view),((e,t)=>{if(t&&(this._viewClickHandle=null,this.removeHandles(t)),e){const t=this._prepPointerDownUpClick(),r=this._prepViewClick();t.pause(),r.pause(),this.addHandles([s(e.surface,"mousedown",(()=>this._autoStopRemovalDelay=W)),s(e.surface,"mouseup",(()=>this._autoStopRemovalDelay=V)),t,r],e),this._pointerDownUpHandle=t,this._viewClickHandle=r}}),c),h((()=>o(this.viewModel.serviceDescription)),(()=>{try{this.viewModel.load()}catch{}}),c),d((()=>this._saveLayer.state),(()=>{this.scheduleRender()}))]),this.when((()=>{this.destroyed||(this._renderSavePopoverFunction=this._renderSavePopover.bind(this),this._projector.append(document.body,this._renderSavePopoverFunction))}))}loadDependencies(){return Promise.all([import("@esri/calcite-components/dist/components/calcite-button.js"),import("@esri/calcite-components/dist/components/calcite-link.js"),import("@esri/calcite-components/dist/components/calcite-popover.js")])}destroy(){this._datePicker.destroy(),this._timePicker.destroy();for(const e of this._stopsToSearches.values())e.destroy();this._sortable&&this._sortable.destroy(),n(this._renderSavePopoverFunction)&&this._projector.detach(this._renderSavePopoverFunction)}get apiKey(){return this.viewModel.apiKey}set apiKey(e){this.viewModel.apiKey=e}get goToOverride(){return this.viewModel.goToOverride}set goToOverride(e){this.viewModel.goToOverride=e}get label(){return this.messages?.widgetLabel??""}set label(e){this._overrideIfSome("label",e)}get lastRoute(){return this.viewModel.lastRoute}get layer(){return this.viewModel.layer}set layer(e){this.viewModel.layer=e}get maxStops(){return this.viewModel.maxStops}set maxStops(e){this.viewModel.maxStops=e}set routeServiceUrl(e){t(Y,"routeServiceUrl",{replacement:"viewModel.layer.url",version:"4.24",warnOnce:!0}),this.viewModel.legacyLayer.url=e}get routeServiceUrl(){return t(Y,"routeServiceUrl",{replacement:"viewModel.layer.url",version:"4.24",warnOnce:!0}),this.viewModel.legacyLayer.url}set routeSymbol(e){t(Y,"routeSymbol",{replacement:"viewModel.layer.defaultSymbols.directionLines",version:"4.24",warnOnce:!0}),this.viewModel.legacyLayer.defaultSymbols.directionLines=e}get routeSymbol(){return t(Y,"routeSymbol",{replacement:"viewModel.layer.defaultSymbols.directionLines",version:"4.24",warnOnce:!0}),this.viewModel.legacyLayer.defaultSymbols.directionLines}set stopSymbols(e){t(Y,"stopSymbols",{replacement:"viewModel.layer.defaultSymbols.stops",version:"4.24",warnOnce:!0}),this.viewModel.legacyLayer.defaultSymbols.stops=e}get stopSymbols(){return t(Y,"stopSymbols",{replacement:"viewModel.layer.defaultSymbols.stops",version:"4.24",warnOnce:!0}),this.viewModel.legacyLayer.defaultSymbols.stops}get unit(){return this.defaultUnit}set unit(e){this._overrideIfSome("unit",e)}get view(){return this.viewModel.view}set view(e){this.viewModel.view=e}castVisibleElements(e){return{...$,...e}}getDirections(){return this.viewModel.getDirections()}render(){return E("div",{class:this.classes(k.base,k.scroller)},this._renderPanelContent())}save(){return this.viewModel.layer.save()}saveAs(e,t={}){return this.viewModel.layer.saveAs(e,t)}zoomToRoute(){return this.viewModel.zoomToRoute()}_renderPanelContent(){const{viewModel:{serviceDescription:e,state:t}}=this,s="initializing"===t,r="error"===t&&!e,i="unauthenticated"===t,o={[k.panelContentLoading]:s,[k.panelContentError]:r,[k.panelContentSignIn]:i},n=s?"presentation":"group",a=i?this._renderSignIn():r?this._renderMessage(this._getErrorMessage()):s?this._renderLoader():this._renderReadyContent();return E("div",{class:this.classes(k.panelContent,o),role:n},a)}_renderReadyContent(){return[this._renderStopsContainer(),this._renderTravelModeOptions(),this._renderDepartureTimeControls(),this._renderSaveContainer(),this._renderSectionSplitter(),this._renderDirectionsContainer()]}_renderSignIn(){return E("div",{key:"sign-in",class:k.signInContent},E(R,{class:k.contentTitle,level:this.headingLevel},this.messages.widgetLabel),this._renderPlaceholder(),E(R,{level:B(this.headingLevel)},this.messages.signInRequired),E("button",{class:this.classes(k.button,k.buttonSecondary,k.signInButton),tabIndex:0,onclick:this._handleSignInClick,bind:this,type:"button"},this.messagesCommon.auth.signIn))}_handleSignInClick(){this.viewModel.load().catch((()=>{}))}_renderTravelModeOptions(){if(!this.visibleElements.traveMode)return null;const{selectedTravelMode:e,travelModes:t}=this.viewModel;if(0===t.length)return null;const s=n(e)?e.name:this.messages.travelMode;return E("div",{"aria-disabled":this._saveLayer.opened.toString(),class:this.classes(k.travelMode,this._saveLayer.opened&&k.buttonDisabled),key:"esri-directions__travel-mode-controls",role:"group"},E("select",{"aria-label":s,bind:this,class:this.classes(k.travelModeSelect,k.select),key:"esri-directions__travel-mode-options",onchange:this._handleTravelModeChange,title:s},t.map(((t,s)=>E("option",{key:`esri-directions__travel-mode-${s}`,"data-mode":t,selected:e===t,value:`${s}`},t.name)))))}_handleTravelModeChange(e){const t=e.currentTarget,s=t.item(t.selectedIndex);this.viewModel.selectedTravelMode=s["data-mode"],this._getDirections()}_renderStopsContainer(){return this.visibleElements.stops?E("div",{"aria-disabled":this._saveLayer.opened.toString(),class:this.classes(k.section,this._saveLayer.opened&&k.buttonDisabled),key:"esri-directions__stops-container",role:"group"},this._renderStops()):null}_renderDepartureTimeControls(){if(!this.visibleElements.departureTime)return null;const{messages:{departAt:e,departureTime:t,leaveNow:s,timeUnspecified:r}}=this;return E("div",{"aria-disabled":this._saveLayer.opened.toString(),class:this.classes(k.departureTime,this._saveLayer.opened&&k.buttonDisabled),key:"esri-directions__departure-time-controls",role:"group"},E("select",{"aria-label":t,bind:this,class:this.classes(k.departureTimeSelect,k.select),onchange:this._handleDepartureOptionChange,title:t},E("option",{value:C.NOW,selected:this._departureTimeOption===C.NOW},s),E("option",{value:C.DEPART_AT,selected:this._departureTimeOption===C.DEPART_AT},e),E("option",{value:C.UNSPECIFIED,selected:this._departureTimeOption===C.UNSPECIFIED},r)),this._departureTimeOption===C.DEPART_AT?this._renderTimeControls():null)}_renderStops(){const e=this.viewModel.layer.stops;let t=0;for(const i of this._stopsToSearches.keys())e.includes(i)||this._disposeSearch(i);for(const i of e){const e=this._acquireSearch(i);"none"!==e.activeMenu&&(t+=1),n(i.name)&&(e.searchTerm=i.name)}const s=e.toArray().map(((s,r)=>{const i=e.length,a=r>1&&o(s.geometry),l={[k.stopsIcon]:r>=0&&r<i-1,[k.lastStopIcon]:r===i-1},d={[k.lastStopIconContainer]:r===i-1},c={[k.validStopRow]:!a},h=e.getItemAt(r+1),u=h&&n(h.geometry),p=r===i-1,v=r===i-2,m=2===i&&0===r||i>2&&!p&&!v||i>2&&v&&u||i>2&&p&&o(s.geometry),_=i<3,g=this._acquireSearch(s),{messages:y}=this,{removeStop:S,reverseStops:w,unlocated:M}=y,b=n(s.geometry)&&n(s.name)?s.name:M,f=O(r+1),T=`${y.stopLabel} ${f} (${b})`,C=`${this.id}__stop--${r}`,I=!!g.searchTerm&&!!g.selectedResult&&n(s.geometry)&&g.selectedResult.name===s.name,D={zIndex:"none"!==g.activeMenu?""+t--:""};return E("li",{"aria-label":T,afterCreate:this._handleStopFieldCreation,bind:this,class:this.classes(k.stopRow,c),id:C,key:r,"data-stop-index":r,styles:D},E("div",{class:k.stopHandle},E("span",{"aria-hidden":"true",class:this.classes(k.stopIcon,k.handleIcon,k.stopHandleIcon,k.interactiveStopIcon),onpointerdown:this._handleDragHandlePointerDown}),E("div",{bind:this,"aria-labelledby":C,class:this.classes(k.stopIconContainer,d),"data-stop-index":r,onclick:this._handleStopIconClick,onkeydown:this._handleStopIconClick,role:"button"},E("span",{class:this.classes(k.stopIcon,l),tabindex:I?"0":null}))),E("div",{class:k.stopInput},g.render()),E("div",{class:k.stopOptions,role:"group"},E("div",{"aria-label":S,class:k.removeStopButton,bind:this,"data-stop-index":r,hidden:_,onkeydown:this._handleRemoveStop,onclick:this._handleRemoveStop,role:"button",tabIndex:0,title:S},E("span",{"aria-hidden":"true",class:this.classes(k.stopIcon,k.removeStop,k.removeStopIcon,k.interactiveStopIcon)}),E("span",{class:k.screenReaderText},"removeStopTitle")),E("div",{"aria-label":w,class:k.reverseStops,bind:this,hidden:m,onkeydown:this._handleReverseStops,onclick:this._handleReverseStops,role:"button",tabIndex:0,title:w},E("span",{"aria-hidden":"true",class:this.classes(k.stopIcon,k.reverseStopIcon,k.interactiveStopIcon)}),E("span",{class:k.screenReaderText},"removeStopTitle"))))})),r=this._renderAddStop();return E("div",null,E("ol",{class:k.stops,role:"group",afterCreate:this._setUpDragAndDropStops},s),r)}_renderAddStop(){const{stops:e}=this.viewModel.layer,t=e.filter((({geometry:e})=>n(e))),s=e.at(-1);return t.length>1&&t.length<this.maxStops&&n(s)&&n(s.geometry)?E("div",{class:k.toolbarSection},E("div",{class:k.toolbarButtons},E("calcite-button",{appearance:"outline",class:k.addStopButton,kind:"neutral",scale:"s",round:!0,iconStart:"plus",key:k.addStopButton,onclick:()=>{this._addNewPlaceholder()},label:this.messages.addStop,width:"full"},this.messages.addStop))):null}_handleStopIconClick(e){const t=e.currentTarget["data-stop-index"],s=this.viewModel.layer.stops.getItemAt(t);s&&n(s.geometry)&&this._centerAtStop(s)}_handleClearRouteClick(){this.viewModel.reset()}_centerAtStop(e){this.viewModel.centerAt(e)}_handleStopFieldCreation(e){const t=this._newPlaceholderStop;if(!t)return;const s=e["data-stop-index"],r=this.viewModel.layer.stops.getItemAt(s);if(t===r){const e=this._acquireSearch(r);e.when((()=>{this.renderNow(),e.focus()}))}this._newPlaceholderStop=null}_handleStopInputBlur(e,t){if(this._saveLayer.opened)return;this.removeHandles(q);if(!!e.selectedResult&&n(t.geometry)&&n(e.selectedResult?.feature.geometry)&&t.geometry===e.selectedResult?.feature.geometry)return void this._pointerDownUpHandle.pause();const s=o(t.geometry)&&o(e.selectedResult?.feature.geometry),r=n(t.geometry)&&n(e.selectedResult?.feature.geometry)&&t.geometry!==e.selectedResult.feature.geometry;if((s||r)&&"none"===e.activeMenu&&e.searchTerm)return e.search(),void this._pointerDownUpHandle.pause();e.searchTerm||(this._viewClickHandle.resume(),clearTimeout(this._autoStopRemovalTimeoutId),this._autoStopRemovalTimeoutId=setTimeout((()=>{this.destroyed||(this._viewClickHandle.pause(),"searching"!==e.viewModel.state?this._pointerPressedSearchSuggestionStop||(n(t.geometry)&&(t.geometry=null,this._getDirections()),this.scheduleRender()):this._pointerDownUpHandle.pause())}),this._autoStopRemovalDelay))}_handleStopInputFocus(e,t){if(this._pointerDownUpHandle.resume(),this.hasHandles(q))return;const{view:s}=this,r=s.cursor;this.addHandles([{remove(){s.cursor=r}},d((()=>e.searchTerm),(t=>{e.destroyed||(s.cursor=t.length?r:"copy")}),c)],q),this._activeStop=t}_prepViewClick(){const{view:e}=this.viewModel,t=r(e,"click",this._handleViewClick.bind(this)),s=r(e.surface,"click",(()=>{clearTimeout(this._autoStopRemovalTimeoutId),s.pause()}));return{remove(){s.remove(),t.remove()},pause(){s.pause(),t.pause()},resume(){s.resume(),t.resume()}}}_prepPointerDownUpClick(){const e=r(document,"pointerdown",(e=>{this._pointerPressedSearchSuggestionStop=N(e)?this._activeStop:null})),t=r(document,"pointerup",(e=>{this._pointerDownUpHandle.pause();const t=N(e),s=this._activeStop;t||s!==this._pointerPressedSearchSuggestionStop||this._removeStop(s),this.scheduleRender(),this._pointerPressedSearchSuggestionStop=t?s:null}));return{remove(){t.remove(),e.remove()},pause(){t.pause(),e.pause()},resume(){e.resume()}}}_handleViewClick(e){e.stopPropagation();const t=this._stopsToSearches.get(this._activeStop);t&&!t.searchTerm&&(t.search(e.mapPoint).then((e=>{const s=e.results[0].results[0],{feature:r,name:i}=s;this._activeStop.geometry=r.geometry,this._activeStop.name=i,t.searchTerm=i})),this.scheduleRender()),this._viewClickHandle.pause(),clearTimeout(this._autoStopRemovalTimeoutId)}_addNewPlaceholder(){if(this._pointerDownUpHandle.pause(),this._newPlaceholderStop)return;const e=new g({symbol:new y});this.viewModel.layer.stops.add(e),this._newPlaceholderStop=e}_handleReverseStops(){this._reverseStops()}_reverseStops(){this.viewModel.layer.stops.reverse();for(const e of this.viewModel.layer.stops)e.sequence=null;this._getDirections()}_handleRemoveStop(e){const t=e.currentTarget["data-stop-index"],s=this.viewModel.layer.stops.getItemAt(t);this._removeStop(s),(n(s.geometry)||o(this.viewModel.layer.routeInfo))&&this._getDirections()}_removeStop(e){this.viewModel.layer.stops.length<=2||(this._disposeSearch(e),this.viewModel.layer.stops.remove(e))}_handleDepartureOptionChange(e){const t=e.currentTarget,s=t.item(t.selectedIndex);s.value===C.NOW?(this._departureTimeOption=C.NOW,this.viewModel.departureTime=C.NOW,this.removeHandles(K),this._getDirections()):s.value===C.DEPART_AT?(this._departureTimeOption=C.DEPART_AT,this.addHandles(d((()=>[this._datePicker.value,this._timePicker.value]),(()=>{this._updateDepartureTime(),this._getDirections()}),c),K)):(this._departureTimeOption=C.UNSPECIFIED,this.viewModel.departureTime=null,this._getDirections())}_updateDepartureTime(){const e=this._datePicker.value,t=this._timePicker.value;e&&t&&(this.viewModel.departureTime=new Date(e.getFullYear(),e.getMonth(),e.getDate(),t.getHours(),t.getMinutes()))}_renderTimeControls(){return E("div",{class:k.departureTimeControls,key:"esri-directions__time-controls",role:"group"},this._datePicker.render(),this._timePicker.render())}_renderSectionSplitter(){return E("div",{class:k.sectionSplitter})}_renderSaveContainer(){const{saveButton:e,saveAsButton:t,printButton:s,layerDetails:r}=this.visibleElements;return e||t||s||r?E("div",{class:k.saveSection,key:k.saveSection},this._renderSaveButtons(),this._renderRouteLayerDetailsLink()):null}_renderSaveButtons(){const{saveButton:e,saveAsButton:t,printButton:s}=this.visibleElements;return e||t||s?E("div",{class:k.saveButtons,key:k.saveButtons},this._renderSaveButton(),this._renderSaveAsButton(),this._renderPrintButton()):null}_renderSaveButton(){if(!this.visibleElements.saveButton)return null;const e=this.viewModel.layer.portalItem?.itemControl,t=n(this.viewModel.layer.routeInfo)&&("admin"===e||"update"===e);return E("calcite-button",{appearance:"outline",class:k.saveButton,disabled:!t,iconStart:"save",key:k.saveButton,onclick:()=>{this._handleSaveButtonClick()},label:this.messagesCommon.save,width:"full"},this.messagesCommon.save)}_renderSaveAsButton(){if(!this.visibleElements.saveAsButton)return null;const e=o(this.viewModel.layer.routeInfo);return E("div",{class:k.saveAsButtonPopover,key:k.saveAsButtonPopover},E("calcite-button",{afterCreate:e=>{this._saveAsButtonNode=e},appearance:"outline",class:k.saveAsButton,disabled:e,iconStart:"duplicate",key:k.saveAsButton,onclick:()=>this._handleSaveAsButtonClick(),label:this.messagesCommon.saveAs,width:"full"},this.messagesCommon.saveAs))}_renderSavePopover(){return E("calcite-popover",{label:this._saveLayer.label,open:this._saveLayer.opened,overlayPositioning:"fixed",referenceElement:a(this._saveAsButtonNode)},this._saveLayer.render())}_handleSaveAsButtonClick(){this._saveLayer.opened?this._saveLayer.close():this._saveLayer.open(this.viewModel.layer)}_renderPrintButton(){return this.visibleElements.printButton?E("calcite-button",{appearance:"outline",class:k.printButton,iconStart:"print",key:k.printButton,label:this.messagesCommon.print}):null}_renderRouteLayerDetailsLink(){if(!this.visibleElements.layerDetails)return null;const{portalItem:e}=this.viewModel.layer;if(!e)return null;const{id:t,portal:{url:s}}=e,r=`${s}/home/item.html?id=${t}`;return E("calcite-link",{class:k.layerDetailsLink,href:r,key:k.layerDetailsLink,target:"_blank"},this.messages.viewLayerDetails)}_handleSaveButtonClick(){this.viewModel.layer.save()}_renderDirectionsContainer(){return E("div",{class:this.classes(k.directionsSection,k.section),key:"esri-directions__container"},this._renderDirectionsContainerContent())}_renderLoader(){return E("div",{class:k.loader,key:"loader"})}_renderWarningCard(){return E("div",{class:k.warningCard,role:"alert"},E("div",{class:k.warningHeader},E("span",{class:k.warningIcon,"aria-hidden":"true"}),E(R,{class:k.warningHeading,level:this.headingLevel},this.messagesCommon.warning)),E("div",{class:k.warningMessage},this._getErrorMessage()))}_renderDirectionsContainerContent(){const{viewModel:{layer:e,state:t}}=this,s="routing"===t;return"error"===t?this._renderWarningCard():s?this._renderLoader():n(e.directionLines)?E("div",{"aria-disabled":this._saveLayer.opened.toString(),class:this.classes(k.summary,this._saveLayer.opened&&k.buttonDisabled),key:"esri-directions__summary",role:"group"},this._renderCosts(),this._renderRouteActions(),this._renderManeuverSections()):E("div",{key:"esri-directions__placeholder",class:k.emptyContent},this._renderPlaceholder(),E(R,{class:k.message,level:this.headingLevel},this.messages.directionsPlaceholder))}_renderPlaceholder(){return E("svg",{class:k.emptyIllustration,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256"},E("path",{fill:"currentcolor",d:"M192 36c-15.477 0-24 6.034-24 16.99v45.822l24 24 24-24v-45.82C216 42.033 207.477 36 192 36zm20 61.155l-20 20-20-20V52.99c0-8.62 6.73-12.99 20-12.99s20 4.37 20 12.99zM192 52a12 12 0 1 0 12 12 12.013 12.013 0 0 0-12-12zm0 20a8 8 0 1 1 8-8 8.008 8.008 0 0 1-8 8zM92 140.99C92 130.035 83.477 124 68 124s-24 6.034-24 16.99v45.822l24 24 24-24zm-4 44.165l-20 20-20-20V140.99c0-8.62 6.73-12.99 20-12.99s20 4.37 20 12.99zM68 140a12 12 0 1 0 12 12 12.013 12.013 0 0 0-12-12zm0 20a8 8 0 1 1 8-8 8.008 8.008 0 0 1-8 8zm84-44h16v4h-16zm-24 80h4v12h-12v-4h8zm0-28h4v16h-4zm0-52h12v4h-8v8h-4zm0 24h4v16h-4zm-36 64h16v4H92z"}))}_renderMessage(e){return E(R,{level:this.headingLevel},e)}_renderRouteActions(){return E("div",{class:k.routeActions},E("button",{"aria-label":this.messages.clearRoute,class:this.classes(k.clearRouteButton,k.button,k.buttonTertiary),tabIndex:0,onclick:this._handleClearRouteClick,bind:this,type:"button"},this.messages.clearRoute))}_getSections(){const{directionPoints:e,directionLines:t,stops:s}=this.viewModel.layer;if(o(e)||o(t))return null;const r=[];let i=null;for(const a of e){const{objectId:e,stopId:l}=a;if(n(l)){const e=s.find((e=>e.objectId===l)),t=0===r.length;(o(i)||i.stop!==e)&&(i={stop:e,directions:[],open:t},r.push(i));continue}if(o(i))continue;const d=t.find((t=>t.directionPointId===e));o(d)||i.directions.push({directionPoint:a,directionLine:d})}return r}_renderManeuverSections(){return o(this._sections)?null:E("div",{class:k.maneuvers,role:"group"},this._sections.map(((e,t)=>{const{open:s}=e;let r;e.directions.length>0&&s&&(r=E("ol",{class:k.maneuverList},e.directions.map((e=>this._renderManeuver(e)))));const i=a(this._sections).length>2,o=t===a(this._sections).length-1,n={[k.collapsibleSection]:i},l={[k.openIcon]:!s,[k.closeIcon]:s};let d;if(i&&!o){const t=s?this.messagesCommon.close:this.messagesCommon.open;d=E("header",{class:this.classes(k.maneuverSectionHeader,k.maneuverSectionToggle),key:k.maneuverSectionHeader},E("div",{"aria-expanded":s.toString(),"aria-label":t,bind:this,class:k.maneuverSectionHeaderButton,"data-maneuver-section":e,onkeydown:this._handleSectionToggle,onclick:this._handleSectionToggle,role:"button",tabIndex:0,title:t},E(R,{class:k.maneuverSectionTitle,level:this.headingLevel},e.stop.name),E("span",{"aria-hidden":"true",class:this.classes(l)})))}else d=E("header",{class:k.maneuverSectionHeader,key:k.maneuverSectionHeader},E(R,{class:k.maneuverSectionTitle,level:this.headingLevel},e.stop.name));return E("section",{class:this.classes(k.maneuverSection,n),key:t},d,r)})))}_handleSectionToggle(e){const t=e.currentTarget["data-maneuver-section"];t.open=!t.open}_renderCosts(){const e=this._getCostSummary(),{directionPoints:t}=this.viewModel.layer;if(o(t)||o(e))return null;const s=t.getItemAt(t.length-1).arrivalTime,{distance:r,duration:i}=e,{eta:a,primaryCosts:l,secondaryCosts:d,zoomToRoute:c}=this.messages,h=z("short-time"),u=n(s)?`<strong>${U(s,h)}</strong> ${F(s)}`:"";return E("div",{"aria-label":c,bind:this,class:k.directionCosts,onkeydown:this._handleSummaryInteraction,onclick:this._handleSummaryInteraction,role:"button",tabIndex:0,title:c},E("div",{class:k.costsDetails,role:"group"},E("div",{class:k.primaryCosts,title:l},i),E("div",{class:k.verticalSplitter}),E("div",{class:k.secondaryCosts,title:d},r)),E("div",{innerHTML:u,title:a}))}_handleSummaryInteraction(){this._activeManeuver=null,this._focusedManeuver=null,this.viewModel.clearHighlights(),this.zoomToRoute()}_getErrorMessage(){const{messages:e,viewModel:{lastError:t}}=this;if(n(t))switch(t.name){case"directions-view-model:unable-to-route":return e.errors.unableToRoute;case"directions-view-model:service-metadata-unavailable":return e.errors.unableToLoadServiceMetadata}return e.errors.unknownError}_normalizeSearchSources(e){this._overrideDefaultSources(e),this._applyLocatorSourceOverrides(e)}_overrideDefaultSources(e){e.viewModel.defaultSources.forEach((e=>{e.autoNavigate=!1}))}_applyLocatorSourceOverrides({allSources:e}){for(const t of e)"url"in t&&t.url&&(t.locationType??(t.locationType="street"),D(t.url)&&this.apiKey&&null==t.apiKey&&(t.apiKey=this.apiKey,t.url=P))}_acquireSearch(e){const{view:t}=this.viewModel;if(this._stopsToSearches.has(e)){const s=this._stopsToSearches.get(e);return s.view=t,this._overrideDefaultSources(s),s}const s=new S({view:t,resultGraphicEnabled:!1,popupEnabled:!1,...this.searchProperties});return this._normalizeSearchSources(s),this.addHandles([u((()=>s.allSources),"change",(()=>this._normalizeSearchSources(s))),s.on("select-result",(()=>{e.geometry=s.selectedResult.feature.geometry,e.name=s.selectedResult.name,this._getDirections()})),s.on("search-focus",(()=>this._handleStopInputFocus(s,e))),s.on("search-blur",(()=>this._handleStopInputBlur(s,e))),s.on("search-clear",(()=>{e.geometry=null,e.name=null,this._activeStop=e,this.viewModel.layer.removeResult()})),d((()=>s.searchTerm),(t=>{e.name=t}))],s),this._stopsToSearches.set(e,s),s}_disposeSearch(e){if(this._stopsToSearches.has(e)){const t=this._stopsToSearches.get(e);this.removeHandles(t),t.destroy(),this._stopsToSearches.delete(e)}}_renderManeuver(e){const{directionPoint:t,directionLine:s}=e,{distance:r,duration:i}=s,{messages:o,messagesUnits:a,unit:d}=this,c=f(a,l(r,0),d),h=T(l(i,0)),u=c&&h?`${c}&nbsp;&middot;&nbsp;${h}`:`${c}${h}`,p=this._getFormattedManeuverText(t),{objectId:v,directionPointType:m}=t,_=I(m),g=`esri-directions__maneuver-${v}`,y=`esri-directions__intermediate-costs-${v}`,S={[k.maneuverActive]:this._activeManeuver===s};return E("li",{"aria-labelledby":`${g} ${y}`,bind:this,class:this.classes(k.maneuver,S),"data-maneuver":s,key:s,onclick:this._handleManeuverClick,onkeydown:this._handleManeuverClick,onfocus:this._handleManeuverFocus,onmouseover:this._handleManeuverMouseOver,onmouseout:this._handleManeuverMouseOut,onblur:this._handleManeuverBlur,tabIndex:0},n(_)&&E("img",{alt:"",class:k.maneuverIcon,src:_}),E("div",{class:k.maneuverCostsContainer},E("span",{id:g,innerHTML:l(p,"")}),E("div",{class:k.maneuverCosts},E("div",{class:k.horizontalSplitter}),E("div",{"aria-hidden":"true",id:y,class:k.intermediateCost,innerHTML:u,title:o.intermediateCosts}))))}_handleManeuverClick(e){const t=e.currentTarget["data-maneuver"];if(this._activeManeuver===t)return this._activeManeuver=null,void this.zoomToRoute();this._activeManeuver=t;const{geometry:s}=t;this.viewModel.centerAt(s),this.viewModel.highlight(t)}_handleManeuverMouseOver(e){if(this._activeManeuver||this._focusedManeuver)return;const t=e.currentTarget["data-maneuver"];this.viewModel.highlight(t)}_handleManeuverMouseOut(){this._activeManeuver||this._focusedManeuver||this.viewModel.clearHighlights()}_handleManeuverBlur(){this._activeManeuver||(this._focusedManeuver=null,this.viewModel.clearHighlights())}_handleManeuverFocus(e){if(this._activeManeuver)return;const t=e.currentTarget["data-maneuver"];this._focusedManeuver=t,this.viewModel.highlight(t)}_getFormattedManeuverText(e){const{displayText:t,name:s,intersectingName:r}=e;if(o(t))return"";let i=t;return n(s)&&i.includes(s)&&(i=i.replace(s,`<strong>${s}</strong>`)),n(r)&&i.includes(r)&&(i=i.replace(r,`<strong>${r}</strong>`)),i}_getCostSummary(){const{messagesUnits:e,unit:t,viewModel:s}=this,{routeInfo:r}=s.layer;if(o(r))return null;const i=l(r.totalDistance,0),n=l(r.totalDuration,0);return{distance:f(e,i,t),duration:T(n)}}async _getDirections(){if(!(this.viewModel.layer.stops.filter((e=>n(e.geometry))).length<2))try{await this.viewModel.getDirections()}catch{}}get test(){return{acquireSearch:e=>this._acquireSearch(e)}}};e([p()],J.prototype,"apiKey",null),e([p(_)],J.prototype,"defaultUnit",void 0),e([p()],J.prototype,"goToOverride",null),e([p()],J.prototype,"headingLevel",void 0),e([p()],J.prototype,"iconClass",void 0),e([p()],J.prototype,"label",null),e([p({readOnly:!0})],J.prototype,"lastRoute",null),e([p()],J.prototype,"layer",null),e([p()],J.prototype,"maxStops",null),e([p(),j("esri/widgets/Directions/t9n/Directions")],J.prototype,"messages",void 0),e([p(),j("esri/t9n/common")],J.prototype,"messagesCommon",void 0),e([p(),j("esri/core/t9n/Units")],J.prototype,"messagesUnits",void 0),e([p()],J.prototype,"routeServiceUrl",null),e([p()],J.prototype,"routeSymbol",null),e([p()],J.prototype,"searchProperties",void 0),e([p()],J.prototype,"stopSymbols",null),e([p()],J.prototype,"unit",null),e([p()],J.prototype,"view",null),e([p({type:M})],J.prototype,"viewModel",void 0),e([p()],J.prototype,"visibleElements",void 0),e([v("visibleElements")],J.prototype,"castVisibleElements",null),e([H()],J.prototype,"_handleStopIconClick",null),e([H()],J.prototype,"_handleClearRouteClick",null),e([H()],J.prototype,"_handleReverseStops",null),e([H()],J.prototype,"_handleRemoveStop",null),e([H()],J.prototype,"_handleSectionToggle",null),e([H()],J.prototype,"_handleSummaryInteraction",null),e([H()],J.prototype,"_handleManeuverClick",null),J=e([m(G)],J);const Q=J;export{Q as default};