PageSourceSearch

https://mass511.com/tray-dashboard-29cd395567d512f20b30.js

js mass511.com collected 2026-09-24 11:15:48 UTC 52,181 bytes, 1,091 lines download raw bytes

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.