/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
import { c as h } from "../../chunks/runtime.js";
import { css as f, html as a } from "lit";
import { classes as u } from "@arcgis/toolkit/dom";
import { when as w } from "@arcgis/core/core/reactiveUtils.js";
import v from "@arcgis/core/widgets/BasemapGallery/BasemapGalleryViewModel.js";
import { LitElement as b, createEvent as _, nothing as d, safeClassMap as p, safeStyleMap as x } from "@arcgis/lumina";
import { usePropertyChange as y } from "@arcgis/lumina/controllers";
import { u as k } from "../../chunks/useT9n.js";
import { m as z } from "../../chunks/useViewModel.js";
import { H as M } from "../../chunks/heading.js";
import { g as n } from "../../chunks/globalCss.js";
const $ = f`@keyframes esri-basemap-slide{0%{opacity:0;margin-top:0;margin-left:0}75%{opacity:0;margin-top:0;margin-left:0}to{opacity:1;margin-top:5px;margin-left:5px}}@keyframes esri-docking-animation{0%{opacity:0}25%{opacity:0}to{opacity:1}}@keyframes popup-intro-animation-down{0%{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translate(0)}}@keyframes popup-intro-animation-up{0%{opacity:0;transform:translateY(5px)}to{opacity:1;transform:translate(0)}}@supports (-ms-ime-align: auto){.esri-slider__anchor:focus{outline:1px dotted #000}}@keyframes esri-spinner--start-animation{0%{opacity:0;transform:scale(0)}to{opacity:1;transform:scale(1)}}@keyframes esri-spinner--finish-animation{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(0)}}@keyframes esri-spinner--rotate-animation{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media(prefers-reduced-motion){.esri-utility-network-trace__reset-prompt{animation:none!important}}@media(prefers-reduced-motion){.esri-popup--aligned-top-center,.esri-popup--aligned-top-left,.esri-popup--aligned-top-right,.esri-popup--aligned-bottom-center,.esri-popup--aligned-bottom-left,.esri-popup--aligned-bottom-right,.esri-popup--is-docked{animation:none!important}}@media(prefers-reduced-motion:reduce){.esri-fov-overlay{animation:none!important}}@keyframes esri-fade-in-down{0%{opacity:0;transform:translateY(-5px)}25%{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translate(0)}}@keyframes esri-fade-in-up{0%{opacity:0;transform:translateY(5px)}25%{opacity:0;transform:translateY(5px)}to{opacity:1;transform:translate(0)}}@keyframes esri-fade-in{0%{opacity:0}25%{opacity:0}to{opacity:1}}@keyframes esri-fade-in-scale{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes looping-progresss-bar-ani{0%{width:0;left:0}20%{width:20%;left:0}80%{width:20%;left:80%}to{width:0;left:100%}}@keyframes esri-rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes panel-advance{0%{opacity:0;transform:translate(50px) scale(.99)}to{opacity:1;transform:translate(0) scale(1)}}@keyframes panel-retreat{0%{opacity:0;transform:translate(-50px) scale(.99)}to{opacity:1;transform:translate(0) scale(1)}}@keyframes panel-advance--rtl{0%{opacity:0;transform:translate(-50px) scale(.99)}to{opacity:1;transform:translate(0) scale(1)}}@keyframes panel-retreat--rtl{0%{opacity:0;transform:translate(50px) scale(.99)}to{opacity:1;transform:translate(0) scale(1)}}.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}:host{display:flex;width:var(--arcgis-internal-panel-width, 300px)}:host(:focus-within){z-index:1;outline-offset:var(--calcite-spacing-base);outline:var(--calcite-spacing-base) solid var(--calcite-color-brand)}.root{position:relative;overflow-y:auto;container-type:inline-size;width:100%;min-height:32px;transition:max-height .25s ease-in-out}.root .loader:before,.root .loader:after{opacity:1;content:"";height:var(--calcite-spacing-px);transition:opacity .5s ease-in-out;position:absolute;top:0}.root .loader:before{z-index:0;background-color:var(--calcite-color-foreground-1);width:100%}.root .loader:after{z-index:0;background-color:var(--calcite-color-foreground-3);width:20%;animation:1.5s linear infinite looping-progresss-bar-ani}.esri-disabled arcgis-basemap-gallery-item{opacity:var(--calcite-opacity-light);pointer-events:none;animation:none}.empty-message{padding:12px 15px;animation:.5s ease-in-out esri-fade-in}.loader{width:100%;height:var(--calcite-spacing-base);animation:.5s ease-in-out esri-fade-in;position:absolute;top:0;left:0;right:0}.item-container{flex-flow:column;gap:3px;margin:0;padding-block:3px;padding-inline:3px;list-style:none;transition:opacity .25s ease-in-out;display:flex;position:relative}calcite-popover>.root{width:280px;max-height:80vh}.ui-corner calcite-panel>.root.widget.widget--panel{width:unset}.view-width-greater-than-large calcite-popover>.root,.view-width-greater-than-large .ui-corner>.root{width:450px}@container (width<=200px) or (width>=350px){.root .item-container{grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:var(--calcite-spacing-md) var(--calcite-spacing-lg);padding-block:var(--calcite-spacing-md);padding-inline:var(--calcite-spacing-lg);display:grid}}`, B = z(v), l = {
  // Below this width, items are displayed as a single column and the thumbnail is placed above the title.
  small: 200,
  // Below this width, items are displayed as a single column but with the thumbnail side-by-side
  // with the title. The title is square.
  default: 280,
  // Below this width, items are displayed as in `default`, but the thumbnail has an aspect ratio of 1.5
  // Above this width, items are displayed in a grid.
  wide: 435
};
class R extends b {
  constructor() {
    super(...arguments), this.messages = k({}), this.viewModel = B(this), this._width = 0, this.view = this.viewModel.view, this.activeBasemap = this.viewModel.activeBasemap, this.autoDestroyDisabled = !1, this.disabled = !1, this.headingLevel = 2, this.icon = "basemap", this.label = "", this.source = this.viewModel.source, this.state = this.viewModel.state, this.arcgisPropertyChange = y()("activeBasemap", "state"), this.arcgisReady = _();
  }
  static {
    this.properties = { _width: 16, view: 0, activeBasemap: 1, autoDestroyDisabled: 5, disabled: 7, headingLevel: 9, icon: 1, label: 1, messageOverrides: 0, referenceElement: 1, source: 0, state: 32 };
  }
  static {
    this.styles = $;
  }
  async destroy() {
    await this.manager.destroy();
  }
  loaded() {
    this.manager.onLifecycle(() => [
      w(() => this.source, () => {
        this.viewModel.loadSource();
      }, { sync: !0, initial: !0 }),
      (() => {
        const i = new ResizeObserver((o) => {
          for (const t of o)
            this._width = t.contentRect.width;
        }), e = this.el;
        return e && i.observe(e), {
          remove() {
            i?.disconnect();
          }
        };
      })()
    ]);
  }
  _getRoundRobinIndex(i, e) {
    return (i + e) % e;
  }
  _handleKeyDown(i) {
    const { key: e } = i;
    if (!["ArrowUp", "ArrowDown", "ArrowRight", "ArrowLeft"].includes(e))
      return;
    i.preventDefault();
    const { items: t, activeBasemapIndex: r } = this.viewModel, c = e === "ArrowUp" || e === "ArrowLeft" ? this._getRoundRobinIndex(Math.max(r - 1, -1), t.length) : this._getRoundRobinIndex(r + 1, t.length), s = t.at(c);
    s?.state === "ready" && (this.viewModel.activeBasemap = s.basemap);
  }
  render() {
    const i = this.source.state === "loading", e = this.disabled || this.state === "disabled", o = this.viewModel.items, t = {
      "source-loading": i,
      [n.disabled]: e
    }, r = this._width;
    t["layout-grid"] = r >= l.wide || r <= l.small, t["narrow-items"] = r < l.default;
    const c = i ? a`<div class="loader"></div>` : null, s = i ? null : o.length > 0 ? a`<div aria-disabled=${this.disabled ?? d} aria-label=${this.label ?? d} class="item-container" @keydown=${this._handleKeyDown} role=radiogroup>${o.map((g, m) => a`<arcgis-basemap-gallery-item .disabled=${e} .item=${g} .itemIndex=${m} .viewModel=${this.viewModel} .messages=${this.messages}></arcgis-basemap-gallery-item>`)}</div>` : a`<div class=${p(n.empty)}>${M({ level: this.headingLevel, children: this.messages.noBasemaps })}</div>`;
    return a`<div class=${p(u("root", n.widget, n.panel, t))} style=${x({
      "--esri-basemap-gallery-small": `${l.small}px`
    })}>${[c, s]}</div>`;
  }
}
h("arcgis-basemap-gallery", R);
export {
  R as ArcgisBasemapGallery
};
