@arcgis/map-components
Version:
ArcGIS Map Components
362 lines (361 loc) • 47.6 kB
JavaScript
/* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
import { c as y } from "../../chunks/runtime.js";
import { keyed as k } from "lit/directives/keyed.js";
import { repeat as C } from "lit/directives/repeat.js";
import { css as P, nothing as c, html as n } from "lit";
import { createRef as b, ref as p } from "lit/directives/ref.js";
import { LitElement as S, createEvent as m, safeClassMap as z } from "@arcgis/lumina";
import { usePropertyChange as M } from "@arcgis/lumina/controllers";
import { rethrowError as w } from "@arcgis/toolkit/log";
import { m as L } from "../../chunks/useViewModel.js";
import { u as T } from "../../chunks/useT9n.js";
import { convertUnit as E } from "@arcgis/core/applications/Components/unitUtils.js";
import { getDefaultUnitForView as F } from "@arcgis/core/applications/Components/getDefaultUnits.js";
import { hasDisplayProperties as g } from "@arcgis/core/applications/Components/formatUtils.js";
import D from "@arcgis/core/geometry/Point.js";
import I from "@arcgis/core/widgets/CoordinateConversion/CoordinateConversionViewModel.js";
import u from "@arcgis/core/widgets/CoordinateConversion/support/Conversion.js";
import { l as U } from "../../chunks/measurementUtils.js";
import A from "@arcgis/core/applications/Components/QuantityFormatter.js";
const O = P`[class^=esri-icon-],[class*=" esri-icon-"]{speak:none;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-style:normal;font-weight:var(--calcite-font-weight-normal);line-height:1;font-family:CalciteWebCoreIcons!important}.esri-icon-close:before{content:"";color:inherit}.esri-icon-drag-horizontal:before{content:"";color:inherit}.esri-icon-drag-vertical:before{content:"";color:inherit}.esri-icon-handle-horizontal:before{content:"";color:inherit}.esri-icon-handle-vertical:before{content:"";color:inherit}.esri-icon-check-mark:before{content:"";color:inherit}.esri-icon-left-triangle-arrow:before{content:"";color:inherit}.esri-icon-right-triangle-arrow:before{content:"";color:inherit}.esri-icon-down-arrow:before{content:"";color:inherit}.esri-icon-up-arrow:before{content:"";color:inherit}.esri-icon-overview-arrow-bottom-left:before{content:"";color:inherit}.esri-icon-overview-arrow-bottom-right:before{content:"";color:inherit}.esri-icon-overview-arrow-top-left:before{content:"";color:inherit}.esri-icon-overview-arrow-top-right:before{content:"";color:inherit}.esri-icon-maximize:before{content:"";color:inherit}.esri-icon-minimize:before{content:"";color:inherit}.esri-icon-checkbox-unchecked:before{content:"";color:inherit}.esri-icon-checkbox-checked:before{content:"";color:inherit}.esri-icon-radio-unchecked:before{content:"";color:inherit}.esri-icon-radio-checked:before{content:"";color:inherit}.esri-icon-up-arrow-circled:before{content:"";color:inherit}.esri-icon-down-arrow-circled:before{content:"";color:inherit}.esri-icon-left-arrow-circled:before{content:"";color:inherit}.esri-icon-right-arrow-circled:before{content:"";color:inherit}.esri-icon-zoom-out-fixed:before{content:"";color:inherit}.esri-icon-zoom-in-fixed:before{content:"";color:inherit}.esri-icon-refresh:before{content:"";color:inherit}.esri-icon-edit:before{content:"";color:inherit}.esri-icon-authorize:before{content:"";color:inherit}.esri-icon-map-pin:before{content:"";color:inherit}.esri-icon-blank-map-pin:before{content:"";color:inherit}.esri-icon-table:before{content:"";color:inherit}.esri-icon-plus:before{content:"";color:inherit}.esri-icon-minus:before{content:"";color:inherit}.esri-icon-beginning:before{content:"";color:inherit}.esri-icon-reverse:before{content:"";color:inherit}.esri-icon-pause:before{content:"";color:inherit}.esri-icon-play:before{content:"";color:inherit}.esri-icon-forward:before{content:"";color:inherit}.esri-icon-end:before{content:"";color:inherit}.esri-icon-erase:before{content:"";color:inherit}.esri-icon-up-down-arrows:before{content:"";color:inherit}.esri-icon-left:before{content:"";color:inherit}.esri-icon-right:before{content:"";color:inherit}.esri-icon-announcement:before{content:"";color:inherit}.esri-icon-notice-round:before{content:"";color:inherit}.esri-icon-notice-triangle:before{content:"";color:inherit}.esri-icon-home:before{content:"";color:inherit}.esri-icon-locate:before{content:"";color:inherit}.esri-icon-expand:before{content:"";color:inherit}.esri-icon-collapse:before{content:"";color:inherit}.esri-icon-layer-list:before{content:"";color:inherit}.esri-icon-basemap:before{content:"";color:inherit}.esri-icon-globe:before{content:"";color:inherit}.esri-icon-applications:before{content:"";color:inherit}.esri-icon-arrow-up-circled:before{content:"";color:inherit}.esri-icon-arrow-down-circled:before{content:"";color:inherit}.esri-icon-arrow-left-circled:before{content:"";color:inherit}.esri-icon-arrow-right-circled:before{content:"";color:inherit}.esri-icon-minus-circled:before{content:"";color:inherit}.esri-icon-plus-circled:before{content:"";color:inherit}.esri-icon-add-attachment:before{content:"";color:inherit}.esri-icon-attachment:before{content:"";color:inherit}.esri-icon-calendar:before{content:"";color:inherit}.esri-icon-close-circled:before{content:"";color:inherit}.esri-icon-browser:before{content:"";color:inherit}.esri-icon-collection:before{content:"";color:inherit}.esri-icon-comment:before{content:"";color:inherit}.esri-icon-configure-popup:before{content:"";color:inherit}.esri-icon-contact:before{content:"";color:inherit}.esri-icon-dashboard:before{content:"";color:inherit}.esri-icon-deny:before{content:"";color:inherit}.esri-icon-description:before{content:"";color:inherit}.esri-icon-directions:before{content:"";color:inherit}.esri-icon-directions2:before{content:"";color:inherit}.esri-icon-documentation:before{content:"";color:inherit}.esri-icon-duplicate:before{content:"";color:inherit}.esri-icon-review:before{content:"";color:inherit}.esri-icon-environment-settings:before{content:"";color:inherit}.esri-icon-error:before{content:"";color:inherit}.esri-icon-error2:before{content:"";color:inherit}.esri-icon-experimental:before{content:"";color:inherit}.esri-icon-feature-layer:before{content:"";color:inherit}.esri-icon-filter:before{content:"";color:inherit}.esri-icon-grant:before{content:"";color:inherit}.esri-icon-group:before{content:"";color:inherit}.esri-icon-key:before{content:"";color:inherit}.esri-icon-labels:before{content:"";color:inherit}.esri-icon-tag:before{content:"";color:inherit}.esri-icon-layers:before{content:"";color:inherit}.esri-icon-left-arrow:before{content:"";color:inherit}.esri-icon-right-arrow:before{content:"";color:inherit}.esri-icon-link-external:before{content:"";color:inherit}.esri-icon-link:before{content:"";color:inherit}.esri-icon-loading-indicator:before{content:"";color:inherit}.esri-icon-maps:before{content:"";color:inherit}.esri-icon-marketplace:before{content:"";color:inherit}.esri-icon-media:before{content:"";color:inherit}.esri-icon-media2:before{content:"";color:inherit}.esri-icon-menu:before{content:"";color:inherit}.esri-icon-mobile:before{content:"";color:inherit}.esri-icon-phone:before{content:"";color:inherit}.esri-icon-navigation:before{content:"";color:inherit}.esri-icon-pan:before{content:"";color:inherit}.esri-icon-printer:before{content:"";color:inherit}.esri-icon-pie-chart:before{content:"";color:inherit}.esri-icon-chart:before{content:"";color:inherit}.esri-icon-line-chart:before{content:"";color:inherit}.esri-icon-question:before{content:"";color:inherit}.esri-icon-resend-invitation:before{content:"";color:inherit}.esri-icon-rotate:before{content:"";color:inherit}.esri-icon-save:before{content:"";color:inherit}.esri-icon-settings:before{content:"";color:inherit}.esri-icon-settings2:before{content:"";color:inherit}.esri-icon-share:before{content:"";color:inherit}.esri-icon-sign-out:before{content:"";color:inherit}.esri-icon-support:before{content:"";color:inherit}.esri-icon-user:before{content:"";color:inherit}.esri-icon-time-clock:before{content:"";color:inherit}.esri-icon-trash:before{content:"";color:inherit}.esri-icon-upload:before{content:"";color:inherit}.esri-icon-download:before{content:"";color:inherit}.esri-icon-zoom-in-magnifying-glass:before{content:"";color:#6e6e6e}.esri-icon-search:before{content:"";color:inherit}.esri-icon-zoom-out-magnifying-glass:before{content:"";color:#6e6e6e}.esri-icon-locked:before{content:"";color:inherit}.esri-icon-unlocked:before{content:"";color:inherit}.esri-icon-favorites:before{content:"";color:inherit}.esri-icon-compass:before{content:"";color:inherit}.esri-icon-down:before{content:"";color:inherit}.esri-icon-up:before{content:"";color:inherit}.esri-icon-chat:before{content:"";color:inherit}.esri-icon-dock-bottom:before{content:"";color:inherit}.esri-icon-dock-left:before{content:"";color:inherit}.esri-icon-dock-right:before{content:"";color:inherit}.esri-icon-organization:before{content:"";color:inherit}.esri-icon-north-navigation:before{content:"";color:inherit}.esri-icon-locate-circled:before{content:"";color:inherit}.esri-icon-dial:before{content:"";color:inherit}.esri-icon-polygon:before{content:"";color:inherit}.esri-icon-polyline:before{content:"";color:inherit}.esri-icon-visible:before{content:"";color:inherit}.esri-icon-non-visible:before{content:"";color:inherit}.esri-icon-link-vertical:before{content:"";color:inherit}.esri-icon-unlocked-link-vertical:before{content:"";color:inherit}.esri-icon-link-horizontal:before{content:"";color:inherit}.esri-icon-unlocked-link-horizontal:before{content:"";color:inherit}.esri-icon-swap:before{content:"";color:inherit}.esri-icon-cta-link-external:before{content:"";color:inherit}.esri-icon-reply:before{content:"";color:inherit}.esri-icon-public:before{content:"";color:inherit}.esri-icon-share2:before{content:"";color:inherit}.esri-icon-launch-link-external:before{content:"";color:inherit}.esri-icon-rotate-back:before{content:"";color:inherit}.esri-icon-pan2:before{content:"";color:inherit}.esri-icon-tracking:before{content:"";color:inherit}.esri-icon-expand2:before{content:"";color:inherit}.esri-icon-arrow-down:before{content:"";color:inherit}.esri-icon-arrow-up:before{content:"";color:inherit}.esri-icon-hollow-eye:before{content:"";color:inherit}.esri-icon-play-circled:before{content:"";color:inherit}.esri-icon-volume-off:before{content:"";color:inherit}.esri-icon-volume-on:before{content:"";color:inherit}.esri-icon-bookmark:before{content:"";color:inherit}.esri-icon-lightbulb:before{content:"";color:inherit}.esri-icon-sketch-rectangle:before{content:"";color:inherit}.esri-icon-north-navigation-filled:before{content:"";color:inherit}.esri-icon-default-action:before{content:"";color:inherit}.esri-icon-undo:before{content:"";color:inherit}.esri-icon-redo:before{content:"";color:inherit}.esri-icon-cursor:before{content:"";color:inherit}.esri-icon-cursor-filled:before{content:"";color:inherit}.esri-icon-measure:before{content:"";color:inherit}.esri-icon-measure-line:before{content:"";color:inherit}.esri-icon-measure-area:before{content:"";color:inherit}.esri-icon-legend:before{content:"";color:inherit}.esri-icon-sliders:before{content:"";color:inherit}.esri-icon-sliders-horizontal:before{content:"";color:inherit}.esri-icon-cursor-marquee:before{content:"";color:inherit}.esri-icon-lasso:before{content:"";color:inherit}.esri-icon-elevation-profile:before{content:"";color:inherit}.esri-icon-slice:before{content:"";color:inherit}.esri-icon-line-of-sight:before{content:"";color:inherit}.esri-icon-zoom-to-object:before{content:"";color:inherit}.esri-icon-urban-model:before{content:"";color:inherit}.esri-icon-measure-building-height-shadow:before{content:"";color:inherit}.esri-icon-partly-cloudy:before{content:"";color:inherit}.esri-widget__heading{color:var(--calcite-color-text-2);margin:0 0 .5rem;font-weight:var(--calcite-font-weight-semibold)}h1.esri-widget__heading{font-size:var(--calcite-font-size-xl)}h2.esri-widget__heading{font-size:var(--calcite-font-size-md)}h3.esri-widget__heading,h4.esri-widget__heading,h5.esri-widget__heading,h6.esri-widget__heading{font-size:var(--calcite-font-size)}.esri-widget{box-sizing:border-box;color:var(--calcite-color-text-2);background-color:var(--calcite-color-foreground-1);font-size:var(--calcite-font-size);line-height:var(--calcite-font-line-height-relative-tight)}.esri-widget *,.esri-widget :before,.esri-widget :after{box-sizing:inherit}.esri-widget.esri-widget--disabled>*{opacity:.4;pointer-events:none}.esri-widget.esri-widget--compact{--esri-widget-padding-y: 0;--esri-widget-padding-x: 0}.esri-widget__anchor{color:var(--calcite-color-text-2)}.esri-widget__anchor:hover{color:var(--calcite-color-text-3)}.esri-widget__anchor:hover,.esri-widget__anchor:focus{text-decoration:underline}.esri-widget__anchor--disabled{opacity:.4;pointer-events:none}.esri-widget__header{background-color:var(--calcite-color-foreground-1);flex:1 0 100%;justify-content:space-between;align-items:center;width:100%;min-height:48px;padding:12px 0 12px 15px;display:flex}.esri-widget__heading{word-break:break-word}.esri-widget__header .esri-widget__heading{width:calc(100% - 48px);text-align:initial;color:var(--calcite-color-text-1);align-items:center;margin:0;padding:0;display:flex}.esri-widget__header-button{appearance:none;cursor:pointer;color:var(--calcite-color-text-2);background-color:var(--calcite-color-foreground-1);border:none;flex:0 0 48px;justify-content:center;align-self:stretch;align-items:center;width:48px;padding:0;display:flex}.esri-widget__footer{background-color:var(--calcite-color-foreground-1);justify-content:center;align-items:center;width:100%;min-height:48px;display:flex}.esri-widget__footer-pagination{color:var(--calcite-color-text-2);justify-content:space-between;align-items:center;display:flex}.esri-widget__footer-pagination-previous-button,.esri-widget__footer-pagination-next-button{cursor:pointer;background-color:var(--calcite-color-foreground-1);border:0;margin:0 7px;padding:12px 15px;transition:background-color .125s ease-in-out}.esri-widget__footer-pagination-previous-button:hover,.esri-widget__footer-pagination-previous-button:focus,.esri-widget__footer-pagination-next-button:hover,.esri-widget__footer-pagination-next-button:focus{color:var(--calcite-color-text-1);background-color:var(--calcite-color-foreground-1)}.esri-menu{visibility:hidden;z-index:1;background-clip:padding;background-color:var(--calcite-color-foreground-1);background-clip:padding-box;width:100%;max-height:0;margin:2px 0 0;padding:0;font-size:var(--calcite-font-size);line-height:var(--calcite-spacing-xl);position:absolute;top:100%;left:0;overflow:hidden;box-shadow:0 1px 2px #0000004d}.esri-menu .esri-menu__header{color:var(--calcite-color-text-inverse);background-color:var(--calcite-color-inverse);padding:6px 12px}.esri-menu__list{margin:0;padding:0;list-style:none}.esri-menu__list-item{cursor:pointer;border-top:1px solid #adadad4d;border-left:3px solid #0000;padding:.8em 1em}.esri-menu__list-item [class^=esri-icon-],.esri-menu__list-item [class*=" esri-icon-"]{padding-right:2.8px}.esri-menu__list-item:first-child{border-top:none}.esri-menu__list-item--focus,.esri-menu__list-item:hover,.esri-menu__list-item:focus{background-color:var(--calcite-color-foreground-1)}.esri-menu__list-item:active{background-color:var(--calcite-color-foreground-current)}.esri-menu__list-item--active,.esri-menu__list-item--active:hover,.esri-menu__list-item--active:focus{background-color:var(--calcite-color-foreground-1);border-left-color:var(--calcite-color-brand)}.esri-widget__table{border-collapse:collapse;color:var(--calcite-color-text-1);border:none;width:100%;line-height:var(--calcite-font-line-height-relative-tight)}.esri-widget__table tr:nth-child(odd){background-color:var(--calcite-color-transparent)}.esri-widget__table tr:nth-child(2n){background-color:var(--calcite-color-transparent-press)}.esri-widget__table tr a{color:var(--calcite-color-text-2)}.esri-widget__table tr a:hover,.esri-widget__table tr a:focus{color:var(--calcite-color-text-1)}.esri-widget__table tr td,.esri-widget__table tr th{vertical-align:top;word-break:break-word;padding:.5em .7em;font-size:var(--calcite-font-size-sm);font-weight:var(--calcite-font-weight-regular)}.esri-widget__table tr th{text-align:left;border-right:3px solid #0000000d;width:50%}.esri-widget__table tr td{width:50%}.esri-input{color:var(--calcite-color-text-1);background-color:var(--calcite-color-foreground-1);border:1px solid #959595;font-size:var(--calcite-font-size)}.esri-input::-ms-clear{display:none}.esri-input::placeholder{opacity:1;color:var(--calcite-color-text-2)}.esri-input:placeholder-shown{text-overflow:ellipsis}.esri-input[type=text],.esri-input[type=password],.esri-input[type=number]{height:32px;padding:0 .5em}calcite-combobox.esri-input{border:none}.esri-widget__content--empty{text-align:center;color:var(--calcite-color-border-input);flex-flow:column wrap;align-items:center;padding:18px 22px;display:flex}.esri-widget__content--empty h1.esri-widget__heading,.esri-widget__content--empty h2.esri-widget__heading,.esri-widget__content--empty h3.esri-widget__heading,.esri-widget__content--empty h4.esri-widget__heading,.esri-widget__content--empty h5.esri-widget__heading{font-weight:var(--calcite-font-weight-regular)}.esri-widget__content-illustration--empty{width:128px;padding:1rem 0}.esri-widget__content-icon--empty{width:32px;padding:.5rem 0}.esri-select{appearance:none;cursor:pointer;color:var(--calcite-color-text-2);background:var(--calcite-color-foreground-1) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-8 -8 32 32' width='32' height='32'%3E%3Cpath d='M8 11.207l-4-4V5.793l4 4 4-4v1.414z' fill='%23adadad' fillrule='nonzero'/%3E%3C/svg%3E") 100% no-repeat;border:1px solid #959595;border-radius:0;width:100%;height:32px;margin:0;padding:0 .5em;font-family:inherit;font-size:.85em;display:block}.esri-select[disabled]{cursor:auto}.esri-select::-ms-expand{display:none}.esri-disabled a,.esri-disabled [role=menu],.esri-disabled [role=checkbox],.esri-disabled [class^=esri-icon-],.esri-disabled [class*=" esri-icon-"]{color:var(--calcite-color-text-3)}.keynav-mode .esri-widget:focus,.keynav-mode .esri-widget :focus{z-index:1;outline-offset:2px;outline:2px solid #adadad}.esri-widget__loader-animation{border:.15em solid #adadad4d;border-top-color:var(--calcite-color-border-input);border-radius:100%;width:1em;height:1em;font-size:var(--calcite-font-size-md);animation:1.25s linear infinite esri-rotate;display:block;transform:translateZ(0)}:dir(rtl) .esri-widget__table th{text-align:right;border-left:3px solid #0000000d;border-right:none}:dir(rtl) .esri-select{background-position:0}:dir(rtl) .esri-menu__list-item{border-left:none;border-right:3px solid #0000}:dir(rtl) .esri-menu__list-item [class^=esri-icon-],:dir(rtl) .esri-menu__list-item [class*=" esri-icon-"]{padding-left:2px;padding-right:0}:dir(rtl) .esri-menu__list-item--active{border-right-color:var(--calcite-color-brand)}.esri-icon-font-fallback-text{clip:rect(0 0 0 0);width:1px;height:1px;position:absolute;overflow:hidden}.esri-rotating{animation:1.25s linear infinite esri-rotate;transform:translateZ(0)}.esri-clearfix:before,.esri-clearfix:after{content:" ";display:table}.esri-clearfix:after{clear:both}.esri-interactive{cursor:pointer}.esri-hidden{display:none!important}.esri-invisible{visibility:hidden!important}.esri-offscreen{position:absolute;top:-999em;left:-999em}.esri-match-height{flex-direction:column;flex:auto;display:flex;overflow:hidden}.esri-button{box-sizing:border-box;cursor:pointer;white-space:normal;word-break:normal;color:var(--calcite-color-text-1);background-color:var(--calcite-color-status-info);border:var(--calcite-spacing-px) solid var(--calcite-color-status-info);justify-content:center;align-items:center;width:100%;min-height:var(--calcite-spacing-xxxl);padding:6px 7px;font-family:inherit;font-size:var(--calcite-font-size);transition:background-color .125s ease-in-out,border .125s ease-in-out;display:flex;overflow:hidden;&:hover{color:var(--calcite-color-text-1);background-color:var(--calcite-color-status-info-hover);border:var(--calcite-spacing-px) solid var(--calcite-color-status-info-hover)}}.esri-button:hover{color:var(--calcite-color-text-1);background-color:var(--calcite-color-text-2);border:1px solid var(--calcite-color-text-2)}.esri-button.esri-button--small{min-height:var(--calcite-spacing-xl);font-size:var(--calcite-font-size-sm)}.esri-button.esri-button--half{width:50%;display:inline-block}.esri-button.esri-button--third{width:33%;display:inline-block}.esri-button--secondary{color:var(--calcite-color-text-1);background-color:var(--calcite-color-foreground-1)}.esri-button--tertiary{color:var(--calcite-color-brand);background-color:var(--calcite-color-transparent);border-color:var(--calcite-color-transparent)}.esri-button--tertiary:hover{color:var(--calcite-color-brand-hover);background-color:var(--calcite-color-foreground-2);border-color:var(--calcite-color-transparent)}.esri-button--disabled{opacity:.4;pointer-events:none}.esri-button--drill-in{outline-offset:-4px;cursor:pointer;text-align:unset;background-color:var(--calcite-color-foreground-1);border:none;border-radius:2px;justify-content:space-between;align-items:center;margin:var(--calcite-spacing-md) 7px;padding:var(--calcite-spacing-md) 7px;text-decoration:none;transition:background-color .125s ease-in-out;display:flex;box-shadow:0 0 0 1px #adadad4d}.esri-button--drill-in:hover,.esri-button--drill-in:focus{background-color:var(--calcite-color-foreground-2)}.esri-button--drill-in__title{font-size:var(--calcite-font-size)}.esri-button--drill-in [class^=esri-icon-],.esri-button--drill-in [class*=" esri-icon-"]{padding:0 7px}.esri-widget--button{cursor:pointer;text-align:center;color:var(--calcite-color-text-2);background-color:var(--calcite-color-foreground-1);flex-flow:row;justify-content:center;align-items:center;width:var(--calcite-spacing-xxxl);height:var(--calcite-spacing-xxxl);margin:0;padding:0;font-size:var(--calcite-font-size);transition:background-color .125s ease-in-out;display:flex;overflow:hidden}.esri-widget--button:is(calcite-button):not(:hover){--calcite-icon-color: var(--calcite-color-text-3)}.esri-widget--button:not([appearance]),.esri-widget--button[appearance=solid]{--calcite-color-foreground-3: var(--calcite-color-foreground-1)}.esri-widget--button:is(calcite-button){--calcite-offset-invert-focus: 1}.esri-widget--button calcite-loader[inline]{margin:auto}.esri-button--secondary{color:var(--calcite-color-brand);background-color:var(--calcite-color-foreground-1);&:hover{color:var(--calcite-color-text-inverse);background-color:var(--calcite-color-status-info);border:1px solid var(--calcite-color-status-info)}}:host{background-color:var(--calcite-color-foreground-1);color:var(--calcite-color-text-2);padding-block-start:var(--arcgis-coordinate-conversion-padding-y);width:var(--arcgis-coordinate-conversion-width, 280px)}.root{background-color:var(--calcite-color-foreground-1)}calcite-alert{--calcite-alert-offset-size: var(--calcite-spacing-sm)}calcite-notice[open]{padding:var(--calcite-spacing-sm)}calcite-block{--calcite-block-content-space: 0;margin:0;padding-inline:var(--arcgis-coordinate-conversion-padding-x)}calcite-block:last-of-type{padding-block-end:var(--arcgis-coordinate-conversion-padding-y, var(--calcite-spacing-sm))}.conversion-popover{--calcite-popover-max-size-x: var(--arcgis-coordinate-conversion-settings-block-size, 250px)}.go-to-input-holder{display:flex}.go-to-input-holder calcite-input{flex:1}.conversions-block{border:none;padding-bottom:var(--calcite-spacing-sm)}.live-mode-block{--calcite-label-margin-bottom: 0;padding-block:var(--calcite-spacing-sm);padding-inline:var(--arcgis-coordinate-conversion-padding-x, var(--calcite-spacing-sm))}.live-mode-label{width:fit-content;margin-inline-start:auto}.font-size-small{font-size:var(--calcite-font-size--2)}.format-radio-label{display:flex;flex-direction:column}.radio-label{font-weight:var(--calcite-font-weight-medium);font-size:var(--calcite-font-size--2)}.radio-description{font-weight:var(--calcite-font-weight-light);font-size:var(--calcite-font-size--3)}.unit-select-panel{--calcite-panel-space: var(--calcite-spacing-md)}.popover-footer{padding:var(--calcite-spacing-sm);border-top:1px solid var(--calcite-color-border-3)}.input-form-group{display:flex;flex-direction:column;align-items:flex-start;padding:var(--calcite-spacing-sm)}.add-conversion-trigger{margin-inline-start:var(--calcite-spacing-sm);margin-block-start:var(--calcite-spacing-sm)}.input-form-group calcite-label{width:100%}.settings{padding:var(--calcite-spacing-md);display:flex;flex-direction:column;align-items:center;background-color:var(--calcite-color-foreground-1);width:calc(var(--arcgis-coordinate-conversion-settings-block-size, 250px) - (2 * var(--calcite-spacing-md)) - 2px)}.settings calcite-label{width:100%}.settings calcite-input{flex:1}.settings-form-group-horizontal{display:flex}`, V = 2500, q = new D({
x: 0,
y: 0
}), l = {
copy: "copy",
gear: "gear",
goTo: "zoom-to-object",
lightbulb: "lightbulb",
plus: "plus",
refresh: "refresh",
warning: "exclamation-mark-triangle"
}, R = L(I);
class j extends S {
constructor() {
super(...arguments), this._alertTimer = -1, this._conversionPopoverMap = /* @__PURE__ */ new Map(), this._coordinateInput = b(), this.messages = T({ name: "coordinate-conversion-next", blocking: !0 }), this._multipleConversionsDisabled = !1, this.quantityFormatter = new A(), this.viewModel = R(this), this.clearAlertTimeout = () => {
window.clearTimeout(this._alertTimer), this.alertProperties = {
...this.alertProperties,
open: !1
};
}, this.onElevationPopoverTriggerMount = (e) => {
this._elevationPopoverTrigger = e;
}, this.onFormatPopoverTriggerMount = (e) => {
this._formatsPopoverTrigger = e;
}, this.handleFormatComboboxChange = (e) => {
const o = e.target.selectedItems[0].value, i = this.formats.find((t) => t.name === o);
if (i) {
const t = this.activeConversion ?? this.conversions.at(0) ?? null, r = new u({ format: i });
t && this.transferConversionPopoverState(t, r), this.conversions.splice(0, 1, r), this.activeConversion = r, this.setPreviewConversion();
}
}, this.alertProperties = {
kind: "brand",
message: null,
title: null,
open: !1
}, this.elevationPopoverOpen = !1, this.formatsPopoverOpen = !1, this.invalidInput = !1, this.view = this.viewModel.view, this.autoDestroyDisabled = !1, this.conversions = this.viewModel.conversions, this.currentLocation = this.viewModel.currentLocation, this.formats = this.viewModel.formats, this.goToOverride = this.viewModel.goToOverride, this.headingLevel = 4, this.hideCaptureSection = !1, this.hideInputSection = !1, this.hideSettingsButton = !1, this.icon = "coordinate-system", this.label = this.messages.componentLabel, this.locationSymbol = this.viewModel.locationSymbol, this.mode = this.viewModel.mode, this.removeLeadingZeros = this.viewModel.removeLeadingZeros, this.visualScale = "s", this.showElevation = !1, this.state = this.viewModel.state, this.storageType = this.viewModel.storageType, this.arcgisConversionChange = m(), this.arcgisPropertyChange = M()("currentLocation", "state", "mode", "verticalUnit"), this.arcgisReady = m(), this.renderConversionView = (e, o) => {
const { messages: i } = this, { format: t } = e, r = t?.label ?? "", a = o === 0 && !e.displayCoordinate ? i.noLocation : e.displayCoordinate, d = this._renderConversionActions(e, a);
return k(e?.format?.name, n`<calcite-list-item class="conversion-list-item" .description=${r.toUpperCase()} .label=${this.getDisplayCoordinate(a)} .scale=${this.visualScale} title=${a ?? void 0 ?? c}>${d}</calcite-list-item>`);
}, this.renderLiveModeSection = () => {
const { messages: e } = this, o = this.mode === "idle" ? this.viewModel.mode : this.mode;
return n`<calcite-block class="live-mode-block" .disabled=${this.disabled} expanded .headingLevel=${this.headingLevel} .label=${e.captureMode} .scale=${this.visualScale}><calcite-label alignment=end class="live-mode-label" layout=inline .scale=${this.visualScale}>${e.captureMode}<calcite-switch .checked=${o === "capture"} =${this.toggleMode}></calcite-switch></calcite-label></calcite-block>`;
};
}
static {
this.properties = { activeConversion: 16, alertProperties: 16, defaultMeasurementSystem: 16, disabled: 16, displayedElevation: 16, elevationPopoverOpen: 16, formatsPopoverOpen: 16, invalidInput: 16, inputFormat: 16, previewConversion: 16, view: 0, autoDestroyDisabled: 5, conversions: 0, currentLocation: 0, formats: 0, goToOverride: 0, headingLevel: 9, hideCaptureSection: 7, hideInputSection: 7, hideSettingsButton: 7, icon: 1, ignoreCoordinatePrecision: 5, label: 1, locationSymbol: 0, mode: 3, multipleConversionsDisabled: 7, referenceElement: 1, removeLeadingZeros: 7, visualScale: 1, showElevation: 7, state: 32, storageDisabled: 7, storageType: 1, verticalUnit: 1 };
}
static {
this.styles = O;
}
get defaultMeasurementSystem() {
return this.view?.ready ? F(this.view) : "metric";
}
get disabled() {
return this.viewModel.state === "disabled";
}
get displayedElevation() {
const { currentLocation: e, verticalUnit: o, messages: i } = this;
if (e?.z === void 0 || e.z === null)
return i.noElevation;
{
const t = E(e.z, "meters", o);
return this.quantityFormatter.formatLength({ value: t, unit: o, type: "length" }, 2, "plural");
}
}
get ignoreCoordinatePrecision() {
return !this.viewModel.calculateCoordinatePrecision;
}
set ignoreCoordinatePrecision(e) {
this.viewModel.calculateCoordinatePrecision = !e;
}
get multipleConversionsDisabled() {
return this._multipleConversionsDisabled;
}
set multipleConversionsDisabled(e) {
e && this.conversions.splice(1, this.conversions.length - 1), this._multipleConversionsDisabled = e;
}
get storageDisabled() {
return !this.viewModel.storageEnabled;
}
set storageDisabled(e) {
this.viewModel.storageEnabled = !e;
}
get verticalUnit() {
return this.viewModel.verticalUnit ?? (this.defaultMeasurementSystem === "imperial" ? "feet" : "meters");
}
set verticalUnit(e) {
this.viewModel.verticalUnit = e;
}
async destroy() {
this.clearAlertTimeout(), await this.manager.destroy();
}
async reverseConvert(e, o) {
return await this.viewModel.reverseConvert(e, o);
}
load() {
this.manager.onLifecycle(() => [this.conversions.on("change", () => this.arcgisConversionChange.emit())]);
}
willUpdate(e) {
if (e.has("mode") && this.mode === "idle") {
this.viewModel.setLocation(this.currentLocation);
return;
}
if (e.has("currentLocation")) {
const o = e.get("currentLocation");
this.mode === "idle" && !this.currentLocation?.equals(o) && this.viewModel.setLocation(this.currentLocation);
}
}
closeAllPopovers() {
for (const e of this._conversionPopoverMap.values())
e.open = !1;
this.elevationPopoverOpen = !1, this.formatsPopoverOpen = !1, this.requestUpdate();
}
async copyToClipboard(e) {
e && (e = e.replace(//gu, ""), await navigator.clipboard.writeText(e));
}
findSettingsFormat() {
return this.activeConversion?.format || this.conversions.reduceRight((e, o) => {
const i = o.format;
return i && g(i) ? i : e;
}, null) || this.formats.find((e) => g(e)) || null;
}
getConversionPopoverState(e) {
let o = this._conversionPopoverMap.get(e);
return o || (o = {
triggerRef: b(),
open: !1
}, this._conversionPopoverMap.set(e, o)), o;
}
getDisplayCoordinate(e) {
return e ? e.includes(",") ? e.replace(/, /gu, ", ").replace(/ /gu, " ") : e : "";
}
getFormatDescription(e) {
const { messages: o } = this;
return o.formatDescriptions[e.name] ?? o.formatDescriptions.custom;
}
getId(e) {
return `arcgis-coordinate-conversion-${e}`;
}
openConversionSettings(e, o) {
const i = this.getConversionPopoverState(e), t = this.activeConversion !== e || !i.open;
this.closeAllPopovers(), i.open = t, this._conversionPopoverTrigger = t ? o.currentTarget : void 0, this.activeConversion = t ? e : void 0, t && this.setPreviewConversion(), this.requestUpdate(), o.stopPropagation();
}
async processUserInput(e, o, i) {
const { viewModel: t } = this;
try {
const r = await this._reverseConvert(e, o);
if (r)
i && t.goToLocation(r).catch((s) => {
w(this)(s), this.showAlertMessage(null, this.messages.locationOffBasemap, "warning");
});
else
throw new Error("failed to process user input");
this.mode === "capture" ? t.resume() : this.mode = "capture", this.invalidInput = !1, this.currentLocation = r ?? void 0, t.setLocation(r);
} catch (r) {
w(this)(r), this.showAlertMessage(null, this.messages.invalidCoordinate, "warning"), this.invalidInput = !0;
}
}
async processUserKeyboardInput(e) {
const { key: o } = e;
if (o === "Enter") {
const i = this.inputFormat || this.conversions.at(0)?.format, t = this._coordinateInput.value?.value;
if (!i || !t)
return;
await this.processUserInput(t, i, !0);
} else
this.invalidInput = !1;
}
async processUserMouseInput(e) {
const o = this.inputFormat || this.conversions.at(0)?.format, i = this._coordinateInput.value?.value;
!o || !i || await this.processUserInput(i, o, e);
}
async _reverseConvert(e, o) {
return await o.reverseConvert(e);
}
setDefaultPattern(e) {
e.stopPropagation();
const o = this.findSettingsFormat();
o?.defaultPattern && (o.currentPattern = o.defaultPattern);
}
setInputFormat(e) {
const o = e.target.selectedOption.value;
o !== null && (this.inputFormat = o);
}
setPreviewConversion() {
const e = this.findSettingsFormat(), o = this.viewModel;
if (e) {
const i = this.conversions.find((t) => t.format === e);
this.previewConversion = new u({
format: e,
position: {
location: this.currentLocation,
coordinate: i?.position?.coordinate
}
}), this.previewConversion.position?.coordinate || o.previewConversion(this.previewConversion, o.currentLocation ?? q);
}
}
showAlertMessage(e, o, i, t = V) {
this.alertProperties = {
...this.alertProperties,
title: e,
message: o,
kind: i,
open: !0
}, window.clearTimeout(this._alertTimer), this._alertTimer = window.setTimeout(() => {
this.alertProperties = {
...this.alertProperties,
open: !1
};
}, t);
}
toggleConversion(e) {
const o = e.target, i = this.formats.find((t) => t.name === o.getAttribute("data-format"));
if (i) {
const t = this.conversions.find((r) => r.format === i);
if (t) {
if (this.conversions.length > 1) {
const r = this._conversionPopoverMap.get(t);
r && (r.open = !1, this._conversionPopoverMap.delete(t)), this.activeConversion === t && (this.activeConversion = void 0), this.conversions.remove(t);
}
} else {
const r = new u({ format: i });
this.conversions.add(r);
}
}
}
toggleMode() {
this.mode = this.viewModel.mode === "live" ? "capture" : "live";
}
transferConversionPopoverState(e, o) {
const i = this.getConversionPopoverState(e), t = this.getConversionPopoverState(o);
t.open = i.open, this._conversionPopoverMap.delete(e);
}
updateCurrentPattern(e) {
e.stopPropagation();
const o = e.target, i = this.findSettingsFormat();
i && (i.currentPattern = o.value);
}
render() {
const { headingLevel: e } = this, o = this.renderConversionPopover();
return n`<calcite-panel class=root .headingLevel=${e} .scale=${this.visualScale}>${this.renderConversionsView()}${this.renderAlert()}</calcite-panel>${o}`;
}
renderAlert() {
const { messages: e } = this, { open: o, message: i, title: t, kind: r } = this.alertProperties;
return n`<calcite-alert class="alert" .kind=${r} .label=${e.alertLabel} =${this.clearAlertTimeout} .open=${o} placement=top .scale=${this.visualScale} slot=alerts>${t ? n`<div slot=title>${t}</div>` : null}${i ? n`<div slot=message>${i}</div>` : null}</calcite-alert>`;
}
_renderConversionActions(e, o) {
const { messages: i } = this, t = this.getConversionPopoverState(e), r = i.settingsTitleWithFormat.replace("{formatName}", e.format?.name?.toUpperCase() ?? ""), s = e.displayCoordinate && this.mode !== "live";
return n`<calcite-action-group layout=horizontal .scale=${this.visualScale} slot=actions-end>${s ? n`<calcite-action .icon=${l.copy} .label=${i.copyLabel} =${() => this.copyToClipboard(o)} .scale=${this.visualScale} .text=${i.copyLabel} title=${i.copyLabel ?? c}></calcite-action>` : null}${this.hideSettingsButton ? null : n`<calcite-action data-format=${e.format?.name ?? c} .icon=${l.gear} .label=${r} =${(a) => this.openConversionSettings(e, a)} .scale=${this.visualScale} .text=${r} title=${r ?? c} ${p(t.triggerRef)}></calcite-action>`}</calcite-action-group>`;
}
renderConversionOptions(e, o) {
return e.map((i) => n`<calcite-option .label=${i.label.toUpperCase()} .selected=${i === o} .value=${i}>${i.label}</calcite-option>`);
}
renderConversionPopover() {
const { activeConversion: e, messages: o } = this;
if (!e)
return null;
const i = this.getConversionPopoverState(e), t = o.settingsTitleWithFormat.replace("{formatName}", e.format?.name?.toUpperCase() ?? "");
return this.renderPopover({
class: "conversion-popover",
content: this.renderSettingsView(),
getPopoverOpenProperty: () => i.open,
heading: t,
includeFooter: !0,
label: t,
setPopoverOpenProperty: (r) => {
i.open = r, r || (this._conversionPopoverTrigger = void 0, this.activeConversion = void 0), this.requestUpdate();
},
trigger: null,
triggerElement: i.triggerRef.value ?? this._conversionPopoverTrigger ?? void 0
});
}
renderConversionsView() {
if (!this.conversions)
return;
const { messages: e, multipleConversionsDisabled: o } = this, t = (o ? this.conversions.slice(0, 1) : this.conversions).map(this.renderConversionView).reverse(), r = this.showElevation ? this.renderElevation() : null, s = this.hideCaptureSection ? null : this.renderLiveModeSection(), a = this.hideInputSection ? null : this.renderCoordinateInputView(), d = this.multipleConversionsDisabled ? null : this.renderFormatDropdown(), v = this.disabled ? n`<calcite-notice .icon=${l.lightbulb} .open=${this.disabled} width=full><div class="font-size-small" slot=message>${e.noBasemap}</div></calcite-notice>` : null;
return n`${s}${v}${a}<calcite-block class="conversions-block" .disabled=${this.disabled} expanded .heading=${e.coordinates} .headingLevel=${this.headingLevel} .scale=${this.visualScale}><calcite-list interaction-mode=static .label=${e.coordinates} .scale=${this.visualScale}>${t}</calcite-list>${d}</calcite-block>${r}`;
}
renderCoordinateInputView() {
const { messages: e } = this, o = this.inputFormat ?? this.conversions.at(0)?.format, i = this.getId("coordinate-input"), t = this.renderConversionOptions(this.formats, o ?? void 0), r = n`<calcite-action .icon=${l.goTo} .label=${e.convertAndGoTo} =${() => this.processUserMouseInput(!0)} .scale=${this.visualScale} .text=${e.convertAndGoTo} title=${e.convertAndGoTo ?? c}></calcite-action>`;
return n`<calcite-block collapsible data-testid=input-block .disabled=${this.disabled} .heading=${e.input} .headingLevel=${this.headingLevel} .scale=${this.visualScale}><div class="input-form-group"><calcite-label .scale=${this.visualScale}>${e.inputFormat}<calcite-select aria-controls=${i ?? c} class="input-select" .label=${e.inputFormat} =${this.setInputFormat} .scale=${this.visualScale}>${t}</calcite-select></calcite-label><calcite-label .scale=${this.visualScale}>${e.inputCoordTitle}<div class="go-to-input-holder"><calcite-input class="coordinate-input" data-format=${o ?? c} data-testid=coordinate-input id=${i ?? c} =${this.processUserKeyboardInput} .placeholder=${e.inputCoordTitle} required .scale=${this.visualScale} .status=${this.invalidInput ? "invalid" : "idle"} ${p(this._coordinateInput)}></calcite-input>${r}</div></calcite-label><calcite-button appearance=outline data-testid=convert-button kind=neutral =${() => this.processUserMouseInput(!1)} type=button .scale=${this.visualScale} width=auto>${e.convert}</calcite-button></div></calcite-block>`;
}
renderElevation() {
const { messages: e } = this, o = this.displayedElevation ?? e.noElevation, i = this.renderElevationActions(), t = this.hideSettingsButton ? null : this.renderElevationSettingsDropdown();
return n`<calcite-block .disabled=${this.disabled} expanded .heading=${e.elevation} .headingLevel=${this.headingLevel} .scale=${this.visualScale}><calcite-list interaction-mode=static .label=${e.elevation} .scale=${this.visualScale}><calcite-list-item class="elevation-list-item" .label=${o} .scale=${this.visualScale} title=${o ?? c}>${i}</calcite-list-item></calcite-list>${t}</calcite-block>`;
}
renderElevationActions() {
const { messages: e } = this, o = this.currentLocation?.z !== void 0 && this.mode !== "live", i = this.displayedElevation ?? e.noElevation;
return n`<calcite-action-group layout=horizontal .scale=${this.visualScale} slot=actions-end>${o ? n`<calcite-action .icon=${l.copy} .label=${e.copyElevationLabel} =${() => o && this.copyToClipboard(i)} .scale=${this.visualScale} .text=${e.copyElevationLabel} title=${e.copyElevationLabel ?? c}></calcite-action>` : null}${this.hideSettingsButton ? null : n`<calcite-action .icon=${l.gear} .label=${e.selectElevationUnit} .scale=${this.visualScale} .text=${e.selectElevationUnit} title=${e.selectElevationUnit ?? c} ${p(this.onElevationPopoverTriggerMount)}></calcite-action>`}</calcite-action-group>`;
}
renderElevationSettingsDropdown() {
const { messages: e } = this, o = n`<arcgis-unit-radio-button-group =${(i) => this.verticalUnit = i.detail} .options=${U} .name=${e.selectElevationUnit} .scale=${this.visualScale} .value=${this.verticalUnit}></arcgis-unit-radio-button-group>`;
return this.renderPopover({
content: o,
closeOnEnter: !0,
getPopoverOpenProperty: () => this.elevationPopoverOpen,
includeFooter: !1,
label: e.selectElevationUnit,
setPopoverOpenProperty: (i) => this.elevationPopoverOpen = i,
trigger: null,
triggerElement: this._elevationPopoverTrigger
});
}
renderFormatDropdown() {
const { messages: e } = this, o = n`<calcite-list .label=${e.addConversion} .scale=${this.visualScale} selection-mode=multiple>${C(this.formats, (t) => t, (t) => {
const r = !!this.conversions.find((a) => a.format === t), s = this.getFormatDescription(t);
return n`<calcite-list-item data-format=${t.name ?? c} .description=${s} .disabled=${r && this.conversions.length === 1} .label=${t.label.toUpperCase()} =${this.toggleConversion} .selected=${r}></calcite-list-item>`;
})}</calcite-list>`, i = n`<calcite-button appearance=outline class="add-conversion-trigger" .iconStart=${l.plus} kind=neutral .label=${e.selectFormats} round .scale=${this.visualScale} ${p(this.onFormatPopoverTriggerMount)}>${e.selectFormats}</calcite-button>`;
return this.renderPopover({
content: o,
includeFooter: !0,
getPopoverOpenProperty: () => this.formatsPopoverOpen,
label: e.selectFormats,
setPopoverOpenProperty: (t) => this.formatsPopoverOpen = t,
trigger: i,
triggerElement: this._formatsPopoverTrigger
});
}
renderPopover({ content: e, class: o, closeOnEnter: i, heading: t, getPopoverOpenProperty: r, includeFooter: s, label: a, setPopoverOpenProperty: d, slot: v, trigger: x, triggerDisabled: $, triggerElement: f }) {
const { messages: _ } = this;
return n`${x}${f ? n`<calcite-popover auto-close class=${z(o)} .heading=${t} .headingLevel=${this.headingLevel} .label=${a} =${() => {
d(!0);
}} =${(h) => {
d(!1), h.stopPropagation();
}} =${(h) => {
i && (h.key === "Enter" || h.key === " ") && d(!1);
}} .open=${r()} .referenceElement=${f} .scale=${this.visualScale} slot=${v ?? c} .triggerDisabled=${$}>${e}${s ? n`<div class="popover-footer"><calcite-button appearance=solid class="popover-done-button" kind=brand =${() => d(!1)} .scale=${this.visualScale} width=full>${_.done}</calcite-button></div>` : null}</calcite-popover>` : null}`;
}
renderSettingsView() {
const { messages: e } = this, o = this.findSettingsFormat(), i = this.getId("pattern-input"), t = this.getId("preview-coordinate"), r = o?.currentPattern, s = this.multipleConversionsDisabled ? this.renderSingleFormatDropdown() : null;
if (!o || !g(o))
return n`<div class="settings"><calcite-label .scale=${this.visualScale}>${e.format}${s ?? n`<calcite-notice class="no-display-properties-notice" .icon=${l.warning} open .scale=${this.visualScale}><div class="font-size-small" slot=message>${e.noDisplayProperties}</div></calcite-notice>`}</calcite-label></div>`;
const a = n`<calcite-action .icon=${l.refresh} .label=${e.defaultPattern} =${this.setDefaultPattern} .scale=${this.visualScale} .text=${e.defaultPattern} title=${e.defaultPattern ?? c}></calcite-action>`;
return n`<div class="settings"><calcite-label .scale=${this.visualScale}>${e.format}${s}</calcite-label><calcite-label .for=${i} .scale=${this.visualScale}>${e.display}<div class="settings-form-group-horizontal"><calcite-input aria-controls=${t ?? c} class="pattern-input" id=${i ?? c} =${this.updateCurrentPattern} .scale=${this.visualScale} type=text .value=${r}></calcite-input>${a}</div></calcite-label><calcite-label .scale=${this.visualScale}>${e.preview}<calcite-input read-only .scale=${this.visualScale} type=text .value=${this.previewConversion?.displayCoordinate ?? void 0}></calcite-input></calcite-label></div>`;
}
renderSingleFormatDropdown() {
const { messages: e } = this;
return n`<calcite-combobox data-testid=single-format-combobox .label=${e.selectFormat} =${this.handleFormatComboboxChange} .scale=${this.visualScale} selection-mode=single-persist>${this.formats?.map((o) => n`<calcite-combobox-item .description=${this.getFormatDescription(o)} .heading=${o.label.toUpperCase()} .selected=${this.conversions.at(0)?.format === o} .value=${o.name}></calcite-combobox-item>`)}</calcite-combobox>`;
}
}
y("arcgis-coordinate-conversion-next", j);
export {
j as ArcgisCoordinateConversionNext
};