1(self.webpackChunkone_web=self.webpackChunkone_web||[]).push([[4364],{73866:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>Y});var i=a(71413),r=a(52706),s=a(35135),o=a(56599),l=a(5218),n=a(30555),d=a(80027),c=a(85385),h=a(39569),p=a(22708),u=a(52850),m=a(4983),g=a(10388),y=a(91780),v=a(66003),b=a(29686),f=a(57914),w=a(31395),$=a(82224),k=a(88014),x=a(95504),A=a(99863),M=a(63822),T=a(98979),C=a(85564),R=a(24634),_=a(5124),q=a(32701),F=a(38155),S=a(78707),E=a(86094),I=a(18211),O=a(42582),L=a(87032),N=Object.defineProperty,V=Object.getOwnPropertyDescriptor,P=(e,t,a,i)=>{for(var r,s=i>1?void 0:i?V(t,a):t,o=e.length-1;o>=0;o--)(r=e[o])&&(s=(i?r(t,a,s):r(s))||s);return i&&s&&N(t,a,s),s};let U=class extends((0,o.N)(g.Ay)(i.WF)){constructor(){super(...arguments),this.showRoadwayModal=!1,this.selectedIdx=-1,this.isUserLoggedIn=!1,this.popularRoadways=[],this.qbRoadways=[],this.moreRoadsButtonRef=(0,F._)(),this.moreRoadsInputRef=(0,F._)()}static get styles(){return[q.A,_.A,R.A,T.A,C.A,L.A]}render(){return i.qy` 2 <div 3 class="quick-buttons" 4 role="radiogroup" 5 aria-label="Use the following quick buttons to enable popular combinations of map layers." 6 > 7 ${d.ph?.quickButtons.map(((e,t)=>i.qy` <button 8 class="quick-button-btn quick-button ${(0,n.H)({selected:!e.favoritesBtn&&t===this.selectedIdx,link:!!e.favoritesBtn})}" 9 aria-label="Show ${e.label} ${e.favoritesBtn?"":"Layer"}" 10 role="${(0,s.J)(e.favoritesBtn?void 0:"radio")}" 11 aria-checked=${(0,s.J)(e.favoritesBtn?void 0:t===this.selectedIdx)} 12 @click=${this.handleClick} 13 data-idx=${t} 14 > 15 <div class="quick-button-icon"> 16 ${e.favoritesBtn?i.qy`<img src="${(0,s.J)(e.icon)}" alt="${e.label}" />`:i.qy` <img src="${(0,s.J)(e.icon)}" alt="${e.label}" />`} 17 </div> 18 ${e.favoritesBtn?i.qy` <p class="quick-button-copy">${e.label}</p> `:i.qy`<p class="quick-button-copy">${e.label}</p>`} 19 </button>`))} 20 </div> 21 <div class="quick-roadways"> 22 ${this.renderLinks()} 23 <div class="quick-roadway-wrapper"> 24 <button 25 type="button" 26 class="quick-roadway quick-roadway-more" 27 @click=${this.toggleModal} 28 ${(0,F.K)(this.moreRoadsButtonRef)} 29 aria-controls="qbRoadwayModal" 30 aria-haspopup="menu" 31 aria-expanded=${this.showRoadwayModal} 32 > 33 More 34 <svg id="back-button-img" class="btn_icon" style="fill: white;" aria-hidden="true"> 35 <use href="${"/images/sprites.svg#arrow-down"}"></use> 36 </svg> 37 </button> 38 ${this.renderRoadwayModal()} 39 </div> 40 </div> 41 `}renderLinks(){const e=e=>i.qy` <button 42 type="button" 43 class="quick-roadway ${(0,n.H)({"hide-mobile":!!e.hideMobile})}" 44 @click=${this.handleRoadway} 45 data-link="${e.link}" 46 aria-label="Quick Search for ${e.name} Events" 47 > 48 ${e.name} 49 </button>`;return this.qbRoadways.length?i.qy`${this.qbRoadways.map(((t,a)=>e(t)))}`:i.qy`${d.ph?.defaultRoadways.map(((t,a)=>e(t)))}`}renderRoadwayModal(){return i.qy` 50 <div 51 class="roadway-modal ${!0===this.showRoadwayModal?"":"hidden"}" 52 aria-label="roadway search dropdown" 53 @blur=${this.focusOut} 54 id="qbRoadwayModal" 55 role="menu" 56 > 57 <div class="roadway-modal-search" role="menuitem"> 58 <label 59 for="quick-roadway-search" 60 style="height: .5px; width: 0; overflow: hidden; display: inline-block;" 61 >Roadway Search</label 62 > 63 <input 64 id="quick-roadway-search" 65 type="text" 66 class="roadway-input" 67 placeholder="Roadway" 68 ${(0,F.K)(this.moreRoadsInputRef)} 69 @keyup=${this.filterPopularRoutes} 70 /> 71 <h6>Popular Roadways</h6> 72 </div> 73 <div class="roadway-modal-scroll"> 74 <div class="roadway-modal-results"> 75 ${this.popularRoadways?this.popularRoadways.map((e=>i.qy` 76 <button 77 role="menuitem" 78 type="button" 79 class="roadway-modal-result btn btn-link" 80 @click=${this.handleRoadway} 81 data-link=${this.generateRoadwayString(e)} 82 > 83 <svg 84 class="btn_icon roadway-modal-icon" 85 role="presentation" 86 aria-hidden="true" 87 > 88 <use href="/images/sprites.svg#roadway"></use> 89 </svg> 90 ${e.name} 91 </button> 92 `)):i.qy` <p>No matching popular routes found.</p> `} 93 </div>
94 </div> 95 </div> 96 `}async handleClick(e){const t=e.currentTarget.getAttribute("data-idx");let a;if("string"==typeof t&&(a=parseInt(t,10)),"number"==typeof a&&!Number.isNaN(a)){this.selectedIdx=a;const e=d.ph?.quickButtons?.[a];if(e.roadways?.length&&(this.qbRoadways=e.roadways),g.Ay.dispatch((0,p.P)(p.U.TRAY_QUICK_BUTTON_CLICK,e?.label??e?.icon,u.l_R.TRAY_EVENT)),e?.favoritesBtn)return void await this.navFavorites();const t=e?.classifications?.reduce(((e,t)=>(e[t]=!0,e)),{});if(t){const e={};for(const t in g.Ay.getState().app.activeLayers)e[t]=!1;this.allLayers={...e,...t},g.Ay.dispatch((0,E.h)(t)),await g.Ay.dispatch((0,S.gX)())}}}handleKeyup(e){"Escape"===e.code&&(this.showRoadwayModal=!1,this.moreRoadsButtonRef?.value?.focus())}focusOut(){this.showRoadwayModal=!1}async handleRoadway(e){const t=e.currentTarget,a=t.getAttribute("data-link");a&&(g.Ay.dispatch((0,p.P)(p.U.TRAY_QUICK_ROAD_CLICK,t.innerText||a,u.l_R.TRAY_EVENT)),await g.Ay.dispatch((0,v.oo)(`${a}`)))}async navFavorites(){this.isUserLoggedIn?this.dispatchEvent(new CustomEvent("show-favorites")):await g.Ay.dispatch((0,v.oo)("#login"))}toggleModal(){if(this.showRoadwayModal)return this.showRoadwayModal=!1,null!=window.dismissQuickButtonMoreDropdownCallback&&(document.body.removeEventListener("click",window.dismissQuickButtonMoreDropdownCallback,!0),window.dismissQuickButtonMoreDropdownCallback=void 0),void this.moreRoadsButtonRef.value?.focus();this.showRoadwayModal=!0,window.dismissQuickButtonMoreDropdownCallback=this.dismissModal.bind(this),document.body.addEventListener("click",window.dismissQuickButtonMoreDropdownCallback,!0),this.dispatchEvent(new CustomEvent("click-more-quick-roads")),setTimeout((()=>this.moreRoadsInputRef.value?.focus()),0)}dismissModal(e){if(!this.showRoadwayModal)return;const t=e.composedPath();t.some((e=>e?.classList?.contains("quick-roadway-more")))||t.filter((e=>{const t=e;return"string"==typeof t?.className&&t.className.includes("roadway-modal")})).length||(this.showRoadwayModal=!1)}generateRoadwayString(e){return`/search/roadway=${(0,O.A)(e.name)}/@${(0,I.A)(e.bbox[0])},${(0,I.A)(e.bbox[1])},${(0,I.A)(e.bbox[2])},${(0,I.A)(e.bbox[3])}/`}filterPopularRoutes(e){const{value:t}=e.currentTarget;this.popularRoadways=g.Ay.getState().areasAndLocations.allRoutes.filter((e=>function(e,t){const a=e.replaceAll(/[\W]/gi,"").split("").join(".*");return new RegExp(a,"i").test(t)}(t,e.name)))}checkForRemoveSelect(e){const t=this.allLayers,a=e;for(const i in e)t&&t[i]!==a[i]&&(this.selectedIdx=-1,this.allLayers=void 0)}connectedCallback(){super.connectedCallback(),this.addEventListener("keyup",this.handleKeyup)}disconnectedCallback(){this.removeEventListener("keyup",this.handleKeyup),super.disconnectedCallback()}stateChanged(e){this.isUserLoggedIn=(0,x.M3)(e),this.popularRoadways=e.areasAndLocations.allRoutes,this.checkForRemoveSelect(e.app.activeLayers)}};P([(0,r.MZ)({type:Boolean})],U.prototype,"showRoadwayModal",2),P([(0,r.MZ)({type:Number})],U.prototype,"selectedIdx",2),P([(0,r.MZ)({type:Boolean})],U.prototype,"isUserLoggedIn",2),P([(0,r.MZ)({type:Array})],U.prototype,"popularRoadways",2),P([(0,r.MZ)({type:Array})],U.prototype,"qbRoadways",2),P([(0,r.MZ)({type:Object})],U.prototype,"allLayers",2),U=P([(0,r.EM)("tray-quick-buttons")],U);var B=a(58959),D=a(3011),Z=(a(41820),a(6710),a(5110),Object.defineProperty),z=Object.getOwnPropertyDescriptor,W=(e,t,a,i)=>{for(var r,s=i>1?void 0:i?z(t,a):t,o=e.length-1;o>=0;o--)(r=e[o])&&(s=(i?r(t,a,s):r(s))||s);return i&&s&&Z(t,a,s),s};let j=class extends((0,o.N)(g.M_)(B.o)){constructor(){super(...arguments),this.routes=[],this.currentRoute=new URLSearchParams(window.location.search).get("rt")||"",this.getCallInterval=0,this.removeRoute=()=>{g.M_.dispatch((0,v.oo)(window.location.href.replace(/&rt.*/g,""))),this.currentRoute=""}}static get styles(){return[q.A,_.A,D.A,T.A,C.A,i.AH` 97 :host { 98 background: white; 99 margin-top: 5px; 100 margin-bottom: 40px; 101 } 102 .delays { 103 border-top: 1px solid #ccc; 104 padding: 15px; 105 } 106 .sign { 107 text-align: center; 108 background: #f49b36; 109 border-radius: 20px; 110 padding: 7.5px; 111 width: 65%; 112 margin: 0 auto; 113 min-width: 310px; 114 box-shadow: 0px 0px 5px rgba(55, 55, 55, 0.5); 115 } 116 .sign h3 { 117 font-size: 15px; 118 margin-top: 5px; 119 font-weight: bold; 120 } 121 .sign-header { 122 padding: 5px; 123 border: 3px solid #223; 124 border-top-left-radius: 10px; 125 border-top-right-radius: 10px; 126 } 127 .route-delay { 128 font-size: 13px; 129 } 130 .time { 131 display: inline-block; 132 padding: 1px 3px 1px 5px; 133 background: #223; 134 color: white; 135 border-radius: 3px; 136 min-width: 30px; 137 font-family: 'Iceberg', sans-serif; 138 font-size: 24px; 139 letter-spacing: 2px; 140 position: relative; 141 top: 3px; 142 text-align: center; 143 line-height: 1.25; 144 } 145 .delayed { 146 font-family: 'Iceberg', sans-serif; 147 font-size: 14px; 148 display: inline-block; 149 font-weight: bold; 150 margin-left: 4px; 151 margin-right: 4px; 152 display: inline-block; 153 padding: 2px 5px; 154 background: #223; 155 color: white; 156 top: -1px; 157 border-radius: 3px; 158 position: relative; 159 text-align: center; 160 line-height: 1.25; 161 } 162 .delayed.green { 163 color: #57ff57; 164 } 165 .delayed.yellow { 166 color: #ffff57; 167 } 168 .delayed.red { 169 color: #ff5757; 170 } 171 .detour-header { 172 display: inline-block; 173 background: #223; 174 border: 3px solid #223; 175 color: white; 176 width: calc(100% - 16px); 177 padding: 5px; 178 border-bottom-left-radius: 15px; 179 border-bottom-right-radius: 15px; 180 font-size: 15px; 181 } 182 .delay-hr { 183 border: 2px solid #223; 184 } 185 .route-link p { 186 margin-top: 15px; 187 margin-bottom: 5px; 188 display: inline-flex;
189 align-content: center; 190 justify-content: center; 191 } 192 .route-link a { 193 margin-left: 15px; 194 color: white; 195 display: inline-flex; 196 align-items: center; 197 justify-content: center; 198 min-width: 145px; 199 } 200 .route-delay-btn { 201 border: none; 202 background: none; 203 color: white; 204 display: inline-flex; 205 justify-content: center; 206 align-items: center; 207 padding: 0 10px; 208 cursor: pointer; 209 } 210 .route-link svg { 211 margin-right: 5px; 212 } 213 `]}async getDelay(){if(!d.DR.endpoints.delays)return;const e=await fetch(`${d.DR.endpoints.delays}`),t=await e.json(),a=[];t.forEach((e=>{e.Name.includes("PCMS 1")?a[0]=e:e.Name.includes("PCMS 3")?a[1]=e:a[2]=e})),this.routes=a}connectedCallback(){super.connectedCallback();const e=setInterval((()=>{this.getDelay()}),6e3);this.getCallInterval=e,this.getDelay()}render(){return this.routes?i.qy` 214 <card-result-list role="main"> 215 <h2 slot="title" class="h-display heading-list-title"> 216 Work Zone Delays 217 <context-help-tooltip slot="prefix"> 218 <h3>What's This?</h3> 219 <p>Current Major Delays</p> 220 </context-help-tooltip> 221 </h2> 222 <div class="delays"> 223 <div class="signs"> 224 <div class="sign"> 225 <div class="sign-header"> 226 <h2>SUMNER TUNNEL CLOSURE</h2> 227 <h3>CLOSED FROM JULY 5 TO AUGUST 5</h3> 228 </div> 229 230 <h2 class="detour-header">DETOUR TRAVEL TIMES</h2> 231 <div class="sign-body"> 232 ${this.routes.length?this.routes.map(((e,t)=>{const a=e.Name.includes("PCMS 1")?"sumner-0":e.Name.includes("PCMS 3")?"sumner-1":"sumner-2";return i.qy` 233 <div class="route"> 234 <h3 style="white-space: pre-line;"> 235 ${e.Name.includes("PCMS 1")?"Rt 1A NB: From Bennington St to \nBell Circle/Rt 16":e.Name.includes("PCMS 3")?"Rt 16 WB: From Bell Circle to \nI-93 NB/Medford":"I-93 NB: From Tobin Bridge/Rt 99 NB to \nI-93 NB/Medford"} 236 </h3> 237 <p> 238 <b>Total travel time:</b> 239 <span 240 class=${(0,n.H)({time:!0,green:e.TravelTimeTotal<5,yellow:e.TravelTimeTotal<10,red:e.TravelTimeTotal>10})} 241 >${Math.ceil(e.TravelTimeTotal)}</span 242 > 243 ${Math.ceil(e.TravelTimeTotal)>1?"minutes":"minute"} 244 </p> 245 246 <div class="route-link"> 247 <p class="route-delay"> 248 Delayed: 249 <span 250 class=${(0,n.H)({delayed:!0,green:e.TravelTimeTotal/e.FreeFlowTravelTime<=1.6,yellow:e.TravelTimeTotal/e.FreeFlowTravelTime>1.6&&e.TravelTimeTotal/e.FreeFlowTravelTime<=2.5,red:e.TravelTimeTotal/e.FreeFlowTravelTime>2.5})} 251 >${Math.ceil(e.TravelTimeTotal-e.FreeFlowTravelTime)} 252 </span> 253 ${Math.ceil(e.TravelTimeTotal-e.FreeFlowTravelTime)>1?"minutes":"minute"} 254 ${this.currentRoute===a?i.qy` 255 <a class="route-delay-btn" @click=${this.removeRoute}> 256 <svg 257 height="20.02" 258 width="20" 259 viewBox="0 0 20 20.02" 260 xmlns="http://www.w3.org/2000/svg" 261 > 262 <path 263 d="M19.29 8.27L11.74.73a2.45 2.45 0 00-3.48 0L.72 8.27a2.45 2.45 0 000 3.49l7.54 7.53a2.45 2.45 0 003.48 0l7.53-7.53a2.47 2.47 0 00.02-3.49zm-7.92 2.57V8.72H8.94v5.54h-2.5V8.72a2.5 2.5 0 012.5-2.5h2.43V4.1l3.39 3.38z" 264 fill="#ffffff" 265 /> 266 </svg> 267 Remove From Map 268 </a> 269 `:i.qy` 270 <a 271 href=${`/@-71.0701,42.39296,13?show=trafficSpeeds&rt=${a}`} 272 @click=${()=>{this.currentRoute=a}} 273 ><svg 274 height="20.02" 275 width="20" 276 viewBox="0 0 20 20.02" 277 xmlns="http://www.w3.org/2000/svg" 278 > 279 <path 280 d="M19.29 8.27L11.74.73a2.45 2.45 0 00-3.48 0L.72 8.27a2.45 2.45 0 000 3.49l7.54 7.53a2.45 2.45 0 003.48 0l7.53-7.53a2.47 2.47 0 00.02-3.49zm-7.92 2.57V8.72H8.94v5.54h-2.5V8.72a2.5 2.5 0 012.5-2.5h2.43V4.1l3.39 3.38z" 281 fill="#ffffff" 282 /> 283 </svg> 284 View On Map 285 </a> 286 `} 287 </p> 288 </div> 289 </div> 290 <hr class="delay-hr" /> 291 `})):i.qy` 292 <p> 293 <br /> 294 There will be Sumner Tunnel construction beginning soon that will cause 295 detours and delays around the Sumner Tunnel area. Please be advised these 296 delays may effect your travel times. 297 <br /> 298 </p> 299 `} 300 </div> 301 </div> 302 </div>
303 </div> 304 </card-result-list> 305 `:i.qy``}disconnectedCallback(){super.disconnectedCallback(),clearInterval(this.getCallInterval)}};W([(0,r.MZ)({type:Array})],j.prototype,"routes",2),W([(0,r.MZ)({type:String})],j.prototype,"currentRoute",2),j=W([(0,r.EM)("tray-delay")],j),a(53903),a(32825),a(58877),a(55453),a(70544),a(62600),a(70909),a(95313),a(82890),a(16053);var H=a(20732),K=a(21379),J=Object.defineProperty,Q=Object.getOwnPropertyDescriptor,G=(e,t,a,i)=>{for(var r,s=i>1?void 0:i?Q(t,a):t,o=e.length-1;o>=0;o--)(r=e[o])&&(s=(i?r(t,a,s):r(s))||s);return i&&s&&J(t,a,s),s};let Y=class extends((0,o.N)(g.M_)(B.o)){constructor(){super(...arguments),this.events=[],this.cameras=[],this.cmsMessages=[],this.cmsFloodgates=[],this.cmsCampaigns=[],this.isLoggedIn=!1,this.isAccountPending=!1,this.cameraViewType=m.j6.Default,this.activationSubmissionStatus=u.vky.UNSUBMITTED,this.showFavorites=!1}static get styles(){return[q.A,_.A,R.A,T.A,C.A,i.AH` 306 .fav-list-btn { 307 padding: 0.25rem var(--gap); 308 display: inline-block; 309 border-radius: var(--border-radius); 310 margin-top: 0.75rem; 311 color: #fff; 312 } 313 .fav-list-text { 314 white-space: initial; 315 } 316 .fav-wrap { 317 display: flex; 318 } 319 .fav-title { 320 flex: 1; 321 white-space: initial; 322 } 323 324 .fav-title > .badge-pill { 325 margin-top: calc(var(--gap) / 4); 326 margin-left: calc(var(--gap) / 2); 327 height: fit-content; 328 } 329 330 .fav-edit-btn, 331 .fav-edit-btn:active, 332 .fav-edit-btn:hover { 333 flex-direction: column; 334 font-size: var(--smallest); 335 color: rgb(var(--concrete)); 336 padding: 0.5rem; 337 box-shadow: none !important; 338 } 339 .fav-edit-icon { 340 width: 1rem; 341 height: 1rem; 342 padding-bottom: 0.25rem; 343 } 344 date-last-updated { 345 display: block; 346 margin-bottom: 0.25rem; 347 } 348 349 .campaigns-list { 350 width: calc(100% - 2 * var(--gap)); 351 box-shadow: var(--shadow-sm); 352 margin-left: var(--gap); 353 margin-right: var(--gap); 354 border: var(--border-width) solid rgb(var(--silver)); 355 margin-bottom: calc(var(--gap) * 2); 356 border-left: 0px !important; 357 border-right: 0px !important; 358 } 359 360 .campaign-card { 361 width: 100%; 362 } 363 364 .campaign-card-link { 365 width: 100%; 366 height: 100%; 367 display: block; 368 line-height: 0; 369 position: relative; 370 transition: all 0.15s ease-in-out 0s; 371 } 372 373 .campaign-card-link:hover { 374 box-shadow: 0 0 0 0.25rem rgba(var(--peter-river), 0.25); 375 z-index: 10; 376 } 377 378 .campaign-card-link:focus { 379 position: relative; 380 z-index: 10; 381 } 382 383 .campaign-card-img { 384 width: 100%; 385 height: auto; 386 } 387 388 .link-icon { 389 opacity: 0; 390 position: absolute; 391 right: calc(var(--gap) / 2); 392 bottom: calc(var(--gap) / 2); 393 color: white; 394 height: 2rem; 395 width: 2rem; 396 transition: all 0.2s ease-in-out; 397 } 398 399 .campaign-card-link:hover > .link-icon { 400 opacity: 100; 401 } 402 403 .cms-message-content { 404 max-height: 4rem; 405 overflow-y: ellipsis; 406 position: relative; 407 white-space: normal; 408 } 409 410 .fadeout { 411 position: absolute; 412 top: 2rem; 413 width: 100%; 414 height: 2rem; 415 background-image: linear-gradient(rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 1) 100%); 416 } 417 418 .heading-list-title { 419 margin: 0; 420 padding: 1rem; 421 color: rgb(var(--tray-list-title-fg, --darker)); 422 background-color: rgb(var(--tray-list-title-bg)); 423 } 424 425 #critical-events-header { 426 background-color: rgb(var(--critical-events-header-bg, --tray-list-title-bg)); 427 color: rgb(var(--critical-events-header-text, --tray-list-title-fg)); 428 } 429 .header-message { 430 font-size: 14px; 431 display: flex; 432 align-items: center; 433 justify-content: center; 434 } 435 `]}render(){const e=this.cameras||[];return this.isLoading?i.qy` 436 <div class="h-display placeholder_h2"></div> 437 <card-media-carousel @crc:carousel:scrolltocard=${this.onCarouselScrollToCard}> 438 <card-media visible></card-media> 439 <card-media visible></card-media> 440 <card-media></card-media> 441 </card-media-carousel> 442 <card-result-list role="list"> 443 <h2 slot="title" class="h-display heading-list-title" id="critical-events-header"> 444 ${(0,M.A)("dashboard.list.title","Critical Events")} 445 </h2> 446 <card-result loading role="listitem"></card-result> 447 </card-result-list> 448 `:i.qy` 449 ${d.ps.headerMessage?i.qy` <card-result-list 450 style="position: sticky; 451 max-width: 100vw; 452 top: 0; 453 z-index: 2;" 454 > 455 <h2 slot="title" class="h-display heading-list-title header-message"> 456 ${(0,l._)(d.ps.headerMessage)} 457 </h2> 458 </card-result-list>`:i.qy``} 459 <card-result-list> 460 <h2 slot="title" class="h-display heading-list-title"> 461 ${d.ph?.header} 462 <context-help-tooltip 463 slot="prefix" 464 @show=${()=>g.M_.dispatch({type:u.Aky,title:"Quick Buttons"})} 465 > 466 <h3>What's This?</h3> 467 <p>${d.ph?.infoText}</p> 468 </context-help-tooltip> 469 </h2> 470 <tray-quick-buttons 471 @show-favorites=${this.setShowFavorites} 472 @click-more-quick-roads=${this.onClickMoreQuickRoads} 473 ></tray-quick-buttons> 474 </card-result-list>
475 ${this.showFavorites?i.qy` 476 ${d.mc&&d.ps.showCameras?i.qy` 477 ${this.renderDashboardCameraHeader()} 478 <card-media-carousel 479 @crc:carousel:scrolltocard=${this.onCarouselScrollToCard} 480 .itemKeys=${e.map((e=>e.uri)).sort()} 481 > 482 ${this.renderAddFavoriteCameraPrompt()} 483 ${e.map(((e,t)=>{const a=e?.url??d.QW["camera-unavailable"];return e&&e.category===u.NaE.LINK?i.qy` 484 <card-media-external-link 485 @card-click=${this.cameraViewClicked} 486 uri=${e.uri} 487 hover-uri=${(0,s.J)(e.parentCollection.uri??void 0)} 488 category="${e.category}" 489 src=${a} 490 title=${e.title} 491 ?visible=${0===t} 492 > 493 ${e.title} 494 </card-media-external-link> 495 `:i.qy` 496 <card-media 497 @card-click=${this.handleMediaCardClick} 498 @crc:card:mouseover=${H.A} 499 @crc:card:mouseout=${H.n} 500 category=${e.category} 501 src=${a} 502 uri=${e.uri} 503 hover-uri=${(0,s.J)(e.parentCollection.uri??void 0)} 504 title=${e.title} 505 ?visible=${0===t} 506 > 507 ${i.qy` 508 <favorite-camera-view-button 509 slot="card-button" 510 class="card_header-button-container" 511 contentUri=${e.uri} 512 contentType=${u.Gqw.CAMERA} 513 hide-labels 514 ></favorite-camera-view-button> 515 `} 516 ${e.title} 517 </card-media> 518 `}))} 519 </card-media-carousel> 520 `:void 0} 521 ${i.qy`${this.renderFavoritesList()} ${this.renderFavoriteVisual()}`} 522 `:i.qy` 523 <card-result-list role="list"> 524 <h2 slot="title" class="h-display heading-list-title" id="critical-events-header"> 525 ${(0,M.A)("dashboard.list.title","Critical Information")} 526 <context-help-tooltip 527 slot="prefix" 528 @show=${()=>g.M_.dispatch({type:u.Aky,title:"critical events"})} 529 > 530 <h3>What's This?</h3> 531 <p>${(0,l._)(d.d2.dashboardList)}</p> 532 </context-help-tooltip> 533 </h2> 534 ${!this.error&&this.cmsFloodgates?i.qy` 535 ${this.cmsFloodgates?.map((e=>i.qy`<card-result 536 icon="/images/icon-floodgate.svg" 537 border-color="rgb(var(--notification-bg, var(--danger)))" 538 uri="/${e.uri}" 539 role="listitem" 540 > 541 <h3>${e.title}</h3> 542 ${"High"===e.priority?i.qy` 543 <p class="text-muted text-smaller" style="white-space: normal"> 544 ${(0,l._)(e.content)} 545 </p> 546 `:i.qy``} 547 </card-result>`))} 548 `:i.qy``} 549 ${this.error||!this.events?i.qy` 550 <card-result 551 role="listitem" 552 icon="${d.KP.icon}" 553 border-color=${d.KP.borderColor} 554 > 555 <h3>${d.KP.title}</h3> 556 <p class="text-muted text-smaller" style="white-space: normal"> 557 ${(0,l._)(d.KP.description)} 558 </p> 559 </card-result> 560 `:void 0} 561 ${this.error||0!==this.events.length||this.cmsFloodgates?.length?void 0:i.qy` 562 <card-result role="listitem" icon="${"/images/icon-search-fill-solid.svg"}"> 563 <h3> 564 ${(0,M.A)("dashboard.list.noresults.title","No results found. Make sure at least one map layer is turned on.")} 565 </h3> 566 <p class="text-muted text-smaller"> 567 ${(0,M.A)("dashboard.list.noresults.body","We can't find any critical road or weather events in your searched area.")} 568 </p> 569 </card-result> 570 `} 571 ${this.error?void 0:this.renderCriticalEvents()} 572 </card-result-list> 573 574 ${this.renderCMSContent()} 575 <slot name="twitterFeed"></slot> 576 `} 577 `}renderCriticalEvents(){return this.events.map((e=>{const t=(e.delayDescriptions?e.delayDescriptions:[]).filter((e=>!e?.segmentDelays?.length)),a=e.isWazeEvent?e.beginTime:e.lastUpdated;return i.qy` 578 <card-result 579 .result=${e} 580 icon="${e.icon||""}" 581 uri="/${e.uri}" 582 hover-uri="${e.uri}" 583 thumb-url=${(0,s.J)(e?.views?.[0]?.url??void 0)} 584 thumb-alt=${(0,s.J)(e.title??void 0)} 585 thumb-category="${(0,s.J)(e.views&&e.views[0]?e.views[0].category:u.NaE.UNKNOWN)}" 586 border-color="${e.color||""}" 587 .delayDescriptions=${t} 588 .quantities=${e?.quantities||[]} 589 @crc:card:mouseover=${H.A} 590 @crc:card:mouseout=${H.n} 591 @click=${this.trackEventClick}
591 592 role="listitem" 593 > 594 <h3>${e.title}</h3> 595 ${a?i.qy` 596 <date-last-updated 597 ?isWazeEvent="${e.isWazeEvent}" 598 .agencyAttribution="${e.agencyAttribution}" 599 timestamp=${(0,s.J)(a.timestamp)} 600 timezone=${(0,s.J)(a.timezone)} 601 label="${e.isWazeEvent?"Reported by":"Updated"}" 602 ></date-last-updated> 603 `:void 0} 604 <p class="text-muted text-smaller">${e.cityReference}</p> 605 </card-result> 606 `}))}handleMediaCardClick(e){const t=e.currentTarget?.uri;(0,H.n)(),g.M_.dispatch((0,K.z)(t))}renderDashboardCameraHeader(){if(d.mc)return this.cameraViewType===m.j6.Favorite&&this.isLoggedIn?i.qy` 607 <h4 class="h-display"> 608 ${(0,M.A)("dashboard.camera.favoriteHeader","Your Favorite Cameras")} 609 <context-help-tooltip 610 slot="prefix" 611 @show=${()=>g.M_.dispatch({type:u.Aky,title:"favorite cameras"})} 612 > 613 <h3>What's This?</h3> 614 <p>${(0,l._)(d.d2.favoriteCameras)}</p> 615 </context-help-tooltip> 616 </h4> 617 `:this.cameraViewType===m.j6.Hot?i.qy` 618 <h4 class="h-display"> 619 ${(0,M.A)("dashboard.camera.header","Hot cameras")} 620 <context-help-tooltip 621 slot="prefix" 622 @show=${()=>g.M_.dispatch({type:u.Aky,title:"hot cameras"})} 623 > 624 <h3>What's This?</h3> 625 <p>${(0,l._)(d.d2.hotCameras)}</p> 626 </context-help-tooltip> 627 </h4> 628 `:void this.setHideFavorites()}renderAddFavoriteCameraPrompt(){if(this.isLoggedIn&&this.cameraViewType===m.j6.Favorite&&0===this.cameras?.length)return i.qy` 629 <card-media 630 @card-click=${this.openFavoriteCameraInstuctions} 631 src=${"/images/icon-camera-add-favorites.svg"} 632 alt=${(0,M.A)("prompt.favorite.camera","Add a favorite a camera")} 633 title=${(0,M.A)("prompt.favorite.camera","Let's favorite a camera")} 634 visible 635 > 636 ${(0,M.A)("prompt.favorite.camera","Let's favorite a camera")} 637 </card-media> 638 `}openFavoriteCameraInstuctions(){g.M_.dispatch({type:u.DoY,tutorialType:u.S9j.FAVORITE}),g.M_.dispatch({type:u.BSm,slug:u.QeQ.FAVORITE_CAMERA_ADD})}renderFavoritesList(){if(this.error||!this.isLoggedIn)return;const e=this.activationSubmissionStatus===u.vky.SUCCESS,t=this.activationSubmissionStatus===u.vky.ERROR,a=this.activationSubmissionStatus===u.vky.PENDING||this.activationSubmissionStatus===u.vky.UNSUBMITTED;return i.qy`<card-result-list role="list" id="favorites"> 639 <h2 slot="title" class="h-display"> 640 ${this.favorites?.length??0} ${1===this.favorites?.length?"Favorite":"Favorites"} 641 <context-help-tooltip slot="prefix"> 642 <h3>What's This?</h3> 643 <p>${(0,l._)(d.d2.favoritesList)}</p> 644 </context-help-tooltip> 645 </h2> 646 ${this.isAccountPending?i.qy` 647 <card-result icon=${"images/icon-mail-fill-solid-round.svg"} role="listitem"> 648 <h3>Your account is not fully activated</h3> 649 <p class="text-muted text-smaller fav-list-text"> 650 To activate your account, you must click the Accept link in the email. 651 </p> 652 <button 653 class=${(0,n.H)({btn:!0,"btn-dark":a,"btn-success":e,"btn-error":t,"btn-sm":!0,"fav-list-btn":!0})} 654 ?disabled=${e} 655 @click=${this.clickResendEmail} 656 > 657 ${this.activationSubmissionStatus===u.vky.PENDING?i.qy`<spinning-loader class="btn-loader"></spinning-loader>`:void 0} 658 ${a?"Resend email":void 0} 659 ${e?"Activation email sent":void 0} 660 ${t?"Activation email failed to send":void 0} 661 </button> 662 </card-result> 663 `:void 0} 664 ${this.favorites?.length?void 0:i.qy` 665 <card-result icon=${"/images/icon-favorite-fill-solid.svg"} role="listitem"> 666 <h3>${(0,M.A)("prompt.addFavorite","Add a Favorite")}</h3> 667 <p class="text-muted text-smaller fav-list-text"> 668 ${(0,M.A)("prompt.noFavorites","You don't have any favorite places or routes.")} 669 </p> 670 <button class="btn btn-dark btn-sm fav-list-btn" @click=${this.clickAddFavorite}> 671 Let's add one! 672 </button> 673 </card-result> 674 `} 675 ${this.favorites?.map((e=>{if(!e.visual)return;const t=this.determineFavoriteTypeSlug(e),a=(e.alertSchedule?.sendEmail||e.alertSchedule?.sendSms)??!1;return i.qy` 676 <card-result 677 uri=${(0,s.J)(e.url)} 678 icon=${this.determineFavoriteIcon(t,a)} 679 border-color="rgb(var(--travel-time-sign-blue))" 680 data-uri=${e.uri} 681 @crc:card:mouseover=${this.handleFavoriteMouseover} 682 @crc:card:mouseout=${this.handleFavoriteMouseout} 683 role="listitem" 684 > 685 <div class="fav-wrap"> 686 <h3 class="fav-title"> 687 ${e.name} 688 ${a?i.qy`<span class="badge badge-pill badge-teal">notifications</span>`:void 0} 689 </h3> 690 <a 691 class="btn fav-edit-btn" 692 title="Edit" 693 href="#${u.Gqw.FAVORITE}/${t}/${A.u2.EDIT}/${e.id}" 694 @click=${this.handleFavoriteEditClick} 695 > 696 <img 697 src=${"images/icon-edit-fill-solid.svg"} 698 alt="" 699 class="fav-edit-icon" 700 role="presentation" 701 /> 702 <div>Edit</div> 703 </a> 704 </div> 705 </card-result> 706 `}))} 707 </card-result-list> `}renderCMSContent(){if(0!==this.cmsMessages.length||0!==this.cmsCampaigns.length)return i.qy` <card-result-list role="list"> 708 <h2 slot="title" class="h-display"> 709 ${(0,M.A)("dashboard.list.announcements","Announcements")} 710 <context-help-tooltip 711 slot="prefix" 712 @show=${()=>g.M_.dispatch({type:u.Aky,title:"announcement"})} 713 > 714 <h3>What's This?</h3> 715 <p>
715${(0,l._)(d.d2.dashboardAnnouncements)}</p> 716 </context-help-tooltip> 717 </h2> 718 ${this.error?i.qy` 719 <card-result 720 role="listitem" 721 icon="${d.KP.icon}" 722 border-color=${d.KP.borderColor} 723 > 724 <h3>${d.KP.title}</h3> 725 <p class="text-muted text-smaller" style="white-space: normal"> 726 ${(0,l._)(d.KP.description)} 727 </p> 728 </card-result> 729 `:void 0} 730 ${this.error?i.qy``:this.cmsCampaigns.map(((e,t)=>i.qy`<div 731 class="campaign-card" 732 data-idx=${t} 733 @click=${this.onClickCmsCampaign} 734 > 735 <a 736 class="campaign-card-link" 737 href=${e.url||"#"} 738 target="_blank" 739 title=${e.title} 740 aria-label=${e.title} 741 > 742 <img 743 class="campaign-card-img" 744 alt=${e.title} 745 src=${e.content} 746 width=${(0,s.J)(d.mq.campaignImageWidth)} 747 height=${(0,s.J)(d.mq.campaignImageHeight)} 748 /> 749 <img 750 class="link-icon" 751 src="${"/images/icon-external-link-outline.svg"}" 752 alt="External Campaign Link" 753 /> 754 </a> 755 </div>`))} 756 ${this.error?void 0:this.cmsMessages.map(((e,t)=>i.qy`<card-result 757 role="listitem" 758 uri="/${e.uri}" 759 icon="${"/images/icon-notification-fill-solid.svg"}" 760 border-color="rgb(var(--travel-time-sign-blue))" 761 data-idx=${t} 762 @click=${this.onClickCmsMessage} 763 > 764 <h3>${e.title}</h3> 765 <div class="cms-message-content"> 766 ${(0,h.p)(e.content)} 767 <div class="fadeout"></div> 768 </div> 769 </card-result>`))} 770 </card-result-list>`}onClickCmsCampaign(e){const t=e.currentTarget,a=parseInt(t.getAttribute("data-idx")||"-1",10);if(-1!==a){const{title:e,url:t}=this.cmsCampaigns[a],i=`title="${e}"&url=${t||""}`;g.M_.dispatch((0,p.P)("campaign",i,u.l_R.ANNOUNCEMENT))}}onClickCmsMessage(e){const t=e.currentTarget,a=parseInt(t.getAttribute("data-idx")||"-1",10);if(-1!==a){const{title:e,uri:t}=this.cmsMessages[a],i=`title="${e}"&url=${t}`;g.M_.dispatch((0,p.P)("message",i,u.l_R.ANNOUNCEMENT))}}determineFavoriteIcon(e,t){let a="";return e!==u.Odl.FAVORITE_AREA||t||(a="/images/icon-pin-fill-solid.svg"),e===u.Odl.FAVORITE_AREA&&t&&(a="/images/icon-pin-notification-fill-solid.svg"),e!==u.Odl.FAVORITE_ROUTE||t||(a="/images/icon-road-fill-solid.svg"),e===u.Odl.FAVORITE_ROUTE&&t&&(a="/images/icon-road-notification-fill-solid.svg"),e!==u.Odl.FAVORITE_DRAWN_AREA||t||(a="/images/icon-draw-fill-solid.svg"),e===u.Odl.FAVORITE_DRAWN_AREA&&t&&(a="/images/icon-draw-notification-fill-solid.svg"),a}determineFavoriteTypeSlug(e){return"FavoriteTrip"===e.__typename?u.Odl.FAVORITE_ROUTE:"FavoriteArea"===e.__typename&&e.customAreaShapeSource===m.dT.UserDrawn?u.Odl.FAVORITE_DRAWN_AREA:u.Odl.FAVORITE_AREA}renderFavoriteVisual(){const e=this.favorites?.find((e=>e.uri===this.hoveringFavoriteUri));if(e)return e.visual?.map((e=>i.qy` <map-feature .feature=${e}></map-feature> `))}handleFavoriteEditClick(e){const{href:t}=e.currentTarget;e.stopPropagation(),e.preventDefault(),g.M_.dispatch((0,v.oo)(t))}handleFavoriteMouseover(e){if((0,c.V)())return;if(this.activeView!==k.UN.DASHBOARD)return;const{uri:t}=e.currentTarget.dataset;if(!this.favorites||!t)throw new Error("Invalid state for favorite hover");g.M_.dispatch((0,y.$h)(t))}handleFavoriteMouseout(){this.activeView===k.UN.DASHBOARD&&g.M_.dispatch((0,y.$h)(void 0))}trackEventClick(e){const{uri:t}=e.currentTarget;t&&g.M_.dispatch({type:u.xOv,id:t})}updated(e){if(e.has("scrollToElement")&&this.scrollToElement){const e=this.renderRoot?.querySelector(this.scrollToElement);e&&requestAnimationFrame((()=>e.scrollIntoView()))}}setShowFavorites(){this.dispatchEvent(new CustomEvent("setshow-favorites"))}setHideFavorites(){this.dispatchEvent(new CustomEvent("sethide-favorites"))}onClickMoreQuickRoads(){this.dispatchEvent(new CustomEvent("click-more-quick-roads"))}stateChanged(e){this.activeView=e.tray.activeView,this.events=(0,k.yJ)(e),this.cameras=(0,k.OS)(e),this.cmsMessages=e.tray.dashboard.cmsMessages,this.cmsFloodgates=e.cmsContent.cmsFloodgates,this.cmsCampaigns=e.tray.dashboard.cmsCampaigns,this.isLoggedIn=(0,x.M3)(e),this.isAccountPending=e.your511.account?.accountStatus===m.u1.Pending,this.cameraViewType=e.tray.dashboard.cameraViewType,this.favorites=(0,A.iM
770)(e),this.isLoading=e.tray.isLoading,this.error=e.tray.error,this.hoveringFavoriteUri=e.your511Favorites.hoveringFavoriteUri,this.activationSubmissionStatus=e.your511.sendActivateEmailStatus,this.scrollToElement=e.app.scrollToElement}disconnectedCallback(){g.M_.dispatch((0,y.$h)(void 0)),(0,$.Zp)(),super.disconnectedCallback()}clickResendEmail(){g.M_.dispatch((0,b.e1)())}clickAddFavorite(){g.M_.dispatch((0,v.f5)(u.QeQ.FAVORITE_SEARCH)),g.M_.dispatch((0,f.ML)(w.lC))}};G([(0,r.MZ)({type:Array})],Y.prototype,"events",2),G([(0,r.MZ)({type:Array})],Y.prototype,"cameras",2),G([(0,r.MZ)({type:Array})],Y.prototype,"favorites",2),G([(0,r.MZ)({type:Array})],Y.prototype,"cmsMessages",2),G([(0,r.MZ)({type:Array})],Y.prototype,"cmsFloodgates",2),G([(0,r.MZ)({type:Array})],Y.prototype,"cmsCampaigns",2),G([(0,r.MZ)({type:String})],Y.prototype,"hoveringFavoriteUri",2),G([(0,r.MZ)({type:Boolean})],Y.prototype,"isLoggedIn",2),G([(0,r.MZ)({type:Boolean})],Y.prototype,"isAccountPending",2),G([(0,r.MZ)({type:String})],Y.prototype,"cameraViewType",2),G([(0,r.MZ)({type:String})],Y.prototype,"scrollToElement",2),G([(0,r.MZ)({type:String})],Y.prototype,"activationSubmissionStatus",2),G([(0,r.MZ)({type:Boolean})],Y.prototype,"showFavorites",2),Y=G([(0,r.EM)("tray-dashboard")],Y)},5110:(e,t,a)=>{"use strict";var i=a(71413),r=a(52706),s=a(5218),o=a(30555),l=a(96548),n=a(32701),d=a(5124),c=a(24634),h=Object.defineProperty,p=Object.getOwnPropertyDescriptor,u=(e,t,a,i)=>{for(var r,s=i>1?void 0:i?p(t,a):t,o=e.length-1;o>=0;o--)(r=e[o])&&(s=(i?r(t,a,s):r(s))||s);return i&&s&&h(t,a,s),s};let m=class extends l.Ay{constructor(){super(...arguments),this.hasCarousel=!1,this.hasCarouselSingle=!1}static get styles(){return[n.A,d.A,c.A,i.AH` 771 :host { 772 display: block; 773 padding-top: var(--gap); 774 } 775 776 .card-fields_row table, 777 .card-fields_row table th, 778 .card-fields_row table td { 779 border-color: rgb(var(--darkest)); 780 border-style: solid; 781 border-width: 2px; 782 } 783 .card-fields_row table thead { 784 color: white; 785 background-color: #0454a5; 786 } 787 .card-fields_row table thead tr th { 788 padding: 0.5rem; 789 text-align: center; 790 margin: 0 0.5rem; 791 } 792 .card-fields_row table tbody { 793 font-weight: 400; 794 } 795 .card-fields_row:nth-child(even) table tbody tr:nth-child(even) { 796 background-color: rgba(var(--clouds), 0); 797 } 798 .card-fields_row:nth-child(even) table tbody tr:nth-child(odd) { 799 background-color: rgba(var(--clouds), 1); 800 } 801 .card-fields_row:nth-child(odd) table tbody tr:nth-child(even) { 802 background-color: rgba(var(--clouds), 1); 803 } 804 .card-fields_row:nth-child(odd) table tbody tr:nth-child(odd) { 805 background-color: rgba(var(--silver), 0.8); 806 } 807 808 .disclaimer { 809 display: block; 810 margin: var(--gap) calc(var(--gap) * 2); 811 } 812 .card-fields { 813 width: 100%; 814 } 815 .card-fields_header { 816 max-width: 50%; 817 font-weight: normal; 818 padding: var(--gap); 819 padding-left: calc(var(--gap) * 2); 820 } 821 .card-fields_header[colspan='2'] { 822 width: 1%; 823 white-space: nowrap; 824 font-weight: normal; 825 padding: var(--gap); 826 padding-left: calc(var(--gap) * 2); 827 } 828 .card-fields_col { 829 font-weight: 500; 830 padding: var(--gap); 831 padding-right: calc(var(--gap) * 2); 832 overflow-wrap: anywhere; 833 } 834 .card-fields_col[colspan='2'] { 835 padding-left: calc(var(--gap) * 2); 836 padding-right: calc(var(--gap) * 2); 837 } 838 .card-fields_row--even { 839 background-color: rgba(var(--clouds), 0.25); 840 } 841 .card-fields_row--odd { 842 background-color: rgba(var(--clouds), 1); 843 } 844 `]}render(){if(this.allFields)return i.qy` 845 <table class="card-fields"> 846 ${this.allFields.map(((e,t)=>this.renderRow(e,t)))} 847 </table> 848 ${this.disclaimer?i.qy` 849 <a 850 class="disclaimer" 851 href="${this.disclaimer}" 852 target="_blank" 853 rel="noopener noreferrer" 854 >Disclaimer</a 855 > 856 `:""} 857 `}renderRow(e,t){if(e)return i.qy`<tr 858 class=${(0,o.H)({"card-fields_row":!0,"card-fields_row--even":!!(t%2),"card-fields_row--odd":!(t%2)})} 859 > 860 ${this.renderRowContent(e)} 861 </tr> `}renderRowContent(e){return e.link?i.qy` <th class="card-fields_header" colspan="2" scope="row"> 862 <a href="${e.link}">${e.displayValue}</a> 863 </th>`:e.fieldName?e.displayValueSecondaryHTML?i.qy` 864 <th class="card-fields_header" scope="row">${e.fieldName}:</th> 865 <td class="card-fields_col"> 866 ${e.displayValueSecondaryHTML?i.qy`${(0,s._)(e.displayValue)} 867 ${(0,s._)(e.displayValueSecondaryHTML)}`:i.qy`${(0,s._)(e.displayValue)}`} 868 </td> 869 `:i.qy` 870 <th class="card-fields_header" scope="row">${e.fieldName}:</th> 871 <td class="card-fields_col"> 872 ${e.displayValueSecondary?i.qy`${(0,s._)(e.displayValue)} ${(0,s._)(e.displayValueSecondary)}`:i.qy`${(0,s._)(e.displayValue)}`} 873 </td> 874 `:e.displayValueSecondaryHTML?i.qy` 875 <td class="card-fields_col" colspan="2"> 876 ${e.displayValueSecondaryHTML?i.qy`${(0,s._)(e.displayValue)} 877 ${(0,s._)(e.displayValueSecondaryHTML)}`:i.qy`${(0,s._)(e.displayValue)}`} 878 </td> 879 `:i.qy` 880 <td class="card-fields_col" colspan="2"> 881 ${e.displayValueSecondary?i.qy`${(0,s._)(e.displayValue)} ${(0,s._)(e.displayValueSecondary)}`:i.qy`${(0,s._)(e.displayValue)}`} 882 </td> 883 `}};u([(0,r.MZ)({type:String})],m.prototype,"disclaimer",2),u([(0,r.MZ)({type:Boolean})],m.prototype,"hasCarousel",2),u([(0,r.MZ)({type:Boolean})],m.prototype,"hasCarouselSingle",2),u([(0,r.MZ)({type:Array}
883)],m.prototype,"allFields",2),m=u([(0,r.EM)("card-all-fields")],m)},41820:(e,t,a)=>{"use strict";var i=a(71413),r=a(52706),s=a(32701);Object.defineProperty,Object.getOwnPropertyDescriptor;let o=class extends i.WF{static get styles(){return[s.A,i.AH` 884 :host { 885 display: flex; 886 flex: 1 1 auto; 887 flex-direction: column; 888 box-shadow: var(--shadow-sm); 889 margin-bottom: calc(var(--gap) * 2); 890 } 891 `]}render(){return i.qy` <slot></slot> `}};o=((e,t,a,i)=>{for(var r,s=t,o=e.length-1;o>=0;o--)(r=e[o])&&(s=r(s)||s);return s})([(0,r.EM)("card-section-container")],o)},6710:(e,t,a)=>{"use strict";var i=a(71413),r=a(52706),s=a(80480),o=a(32701),l=a(96548);Object.defineProperty,Object.getOwnPropertyDescriptor;let n=class extends l.Ay{static get styles(){return[o.A,i.AH` 892 :host { 893 display: flex; 894 } 895 :host([last-child]) { 896 flex-grow: 1; 897 } 898 .card-section_border { 899 flex: 0 0 var(--gap); 900 align-self: stretch; 901 background-color: var(--border-color); 902 } 903 .card-section_content { 904 flex-grow: 1; 905 } 906 :host([first-child]) .card-section_content { 907 border-top: var(--border-width) solid rgb(var(--silver)); 908 } 909 :host([last-child]) .card-section_content { 910 border-bottom: var(--border-width) solid rgb(var(--silver)); 911 } 912 `]}render(){return i.qy` 913 <div 914 class="card-section_border" 915 style="${(0,s.W)({"background-color":this.borderColor})}" 916 ></div> 917 <div 918 class="card-section_content" 919 style="${(0,s.W)({backgroundColor:this.backgroundColor,color:this.textColor,borderColor:this.backgroundColor.toLowerCase()!==l.Ay.DEFAULT_BACKGROUND_COLOR.toLowerCase()?this.borderColor:"rgb(var(--silver))"})}" 920 > 921 <div class="fadein"> 922 <slot></slot> 923 </div> 924 </div> 925 `}};n=((e,t,a,i)=>{for(var r,s=t,o=e.length-1;o>=0;o--)(r=e[o])&&(s=r(s)||s);return s})([(0,r.EM)("card-section")],n)},95313:(e,t,a)=>{"use strict";var i,r=a(71413),s=a(52706),o=a(10427),l=a(5366),n=a(24634),d=Object.defineProperty,c=Object.getOwnPropertyDescriptor,h=(e,t,a,i)=>{for(var r,s=i>1?void 0:i?c(t,a):t,o=e.length-1;o>=0;o--)(r=e[o])&&(s=(i?r(t,a,s):r(s))||s);return i&&s&&d(t,a,s),s},p=(e,t,a)=>{if(!t.has(e))throw TypeError("Cannot "+a)};let u=class extends r.WF{constructor(){super(...arguments),this.iconSource="/images/icon-whats-fill-solid.svg",this.expanded=!1,this.omitIcon=!1,this.position=l.kl.BOTTOM,this.strategy="absolute",((e,t,a)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,void 0)})(this,i)}static get styles(){return[...o.Ay.styles,n.A,r.AH` 926 :host { 927 display: inline-block; 928 margin: -1rem -0.75rem -0.75rem; 929 vertical-align: sub; 930 931 --bg-color: rgb(var(--darkest)); 932 --text-color: #fff; 933 } 934 935 :host([center-vertically]) { 936 margin: -1.25rem -0.75rem -1rem; 937 vertical-align: middle; 938 } 939 940 :host([small-footprint]) [slot='toggler'] { 941 padding: 0; 942 margin: var(--gap); 943 } 944 945 #tooltip-wrapper { 946 padding: 1rem; 947 width: calc(100vw - var(--scrollbar-width) - 2rem - var(--gap) * 2); 948 max-width: 360px; 949 font-size: var(--smaller); 950 border-radius: var(--border-radius); 951 background-color: var(--bg-color); 952 box-shadow: var(--shadow-sm); 953 text-align: left; 954 text-transform: initial; 955 color: var(--text-color); 956 position: relative; 957 } 958 959 ::slotted(h3), 960 ::slotted(h4) { 961 font-size: var(--smaller) !important; 962 margin-bottom: 0.25rem; 963 } 964 965 popper-container { 966 --tail-color: rgb(var(--darkest)); 967 --tail-border-width: 0; 968 } 969 .tooltip-close { 970 position: absolute; 971 top: 0; 972 right: 0; 973 padding: var(--gap); 974 display: none; 975 fill: rgb(var(--concrete)); 976 } 977 @media (hover: none) { 978 .tooltip-close { 979 display: flex; 980 } 981 } 982 983 .btn-context-help { 984 padding: calc(var(--gap) - 0.25rem); 985 margin: 0.25rem; 986 } 987 `]}render(){return r.qy` 988 <popper-container 989 @mouseenter=${this.enter} 990 @mouseleave=${this.leave} 991 @focusin=${this.show} 992 @focusout=${this.hide} 993 @click=${this.stopPropagation} 994 position=${this.position} 995 strategy=${this.strategy} 996 ?is-visible="${this.expanded}" 997 is-flip 998 > 999 <button slot="toggler" class="btn fadein btn-context-help" aria-label="Help Tooltip"> 1000 ${this.omitIcon?r.qy``:r.qy`<img role="presentation" class="icon-sm" src="${this.iconSource}" alt="" />`} 1001 </button> 1002 <div id="tooltip-wrapper"> 1003 <button class="btn btn-close tooltip-close" title="Close"> 1004 <svg role="presentation" class="btn_icon btn-sm_icon" aria-hidden="true"> 1005 <use href="${"/images/sprites.svg#close-btn"}"></use> 1006 </svg> 1007 </button> 1008 <slot></slot>
1009 </div> 1010 </popper-container> 1011 `}stopPropagation(e){e.preventDefault(),e.stopPropagation(),this.expanded=!this.expanded}connectedCallback(){super.connectedCallback(),this.setAttribute("role","tooltip")}show(){this.expanded=!0}hide(){this.expanded=!1}enter(){var e,t,a;e=this,t=i,a=setTimeout((()=>{this.expanded=!0}),1e3),p(e,t,"write to private field"),t.set(e,a)}leave(){var e;clearTimeout((p(this,e=i,"read from private field"),e.get(this))),this.expanded=!1}};i=new WeakMap,h([(0,s.MZ)({type:String,attribute:"icon-source"})],u.prototype,"iconSource",2),h([(0,s.MZ)({type:Boolean,reflect:!0})],u.prototype,"expanded",2),h([(0,s.MZ)({type:Boolean})],u.prototype,"omitIcon",2),h([(0,s.MZ)({type:String})],u.prototype,"position",2),h([(0,s.MZ)({type:String})],u.prototype,"strategy",2),u=h([(0,s.EM)("context-help-tooltip")],u)},32825:(e,t,a)=>{"use strict";a.d(t,{A:()=>p});var i=a(71413),r=a(52706),s=a(63822),o=a(32701),l=a(80027),n=(a(51595),Object.defineProperty),d=Object.getOwnPropertyDescriptor,c=(e,t,a,i)=>{for(var r,s=i>1?void 0:i?d(t,a):t,o=e.length-1;o>=0;o--)(r=e[o])&&(s=(i?r(t,a,s):r(s))||s);return i&&s&&n(t,a,s),s};let h=class extends i.WF{constructor(){super(...arguments),this.label="Updated",this.isWazeEvent=!1}static get styles(){return[o.A,i.AH` 1012 :host { 1013 display: inline; 1014 color: rgb(var(--darker)); 1015 font-style: italic; 1016 font-size: var(--smaller); 1017 } 1018 a { 1019 font-weight: bold; 1020 text-decoration: underline; 1021 } 1022 `]}render(){return this.timestamp&&this.timezone?this.isWazeEvent&&this.agencyAttribution?i.qy` 1023 ${(0,s.t)(this.label)} ${this.agencyAttribution.agencyName} 1024 <relative-time timestamp=${this.timestamp} timezone=${this.timezone}></relative-time> 1025 `:l.JM.agencyAttributionEnabled&&this.agencyAttribution?i.qy` 1026 ${this.agencyAttribution.agencyIconURL?i.qy` 1027 <img 1028 src="${this.agencyAttribution.agencyIconURL}" 1029 alt="" 1030 style="vertical-align: middle" 1031 role="presentation" 1032 /> 1033 `:""} 1034 ${(0,s.t)(this.label)} 1035 <relative-time timestamp=${this.timestamp} timezone=${this.timezone}></relative-time> 1036 ${this.agencyAttribution.agencyName?i.qy` 1037 ${(0,s.t)("by")} 1038 ${this.agencyAttribution.agencyURL?i.qy` 1039 <a href="${this.agencyAttribution.agencyURL}" 1040 >${this.agencyAttribution.agencyName}</a 1041 > 1042 `:i.qy` ${this.agencyAttribution.agencyName} `} 1043 `:i.qy``} 1044 `:i.qy` 1045 ${(0,s.t)(this.label)} 1046 <relative-time timestamp=${this.timestamp} timezone=${this.timezone}></relative-time> 1047 `:i.qy`<span class="placeholder placeholder_last-updated"></span>`}};c([(0,r.MZ)({type:Number})],h.prototype,"timestamp",2),c([(0,r.MZ)({type:String})],h.prototype,"timezone",2),c([(0,r.MZ)({type:String,reflect:!0})],h.prototype,"label",2),c([(0,r.MZ)({type:Object,reflect:!0})],h.prototype,"agencyAttribution",2),c([(0,r.MZ)({type:Boolean,reflect:!0})],h.prototype,"isWazeEvent",2),h=c([(0,r.EM)("date-last-updated")],h);const p=8792==a.j?h:null},16053:(e,t,a)=>{"use strict";var i=a(71413),r=a(52706),s=a(56599),o=a(10388),l=a(52850),n=a(80027),d=a(32701),c=a(24634);const h=e=>({type:l.gNy,contentUri:e});var p=a(91780),u=a(21379),m=a(95504),g=Object.defineProperty,y=Object.getOwnPropertyDescriptor,v=(e,t,a,i)=>{for(var r,s=i>1?void 0:i?y(t,a):t,o=e.length-1;o>=0;o--)(r=e[o])&&(s=(i?r(t,a,s):r(s))||s);return i&&s&&g(t,a,s),s};let b=class extends((0,s.N)(o.M_)(i.WF)){constructor(){super(...arguments),this.contentUri="",this.contentType="page",this.hideLabels=!1,this.favoriteCameraIsSubmitting=!1,this.isFavorited=!1,this.isLoggedIn=!1}static get styles(){return[d.A,c.A,i.AH` 1048 :host { 1049 width: 100%; 1050 height: 100%; 1051 } 1052 1053 @media screen and (prefers-reduced-motion: reduce) { 1054 .heart-btn { 1055 transition: none; 1056 } 1057 } 1058 1059 .heart-btn { 1060 padding: 0; 1061 } 1062 1063 .heart-btn[disabled] { 1064 opacity: 0.5; 1065 pointer-events: none; 1066 cursor: wait; 1067 } 1068 1069 .heart-btn_label { 1070 display: block; 1071 white-space: initial; 1072 font-size: var(--smallest); 1073 margin-top: var(--gap); 1074 } 1075 .heart-btn_icon { 1076 width: 100%; 1077 height: 100%; 1078 } 1079 `]}stateChanged(e){this.favoriteCameraIsSubmitting=e.your511Favorites.pendingFavoriteCameraViewUris.has(this.contentUri),this.isFavorited=e.your511Favorites.favoriteCameraViewUris?.includes(this.contentUri)??!1,this.isLoggedIn=(0,m.M3)(e)}addFavorite(){this.favoriteCameraIsSubmitting||(o.M_.dispatch(h(this.contentUri)),o.M_.dispatch((0,p.oS)(this.contentUri)))}removeFavorite(){this.favoriteCameraIsSubmitting||(o.M_.dispatch(h(this.contentUri)),o.M_.dispatch((0,p.tN)(this.contentUri)))}onFavoriteCameraClick(e){return e.preventDefault(),e.stopPropagation(),this.isLoggedIn?(this.isFavorited&&this.removeFavorite(),this.addFavorite()):o.M_.dispatch((0,u.z)(`${l.Gqw.LOGIN}`))}render(){const e=this.isFavorited?n.Lk.favorite.getUnsaveLabel(this.contentType):n.Lk.favorite.getSaveLabel(this.contentType),t=this.isFavorited?"/images/icon-favorite-fill-solid-selected.svg":"/images/icon-favorite-fill-solid.svg",a=!this.hideLabels&&!n.Lk.alwaysHideLabels;return i.qy` 1080 <button 1081 class="btn btn-light heart-btn" 1082 @click="${this.onFavoriteCameraClick}" 1083 title="${e}" 1084 aria-label="${e}" 1085 ?disabled=${this.favoriteCameraIsSubmitting} 1086 part="button" 1087 > 1088 <img src="${t}" class="heart-btn_icon" alt="" part="icon" role="presentation" /> 1089 ${a?i.qy` <span class="heart-btn_label">${e}</span> `:""} 1090 </button> 1091 `}};v([(0,r.MZ)({type:String,reflect:!0})],b.prototype,"contentUri",2),v([(0,r.MZ)({type:String,reflect:!0})],b.prototype,"contentType",2),v([(0,r.MZ)({type:Boolean,reflect:!0,attribute:"hide-labels"})],b.prototype,"hideLabels",2),v([(0,r.MZ)({type:Boolean})],b.prototype,"favoriteCameraIsSubmitting",2),v([(0,r.MZ)({type:Boolean})],b.prototype,"isFavorited",2),v([(0,r.MZ)({type:Boolean})],b.prototype,"isLoggedIn",2),b=v([(0,r.EM)("favorite-camera-view-button")],b)},58877:(e,t,a)=>{"use strict";var i=a(71413),r=a(52706),s=a(30836);Object.defineProperty,Object.getOwnPropertyDescriptor;let o=class extends i.WF{set feature(e){s.W.getMap().then((t=>{if(this._feature&&this._feature.getId()!==e.id){const a=this._feature.getId();t.data.overrideStyle(t.data.getFeatureById(a),e.properties)}else[this._feature]=t.data.addGeoJson(e)}))}disconnectedCallback(){s.W.getMap().then((e=>{this._feature&&(e.data.remove(this._feature),delete this._feature,super.disconnectedCallback())}))}createRenderRoot(){return this}};o=((e,t,a,i)=>{for(var r,s=t,o=e.length-1;o>=0;o--)(r=e[o])&&(s=r(s)||s);return s})([(0,r.EM)("map-feature")],o)},39569:(e,t,a)=>{"use strict";a.d(t,{A:()=>h,p:()=>c});var i=a(4842),r=a(5218),s=a(77614),o=a(78770),l=a.n(o);const n=e=>l()(e,{allowedTags:l().defaults.allowedTags.concat(["img"]),allowedSchemes:l().defaults.allowedSchemes.concat(["data"]),allowedAttributes:{...l().defaults.allowedAttributes,h1:["id"],h2:["id"],h3:["id"],h4:["id"],h5:["id"],h6:["id"]}});class d extends i.WL{constructor(){super(...arguments),this.memoizedSanitize=(0,s.A)((e=>n(e)))}render(e){const t=this.memoizedSanitize(e);return(0,r._)(t)}}const c=(0,i.u$)(d),h=7022==a.j?n:null},49746:()=>{},19977:()=>{},197:()=>{},21866:()=>{},52739:()=>{}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.