{
  "cells": [
    {
      "cell_type": "markdown",
      "source": [
        "<a target=\"_blank\" href=\"https://storage.googleapis.com/weathernext-public/colabs/WeatherNext_3_Starter_Guide_Earth_Engine_0p05deg.ipynb\">\n",
        "  <img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/>\n",
        "</a>"
      ],
      "metadata": {
        "id": "5yneGAQ6A2--"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Exploring Global Weather Forecasts with Earth Engine and WeatherNext 3\n",
        "\n",
        "**Welcome!** This notebook introduces a weather forecast dataset available in Earth Engine, generated by Google DeepMind and Google Research's WeatherNext 3 model. Through a series of sample queries, we'll demonstrate how to access, analyze, and visualize this data to gain insights into global weather patterns, trends, and potential impacts.\n",
        "\n",
        "**Dataset Overview**\n",
        "\n",
        "This dataset offers weather forecasts produced by WeatherNext, a state-of-the-art machine learning model developed by Google DeepMind and Google Research. It provides predictions for various weather variables, including temperature, precipitation, wind speed, and more, at a global scale and with a high degree of accuracy. Each forecast consists of 64 ensemble members, representing 64 different possible outcomes. The dataset in Earth Engine has precomputed statistical summary metrics across the ensemble members for you; for individual ensemble members, see [the Zarr (Full Ensemble) version of this dataset](https://storage.googleapis.com/weathernext-public/colabs/WeatherNext_3_Starter_Guide_Zarr_Spatial_Full_Ensemble_on_Google_Cloud_Storage.ipynb). This dataset only provides variables at 0.05° resolution; see [this notebook for 0.1° resolution variables](https://storage.googleapis.com/weathernext-public/colabs/WeatherNext_3_Starter_Guide_Earth_Engine_0p1deg.ipynb).\n",
        "\n",
        "**Notebook Purpose**\n",
        "\n",
        "This notebook aims to:\n",
        "\n",
        "* Familiarize users with the structure and content of the WeatherNext 3 weather forecast dataset in Earth Engine.\n",
        "* Demonstrate how to query and analyze this data using Earth Engine's powerful tools and functions.\n",
        "* Showcase the potential applications of this data for various weather-related tasks, such as forecasting, climate analysis, and risk assessment.\n",
        "\n",
        "**Copyright Information**\n",
        "\n",
        "Copyright 2026 Google LLC. All materials are licensed under the [Creative Commons Attribution 4.0 International License (CC-BY)](https://creativecommons.org/licenses/by/4.0/legalcode).\n",
        "\n",
        "[Earth Engine Client Library Documentation](https://developers.google.com/earth-engine/apidocs)"
      ],
      "metadata": {
        "id": "Pp3AnSfzwxSG"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "## Import Python Libraries & Some Other Setup"
      ],
      "metadata": {
        "id": "X4EBcCI5obFt"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "from collections.abc import Mapping\n",
        "\n",
        "import ee\n",
        "import geemap.core as geemap\n",
        "import pandas as pd\n",
        "import matplotlib.pyplot as plt\n",
        "import matplotlib.dates as mdates\n",
        "import seaborn as sns\n",
        "import numpy as np\n",
        "\n",
        "import warnings\n",
        "# Suppress the FutureWarning\n",
        "warnings.filterwarnings(\"ignore\", category=FutureWarning)"
      ],
      "metadata": {
        "id": "Fqqo0TpxxIQW"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "## Set Google Cloud/Earth Engine Project ID"
      ],
      "metadata": {
        "id": "L_Tfl2oCobFu"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "project_id = ''  #@param{type:\"string\"}\n",
        "ee.Authenticate()\n",
        "ee.Initialize(project=project_id)\n",
        "ee_image_collection = 'projects/gcp-public-data-weathernext/assets/weathernext_3_0_0_0p05deg'  #@param{type:\"string\"}"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 17
        },
        "id": "55BGLfGULI0J",
        "outputId": "ee0bd747-8301-44df-9ef6-5180410a13e6"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ],
            "text/html": [
              "\n",
              "            <style>\n",
              "                .geemap-dark {\n",
              "                    --jp-widgets-color: white;\n",
              "                    --jp-widgets-label-color: white;\n",
              "                    --jp-ui-font-color1: white;\n",
              "                    --jp-layout-color2: #454545;\n",
              "                    background-color: #383838;\n",
              "                }\n",
              "\n",
              "                .geemap-dark .jupyter-button {\n",
              "                    --jp-layout-color3: #383838;\n",
              "                }\n",
              "\n",
              "                .geemap-colab {\n",
              "                    background-color: var(--colab-primary-surface-color, white);\n",
              "                }\n",
              "\n",
              "                .geemap-colab .jupyter-button {\n",
              "                    --jp-layout-color3: var(--colab-primary-surface-color, white);\n",
              "                }\n",
              "            </style>\n",
              "            "
            ]
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Utility functions"
      ],
      "metadata": {
        "id": "NeXvgbqbmN9W"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# @title\n",
        "def convert_to_dataframe(\n",
        "    image_collection: ee.ImageCollection,\n",
        "    geometry: ee.Geometry,\n",
        "    bands_to_reducer: Mapping[str, ee.Reducer]\n",
        "):\n",
        "  \"\"\"Converts an EE ImageCollection into a Pandas Dataframe for plotting.\"\"\"\n",
        "  covering_grid = geometry.coveringGrid(\n",
        "      image_collection.first().projection(),\n",
        "      image_collection.first().projection().nominalScale()\n",
        "  )\n",
        "\n",
        "  def convert_to_feature_collection(image: ee.Image):\n",
        "    def get_feature_for_cell(cell_polygon: ee.Geometry.Polygon):\n",
        "      feature_dict = {\n",
        "          'time': image.get('end_time'),\n",
        "          'init_time': image.get('start_time'),\n",
        "          'forecast_hour': image.get('forecast_hour'),\n",
        "      }\n",
        "      # Add each of the band values to the feature dict. Use the supplied\n",
        "      # reducer method to get this value (typically, mean).\n",
        "      for band_id, reducer in bands_to_reducer.items():\n",
        "        value = image.reduceRegion(\n",
        "            reducer=reducer,\n",
        "            geometry=cell_polygon.geometry(),\n",
        "            scale=image.projection().nominalScale()\n",
        "        ).get(band_id)\n",
        "        feature_dict[band_id] = value\n",
        "      return ee.Feature(cell_polygon.geometry(), feature_dict)\n",
        "    return covering_grid.map(get_feature_for_cell)\n",
        "\n",
        "  features = image_collection.map(convert_to_feature_collection).flatten()\n",
        "  df = ee.data.computeFeatures(\n",
        "      {'expression': features, 'fileFormat': 'PANDAS_DATAFRAME'}\n",
        "  )\n",
        "  df['time'] = pd.to_datetime(df['time'])\n",
        "  df['init_time'] = pd.to_datetime(df['init_time'])\n",
        "  return df"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 17
        },
        "id": "pCH4K0jhmDWz",
        "outputId": "7be2be1f-0653-4b1c-8bdc-16a0147f24a9",
        "cellView": "form"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ],
            "text/html": [
              "\n",
              "            <style>\n",
              "                .geemap-dark {\n",
              "                    --jp-widgets-color: white;\n",
              "                    --jp-widgets-label-color: white;\n",
              "                    --jp-ui-font-color1: white;\n",
              "                    --jp-layout-color2: #454545;\n",
              "                    background-color: #383838;\n",
              "                }\n",
              "\n",
              "                .geemap-dark .jupyter-button {\n",
              "                    --jp-layout-color3: #383838;\n",
              "                }\n",
              "\n",
              "                .geemap-colab {\n",
              "                    background-color: var(--colab-primary-surface-color, white);\n",
              "                }\n",
              "\n",
              "                .geemap-colab .jupyter-button {\n",
              "                    --jp-layout-color3: var(--colab-primary-surface-color, white);\n",
              "                }\n",
              "            </style>\n",
              "            "
            ]
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Weather Forecast Dataset Schema\n",
        "\n",
        "This describes the schema for the WeatherNext 3 0.05° weather forecast dataset (`projects/gcp-public-data-weathernext/assets/weathernext_3_0_0_0p05deg`).\n",
        "\n",
        "In Earth Engine, this dataset consists of an `ImageCollection` where each `Image` represents a forecast for a given initialization time (`start_time`) and valid time (`end_time`) at 0.05° spatial resolution. The 64 ensemble members are aggregated into 6 statistical summary metrics per variable (`_mean`, `_p10`, `_p25`, `_p50`, `_p75`, `_p90`), yielding 12 raster bands per image.\n",
        "\n",
        "\n",
        "\n",
        "## Image Properties\n",
        "\n",
        "<div align=\"left\">\n",
        "\n",
        "| Name | Type | Description |\n",
        "| --- | --- | --- |\n",
        "| `end_time` | STRING | The valid time for this specific forecast. Calculated as `start_time` + `forecast_hour`. |\n",
        "| `forecast_hour` | INT | \tLead time in hours from initialization (1 to 360 for 6-hourly inits, 1 to 48 for interim hourly inits). |\n",
        "| `ingestion_time_utc` | DOUBLE | The timestamp when this forecast data became available in Earth Engine. |\n",
        "| `start_time` | STRING | The initialization time of the forecast in UTC ISO 8601 format (`YYYY-MM-DDTHH:MM:SSZ`). |\n",
        "| `system:time_start` | LONG | Valid time expressed as milliseconds since the Unix epoch. |\n",
        "| `B_` | STRING | The band names in the order, starting from B0 to B11. |\n",
        "\n",
        "</div>\n",
        "\n",
        "## Bands\n",
        "\n",
        "Each base weather variable is provided across **6 ensemble statistics**:\n",
        "- `_mean`: Ensemble mean\n",
        "- `_p10`: 10th percentile\n",
        "- `_p25`: 25th percentile\n",
        "- `_p50`: 50th percentile (median)\n",
        "- `_p75`: 75th percentile\n",
        "- `_p90`: 90th percentile\n",
        "\n",
        "<div align=\"left\">\n",
        "\n",
        "| Base Variable | Units | Step Type | Description |\n",
        "|---|---|---|---|\n",
        "| `station_head_dewpoint_temperature_2m` | K | Instantaneous | 2-metre dewpoint temperature (station head level) at 0.05° resolution |\n",
        "| `station_head_temperature_2m` | K | Instantaneous | 2-metre air temperature (station head level) at 0.05° resolution |\n",
        "\n",
        "</div>"
      ],
      "metadata": {
        "id": "H9E2Ak-ezVEP"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Example Queries\n",
        "\n",
        "## Exploring Temperature Forecasts for New York City - 24 Hour\n",
        "\n",
        "This query retrieves the 2-meter temperature forecasts for New York, NY.\n"
      ],
      "metadata": {
        "id": "__NHmy5oFZTM"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "ny_geom = ee.Geometry.BBox(-74.26, 40.50, -73.70, 40.9)\n",
        "\n",
        "# WeatherNext 3 forecast initializations start from 2026.\n",
        "init_time = '2026-08-26T00:00:00Z'\n",
        "\n",
        "ny_temps_ee = (ee.ImageCollection(ee_image_collection)\n",
        "  .filter(ee.Filter.eq('start_time', init_time))\n",
        "  .filter(ee.Filter.lte(\"forecast_hour\", 24))\n",
        "  .filterBounds(ny_geom)\n",
        "  .select(['station_head_temperature_2m_mean', 'station_head_temperature_2m_p10', 'station_head_temperature_2m_p90']))\n",
        "\n",
        "# Convert to Pandas dataframe for graphing purposes.\n",
        "ny_temps = convert_to_dataframe(\n",
        "    ny_temps_ee,\n",
        "    ny_geom,\n",
        "    {\n",
        "        'station_head_temperature_2m_mean': ee.Reducer.mean(),\n",
        "        'station_head_temperature_2m_p10': ee.Reducer.mean(),\n",
        "        'station_head_temperature_2m_p90': ee.Reducer.mean(),\n",
        "    },\n",
        ")\n",
        "\n",
        "# Show data\n",
        "ny_temps"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 964
        },
        "id": "F-sPgfy8du7w",
        "outputId": "ddfedee9-469c-4a0b-86d7-487e193b4978"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ],
            "text/html": [
              "\n",
              "            <style>\n",
              "                .geemap-dark {\n",
              "                    --jp-widgets-color: white;\n",
              "                    --jp-widgets-label-color: white;\n",
              "                    --jp-ui-font-color1: white;\n",
              "                    --jp-layout-color2: #454545;\n",
              "                    background-color: #383838;\n",
              "                }\n",
              "\n",
              "                .geemap-dark .jupyter-button {\n",
              "                    --jp-layout-color3: #383838;\n",
              "                }\n",
              "\n",
              "                .geemap-colab {\n",
              "                    background-color: var(--colab-primary-surface-color, white);\n",
              "                }\n",
              "\n",
              "                .geemap-colab .jupyter-button {\n",
              "                    --jp-layout-color3: var(--colab-primary-surface-color, white);\n",
              "                }\n",
              "            </style>\n",
              "            "
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "                                                    geo  forecast_hour  \\\n",
              "0     {'type': 'Polygon', 'coordinates': [[[-74.275,...              1   \n",
              "1     {'type': 'Polygon', 'coordinates': [[[-74.225,...              1   \n",
              "2     {'type': 'Polygon', 'coordinates': [[[-74.175,...              1   \n",
              "3     {'type': 'Polygon', 'coordinates': [[[-74.125,...              1   \n",
              "4     {'type': 'Polygon', 'coordinates': [[[-74.075,...              1   \n",
              "...                                                 ...            ...   \n",
              "2587  {'type': 'Polygon', 'coordinates': [[[-73.925,...             24   \n",
              "2588  {'type': 'Polygon', 'coordinates': [[[-73.875,...             24   \n",
              "2589  {'type': 'Polygon', 'coordinates': [[[-73.825,...             24   \n",
              "2590  {'type': 'Polygon', 'coordinates': [[[-73.775,...             24   \n",
              "2591  {'type': 'Polygon', 'coordinates': [[[-73.725,...             24   \n",
              "\n",
              "                     init_time  station_head_temperature_2m_mean  \\\n",
              "0    2026-08-26 00:00:00+00:00                        293.912292   \n",
              "1    2026-08-26 00:00:00+00:00                        294.376221   \n",
              "2    2026-08-26 00:00:00+00:00                        294.880890   \n",
              "3    2026-08-26 00:00:00+00:00                        295.349304   \n",
              "4    2026-08-26 00:00:00+00:00                        295.217682   \n",
              "...                        ...                               ...   \n",
              "2587 2026-08-26 00:00:00+00:00                        297.062408   \n",
              "2588 2026-08-26 00:00:00+00:00                        296.999420   \n",
              "2589 2026-08-26 00:00:00+00:00                        296.899506   \n",
              "2590 2026-08-26 00:00:00+00:00                        297.005768   \n",
              "2591 2026-08-26 00:00:00+00:00                        297.063904   \n",
              "\n",
              "      station_head_temperature_2m_p10  station_head_temperature_2m_p90  \\\n",
              "0                          292.665802                       294.949036   \n",
              "1                          293.094727                       295.418335   \n",
              "2                          293.534637                       296.031189   \n",
              "3                          293.951752                       296.538971   \n",
              "4                          293.823944                       296.472595   \n",
              "...                               ...                              ...   \n",
              "2587                       295.966431                       298.083038   \n",
              "2588                       296.242981                       297.864532   \n",
              "2589                       296.324341                       297.659668   \n",
              "2590                       296.412903                       297.754852   \n",
              "2591                       296.577057                       297.833130   \n",
              "\n",
              "                          time  \n",
              "0    2026-08-26 01:00:00+00:00  \n",
              "1    2026-08-26 01:00:00+00:00  \n",
              "2    2026-08-26 01:00:00+00:00  \n",
              "3    2026-08-26 01:00:00+00:00  \n",
              "4    2026-08-26 01:00:00+00:00  \n",
              "...                        ...  \n",
              "2587 2026-08-27 00:00:00+00:00  \n",
              "2588 2026-08-27 00:00:00+00:00  \n",
              "2589 2026-08-27 00:00:00+00:00  \n",
              "2590 2026-08-27 00:00:00+00:00  \n",
              "2591 2026-08-27 00:00:00+00:00  \n",
              "\n",
              "[2592 rows x 7 columns]"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-a54943f1-eca6-41da-bde8-88ee477c35f6\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>geo</th>\n",
              "      <th>forecast_hour</th>\n",
              "      <th>init_time</th>\n",
              "      <th>station_head_temperature_2m_mean</th>\n",
              "      <th>station_head_temperature_2m_p10</th>\n",
              "      <th>station_head_temperature_2m_p90</th>\n",
              "      <th>time</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>{'type': 'Polygon', 'coordinates': [[[-74.275,...</td>\n",
              "      <td>1</td>\n",
              "      <td>2026-08-26 00:00:00+00:00</td>\n",
              "      <td>293.912292</td>\n",
              "      <td>292.665802</td>\n",
              "      <td>294.949036</td>\n",
              "      <td>2026-08-26 01:00:00+00:00</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>{'type': 'Polygon', 'coordinates': [[[-74.225,...</td>\n",
              "      <td>1</td>\n",
              "      <td>2026-08-26 00:00:00+00:00</td>\n",
              "      <td>294.376221</td>\n",
              "      <td>293.094727</td>\n",
              "      <td>295.418335</td>\n",
              "      <td>2026-08-26 01:00:00+00:00</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>{'type': 'Polygon', 'coordinates': [[[-74.175,...</td>\n",
              "      <td>1</td>\n",
              "      <td>2026-08-26 00:00:00+00:00</td>\n",
              "      <td>294.880890</td>\n",
              "      <td>293.534637</td>\n",
              "      <td>296.031189</td>\n",
              "      <td>2026-08-26 01:00:00+00:00</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>{'type': 'Polygon', 'coordinates': [[[-74.125,...</td>\n",
              "      <td>1</td>\n",
              "      <td>2026-08-26 00:00:00+00:00</td>\n",
              "      <td>295.349304</td>\n",
              "      <td>293.951752</td>\n",
              "      <td>296.538971</td>\n",
              "      <td>2026-08-26 01:00:00+00:00</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>{'type': 'Polygon', 'coordinates': [[[-74.075,...</td>\n",
              "      <td>1</td>\n",
              "      <td>2026-08-26 00:00:00+00:00</td>\n",
              "      <td>295.217682</td>\n",
              "      <td>293.823944</td>\n",
              "      <td>296.472595</td>\n",
              "      <td>2026-08-26 01:00:00+00:00</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>...</th>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2587</th>\n",
              "      <td>{'type': 'Polygon', 'coordinates': [[[-73.925,...</td>\n",
              "      <td>24</td>\n",
              "      <td>2026-08-26 00:00:00+00:00</td>\n",
              "      <td>297.062408</td>\n",
              "      <td>295.966431</td>\n",
              "      <td>298.083038</td>\n",
              "      <td>2026-08-27 00:00:00+00:00</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2588</th>\n",
              "      <td>{'type': 'Polygon', 'coordinates': [[[-73.875,...</td>\n",
              "      <td>24</td>\n",
              "      <td>2026-08-26 00:00:00+00:00</td>\n",
              "      <td>296.999420</td>\n",
              "      <td>296.242981</td>\n",
              "      <td>297.864532</td>\n",
              "      <td>2026-08-27 00:00:00+00:00</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2589</th>\n",
              "      <td>{'type': 'Polygon', 'coordinates': [[[-73.825,...</td>\n",
              "      <td>24</td>\n",
              "      <td>2026-08-26 00:00:00+00:00</td>\n",
              "      <td>296.899506</td>\n",
              "      <td>296.324341</td>\n",
              "      <td>297.659668</td>\n",
              "      <td>2026-08-27 00:00:00+00:00</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2590</th>\n",
              "      <td>{'type': 'Polygon', 'coordinates': [[[-73.775,...</td>\n",
              "      <td>24</td>\n",
              "      <td>2026-08-26 00:00:00+00:00</td>\n",
              "      <td>297.005768</td>\n",
              "      <td>296.412903</td>\n",
              "      <td>297.754852</td>\n",
              "      <td>2026-08-27 00:00:00+00:00</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2591</th>\n",
              "      <td>{'type': 'Polygon', 'coordinates': [[[-73.725,...</td>\n",
              "      <td>24</td>\n",
              "      <td>2026-08-26 00:00:00+00:00</td>\n",
              "      <td>297.063904</td>\n",
              "      <td>296.577057</td>\n",
              "      <td>297.833130</td>\n",
              "      <td>2026-08-27 00:00:00+00:00</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "<p>2592 rows × 7 columns</p>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-a54943f1-eca6-41da-bde8-88ee477c35f6')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-a54943f1-eca6-41da-bde8-88ee477c35f6 button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-a54943f1-eca6-41da-bde8-88ee477c35f6');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "  <div id=\"id_07300c1d-104c-4ec1-9820-75a991ea8515\">\n",
              "    <style>\n",
              "      .colab-df-generate {\n",
              "        background-color: #E8F0FE;\n",
              "        border: none;\n",
              "        border-radius: 50%;\n",
              "        cursor: pointer;\n",
              "        display: none;\n",
              "        fill: #1967D2;\n",
              "        height: 32px;\n",
              "        padding: 0 0 0 0;\n",
              "        width: 32px;\n",
              "      }\n",
              "\n",
              "      .colab-df-generate:hover {\n",
              "        background-color: #E2EBFA;\n",
              "        box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "        fill: #174EA6;\n",
              "      }\n",
              "\n",
              "      [theme=dark] .colab-df-generate {\n",
              "        background-color: #3B4455;\n",
              "        fill: #D2E3FC;\n",
              "      }\n",
              "\n",
              "      [theme=dark] .colab-df-generate:hover {\n",
              "        background-color: #434B5C;\n",
              "        box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "        filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "        fill: #FFFFFF;\n",
              "      }\n",
              "    </style>\n",
              "    <button class=\"colab-df-generate\" onclick=\"generateWithVariable('ny_temps')\"\n",
              "            title=\"Generate code using this dataframe.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "       width=\"24px\">\n",
              "    <path d=\"M7,19H8.4L18.45,9,17,7.55,7,17.6ZM5,21V16.75L18.45,3.32a2,2,0,0,1,2.83,0l1.4,1.43a1.91,1.91,0,0,1,.58,1.4,1.91,1.91,0,0,1-.58,1.4L9.25,21ZM18.45,9,17,7.55Zm-12,3A5.31,5.31,0,0,0,4.9,8.1,5.31,5.31,0,0,0,1,6.5,5.31,5.31,0,0,0,4.9,4.9,5.31,5.31,0,0,0,6.5,1,5.31,5.31,0,0,0,8.1,4.9,5.31,5.31,0,0,0,12,6.5,5.46,5.46,0,0,0,6.5,12Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "    <script>\n",
              "      (() => {\n",
              "      const buttonEl =\n",
              "        document.querySelector('#id_07300c1d-104c-4ec1-9820-75a991ea8515 button.colab-df-generate');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      buttonEl.onclick = () => {\n",
              "        google.colab.notebook.generateWithVariable('ny_temps');\n",
              "      }\n",
              "      })();\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "variable_name": "ny_temps",
              "summary": "{\n  \"name\": \"ny_temps\",\n  \"rows\": 2592,\n  \"fields\": [\n    {\n      \"column\": \"geo\",\n      \"properties\": {\n        \"dtype\": \"object\",\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"forecast_hour\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 6,\n        \"min\": 1,\n        \"max\": 24,\n        \"num_unique_values\": 24,\n        \"samples\": [\n          9,\n          17,\n          1\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"init_time\",\n      \"properties\": {\n        \"dtype\": \"date\",\n        \"min\": \"2026-08-26 00:00:00+00:00\",\n        \"max\": \"2026-08-26 00:00:00+00:00\",\n        \"num_unique_values\": 1,\n        \"samples\": [\n          \"2026-08-26 00:00:00+00:00\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"station_head_temperature_2m_mean\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 2.765872453596696,\n        \"min\": 289.30279541015625,\n        \"max\": 301.441162109375,\n        \"num_unique_values\": 2586,\n        \"samples\": [\n          291.7276916503906\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"station_head_temperature_2m_p10\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 2.8128072493629355,\n        \"min\": 287.368896484375,\n        \"max\": 300.09686279296875,\n        \"num_unique_values\": 2583,\n        \"samples\": [\n          294.6849365234375\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"station_head_temperature_2m_p90\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 2.656424293427652,\n        \"min\": 290.93035888671875,\n        \"max\": 302.8116455078125,\n        \"num_unique_values\": 2587,\n        \"samples\": [\n          292.7569580078125\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"time\",\n      \"properties\": {\n        \"dtype\": \"date\",\n        \"min\": \"2026-08-26 01:00:00+00:00\",\n        \"max\": \"2026-08-27 00:00:00+00:00\",\n        \"num_unique_values\": 24,\n        \"samples\": [\n          \"2026-08-26 09:00:00+00:00\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
            }
          },
          "metadata": {},
          "execution_count": 7
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "if ny_temps.empty:\n",
        "  print(\"No data found for the specified initialization time and geometry.\")\n",
        "else:\n",
        "  # Extract the date from the first entry's init_time.\n",
        "  forecast_date = ny_temps['init_time'].iloc[0].strftime('%Y-%m-%d %H:%M')\n",
        "\n",
        "  # Set the aesthetic style of the plots\n",
        "  sns.set_theme(style=\"whitegrid\")\n",
        "\n",
        "  # Aggregate across spatial grid cells in NYC polygon if multiple cells exist\n",
        "  ny_temps_agg = ny_temps.groupby('time', as_index=False)[\n",
        "      ['station_head_temperature_2m_mean', 'station_head_temperature_2m_p10', 'station_head_temperature_2m_p90']\n",
        "  ].mean()\n",
        "\n",
        "  # Convert temperature from Kelvin to Celsius\n",
        "  temp_mean_c = ny_temps_agg['station_head_temperature_2m_mean'] - 273.15\n",
        "  temp_p10_c = ny_temps_agg['station_head_temperature_2m_p10'] - 273.15\n",
        "  temp_p90_c = ny_temps_agg['station_head_temperature_2m_p90'] - 273.15\n",
        "  times = ny_temps_agg['time']\n",
        "\n",
        "  # Plot the data\n",
        "  plt.figure(figsize=(12, 6))\n",
        "\n",
        "  # 10th to 90th percentile band\n",
        "  plt.fill_between(\n",
        "      times,\n",
        "      temp_p10_c,\n",
        "      temp_p90_c,\n",
        "      color='lightcoral',\n",
        "      alpha=0.35,\n",
        "      label='10th–90th Percentile Range',\n",
        "  )\n",
        "\n",
        "  # Ensemble mean line\n",
        "  plt.plot(\n",
        "      times,\n",
        "      temp_mean_c,\n",
        "      marker='o',\n",
        "      markersize=4,\n",
        "      linestyle='-',\n",
        "      color='firebrick',\n",
        "      linewidth=2,\n",
        "      label='Ensemble Mean',\n",
        "  )\n",
        "\n",
        "  plt.xlabel('Valid Time (UTC)', fontsize=12)\n",
        "  plt.ylabel('2m Temperature (°C)', fontsize=12)\n",
        "  plt.title(\n",
        "      f'24-Hour Temperature Forecast for New York (initialized {forecast_date})',\n",
        "      fontsize=14,\n",
        "  )\n",
        "  plt.legend(loc='upper right', fontsize=11)\n",
        "\n",
        "  # Format the x-axis ticks\n",
        "  plt.gca().xaxis.set_major_formatter(\n",
        "      mdates.DateFormatter('%Y-%m-%d %H:%M')\n",
        "  )  # Show date and time\n",
        "  plt.gca().xaxis.set_major_locator(\n",
        "      mdates.HourLocator(interval=1)\n",
        "  )  # Show ticks for each hour\n",
        "  plt.xticks(rotation=45, ha='right', fontsize=10)\n",
        "\n",
        "  plt.tight_layout()\n",
        "  plt.show()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 601
        },
        "id": "XdY0XOtMZ1Jx",
        "outputId": "1ddbe507-3347-4994-f1dd-d07870d2540d"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ],
            "text/html": [
              "\n",
              "            <style>\n",
              "                .geemap-dark {\n",
              "                    --jp-widgets-color: white;\n",
              "                    --jp-widgets-label-color: white;\n",
              "                    --jp-ui-font-color1: white;\n",
              "                    --jp-layout-color2: #454545;\n",
              "                    background-color: #383838;\n",
              "                }\n",
              "\n",
              "                .geemap-dark .jupyter-button {\n",
              "                    --jp-layout-color3: #383838;\n",
              "                }\n",
              "\n",
              "                .geemap-colab {\n",
              "                    background-color: var(--colab-primary-surface-color, white);\n",
              "                }\n",
              "\n",
              "                .geemap-colab .jupyter-button {\n",
              "                    --jp-layout-color3: var(--colab-primary-surface-color, white);\n",
              "                }\n",
              "            </style>\n",
              "            "
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 1200x600 with 1 Axes>"
            ],
            "image/png": "iVBORw0KGgoAAAANSUhEUgAABJ8AAAJICAYAAADPZkXcAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3Xd8TfcbwPHPuTc3e8kQhBghMWKPCFpValXrR1tVqovSqmqVokN1q+4aNWt3oKU1q1WqpSq0pfaOLCGy913n98d1b11JCMLN5Xm/XnmRM59z7rkn9zz3+32+iqqqKkIIIYQQQgghhBBCXAcaRwcghBBCCCGEEEIIIW5eknwSQgghhBBCCCGEENeNJJ+EEEIIIYQQQgghxHUjySchhBBCCCGEEEIIcd1I8kkIIYQQQgghhBBCXDeSfBJCCCGEEEIIIYQQ140kn4QQQgghhBBCCCHEdSPJJyGEEEIIIYQQQghx3UjySQghhBBCCCGEEEJcN5J8EkIIIYQ4Ly4ujmeeeYYOHTpQv359WrVq5eiQRBkkJiYSGRnJ+PHjy2V7Bw4coEGDBqxevdpuemRkJIMGDbqmbe/YsYPIyEimTp1a5nXK6/gGDRpEZGTkNcdzvaxYsYLIyEhWrFjh6FCEuG4yMzNp2bIl77//vqNDEeKGcnF0AEKIm8uZM2dYv349v/32GydOnODcuXP4+fnRokULhgwZQtOmTS+7jYSEBO69917y8/N58MEHefPNN8u8/x07dvDII49ccr0VK1bw0ksvMXr0aIYOHVrmbTvCxQ8Jl3P48OHrFMnNw/r6T5o0ib59+zo6nDKzxl2a+vXr88MPP9zAiCquqVOnMm3aNBYtWkR0dHSZ1zOZTDzzzDOcOnWK3r17U6VKFdzc3K5jpMUlJibSuXNnADp06MAXX3xRbJndu3fz4IMP0qdPH957770bGt+l5Obmcs8995Cens7KlSupU6dOsWVUVeWxxx7jzz//ZPr06XTp0sUBkV7epEmTqFOnDnffffcN2+edd94JwKZNm27YPp2ZwWBg06ZNbNq0iX///ZeUlBQA6tatS58+fXjwwQfRarUlrrtq1SoWLVrEsWPH0Ol0tGjRgpEjR9KoUSO75a7lM01CQgKzZs1i27ZtpKam4uvrS3h4OAMGDKBHjx5XdKy///47s2bNYv/+/SiKQqNGjRg+fDgxMTElLv/nn3/yxRdfcOTIETIyMqhcuTJNmzblySefpH79+mXe765du9i4cSOxsbEkJSWRn59PaGgonTt3ZtiwYfj6+pa67s8//8xXX33FgQMHyM/PJzg4mGbNmvHiiy9StWrVMu3fbDbz5ZdfsmzZMk6dOoWnpyft2rVj1KhR1KhRo8R1rvRcOWLf/v7+DBo0iC+++IKBAwcSGhp6RbEJ4awk+SSEKFeLFy9mzpw5hIWF0b59ewICAjh16hQbN25k48aNfPTRR/Ts2bPU9c1mc7l9c30zGDFiRLFpCxcuJCcnp8R54uYXExNDy5Yti00PCgpyQDQ3l8TERI4dO0a/fv146623HB0OW7duZfv27Vf80OQo3t7evPvuuzz++OOMGzeOb775ptjD/5dffsmff/5Jnz59Kmziafv27cTGxvLOO++g0dh3Eli3bh0eHh7XtP0mTZqwbt06KlWqVOZ1QkJCWLduHT4+Pte07/KKpyKIj49n5MiReHp6EhMTw5133klOTg6bN2/mjTfe4LfffmPGjBkoimK33owZM/j0008JDQ2lf//+5OXlsXbtWvr378+CBQvs7q9X+5lm27ZtPPPMMwB06tSJGjVqkJWVxeHDh9m+ffsVJZ9++OEHxo4dS0BAgO0Lk3Xr1vH444/z6aef0r17d7vlFy9ezNtvv42vry933XUXAQEBxMXF8eOPP7JhwwZmz55Nu3btyrTv5557joyMDFq2bEnv3r1RFIXY2Fjmzp3Lhg0b+Oabb4r97VFVlYkTJ7J06VLCwsLo2bMnXl5enD17lp07d5KUlFTm5NNrr73G8uXLqVevHoMGDeLs2bOsX7+ebdu2sXTpUmrVqnVN58qR+3700UeZO3cuM2bM4O233y5zXEI4NVUIIcrRhg0b1B07dhSbvnPnTrVRo0Zq69at1aKiolLX/+KLL9SGDRuq8+fPVyMiItQJEyZc0f7//PPPy6733XffqREREeqsWbOuaNsVRadOndSIiAhHh+G0rK//d9995+hQroizX7c30pQpU9SIiAj1zz//vKL1YmNj1YiICHXKlCnXKbLLS0hIUCMiItROnTqp9evXV/v27auazWa7Zf755x81IiJCHTdunIOivLS33npLjYiIUKdPn243PS4uTm3atKl6xx13qDk5OeW6T+t5K49z8uyzz6pNmjQp9xgvp1OnTmqnTp2u6z4efvjhCv3340ruzykpKeqSJUvUvLw8u+l5eXlq37591YiICHXdunV2806ePKk2bNhQ7dq1q5qdnW2bfuDAATUqKkrt0aOHajKZbNOv5jNNUlKS2qJFC7Vr165qUlJSsXUNBsNlj80qMzNTbdWqlRodHa2ePn3aNv306dNqdHS0Gh0dbXed6vV6tUWLFmqLFi3U5ORku2399NNPakREhDpo0KAy73/WrFlqSkqK3TSz2axOnDhRjYiIUF9//fVi6yxYsMA2z2g0Fptf1uPfvn27GhERoQ4cONDuHP/6669qRESE+sQTT9gtf6XnqiLs+6mnnlKbNWt2w+81QjiK1HwSQpSrrl270qZNm2LTW7VqRXR0tO2bv5IcP36cTz/9lKFDh9KgQYPrHWqJjhw5wnPPPUdMTAxRUVHceeedvPPOO2RkZBRb9lK1P+68805bFwqr8ePHExkZSUJCAvPmzaNnz55ERUWVW0svvV7P/Pnz6dOnD82aNaN58+YMGDCAX375pdiyF8byxRdf0K1bN5o0aULPnj1Zu3atbXuffPIJd955J40bN+aee+5hy5YtxbZlrSFSVFTEhx9+yB133EHjxo3p0aMHixcvRlXVEuPduHEjjz76KK1bt6Zx48b06tWLL774ApPJZLfchTVANm3aRP/+/WnevLnt/Or1ehYvXszgwYPp2LEjUVFRxMTEMGLECA4cOFDsuK1d11566SUiIyNtP1YlvXYXH+uFpk6dSmRkJDt27GDFihX06dOHpk2b2l0bubm5TJkyhbvvvpsmTZrQqlUrBg8ezK5du0rcT3n466+/GDp0KG3atKFx48Z0796dKVOmUFBQUGxZ67V85swZxo4dS/v27alfvz47duywLbNz506eeuopoqOjiYqKomvXrnzyySclbs+6/PDhw2nXrh1RUVF07NiRESNG2B3zmTNnmDJlCv369bN7z73++uukpaUV22ZOTg6fffYZPXv2pHnz5rRo0YK77rqLcePGkZSUBFheo2nTpgHwyCOP2F7f0l5TqzvvvJOHH34YgGnTptnWu7AOTnp6Ou+88w533nmn7Tp77rnnOHLkSLHtXev7vXbt2vTu3Zt9+/axfv36Mq0DZb/W3n33XSIjI9m7d6/d9OHDhxMZGcmYMWPsplvrAlnP7aWMGTOGOnXq8Pnnn3Pw4EHA0qr1pZdeorCwkEmTJuHt7Q3Ad999xwMPPEDz5s1p3rw5DzzwQIn1fi6sS/T333/zxBNP0KpVq8t2Tdbr9Tz33HNERkby/vvvl3o/ssrKymLTpk106NDBFuOFSrrvX/haL1q0iO7duxMVFUWnTp2YNm0aZrO51GOB/+o5JSUlkZSUZHdfuniZi6+fffv28eabb9KrVy9atmxJkyZNuOeee5g9ezYGg+GSx1paPPDffa20n4vfT6qq8u2339K/f39atGhB06ZN6du3L99++22J+8zMzOS1116jXbt2NG3alPvuu4+ff/65TPFahYSEMHDgQDw9Pe2me3p68vjjjwOW+9CFVqxYgdFo5Omnn7ZrRdagQQN69erF8ePH+euvv2zTr+YzzcyZM8nNzeX111+nWrVqxdZ1cSl7x5Mff/yR7OxsHn74YapUqWKbXqVKFR5++GEyMjLYuHGjbXpmZia5ubnUq1evWOuijh07oihKiZ9nSjN06FBCQkLspimKwvDhw4Hi57ewsJDp06dTo0YNXnnllRK7PZb1+JcvXw5YWl+5urraHUebNm3YunUrycnJtulXeq4qwr579OhBfn7+Fd3jhXBm0u1OCHHDWD9wlPTBw2QyMX78eGrWrMnTTz/NP//8c6PDY9euXQwZMgSDwUC3bt0IDQ1l9+7dLFq0iF9//ZWlS5cSEBBwzft566232LNnDx07dqRTp04EBgZe8zb1ej2DBw8mNjaWBg0acP/992MwGNiyZQvDhw9nwoQJtgfrC02aNIl///2XTp06odFoWLduHaNHj8bX15clS5Zw7NgxOnbsSFFREWvWrOGZZ55h3bp1hIWFFdvWc889x8GDB+natSsAP/30E2+//TZJSUnFHpg++ugjZs+eTUhICHfddRc+Pj7s2rWL999/nz179jBlypRi2//xxx/Ztm0bd9xxBwMGDCA3NxewPCy+++67tGrVio4dO+Lr60tCQgKbNm3it99+Y8mSJTRp0gSALl26kJ2dzS+//ELnzp3LNcn5xRdfsGPHDjp37kz79u1tH7ozMzN5+OGHOXr0KC1atKB///7k5ubyyy+/8Oijj/LZZ5+Ve/ej9evXM3r0aFxdXenRoweBgYFs27aN6dOns3XrVhYvXlysllFmZiYPPvggfn5+9OzZk6KiItvD91dffcWbb76Jr68vnTp1IiAggH379jFz5kx2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/3Vv1v3ZZ58xZcoU1q5dy7lz56hevTqvvvpqiQ/8zz33HK1bt2bRokVs376dnJwc/P39qV69OiNGjLii89epUyemTJnCrFmzWLVqFe7u7rRt25bp06czffr0Ysv7+/szZcoUpk6dyvLly23du6zJp4iICObOncvHH3/Mhg0b8PT0pGPHjowbN47nn3/+is+Lv78/33zzDUuWLGHdunWsXr0as9lMUFAQ9evX5+mnny5WI+Ja9ejRg+DgYGbNmsXPP/9MQUEBoaGhDB8+nCeffNJWVLms+vXrR/369VmwYAE7d+5k8+bNeHt7U61aNR577LFiIz49/PDD1KtXj/nz5/P777+Tl5dHYGAgTZs2pUePHrblXnjhBfz8/Fi5ciVfffUVQUFBtqLGF18DUVFRPPnkk8TGxrJlyxays7MJDg6mXbt2DB48mGbNmtmWrVu3LpMmTWLevHksWbIEvV5PaGjoNSWfAgICWLZsGZ9//jmbNm2y1cDq3LkzI0aMuGHdJsaMGWNrWXGxq7nWWrZsiU6nw2AwFCsgbE0+eXp6XnaUuavx6quv0qBBA77++mtbkqtu3bqMHDmS++67r1z2MXToUBRF4cMPP2Tw4MHMnTv3kl1OFUXhwQcf5MMPP+Tff/8t99FJL2X48OFkZ2ezefNm/vrrL0wmEyNGjCg1+aTVapk1axYffvghv//+O3v37qVmzZqMHTuW22+//ZqST9b74h9//FFiIu7CotiKovDee+9x++23s3z5cn799Vfy8/MJCAigZs2ajBs3jpiYGNu6np6eLF68mI8//piff/6ZAwcOULduXT755BNycnLKnHw6d+6crVVKSYknsLRkuzCpAPD0008TGhrKwoUL+frrr9HpdLRq1Yrnnnuu2IiFV/OZxpr4XrJkCd9++y1Lly7F1dWVFi1aMGzYsCtu5dK7d28qVarErFmzbHW1oqKiePrpp2nXrl2x5T/44ANatWrFDz/8wM8//0xhYSH+/v506dKFIUOG2N0rL8d6/Lt37y61huLFyaewsDC+++47pkyZwu+//862bdsICgpi4MCBPPPMM1f0Jdibb75JREQEy5YtY9GiRXh6enLXXXcxatQowsLCii1/pefK0ftevXo1DRo0uKH3GSEcSVFLapcthBBClNGgQYOIjY29LoXghRDiRsvMzKRLly507969xC6gQghx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UK5gaPejR4+yZcsWmjZtitlsprQxtdauXcuECRN46qmnaNu2LevWrWPEiBF8+eWXNGvWDLAkLKZNm8bAgQOvS4OCF154gX379vHiiy8SFBTE/PnzGTZsGCtXrqR69eq25Z5//nmOHTvG66+/jpubG59++ilPPvkk3333HS4ulsf4lStX4unpyT333FPuMUZHR5Ofn89PP/3EBx98QFZWFs8//3y57ud6O3ToUImv5R133MHSpUvx9fW9bvueO3cuPj4+ZGRksHjxYsaNG4dOp+Puu+++bvus6CT5VIpNmzZddpng4GDefvvtGxCNEEIIIYQQQtwARqMl8eTiUmICSDGbLfNcXFA05duRxtriCqMRriD5dOedd9KlSxcAxo8fz759+0pcbsqUKdx99922JErbtm05cuQI06dPZ86cOdcc/+Xs3r2b3377zW7QqlatWnHXXXcxf/58JkyYAMA///zD1q1b+eKLL+jQoQMAtWvXpmfPnvz000/07NnzusZZs2ZNWzKuXbt2nDx5kiVLllxT8qmwsPCKCttfTwEBAQQEBFzXfTRq1Mi2j+joaO644w5WrFhxSyefpNudEEIIIYQQQgg7ik6H4upa8s+l5l3LzxUknC6kKUMSLCEhgbi4OHr06GE3vWfPnmzfvh29Xs+KFSt46aWXAIiJiSEyMtKWJLJKSUlhyJAhNGvWjK5du15Rd6oDBw6gKArt27e3TfPw8KB58+b8+uuvtmm//fYbvr6+dsvVqVOHBg0a8NtvvwGWrnWxsbH8+uuvti5eU6dOtdvfjz/+SLdu3WjevDmPPPII8fHxZY71QlFRUeTn59u6qR0/fpynn36ali1b0qxZM4YOHVps25GRkcyePZsPPviA9u3bExMTA4DZbGb+/Pn06NGDqKgo2rdvz8iRI8nJybGtW9btz5kzh6lTp9KuXTuio6N56aWXyM/PB2DVqlW88sorQPHXsqxdKFesWME999xD48aNue222/jkk09sRcKvhKenJzVr1iQ5Odk2LT8/n7fffps+ffrQokUL7rzzTl577TW78wCWxOqbb77Jl19+SadOnWjZsiXDhw8vFvvRo0cZOHAgjRs3pmvXrqxatYrhw4czaNAgu+XKcm6vF2n5JIQQQgghhBCizBRVBesPQAUeJt7qxIkTgKUF0YXCw8MxGAwkJCRwxx138PTTTzNj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KlVgtm/p5ecHk48PTGYzinJzUZSVZew/gIiIiMgNcfhERETkBkw+PvCoXh0e1atDioog2dmld8/z9ITJ19clds8TEaCoyDZksg+bYBuqwdvbtjVTUBDMlSrZtuSy/8/Ly9BuIiIiIiqNwyciIiI3Y/L0LL17XmYmitPSLu6eZzJdHOiU8+55Ulx8ccBksVzcmsnT0zZkqlIFpsqVYfbz05rg42P4gIyIiIiIrg2HT0RERG7MYfe8sDBIfr7j2fPS0227uvn42AY/N7B7nnYAcPvWTEVFtgaz2bb7n48PzCEhMF26NZMn364QERERqYzv5oiIiEhj8vWFh6/vxd3zsrJQnJl5xd3zrkQudwBw4OIBwAMDS2/N5O3NrZmIiIiIKiAOn4iIiOiyTJ6etuMqBQU57p6XmgprZiaQkgKxWOBRUADJyYE1JwcoLobAduY9+8HMPW66CSZ/f8etmSrImfaIiIiI6J9x+ERERET/6LK752VmwnLuHJCZCZjNMAcFwVy5ssOQCV5e3JqJiIiIyM1x+ERERERlpu2eFxCAjLw81GzSBN4BAUZnEREREZELMhsdQERERIozm20HDSciIiIiugy+UyQiIiIiIiIionLD4RMREREREREREZUbDp+IiIiIiIiIiKjccPhERERERERERETlhsMnIiIiIiIiIiIqNxw+ERERERERERFRueHwiYiIiIiIiIiIyg2HT0REREREREREVG44fCIiIiIiIiIionLD4RMREREREREREZUbDp+IiIiIiIiIiKjccPhERERERERERETlhsMnIiIiIiIiIiIqNxw+ERERERERERFRuTGJiBgdQRft3bsXIgJvb+9S14kILBYLvLy8YDKZDKi7NuzUnyqt7NSfKq2qdALqtLJTf6q0slN/qrSq0gmo08pO/anSyk79qdLKTv1dqbWwsBAmkwm33XbbP/4dHD65mD///BMiAi8vL6NTiIiIiIiIiIguy2KxwGQyoXXr1v94Ww6fiIiIiIiIiIio3PCYT0REREREREREVG44fCIiIiIiIiIionLD4RMREREREREREZUbDp+IiIiIiIiIiKjccPhERERERERERETlhsMnIiIiIiIiIiIqNxw+ERERERERERFRueHwiYiIiIiIiIiIyg2HT0REREREREREVG44fCIiIiIiIiIionLD4RMRERERERER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s+0H87JPep31oh8TE4PBgwfjnXfewe+//w7A9sPd/luHwMBAh02eExISABhzZP7jx49jxIgR2L9/P86cOYP33nsPq1at0n5Tc/PNN7vEmh47dgwjRoyA2WxGgwYNcPToUWzevFn7TZOrdAK2rZ6CgoJgsVgwZcoUh9+E33zzzQ6DJyM7jx49imHDhmHChAmlBk8AUL9+fZdY0+TkZDz++OO499578dxzz2kv9vZ1DQ4Odonnk309J02ahPHjx2PBggXIysrSrnelx2hMTAxGjRqFli1bYvTo0ejSpQuWLl2q9brKa1R0dDSGDx8Oi8WCGjVqIDY2FpMnT8aqVasA2H6zbB/oGNkZGxuLYcOGwd/fH40bN0Zubi6efPJJzJs3DyKCwMBAl+gEbEPl++67D6+99hq+/vprAI4/nwA4DMyPHDmi/dYUcF7z8ePHMXz4cJw/fx7e3t744Ycf8NFHHyE1NRWA6zxGjx8/jmHDhqF69ero2rUrfHx8sHLlSuTm5rpUp11RURHq1q0Lf39/jBgxApmZmTCbzdrj1BVajx49iqFDh2LChAmlBk+A7XnvCp0pKSl4+umnce+992L69Olo0KABADgcSLZkp1HPJeDiz6fx48dj2rRpWL16Nc6fP699WHeV+/7kyZN48MEH0blzZ0ydOhUPP/wwFixYoB1EGHCN1yfA9nN0xIgRCAwMxO23346qVati6tSpmDt3LtLS0gC4xv3Pz07642cn/UVHR2Po0KE4dOgQzp49i4ULF2L69OnYsmULzGYz2rVr59CanZ0N4OKW5l5eXk7pjImJwYABA7Bw4UKcPHlSu9ze4Upr6kDousyaNUsmT56s/TkuLk7mz58vERERsmTJEofbLl26VJo1ayZJSUlObTx//ryMHDlShg0bJkOHDpXJkyfLnj17tOutVqvD7devXy8RERGyd+9ep3aKiJw9e1b69Okj//nPf7SuVatWSfv27S+7bkataXx8vNx1113y9ttva5fNnz9fnn32WSksLJT8/HyX6LQ7ePCg9OzZUz7++GMZMmSITJo0SSwWi4iIpKWluUTnyZMnJSIiQt577z0RESkqKpJvvvlGFixYINu2bZNjx4453N7I1p9++kmGDh0qVqtVioqK5LXXXpMJEybIqFGjZM2aNQ63Ner5dOTIEWnatKm89dZbIiJy+PBh6dWrlyxf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lVZ26k+VVnbqT5VWdupPlVZ26k+VVlU6AXVa2ak/VVpV6QTUaVWlk4AyHXD8UiKCwsJCZGRk4Pz589i0aRNuueUWvdp0o0onoE4rO/WnSis79adKKzv1p0orO/WnSis79adKqyqdgDqt7NSfKq2qdALqtKrSSRfpsuVTTEwMRAQNGzbUo6ncqNIJqNPKTv2p0spO/anSyk79qdLKTv2p0spO/anSqkonoE4rO/WnSqsqnYA6rap0kk7DJyIiIiIiIiIiosu5oQOOExERERERERERXQ2HT0REREREREREVG44fCIiIiIiIiIionLD4RMREREREREREZUbDp+IiIiIiIiIiKjccPhERERERERERETlhsMnIiIiIiIiIiIqNxw+EREREV2jM2fOICIiAhs2bNAumz9/PiIiIq7p6yMiIjB//nxdWjZs2ICIiAicOXNGl79PL4mJiWjRogX++OMPo1McPPXUU3jiiSeMziAiInJLnkYHEBEREZWHSZMmYdeuXfjll18QEBBw2dtMmTIFX3/9NX766ScEBQU5ubC0Bx54AHv27PnH2z322GMIDw93QlHZ/fe//8Wtt96KNm3aaJc98MADSEtLw+bNm0vdPjU1FR07dsRjjz2GyZMnX/Mgb9myZWjfvj2ys7OxZMkSfPPNN4iPj0dxcTHq1KmDbt264cEHH0RoaCgAYOLEibj33ntx9OhRNG7cWJ9/LBEREV0TDp+IiIioQurfvz++//57bN++HQMHDix1fV5eHr777jt06dLlhgZPjzzyCB566KEbKL1o0qRJuO+++7Q/HzhwAJ988gkmTZqE+vXra5dHRETglltuQb9+/eDt7a3L99ZDamoqNm7ciNmzZ1/33zFnzhyHP3/++ef45ZdfSl3eoEEDxMfHY8yYMUhMTMQ999yDoUOHwsvLC8eOHcOnn36K7du34+uvvwYANG3aFM2bN8dHH31U6u8iIiKi8sXhExEREVVIPXr0QKVKlbBp06bLDp++/fZb5Obmon///jf0fTw9PeHpqc9bqs6dOzv82cfHB5988gk6deqE9u3bl7q9h4eHLt9XL1988QU8PDzQvXv36/47BgwY4PDn/fv345dffil1eVFREcaPH4+UlBQsW7YMt99+u8P1Tz31FP73v/85XNanTx/Mnz8fOTk5qFSp0nU3EhERUdnwmE9ERERUIfn6+qJXr17YvXs3UlJSSl2/efNmVKpUCT169EB6ejreeOMNREVFoXXr1rjtttswYcIEHD169B+/z+WO+VRYWIjXXnsNHTp0QOvWrTFp0iQkJSXp9m8DLn/Mpx49euDhhx/Gr7/+isGDB6Nly5aIiorCr7/+CgD45ptvEBUVhRYtWmDw4ME4fPhwqb83JiYGjz/+ONq1a6fd7ttvv72mpu3bt6Nly5ZOGex88803OHr0KCZNmlRq8AQAAQEBeOqppxwu69SpE3Jzc7Fz585y7yMiIqKLOHwiIiKiCisqKgpFRUX48ssvHS5PT0/Hzz//jJ49e8LX1xfx8fHYvn077rzzTkybNg3jx4/H8ePHMWrUKCQnJ5f5+77wwgtYunQpOnfujGeeeQZeXl667Zr3T06fPo0pU6agR48eePrpp5GRkYFJkybhiy++wOuvv46oqChMnjwZcXFxePLJJ2G1WrWvPXHiBIYOHYqYmBhMnDgR06ZNg7+/Px599FFs27btqt/XYrHgwIEDaNasWXn/EwFAG4hdukXU1TRs2BC+vr7Yu3dveWURERHRZXC3OyIiIqqwOnTogOrVq2Pz5s0YNWqUdvlXX30Fi8WCqKgoALZjKH399dcwmy/+Xm7AgAHo06cPPv30Uzz66KPX/D2PHj2KL774AiNGjMCMGTMAACNHjsSUKVNw7Ngxnf5lVxYbG4vVq1ejdevWAGwDl/Hjx+PFF1/El19+ibCwMABA1apV8dJLL+G3337Tdul79dVXUbNmTaxfv147ltSIESMwfPhw/Oc//0HPnj2v+H0TExORn5+PWrVqlfO/0ObkyZOoXLkyatasec1f4+npiRo1aiA6Orocy4iIiOhS3PKJiIiIKiwPDw/069cPf/75p8PuaZs3b0a1atXQsWNHAIC3t7c2eCouLkZaWhr8/f1x8803X3bXtKvZsWMHANsZ3koaPXr0jfxTrlnDhg21wRMA3HrrrQBsgzj74Knk5fHx8QBsW4Pt3r0bffr0QXZ2NlJTU5Gamoq0tDR06dIFp06duupWYOnp6QCAKlWq6P1Puqzs7Ozr2r2vatWqSEtLK4ciIiIiuhJu+UREREQVWlRUFJYsWYLNmzdrx176/fff8cADD2gH7LZarVi2bBlWrlyJM2fOoLi4WPv6wMDAMn2/hIQEmM1m1KlTx+HykmerK0+XbglUuXJlAECNGjUcLg8ICAAAZGZmAgDi4uIgIpg7dy7mzp172b87JSUFoaGhV/3+InJd3SaTqUy3DwgI0AZnZSEiZf5eREREdGM4fCIiIqIKrXnz5qhfvz62bNmCSZMmYfPmzRARbZc7AFiwYAHmzp2Le++9F0888QSqVq0Ks9mM11577bqHKUa50hnwrnS5/d9nP/bTuHHjcMcdd1z2tpcO1EqyD+nsw6ySvL29kZ+ff9mvs19u383vWtWvXx+HDx9GYmJimXa9y8zMRN26dcv0vYiIiOjGcPhEREREFV5UVBTmzp2Lo0ePYvPmzahXrx5atmypXf/111+jffv2eO211xy+LjMzE0FBQWX6XuHh4bBarYiLi3PY2unkyZM39o8oZ7Vr1wYAeHl5oVOnTmX++po1a8LX19dh90a78PBw/Prrr8jPz4evr6/DdbGxsdptyqJ79+7YvHkzvvjiCzz88MPX9DVFRUVITExEjx49yvS9iIiI6MbwmE9ERERU4dm3cpo3bx6OHDnisNUTYNsq6NItnL788svrOtNd165dAQCffPKJw+VLly4t89/lTCEhIWjXrh3WrFmDc+fOlbo+NTX1ql/v5eWF5s2b4+DBg6Wu69q1KywWC1avXu1wudVqxapVq+Dl5aUdf+ta9e7dG40aNcKCBQvw559/lro+Ozsb77zzjsNl0dHRKCgocDgmFhEREZU/bvlEREREFV7t2rXRunVrfPvttwBQavh055134r///S+ef/55tG7dGsePH8emTZu0rYHKokmTJoiMjMTKlSuRlZWF1q1bY/fu3Th9+rQu/5byNGPGDIwYMQJRUVEYMmQIateujQsXLmDfvn1ISkrCF198cdWvv+uuu/DOO+8gOztbO6YUAPTo0QNdunTB66+/jgMHDqB169bIy8vDd999h7179+LJJ59EcHBwmVq9vLzw3nvvYezYsRg1ahTuuece3HbbbfDy8sKJEyewefNmVKlSBU899ZT2NTt37oSfn991bdlFRERE14/DJyIiInILUVFR+PPPP9GyZctSx/yZNGkS8vLysGnTJmzduhVNmzbFwoUL8dZbb13X93rttdcQFBSETZs24dtvv0X79u2xaNEidOvWTY9/Srlp2LAh1q9fj/feew+fffYZ0tPTERwcjKZNm+LRRx/9x68fMGAA3nrrLXz77bcYMGCAdrnZbMYHH3yARYsWYcuWLfjmm2/g6emJRo0a4c0330T//v2vq7du3brYuHEjlixZgm3btuHbb7+F1WpF3bp1cf/995c64+BXX32Fnj17OgzGiIiIqPyZRLWjaBIRERGRy5o+fTpOnTqFlStXGp3i4MiRIxg0aBA+++wzNGnSxOgcIiIit8JjPhERERGRbh577DEcOHAAf/zxh9EpDhYtWoTevXtz8ERERGQAbvlERERERERERETlhls+ERERERERERFRueHwiYiIiIiIiIiIyg2HT0REREREREREVG44fCIiIiIiIiIionLD4RMREREREREREZUbDp+IiIiIiIiIiKjccPhERERERERERETlhsMnIiIiIiIiIiIqNxw+ERERERERERFRueHwiYiIiIiIiIiIyg2HT0REREREREREVG7+H8SQsX/h1qXoAAAAAElFTkSuQmCC\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "## World - 05/01/2026 00:00 Hours\n",
        "This query gets the ensemble mean for a variable and displays it onto a map (specifically, with an init time of 2026-04-30 18:00 and valid time of 2026-05-01 00:00).\n",
        "\n",
        "In contrast to the previous example, we don't calculate the mean over the entire area, and display each pixel on the world map."
      ],
      "metadata": {
        "id": "MzPsxahNmLBH"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# Map display options\n",
        "variable = \"station_head_temperature_2m_mean\" # @param [\"station_head_dewpoint_temperature_2m_mean\", \"station_head_temperature_2m_mean\"]\n",
        "palette = \"coolwarm\"  # @param [\"coolwarm\", \"Spectral_r\", \"BuPu\"]\n",
        "pixelated = True  # @param {type:\"boolean\"}\n",
        "\n",
        "world_avgs = (ee.ImageCollection(ee_image_collection)\n",
        "  .filter(ee.Filter.eq('start_time', '2026-04-30T18:00:00Z'))\n",
        "  .filter(ee.Filter.eq('end_time', '2026-05-01T00:00:00Z'))\n",
        "  .select(variable)\n",
        "  .first())\n",
        "if (not pixelated):\n",
        "  world_avgs = world_avgs.resample('bicubic')\n",
        "\n",
        "min_max = (world_avgs\n",
        "  .reduceRegion(\n",
        "      reducer=ee.Reducer.minMax(),\n",
        "      geometry=ee.Geometry.BBox(-180, -90, 180, 90),  # Global geometry\n",
        "      scale=world_avgs.projection().nominalScale(),\n",
        "      maxPixels=1e13\n",
        "  )\n",
        ")\n",
        "\n",
        "vis_params = {\n",
        "    'bands': [variable],\n",
        "    'min': min_max.get(f'{variable}_min'),\n",
        "    'max': min_max.get(f'{variable}_max'),\n",
        "    'palette': palette,\n",
        "}\n",
        "\n",
        "m = geemap.Map(center=[35, 0], zoom=2)\n",
        "m.add_layer(world_avgs, vis_params, f'{variable} average', True, 0.5)\n",
        "m"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 621,
          "referenced_widgets": [
            "36fa75fd2ed14e89854e6437bbf7a7dd",
            "6b3c00823a1f46488d8ed252fac82111",
            "e382a8c7ed164bc6aa828523c4afec4f",
            "2418cd127d6b4f42a976067222edb206",
            "c57c292811304a3386bc455e22236f98",
            "5c012e1bdf094c8694c1f67c08d439dc",
            "c35ec167a6f7490ab9f2183d4f422992",
            "84c0511ef5e949a0b5169a9dd2077375",
            "6fc4f8adf01d4c5f9c0387690c3fd042",
            "fdca927507ae4db099a418123c5aa097",
            "af45e5b116e64dc3b537bc2c0a46bc68",
            "e22a18182b7d4134b49de6d88b0ba288",
            "8a7163f2dbd54d58a7b5b92086e400c9",
            "f185b2236bc6477d89d4d15d10be2b79",
            "6aed562207094fc3874aac0258777196",
            "0a76489ea4674cb580ae4eede38c0d00",
            "2de3fe8a5d624d1f8bf4df3eab4a5f76",
            "ef2e409694784d638d5d9f36f7142797",
            "ec42985c80454f3ea892450cc944711c",
            "e50e3eb6d9684c01b2534bd56aa7cd46",
            "7ddc1e0f7faa4b4b82634a434d4f84d0",
            "2314f10e643e4bfbb67dc11458918460",
            "5aa638b0302248cd87912ae3dcbe2cd2",
            "9fb60667bc284246bca52ee205161aac",
            "4fce6d6d582e4acea783a88e521f77d5",
            "aa8c8a28e55a4b7b9a332a4e98a26801",
            "93481c7795bb4b2cab944c52df48948f",
            "c4c256a26eee4aeab6dc8b96039bd87e",
            "9bebcddc39024e28bb8ec2e271931482",
            "11552b9fd81f41ab80417dc432721a7e",
            "f4c9187c1cce4ffe98ce614790abe414",
            "0628b47e3b124e0a84b6f5c07beb27a4"
          ]
        },
        "id": "nGnuTD1rmTwm",
        "outputId": "0a45c83c-92ad-4c0c-ce6a-d486d55e1c9d"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ],
            "text/html": [
              "\n",
              "            <style>\n",
              "                .geemap-dark {\n",
              "                    --jp-widgets-color: white;\n",
              "                    --jp-widgets-label-color: white;\n",
              "                    --jp-ui-font-color1: white;\n",
              "                    --jp-layout-color2: #454545;\n",
              "                    background-color: #383838;\n",
              "                }\n",
              "\n",
              "                .geemap-dark .jupyter-button {\n",
              "                    --jp-layout-color3: #383838;\n",
              "                }\n",
              "\n",
              "                .geemap-colab {\n",
              "                    background-color: var(--colab-primary-surface-color, white);\n",
              "                }\n",
              "\n",
              "                .geemap-colab .jupyter-button {\n",
              "                    --jp-layout-color3: var(--colab-primary-surface-color, white);\n",
              "                }\n",
              "            </style>\n",
              "            "
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "Map(center=[35, 0], controls=(WidgetControl(options=['position', 'transparent_bg'], position='topright', trans…"
            ],
            "application/vnd.jupyter.widget-view+json": {
              "version_major": 2,
              "version_minor": 0,
              "model_id": "36fa75fd2ed14e89854e6437bbf7a7dd"
            }
          },
          "metadata": {
            "application/vnd.jupyter.widget-view+json": {
              "colab": {
                "custom_widget_manager": {
                  "url": "https://ssl.gstatic.com/colaboratory-static/widgets/colab-cdn-widget-manager/2b70e893a8ba7c0f/manager.min.js"
                }
              }
            }
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [],
      "metadata": {
        "id": "17upu-3cYX10"
      },
      "execution_count": null,
      "outputs": []
    }
  ],
  "metadata": {
    "colab": {
      "cell_execution_strategy": "setup",
      "provenance": []
    },
    "kernelspec": {
      "display_name": "Python 3",
      "name": "python3"
    },
    "language_info": {
      "name": "python"
    },
    "widgets": {
      "application/vnd.jupyter.widget-state+json": {
        "version_major": 2,
        "version_minor": 0,
        "state": {
          "36fa75fd2ed14e89854e6437bbf7a7dd": {
            "model_module": "jupyter-leaflet",
            "model_name": "LeafletMapModel",
            "model_module_version": "^0.20",
            "state": {
              "_dom_classes": [],
              "_model_module": "jupyter-leaflet",
              "_model_module_version": "^0.20",
              "_model_name": "LeafletMapModel",
              "_view_count": null,
              "_view_module": "jupyter-leaflet",
              "_view_module_version": "^0.20",
              "_view_name": "LeafletMapView",
              "bottom": 707,
              "bounce_at_zoom_limits": true,
              "box_zoom": true,
              "center": [
                34.59704151614417,
                -0.07988790369620526
              ],
              "close_popup_on_click": true,
              "controls": [
                "IPY_MODEL_6b3c00823a1f46488d8ed252fac82111",
                "IPY_MODEL_e382a8c7ed164bc6aa828523c4afec4f",
                "IPY_MODEL_2418cd127d6b4f42a976067222edb206",
                "IPY_MODEL_c57c292811304a3386bc455e22236f98",
                "IPY_MODEL_5c012e1bdf094c8694c1f67c08d439dc",
                "IPY_MODEL_c35ec167a6f7490ab9f2183d4f422992",
                "IPY_MODEL_84c0511ef5e949a0b5169a9dd2077375"
              ],
              "crs": {
                "name": "EPSG3857",
                "custom": false
              },
              "default_style": "IPY_MODEL_6fc4f8adf01d4c5f9c0387690c3fd042",
              "double_click_zoom": true,
              "dragging": true,
              "dragging_style": "IPY_MODEL_fdca927507ae4db099a418123c5aa097",
              "east": 208.82812500000003,
              "fullscreen": false,
              "inertia": true,
              "inertia_deceleration": 3000,
              "inertia_max_speed": 1500,
              "interpolation": "bilinear",
              "keyboard": true,
              "keyboard_pan_offset": 80,
              "keyboard_zoom_offset": 1,
              "layers": [
                "IPY_MODEL_af45e5b116e64dc3b537bc2c0a46bc68",
                "IPY_MODEL_e22a18182b7d4134b49de6d88b0ba288"
              ],
              "layout": "IPY_MODEL_8a7163f2dbd54d58a7b5b92086e400c9",
              "left": -82,
              "max_zoom": null,
              "min_zoom": null,
              "modisdate": "2026-09-01",
              "north": 80.47406532116933,
              "options": [
                "bounce_at_zoom_limits",
                "box_zoom",
                "center",
                "close_popup_on_click",
                "double_click_zoom",
                "dragging",
                "fullscreen",
                "inertia",
                "inertia_deceleration",
                "inertia_max_speed",
                "interpolation",
                "keyboard",
                "keyboard_pan_offset",
                "keyboard_zoom_offset",
                "max_zoom",
                "min_zoom",
                "prefer_canvas",
                "scroll_wheel_zoom",
                "tap",
                "tap_tolerance",
                "touch_zoom",
                "world_copy_jump",
                "zoom",
                "zoom_animation_threshold",
                "zoom_delta",
                "zoom_snap"
              ],
              "panes": {},
              "prefer_canvas": false,
              "right": 1106,
              "scroll_wheel_zoom": true,
              "south": -56.365250136856076,
              "style": "IPY_MODEL_6fc4f8adf01d4c5f9c0387690c3fd042",
              "tap": true,
              "tap_tolerance": 15,
              "top": 107,
              "touch_zoom": true,
              "west": -208.82812500000003,
              "window_url": "https://3njg3eujkk3-496ff2e9c6d22116-0-colab.googleusercontent.com/outputframe.html?vrz=colab-external_20260902-060039_RC00_975032937",
              "world_copy_jump": false,
              "zoom": 2,
              "zoom_animation_threshold": 4,
              "zoom_delta": 1,
              "zoom_snap": 1
            }
          },
          "6b3c00823a1f46488d8ed252fac82111": {
            "model_module": "jupyter-leaflet",
            "model_name": "LeafletWidgetControlModel",
            "model_module_version": "^0.20",
            "state": {
              "_model_module": "jupyter-leaflet",
              "_model_module_version": "^0.20",
              "_model_name": "LeafletWidgetControlModel",
              "_view_count": null,
              "_view_module": "jupyter-leaflet",
              "_view_module_version": "^0.20",
              "_view_name": "LeafletWidgetControlView",
              "max_height": null,
              "max_width": null,
              "min_height": null,
              "min_width": null,
              "options": [
                "position",
                "transparent_bg"
              ],
              "position": "topright",
              "transparent_bg": true,
              "widget": "IPY_MODEL_6aed562207094fc3874aac0258777196"
            }
          },
          "e382a8c7ed164bc6aa828523c4afec4f": {
            "model_module": "jupyter-leaflet",
            "model_name": "LeafletWidgetControlModel",
            "model_module_version": "^0.20",
            "state": {
              "_model_module": "jupyter-leaflet",
              "_model_module_version": "^0.20",
              "_model_name": "LeafletWidgetControlModel",
              "_view_count": null,
              "_view_module": "jupyter-leaflet",
              "_view_module_version": "^0.20",
              "_view_name": "LeafletWidgetControlView",
              "max_height": null,
              "max_width": null,
              "min_height": null,
              "min_width": null,
              "options": [
                "position",
                "transparent_bg"
              ],
              "position": "topleft",
              "transparent_bg": true,
              "widget": "IPY_MODEL_0a76489ea4674cb580ae4eede38c0d00"
            }
          },
          "2418cd127d6b4f42a976067222edb206": {
            "model_module": "jupyter-leaflet",
            "model_name": "LeafletZoomControlModel",
            "model_module_version": "^0.20",
            "state": {
              "_model_module": "jupyter-leaflet",
              "_model_module_version": "^0.20",
              "_model_name": "LeafletZoomControlModel",
              "_view_count": null,
              "_view_module": "jupyter-leaflet",
              "_view_module_version": "^0.20",
              "_view_name": "LeafletZoomControlView",
              "options": [
                "position",
                "zoom_in_text",
                "zoom_in_title",
                "zoom_out_text",
                "zoom_out_title"
              ],
              "position": "topleft",
              "zoom_in_text": "+",
              "zoom_in_title": "Zoom in",
              "zoom_out_text": "-",
              "zoom_out_title": "Zoom out"
            }
          },
          "c57c292811304a3386bc455e22236f98": {
            "model_module": "jupyter-leaflet",
            "model_name": "LeafletFullScreenControlModel",
            "model_module_version": "^0.20",
            "state": {
              "_model_module": "jupyter-leaflet",
              "_model_module_version": "^0.20",
              "_model_name": "LeafletFullScreenControlModel",
              "_view_count": null,
              "_view_module": "jupyter-leaflet",
              "_view_module_version": "^0.20",
              "_view_name": "LeafletFullScreenControlView",
              "options": [
                "position"
              ],
              "position": "topleft"
            }
          },
          "5c012e1bdf094c8694c1f67c08d439dc": {
            "model_module": "jupyter-leaflet",
            "model_name": "LeafletDrawControlModel",
            "model_module_version": "^0.20",
            "state": {
              "_model_module": "jupyter-leaflet",
              "_model_module_version": "^0.20",
              "_model_name": "LeafletDrawControlModel",
              "_view_count": null,
              "_view_module": "jupyter-leaflet",
              "_view_module_version": "^0.20",
              "_view_name": "LeafletDrawControlView",
              "circle": {},
              "circlemarker": {},
              "data": [],
              "edit": true,
              "marker": {
                "shapeOptions": {
                  "color": "#3388ff"
                }
              },
              "options": [
                "position"
              ],
              "polygon": {
                "shapeOptions": {}
              },
              "polyline": {
                "shapeOptions": {}
              },
              "position": "topleft",
              "rectangle": {
                "shapeOptions": {
                  "color": "#3388ff"
                }
              },
              "remove": true
            }
          },
          "c35ec167a6f7490ab9f2183d4f422992": {
            "model_module": "jupyter-leaflet",
            "model_name": "LeafletScaleControlModel",
            "model_module_version": "^0.20",
            "state": {
              "_model_module": "jupyter-leaflet",
              "_model_module_version": "^0.20",
              "_model_name": "LeafletScaleControlModel",
              "_view_count": null,
              "_view_module": "jupyter-leaflet",
              "_view_module_version": "^0.20",
              "_view_name": "LeafletScaleControlView",
              "imperial": true,
              "max_width": 100,
              "metric": true,
              "options": [
                "imperial",
                "max_width",
                "metric",
                "position",
                "update_when_idle"
              ],
              "position": "bottomleft",
              "update_when_idle": false
            }
          },
          "84c0511ef5e949a0b5169a9dd2077375": {
            "model_module": "jupyter-leaflet",
            "model_name": "LeafletAttributionControlModel",
            "model_module_version": "^0.20",
            "state": {
              "_model_module": "jupyter-leaflet",
              "_model_module_version": "^0.20",
              "_model_name": "LeafletAttributionControlModel",
              "_view_count": null,
              "_view_module": "jupyter-leaflet",
              "_view_module_version": "^0.20",
              "_view_name": "LeafletAttributionControlView",
              "options": [
                "position",
                "prefix"
              ],
              "position": "bottomright",
              "prefix": "ipyleaflet"
            }
          },
          "6fc4f8adf01d4c5f9c0387690c3fd042": {
            "model_module": "jupyter-leaflet",
            "model_name": "LeafletMapStyleModel",
            "model_module_version": "^0.20",
            "state": {
              "_model_module": "jupyter-leaflet",
              "_model_module_version": "^0.20",
              "_model_name": "LeafletMapStyleModel",
              "_view_count": null,
              "_view_module": "@jupyter-widgets/base",
              "_view_module_version": "1.2.0",
              "_view_name": "StyleView",
              "cursor": "grab"
            }
          },
          "fdca927507ae4db099a418123c5aa097": {
            "model_module": "jupyter-leaflet",
            "model_name": "LeafletMapStyleModel",
            "model_module_version": "^0.20",
            "state": {
              "_model_module": "jupyter-leaflet",
              "_model_module_version": "^0.20",
              "_model_name": "LeafletMapStyleModel",
              "_view_count": null,
              "_view_module": "@jupyter-widgets/base",
              "_view_module_version": "1.2.0",
              "_view_name": "StyleView",
              "cursor": "move"
            }
          },
          "af45e5b116e64dc3b537bc2c0a46bc68": {
            "model_module": "jupyter-leaflet",
            "model_name": "LeafletTileLayerModel",
            "model_module_version": "^0.20",
            "state": {
              "_model_module": "jupyter-leaflet",
              "_model_module_version": "^0.20",
              "_model_name": "LeafletTileLayerModel",
              "_view_count": null,
              "_view_module": "jupyter-leaflet",
              "_view_module_version": "^0.20",
              "_view_name": "LeafletTileLayerView",
              "attribution": "&copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors",
              "base": true,
              "bottom": true,
              "bounds": null,
              "detect_retina": false,
              "loading": false,
              "max_native_zoom": null,
              "max_zoom": 30,
              "min_native_zoom": null,
              "min_zoom": 1,
              "name": "OpenStreetMap.Mapnik",
              "no_wrap": false,
              "opacity": 1,
              "options": [
                "attribution",
                "bounds",
                "detect_retina",
                "max_native_zoom",
                "max_zoom",
                "min_native_zoom",
                "min_zoom",
                "no_wrap",
                "pm_ignore",
                "tile_size",
                "tms",
                "zoom_offset"
              ],
              "pane": "",
              "pm_ignore": true,
              "popup": null,
              "popup_max_height": null,
              "popup_max_width": 300,
              "popup_min_width": 50,
              "show_loading": false,
              "snap_ignore": true,
              "subitems": [],
              "tile_size": 256,
              "tms": false,
              "url": "https://tile.openstreetmap.org/{z}/{x}/{y}.png",
              "visible": true,
              "zoom_offset": 0
            }
          },
          "e22a18182b7d4134b49de6d88b0ba288": {
            "model_module": "jupyter-leaflet",
            "model_name": "LeafletTileLayerModel",
            "model_module_version": "^0.20",
            "state": {
              "_model_module": "jupyter-leaflet",
              "_model_module_version": "^0.20",
              "_model_name": "LeafletTileLayerModel",
              "_view_count": null,
              "_view_module": "jupyter-leaflet",
              "_view_module_version": "^0.20",
              "_view_name": "LeafletTileLayerView",
              "attribution": "Google Earth Engine",
              "base": false,
              "bottom": true,
              "bounds": null,
              "detect_retina": false,
              "loading": false,
              "max_native_zoom": null,
              "max_zoom": 24,
              "min_native_zoom": null,
              "min_zoom": 0,
              "name": "station_head_temperature_2m_mean average",
              "no_wrap": false,
              "opacity": 0.5,
              "options": [
                "attribution",
                "bounds",
                "detect_retina",
                "max_native_zoom",
                "max_zoom",
                "min_native_zoom",
                "min_zoom",
                "no_wrap",
                "pm_ignore",
                "tile_size",
                "tms",
                "zoom_offset"
              ],
              "pane": "",
              "pm_ignore": true,
              "popup": null,
              "popup_max_height": null,
              "popup_max_width": 300,
              "popup_min_width": 50,
              "show_loading": false,
              "snap_ignore": true,
              "subitems": [],
              "tile_size": 256,
              "tms": false,
              "url": "https://earthengine.googleapis.com/v1/projects/anthromet-prod/maps/51f898dc9fa2e2556b25a2e515f3017f-bdfa65af7f4e07d956f1a8dc8d870664/tiles/{z}/{x}/{y}",
              "visible": true,
              "zoom_offset": 0
            }
          },
          "8a7163f2dbd54d58a7b5b92086e400c9": {
            "model_module": "@jupyter-widgets/base",
            "model_name": "LayoutModel",
            "model_module_version": "1.2.0",
            "state": {
              "_model_module": "@jupyter-widgets/base",
              "_model_module_version": "1.2.0",
              "_model_name": "LayoutModel",
              "_view_count": null,
              "_view_module": "@jupyter-widgets/base",
              "_view_module_version": "1.2.0",
              "_view_name": "LayoutView",
              "align_content": null,
              "align_items": null,
              "align_self": null,
              "border": null,
              "bottom": null,
              "display": null,
              "flex": null,
              "flex_flow": null,
              "grid_area": null,
              "grid_auto_columns": null,
              "grid_auto_flow": null,
              "grid_auto_rows": null,
              "grid_column": null,
              "grid_gap": null,
              "grid_row": null,
              "grid_template_areas": null,
              "grid_template_columns": null,
              "grid_template_rows": null,
              "height": "600px",
              "justify_content": null,
              "justify_items": null,
              "left": null,
              "margin": null,
              "max_height": null,
              "max_width": null,
              "min_height": null,
              "min_width": null,
              "object_fit": null,
              "object_position": null,
              "order": null,
              "overflow": null,
              "overflow_x": null,
              "overflow_y": null,
              "padding": null,
              "right": null,
              "top": null,
              "visibility": null,
              "width": null
            }
          },
          "f185b2236bc6477d89d4d15d10be2b79": {
            "model_module": "jupyter-leaflet",
            "model_name": "LeafletMapStyleModel",
            "model_module_version": "^0.20",
            "state": {
              "_model_module": "jupyter-leaflet",
              "_model_module_version": "^0.20",
              "_model_name": "LeafletMapStyleModel",
              "_view_count": null,
              "_view_module": "@jupyter-widgets/base",
              "_view_module_version": "1.2.0",
              "_view_name": "StyleView",
              "cursor": "grab"
            }
          },
          "6aed562207094fc3874aac0258777196": {
            "model_module": "@jupyter-widgets/controls",
            "model_name": "GridBoxModel",
            "model_module_version": "1.5.0",
            "state": {
              "_dom_classes": [],
              "_model_module": "@jupyter-widgets/controls",
              "_model_module_version": "1.5.0",
              "_model_name": "GridBoxModel",
              "_view_count": null,
              "_view_module": "@jupyter-widgets/controls",
              "_view_module_version": "1.5.0",
              "_view_name": "GridBoxView",
              "box_style": "",
              "children": [
                "IPY_MODEL_2de3fe8a5d624d1f8bf4df3eab4a5f76",
                "IPY_MODEL_ef2e409694784d638d5d9f36f7142797"
              ],
              "layout": "IPY_MODEL_ec42985c80454f3ea892450cc944711c"
            }
          },
          "0a76489ea4674cb580ae4eede38c0d00": {
            "model_module": "anywidget",
            "model_name": "AnyModel",
            "model_module_version": "~0.9.*",
            "state": {
              "_anywidget_id": "geemap.map_widgets.SearchBar",
              "_dom_classes": [
                "geemap-colab"
              ],
              "_esm": "var __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __decorateClass = (decorators, target, key, kind) => {\n  var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;\n  for (var i4 = decorators.length - 1, decorator; i4 >= 0; i4--)\n    if (decorator = decorators[i4])\n      result = (kind ? decorator(target, key, result) : decorator(result)) || result;\n  if (kind && result) __defProp(target, key, result);\n  return result;\n};\n\n// node_modules/@lit/reactive-element/css-tag.js\nvar t = globalThis;\nvar e = t.ShadowRoot && (void 0 === t.ShadyCSS || t.ShadyCSS.nativeShadow) && \"adoptedStyleSheets\" in Document.prototype && \"replace\" in CSSStyleSheet.prototype;\nvar s = /* @__PURE__ */ Symbol();\nvar o = /* @__PURE__ */ new WeakMap();\nvar n = class {\n  constructor(t3, e7, o5) {\n    if (this._$cssResult$ = true, o5 !== s) throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");\n    this.cssText = t3, this.t = e7;\n  }\n  get styleSheet() {\n    let t3 = this.o;\n    const s2 = this.t;\n    if (e && void 0 === t3) {\n      const e7 = void 0 !== s2 && 1 === s2.length;\n      e7 && (t3 = o.get(s2)), void 0 === t3 && ((this.o = t3 = new CSSStyleSheet()).replaceSync(this.cssText), e7 && o.set(s2, t3));\n    }\n    return t3;\n  }\n  toString() {\n    return this.cssText;\n  }\n};\nvar r = (t3) => new n(\"string\" == typeof t3 ? t3 : t3 + \"\", void 0, s);\nvar i = (t3, ...e7) => {\n  const o5 = 1 === t3.length ? t3[0] : e7.reduce(((e8, s2, o6) => e8 + ((t4) => {\n    if (true === t4._$cssResult$) return t4.cssText;\n    if (\"number\" == typeof t4) return t4;\n    throw Error(\"Value passed to 'css' function must be a 'css' function result: \" + t4 + \". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\");\n  })(s2) + t3[o6 + 1]), t3[0]);\n  return new n(o5, t3, s);\n};\nvar S = (s2, o5) => {\n  if (e) s2.adoptedStyleSheets = o5.map(((t3) => t3 instanceof CSSStyleSheet ? t3 : t3.styleSheet));\n  else for (const e7 of o5) {\n    const o6 = document.createElement(\"style\"), n5 = t.litNonce;\n    void 0 !== n5 && o6.setAttribute(\"nonce\", n5), o6.textContent = e7.cssText, s2.appendChild(o6);\n  }\n};\nvar c = e ? (t3) => t3 : (t3) => t3 instanceof CSSStyleSheet ? ((t4) => {\n  let e7 = \"\";\n  for (const s2 of t4.cssRules) e7 += s2.cssText;\n  return r(e7);\n})(t3) : t3;\n\n// node_modules/@lit/reactive-element/reactive-element.js\nvar { is: i2, defineProperty: e2, getOwnPropertyDescriptor: r2, getOwnPropertyNames: h, getOwnPropertySymbols: o2, getPrototypeOf: n2 } = Object;\nvar a = globalThis;\nvar c2 = a.trustedTypes;\nvar l = c2 ? c2.emptyScript : \"\";\nvar p = a.reactiveElementPolyfillSupport;\nvar d = (t3, s2) => t3;\nvar u = { toAttribute(t3, s2) {\n  switch (s2) {\n    case Boolean:\n      t3 = t3 ? l : null;\n      break;\n    case Object:\n    case Array:\n      t3 = null == t3 ? t3 : JSON.stringify(t3);\n  }\n  return t3;\n}, fromAttribute(t3, s2) {\n  let i4 = t3;\n  switch (s2) {\n    case Boolean:\n      i4 = null !== t3;\n      break;\n    case Number:\n      i4 = null === t3 ? null : Number(t3);\n      break;\n    case Object:\n    case Array:\n      try {\n        i4 = JSON.parse(t3);\n      } catch (t4) {\n        i4 = null;\n      }\n  }\n  return i4;\n} };\nvar f = (t3, s2) => !i2(t3, s2);\nvar y = { attribute: true, type: String, converter: u, reflect: false, hasChanged: f };\nSymbol.metadata ??= /* @__PURE__ */ Symbol(\"metadata\"), a.litPropertyMetadata ??= /* @__PURE__ */ new WeakMap();\nvar b = class extends HTMLElement {\n  static addInitializer(t3) {\n    this._$Ei(), (this.l ??= []).push(t3);\n  }\n  static get observedAttributes() {\n    return this.finalize(), this._$Eh && [...this._$Eh.keys()];\n  }\n  static createProperty(t3, s2 = y) {\n    if (s2.state && (s2.attribute = false), this._$Ei(), this.elementProperties.set(t3, s2), !s2.noAccessor) {\n      const i4 = /* @__PURE__ */ Symbol(), r5 = this.getPropertyDescriptor(t3, i4, s2);\n      void 0 !== r5 && e2(this.prototype, t3, r5);\n    }\n  }\n  static getPropertyDescriptor(t3, s2, i4) {\n    const { get: e7, set: h4 } = r2(this.prototype, t3) ?? { get() {\n      return this[s2];\n    }, set(t4) {\n      this[s2] = t4;\n    } };\n    return { get() {\n      return e7?.call(this);\n    }, set(s3) {\n      const r5 = e7?.call(this);\n      h4.call(this, s3), this.requestUpdate(t3, r5, i4);\n    }, configurable: true, enumerable: true };\n  }\n  static getPropertyOptions(t3) {\n    return this.elementProperties.get(t3) ?? y;\n  }\n  static _$Ei() {\n    if (this.hasOwnProperty(d(\"elementProperties\"))) return;\n    const t3 = n2(this);\n    t3.finalize(), void 0 !== t3.l && (this.l = [...t3.l]), this.elementProperties = new Map(t3.elementProperties);\n  }\n  static finalize() {\n    if (this.hasOwnProperty(d(\"finalized\"))) return;\n    if (this.finalized = true, this._$Ei(), this.hasOwnProperty(d(\"properties\"))) {\n      const t4 = this.properties, s2 = [...h(t4), ...o2(t4)];\n      for (const i4 of s2) this.createProperty(i4, t4[i4]);\n    }\n    const t3 = this[Symbol.metadata];\n    if (null !== t3) {\n      const s2 = litPropertyMetadata.get(t3);\n      if (void 0 !== s2) for (const [t4, i4] of s2) this.elementProperties.set(t4, i4);\n    }\n    this._$Eh = /* @__PURE__ */ new Map();\n    for (const [t4, s2] of this.elementProperties) {\n      const i4 = this._$Eu(t4, s2);\n      void 0 !== i4 && this._$Eh.set(i4, t4);\n    }\n    this.elementStyles = this.finalizeStyles(this.styles);\n  }\n  static finalizeStyles(s2) {\n    const i4 = [];\n    if (Array.isArray(s2)) {\n      const e7 = new Set(s2.flat(1 / 0).reverse());\n      for (const s3 of e7) i4.unshift(c(s3));\n    } else void 0 !== s2 && i4.push(c(s2));\n    return i4;\n  }\n  static _$Eu(t3, s2) {\n    const i4 = s2.attribute;\n    return false === i4 ? void 0 : \"string\" == typeof i4 ? i4 : \"string\" == typeof t3 ? t3.toLowerCase() : void 0;\n  }\n  constructor() {\n    super(), this._$Ep = void 0, this.isUpdatePending = false, this.hasUpdated = false, this._$Em = null, this._$Ev();\n  }\n  _$Ev() {\n    this._$ES = new Promise(((t3) => this.enableUpdating = t3)), this._$AL = /* @__PURE__ */ new Map(), this._$E_(), this.requestUpdate(), this.constructor.l?.forEach(((t3) => t3(this)));\n  }\n  addController(t3) {\n    (this._$EO ??= /* @__PURE__ */ new Set()).add(t3), void 0 !== this.renderRoot && this.isConnected && t3.hostConnected?.();\n  }\n  removeController(t3) {\n    this._$EO?.delete(t3);\n  }\n  _$E_() {\n    const t3 = /* @__PURE__ */ new Map(), s2 = this.constructor.elementProperties;\n    for (const i4 of s2.keys()) this.hasOwnProperty(i4) && (t3.set(i4, this[i4]), delete this[i4]);\n    t3.size > 0 && (this._$Ep = t3);\n  }\n  createRenderRoot() {\n    const t3 = this.shadowRoot ?? this.attachShadow(this.constructor.shadowRootOptions);\n    return S(t3, this.constructor.elementStyles), t3;\n  }\n  connectedCallback() {\n    this.renderRoot ??= this.createRenderRoot(), this.enableUpdating(true), this._$EO?.forEach(((t3) => t3.hostConnected?.()));\n  }\n  enableUpdating(t3) {\n  }\n  disconnectedCallback() {\n    this._$EO?.forEach(((t3) => t3.hostDisconnected?.()));\n  }\n  attributeChangedCallback(t3, s2, i4) {\n    this._$AK(t3, i4);\n  }\n  _$EC(t3, s2) {\n    const i4 = this.constructor.elementProperties.get(t3), e7 = this.constructor._$Eu(t3, i4);\n    if (void 0 !== e7 && true === i4.reflect) {\n      const r5 = (void 0 !== i4.converter?.toAttribute ? i4.converter : u).toAttribute(s2, i4.type);\n      this._$Em = t3, null == r5 ? this.removeAttribute(e7) : this.setAttribute(e7, r5), this._$Em = null;\n    }\n  }\n  _$AK(t3, s2) {\n    const i4 = this.constructor, e7 = i4._$Eh.get(t3);\n    if (void 0 !== e7 && this._$Em !== e7) {\n      const t4 = i4.getPropertyOptions(e7), r5 = \"function\" == typeof t4.converter ? { fromAttribute: t4.converter } : void 0 !== t4.converter?.fromAttribute ? t4.converter : u;\n      this._$Em = e7, this[e7] = r5.fromAttribute(s2, t4.type), this._$Em = null;\n    }\n  }\n  requestUpdate(t3, s2, i4) {\n    if (void 0 !== t3) {\n      if (i4 ??= this.constructor.getPropertyOptions(t3), !(i4.hasChanged ?? f)(this[t3], s2)) return;\n      this.P(t3, s2, i4);\n    }\n    false === this.isUpdatePending && (this._$ES = this._$ET());\n  }\n  P(t3, s2, i4) {\n    this._$AL.has(t3) || this._$AL.set(t3, s2), true === i4.reflect && this._$Em !== t3 && (this._$Ej ??= /* @__PURE__ */ new Set()).add(t3);\n  }\n  async _$ET() {\n    this.isUpdatePending = true;\n    try {\n      await this._$ES;\n    } catch (t4) {\n      Promise.reject(t4);\n    }\n    const t3 = this.scheduleUpdate();\n    return null != t3 && await t3, !this.isUpdatePending;\n  }\n  scheduleUpdate() {\n    return this.performUpdate();\n  }\n  performUpdate() {\n    if (!this.isUpdatePending) return;\n    if (!this.hasUpdated) {\n      if (this.renderRoot ??= this.createRenderRoot(), this._$Ep) {\n        for (const [t5, s3] of this._$Ep) this[t5] = s3;\n        this._$Ep = void 0;\n      }\n      const t4 = this.constructor.elementProperties;\n      if (t4.size > 0) for (const [s3, i4] of t4) true !== i4.wrapped || this._$AL.has(s3) || void 0 === this[s3] || this.P(s3, this[s3], i4);\n    }\n    let t3 = false;\n    const s2 = this._$AL;\n    try {\n      t3 = this.shouldUpdate(s2), t3 ? (this.willUpdate(s2), this._$EO?.forEach(((t4) => t4.hostUpdate?.())), this.update(s2)) : this._$EU();\n    } catch (s3) {\n      throw t3 = false, this._$EU(), s3;\n    }\n    t3 && this._$AE(s2);\n  }\n  willUpdate(t3) {\n  }\n  _$AE(t3) {\n    this._$EO?.forEach(((t4) => t4.hostUpdated?.())), this.hasUpdated || (this.hasUpdated = true, this.firstUpdated(t3)), this.updated(t3);\n  }\n  _$EU() {\n    this._$AL = /* @__PURE__ */ new Map(), this.isUpdatePending = false;\n  }\n  get updateComplete() {\n    return this.getUpdateComplete();\n  }\n  getUpdateComplete() {\n    return this._$ES;\n  }\n  shouldUpdate(t3) {\n    return true;\n  }\n  update(t3) {\n    this._$Ej &&= this._$Ej.forEach(((t4) => this._$EC(t4, this[t4]))), this._$EU();\n  }\n  updated(t3) {\n  }\n  firstUpdated(t3) {\n  }\n};\nb.elementStyles = [], b.shadowRootOptions = { mode: \"open\" }, b[d(\"elementProperties\")] = /* @__PURE__ */ new Map(), b[d(\"finalized\")] = /* @__PURE__ */ new Map(), p?.({ ReactiveElement: b }), (a.reactiveElementVersions ??= []).push(\"2.0.4\");\n\n// node_modules/lit-html/lit-html.js\nvar n3 = globalThis;\nvar c3 = n3.trustedTypes;\nvar h2 = c3 ? c3.createPolicy(\"lit-html\", { createHTML: (t3) => t3 }) : void 0;\nvar f2 = \"$lit$\";\nvar v = `lit$${Math.random().toFixed(9).slice(2)}$`;\nvar m = \"?\" + v;\nvar _ = `<${m}>`;\nvar w = document;\nvar lt = () => w.createComment(\"\");\nvar st = (t3) => null === t3 || \"object\" != typeof t3 && \"function\" != typeof t3;\nvar g = Array.isArray;\nvar $ = (t3) => g(t3) || \"function\" == typeof t3?.[Symbol.iterator];\nvar x = \"[ \t\\n\\f\\r]\";\nvar T = /<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g;\nvar E = /-->/g;\nvar k = />/g;\nvar O = RegExp(`>|${x}(?:([^\\\\s\"'>=/]+)(${x}*=${x}*(?:[^ \t\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`, \"g\");\nvar S2 = /'/g;\nvar j = /\"/g;\nvar M = /^(?:script|style|textarea|title)$/i;\nvar P = (t3) => (i4, ...s2) => ({ _$litType$: t3, strings: i4, values: s2 });\nvar ke = P(1);\nvar Oe = P(2);\nvar Se = P(3);\nvar R = /* @__PURE__ */ Symbol.for(\"lit-noChange\");\nvar D = /* @__PURE__ */ Symbol.for(\"lit-nothing\");\nvar V = /* @__PURE__ */ new WeakMap();\nvar I = w.createTreeWalker(w, 129);\nfunction N(t3, i4) {\n  if (!g(t3) || !t3.hasOwnProperty(\"raw\")) throw Error(\"invalid template strings array\");\n  return void 0 !== h2 ? h2.createHTML(i4) : i4;\n}\nvar U = (t3, i4) => {\n  const s2 = t3.length - 1, e7 = [];\n  let h4, o5 = 2 === i4 ? \"<svg>\" : 3 === i4 ? \"<math>\" : \"\", n5 = T;\n  for (let i5 = 0; i5 < s2; i5++) {\n    const s3 = t3[i5];\n    let r5, l2, c4 = -1, a2 = 0;\n    for (; a2 < s3.length && (n5.lastIndex = a2, l2 = n5.exec(s3), null !== l2); ) a2 = n5.lastIndex, n5 === T ? \"!--\" === l2[1] ? n5 = E : void 0 !== l2[1] ? n5 = k : void 0 !== l2[2] ? (M.test(l2[2]) && (h4 = RegExp(\"</\" + l2[2], \"g\")), n5 = O) : void 0 !== l2[3] && (n5 = O) : n5 === O ? \">\" === l2[0] ? (n5 = h4 ?? T, c4 = -1) : void 0 === l2[1] ? c4 = -2 : (c4 = n5.lastIndex - l2[2].length, r5 = l2[1], n5 = void 0 === l2[3] ? O : '\"' === l2[3] ? j : S2) : n5 === j || n5 === S2 ? n5 = O : n5 === E || n5 === k ? n5 = T : (n5 = O, h4 = void 0);\n    const u2 = n5 === O && t3[i5 + 1].startsWith(\"/>\") ? \" \" : \"\";\n    o5 += n5 === T ? s3 + _ : c4 >= 0 ? (e7.push(r5), s3.slice(0, c4) + f2 + s3.slice(c4) + v + u2) : s3 + v + (-2 === c4 ? i5 : u2);\n  }\n  return [N(t3, o5 + (t3[s2] || \"<?>\") + (2 === i4 ? \"</svg>\" : 3 === i4 ? \"</math>\" : \"\")), e7];\n};\nvar B = class _B {\n  constructor({ strings: t3, _$litType$: i4 }, s2) {\n    let e7;\n    this.parts = [];\n    let h4 = 0, o5 = 0;\n    const n5 = t3.length - 1, r5 = this.parts, [l2, a2] = U(t3, i4);\n    if (this.el = _B.createElement(l2, s2), I.currentNode = this.el.content, 2 === i4 || 3 === i4) {\n      const t4 = this.el.content.firstChild;\n      t4.replaceWith(...t4.childNodes);\n    }\n    for (; null !== (e7 = I.nextNode()) && r5.length < n5; ) {\n      if (1 === e7.nodeType) {\n        if (e7.hasAttributes()) for (const t4 of e7.getAttributeNames()) if (t4.endsWith(f2)) {\n          const i5 = a2[o5++], s3 = e7.getAttribute(t4).split(v), n6 = /([.?@])?(.*)/.exec(i5);\n          r5.push({ type: 1, index: h4, name: n6[2], strings: s3, ctor: \".\" === n6[1] ? Y : \"?\" === n6[1] ? Z : \"@\" === n6[1] ? q : G }), e7.removeAttribute(t4);\n        } else t4.startsWith(v) && (r5.push({ type: 6, index: h4 }), e7.removeAttribute(t4));\n        if (M.test(e7.tagName)) {\n          const t4 = e7.textContent.split(v), i5 = t4.length - 1;\n          if (i5 > 0) {\n            e7.textContent = c3 ? c3.emptyScript : \"\";\n            for (let s3 = 0; s3 < i5; s3++) e7.append(t4[s3], lt()), I.nextNode(), r5.push({ type: 2, index: ++h4 });\n            e7.append(t4[i5], lt());\n          }\n        }\n      } else if (8 === e7.nodeType) if (e7.data === m) r5.push({ type: 2, index: h4 });\n      else {\n        let t4 = -1;\n        for (; -1 !== (t4 = e7.data.indexOf(v, t4 + 1)); ) r5.push({ type: 7, index: h4 }), t4 += v.length - 1;\n      }\n      h4++;\n    }\n  }\n  static createElement(t3, i4) {\n    const s2 = w.createElement(\"template\");\n    return s2.innerHTML = t3, s2;\n  }\n};\nfunction z(t3, i4, s2 = t3, e7) {\n  if (i4 === R) return i4;\n  let h4 = void 0 !== e7 ? s2.o?.[e7] : s2.l;\n  const o5 = st(i4) ? void 0 : i4._$litDirective$;\n  return h4?.constructor !== o5 && (h4?._$AO?.(false), void 0 === o5 ? h4 = void 0 : (h4 = new o5(t3), h4._$AT(t3, s2, e7)), void 0 !== e7 ? (s2.o ??= [])[e7] = h4 : s2.l = h4), void 0 !== h4 && (i4 = z(t3, h4._$AS(t3, i4.values), h4, e7)), i4;\n}\nvar F = class {\n  constructor(t3, i4) {\n    this._$AV = [], this._$AN = void 0, this._$AD = t3, this._$AM = i4;\n  }\n  get parentNode() {\n    return this._$AM.parentNode;\n  }\n  get _$AU() {\n    return this._$AM._$AU;\n  }\n  u(t3) {\n    const { el: { content: i4 }, parts: s2 } = this._$AD, e7 = (t3?.creationScope ?? w).importNode(i4, true);\n    I.currentNode = e7;\n    let h4 = I.nextNode(), o5 = 0, n5 = 0, r5 = s2[0];\n    for (; void 0 !== r5; ) {\n      if (o5 === r5.index) {\n        let i5;\n        2 === r5.type ? i5 = new et(h4, h4.nextSibling, this, t3) : 1 === r5.type ? i5 = new r5.ctor(h4, r5.name, r5.strings, this, t3) : 6 === r5.type && (i5 = new K(h4, this, t3)), this._$AV.push(i5), r5 = s2[++n5];\n      }\n      o5 !== r5?.index && (h4 = I.nextNode(), o5++);\n    }\n    return I.currentNode = w, e7;\n  }\n  p(t3) {\n    let i4 = 0;\n    for (const s2 of this._$AV) void 0 !== s2 && (void 0 !== s2.strings ? (s2._$AI(t3, s2, i4), i4 += s2.strings.length - 2) : s2._$AI(t3[i4])), i4++;\n  }\n};\nvar et = class _et {\n  get _$AU() {\n    return this._$AM?._$AU ?? this.v;\n  }\n  constructor(t3, i4, s2, e7) {\n    this.type = 2, this._$AH = D, this._$AN = void 0, this._$AA = t3, this._$AB = i4, this._$AM = s2, this.options = e7, this.v = e7?.isConnected ?? true;\n  }\n  get parentNode() {\n    let t3 = this._$AA.parentNode;\n    const i4 = this._$AM;\n    return void 0 !== i4 && 11 === t3?.nodeType && (t3 = i4.parentNode), t3;\n  }\n  get startNode() {\n    return this._$AA;\n  }\n  get endNode() {\n    return this._$AB;\n  }\n  _$AI(t3, i4 = this) {\n    t3 = z(this, t3, i4), st(t3) ? t3 === D || null == t3 || \"\" === t3 ? (this._$AH !== D && this._$AR(), this._$AH = D) : t3 !== this._$AH && t3 !== R && this._(t3) : void 0 !== t3._$litType$ ? this.$(t3) : void 0 !== t3.nodeType ? this.T(t3) : $(t3) ? this.k(t3) : this._(t3);\n  }\n  O(t3) {\n    return this._$AA.parentNode.insertBefore(t3, this._$AB);\n  }\n  T(t3) {\n    this._$AH !== t3 && (this._$AR(), this._$AH = this.O(t3));\n  }\n  _(t3) {\n    this._$AH !== D && st(this._$AH) ? this._$AA.nextSibling.data = t3 : this.T(w.createTextNode(t3)), this._$AH = t3;\n  }\n  $(t3) {\n    const { values: i4, _$litType$: s2 } = t3, e7 = \"number\" == typeof s2 ? this._$AC(t3) : (void 0 === s2.el && (s2.el = B.createElement(N(s2.h, s2.h[0]), this.options)), s2);\n    if (this._$AH?._$AD === e7) this._$AH.p(i4);\n    else {\n      const t4 = new F(e7, this), s3 = t4.u(this.options);\n      t4.p(i4), this.T(s3), this._$AH = t4;\n    }\n  }\n  _$AC(t3) {\n    let i4 = V.get(t3.strings);\n    return void 0 === i4 && V.set(t3.strings, i4 = new B(t3)), i4;\n  }\n  k(t3) {\n    g(this._$AH) || (this._$AH = [], this._$AR());\n    const i4 = this._$AH;\n    let s2, e7 = 0;\n    for (const h4 of t3) e7 === i4.length ? i4.push(s2 = new _et(this.O(lt()), this.O(lt()), this, this.options)) : s2 = i4[e7], s2._$AI(h4), e7++;\n    e7 < i4.length && (this._$AR(s2 && s2._$AB.nextSibling, e7), i4.length = e7);\n  }\n  _$AR(t3 = this._$AA.nextSibling, i4) {\n    for (this._$AP?.(false, true, i4); t3 && t3 !== this._$AB; ) {\n      const i5 = t3.nextSibling;\n      t3.remove(), t3 = i5;\n    }\n  }\n  setConnected(t3) {\n    void 0 === this._$AM && (this.v = t3, this._$AP?.(t3));\n  }\n};\nvar G = class {\n  get tagName() {\n    return this.element.tagName;\n  }\n  get _$AU() {\n    return this._$AM._$AU;\n  }\n  constructor(t3, i4, s2, e7, h4) {\n    this.type = 1, this._$AH = D, this._$AN = void 0, this.element = t3, this.name = i4, this._$AM = e7, this.options = h4, s2.length > 2 || \"\" !== s2[0] || \"\" !== s2[1] ? (this._$AH = Array(s2.length - 1).fill(new String()), this.strings = s2) : this._$AH = D;\n  }\n  _$AI(t3, i4 = this, s2, e7) {\n    const h4 = this.strings;\n    let o5 = false;\n    if (void 0 === h4) t3 = z(this, t3, i4, 0), o5 = !st(t3) || t3 !== this._$AH && t3 !== R, o5 && (this._$AH = t3);\n    else {\n      const e8 = t3;\n      let n5, r5;\n      for (t3 = h4[0], n5 = 0; n5 < h4.length - 1; n5++) r5 = z(this, e8[s2 + n5], i4, n5), r5 === R && (r5 = this._$AH[n5]), o5 ||= !st(r5) || r5 !== this._$AH[n5], r5 === D ? t3 = D : t3 !== D && (t3 += (r5 ?? \"\") + h4[n5 + 1]), this._$AH[n5] = r5;\n    }\n    o5 && !e7 && this.j(t3);\n  }\n  j(t3) {\n    t3 === D ? this.element.removeAttribute(this.name) : this.element.setAttribute(this.name, t3 ?? \"\");\n  }\n};\nvar Y = class extends G {\n  constructor() {\n    super(...arguments), this.type = 3;\n  }\n  j(t3) {\n    this.element[this.name] = t3 === D ? void 0 : t3;\n  }\n};\nvar Z = class extends G {\n  constructor() {\n    super(...arguments), this.type = 4;\n  }\n  j(t3) {\n    this.element.toggleAttribute(this.name, !!t3 && t3 !== D);\n  }\n};\nvar q = class extends G {\n  constructor(t3, i4, s2, e7, h4) {\n    super(t3, i4, s2, e7, h4), this.type = 5;\n  }\n  _$AI(t3, i4 = this) {\n    if ((t3 = z(this, t3, i4, 0) ?? D) === R) return;\n    const s2 = this._$AH, e7 = t3 === D && s2 !== D || t3.capture !== s2.capture || t3.once !== s2.once || t3.passive !== s2.passive, h4 = t3 !== D && (s2 === D || e7);\n    e7 && this.element.removeEventListener(this.name, this, s2), h4 && this.element.addEventListener(this.name, this, t3), this._$AH = t3;\n  }\n  handleEvent(t3) {\n    \"function\" == typeof this._$AH ? this._$AH.call(this.options?.host ?? this.element, t3) : this._$AH.handleEvent(t3);\n  }\n};\nvar K = class {\n  constructor(t3, i4, s2) {\n    this.element = t3, this.type = 6, this._$AN = void 0, this._$AM = i4, this.options = s2;\n  }\n  get _$AU() {\n    return this._$AM._$AU;\n  }\n  _$AI(t3) {\n    z(this, t3);\n  }\n};\nvar Re = n3.litHtmlPolyfillSupport;\nRe?.(B, et), (n3.litHtmlVersions ??= []).push(\"3.2.0\");\nvar Q = (t3, i4, s2) => {\n  const e7 = s2?.renderBefore ?? i4;\n  let h4 = e7._$litPart$;\n  if (void 0 === h4) {\n    const t4 = s2?.renderBefore ?? null;\n    e7._$litPart$ = h4 = new et(i4.insertBefore(lt(), t4), t4, void 0, s2 ?? {});\n  }\n  return h4._$AI(t3), h4;\n};\n\n// node_modules/lit-element/lit-element.js\nvar h3 = class extends b {\n  constructor() {\n    super(...arguments), this.renderOptions = { host: this }, this.o = void 0;\n  }\n  createRenderRoot() {\n    const t3 = super.createRenderRoot();\n    return this.renderOptions.renderBefore ??= t3.firstChild, t3;\n  }\n  update(t3) {\n    const e7 = this.render();\n    this.hasUpdated || (this.renderOptions.isConnected = this.isConnected), super.update(t3), this.o = Q(e7, this.renderRoot, this.renderOptions);\n  }\n  connectedCallback() {\n    super.connectedCallback(), this.o?.setConnected(true);\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback(), this.o?.setConnected(false);\n  }\n  render() {\n    return R;\n  }\n};\nh3._$litElement$ = true, h3[\"finalized\"] = true, globalThis.litElementHydrateSupport?.({ LitElement: h3 });\nvar f3 = globalThis.litElementPolyfillSupport;\nf3?.({ LitElement: h3 });\n(globalThis.litElementVersions ??= []).push(\"4.1.0\");\n\n// node_modules/@lit/reactive-element/decorators/property.js\nvar o3 = { attribute: true, type: String, converter: u, reflect: false, hasChanged: f };\nvar r3 = (t3 = o3, e7, r5) => {\n  const { kind: n5, metadata: i4 } = r5;\n  let s2 = globalThis.litPropertyMetadata.get(i4);\n  if (void 0 === s2 && globalThis.litPropertyMetadata.set(i4, s2 = /* @__PURE__ */ new Map()), s2.set(r5.name, t3), \"accessor\" === n5) {\n    const { name: o5 } = r5;\n    return { set(r6) {\n      const n6 = e7.get.call(this);\n      e7.set.call(this, r6), this.requestUpdate(o5, n6, t3);\n    }, init(e8) {\n      return void 0 !== e8 && this.P(o5, void 0, t3), e8;\n    } };\n  }\n  if (\"setter\" === n5) {\n    const { name: o5 } = r5;\n    return function(r6) {\n      const n6 = this[o5];\n      e7.call(this, r6), this.requestUpdate(o5, n6, t3);\n    };\n  }\n  throw Error(\"Unsupported decorator location: \" + n5);\n};\nfunction n4(t3) {\n  return (e7, o5) => \"object\" == typeof o5 ? r3(t3, e7, o5) : ((t4, e8, o6) => {\n    const r5 = e8.hasOwnProperty(o6);\n    return e8.constructor.createProperty(o6, r5 ? { ...t4, wrapped: true } : t4), r5 ? Object.getOwnPropertyDescriptor(e8, o6) : void 0;\n  })(t3, e7, o5);\n}\n\n// node_modules/@lit/reactive-element/decorators/base.js\nvar e3 = (e7, t3, c4) => (c4.configurable = true, c4.enumerable = true, Reflect.decorate && \"object\" != typeof t3 && Object.defineProperty(e7, t3, c4), c4);\n\n// node_modules/@lit/reactive-element/decorators/query.js\nfunction e4(e7, r5) {\n  return (n5, s2, i4) => {\n    const o5 = (t3) => t3.renderRoot?.querySelector(e7) ?? null;\n    if (r5) {\n      const { get: e8, set: r6 } = \"object\" == typeof s2 ? n5 : i4 ?? /* @__PURE__ */ (() => {\n        const t3 = /* @__PURE__ */ Symbol();\n        return { get() {\n          return this[t3];\n        }, set(e9) {\n          this[t3] = e9;\n        } };\n      })();\n      return e3(n5, s2, { get() {\n        let t3 = e8.call(this);\n        return void 0 === t3 && (t3 = o5(this), (null !== t3 || this.hasUpdated) && r6.call(this, t3)), t3;\n      } });\n    }\n    return e3(n5, s2, { get() {\n      return o5(this);\n    } });\n  };\n}\n\n// node_modules/@lit/reactive-element/decorators/query-all.js\nvar e5;\nfunction r4(r5) {\n  return (n5, o5) => e3(n5, o5, { get() {\n    return (this.renderRoot ?? (e5 ??= document.createDocumentFragment())).querySelectorAll(r5);\n  } });\n}\n\n// node_modules/@lit/reactive-element/decorators/query-assigned-elements.js\nfunction o4(o5) {\n  return (e7, n5) => {\n    const { slot: r5, selector: s2 } = o5 ?? {}, c4 = \"slot\" + (r5 ? `[name=${r5}]` : \":not([name])\");\n    return e3(e7, n5, { get() {\n      const t3 = this.renderRoot?.querySelector(c4), e8 = t3?.assignedElements(o5) ?? [];\n      return void 0 === s2 ? e8 : e8.filter(((t4) => t4.matches(s2)));\n    } });\n  };\n}\n\n// js/ipywidgets_styles.ts\nvar legacyStyles = i`\n    .legacy-button {\n        align-items: center;\n        background-color: var(--jp-layout-color2);\n        border-width: 0;\n        box-shadow: none;\n        color: var(--jp-ui-font-color1);\n        cursor: pointer;\n        display: flex;\n        font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n        font-size: var(--jp-widgets-font-size);\n        justify-content: center;\n        line-height: var(--jp-widgets-inline-height);\n        padding: 0;\n        user-select: none;\n    }\n\n    .legacy-button.primary {\n        background-color: var(--jp-brand-color1);\n        color: var(--jp-ui-inverse-font-color1);\n    }\n\n    .legacy-button:hover:enabled,\n    .legacy-button:focus:enabled {\n        box-shadow: 0 2px 2px 0\n                rgba(0, 0, 0, var(--md-shadow-key-penumbra-opacity)),\n            0 3px 1px -2px rgba(0, 0, 0, var(--md-shadow-key-umbra-opacity)),\n            0 1px 5px 0 rgba(0, 0, 0, var(--md-shadow-ambient-shadow-opacity));\n    }\n\n    .legacy-slider {\n        -webkit-appearance: none;\n        appearance: none;\n        background: var(--jp-layout-color3);\n        border-radius: 3px;\n        height: 4px;\n        outline: none;\n    }\n\n    .legacy-slider::-webkit-slider-thumb,\n    .legacy-slider::-moz-range-thumb {\n        -moz-appearance: none;\n        -webkit-appearance: none;\n        appearance: none;\n        border-radius: 50%;\n        cursor: pointer;\n        height: var(--jp-widgets-slider-handle-size);\n        width: var(--jp-widgets-slider-handle-size);\n    }\n\n    .legacy-text {\n        color: var(--jp-widgets-label-color);\n        font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n        font-size: var(--jp-widgets-font-size);\n        height: var(--jp-widgets-inline-height);\n        line-height: var(--jp-widgets-inline-height);\n        vertical-align: middle;\n    }\n\n    .legacy-select {\n        -moz-appearance: none;\n        -webkit-appearance: none;\n        appearance: none;\n        background-color: var(--jp-widgets-input-background-color);\n        background-image: var(--jp-widgets-dropdown-arrow);\n        background-position: right center;\n        background-repeat: no-repeat;\n        background-size: 20px;\n        border-radius: 0;\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        box-shadow: none;\n        box-sizing: border-box;\n        color: var(--jp-widgets-input-color);\n        flex: 1 1 var(--jp-widgets-inline-width-short);\n        font-size: var(--jp-widgets-font-size);\n        height: 28px;\n        line-height: 28px;\n        min-width: 0;\n        outline: none !important;\n        padding-left: calc(var(--jp-widgets-input-padding)* 2);\n        padding-right: 20px;\n        vertical-align: top;\n    }\n\n    .legacy-select[disabled] {\n        opacity: 0.4;\n        cursor: not-allowed;\n    }\n\n    .legacy-text-input {\n        background: var(--jp-widgets-input-background-color);\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        box-sizing: border-box;\n        color: var(--jp-widgets-input-color);\n        flex-grow: 1;\n        flex-shrink: 1;\n        font-size: var(--jp-widgets-font-size);\n        height: var(--jp-widgets-inline-height);\n        line-height: var(--jp-widgets-inline-height);\n        min-width: 0;\n        outline: none !important;\n        padding: var(--jp-widgets-input-padding) calc(var(--jp-widgets-input-padding) * 2);\n    }\n\n    .legacy-text-input:disabled {\n        opacity: var(--jp-widgets-disabled-opacity);\n    }\n\n    .legacy-color {\n        align-self: stretch;\n        background: var(--jp-widgets-input-background-color);\n        border-left: none;\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        box-sizing: border-box;\n        color: var(--jp-widgets-input-color);\n        flex-grow: 0;\n        flex-shrink: 0;\n        height: var(--jp-widgets-inline-height);\n        outline: none !important;\n        padding: 0 2px;\n        width: var(--jp-widgets-inline-height);\n    }\n\n    .legacy-radio {\n        margin: 0;\n        vertical-align: middle;\n    }\n\n    .legacy-button.active {\n        background-color: var(--colab-primary-surface-color, --jp-layout-color3);\n        color: var(--jp-ui-font-color1);\n        box-shadow: 0 4px 5px 0 rgba(0, 0, 0, var(--md-shadow-key-penumbra-opacity)),\n                    0 1px 10px 0 rgba(0, 0, 0, var(--md-shadow-ambient-shadow-opacity)),\n                    0 2px 4px -1px rgba(0, 0, 0, var(--md-shadow-key-umbra-opacity));\n    }\n\n    .legacy-button.primary {\n        background-color: var(--jp-brand-color1);\n        color: var(--jp-ui-inverse-font-color1);\n    }\n\n    .legacy-button.primary.active {\n        background-color: var(--jp-brand-color0);\n        color: var(--jp-ui-inverse-font-color0);\n    }\n\n    .legacy-button.active {\n        background-color: var(--colab-primary-surface-color, --jp-layout-color3);\n        color: var(--jp-ui-font-color1);\n        box-shadow: 0 4px 5px 0 rgba(0, 0, 0, var(--md-shadow-key-penumbra-opacity)),\n                    0 1px 10px 0 rgba(0, 0, 0, var(--md-shadow-ambient-shadow-opacity)),\n                    0 2px 4px -1px rgba(0, 0, 0, var(--md-shadow-key-umbra-opacity));\n    }\n\n    .legacy-button.primary {\n        background-color: var(--jp-brand-color1);\n        color: var(--jp-ui-inverse-font-color1);\n    }\n\n    .legacy-button.primary.active {\n        background-color: var(--jp-brand-color0);\n        color: var(--jp-ui-inverse-font-color0);\n    }\n\n    .legacy-select {\n        -moz-appearance: none;\n        -webkit-appearance: none;\n        appearance: none;\n        background-color: var(--jp-widgets-input-background-color);\n        background-image: var(--jp-widgets-dropdown-arrow);\n        background-position: right center;\n        background-repeat: no-repeat;\n        background-size: 20px;\n        border-radius: 0;\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        box-shadow: none;\n        box-sizing: border-box;\n        color: var(--jp-widgets-input-color);\n        flex: 1 1 var(--jp-widgets-inline-width-short);\n        font-size: var(--jp-widgets-font-size);\n        height: inherit;\n        min-width: 0;\n        outline: none !important;\n        padding-left: calc(var(--jp-widgets-input-padding)* 2);\n        padding-right: 20px;\n        vertical-align: top;\n    }\n\n    .legacy-input {\n        box-sizing: border-box;\n        background-color: var(--colab-primary-surface-color, --jp-widgets-input-background-color);\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        color: var(--jp-widgets-input-color);\n        flex-grow: 1;\n        flex-shrink: 1;\n        font-size: var(--jp-widgets-font-size);\n        min-width: 0;\n        outline: none !important;\n        padding: var(--jp-widgets-input-padding) calc(var(--jp-widgets-input-padding)* 2);\n        height: var(--jp-widgets-inline-height);\n        line-height: var(--jp-widgets-inline-height);\n    }\n`;\n\n// js/utils.ts\nfunction loadFonts() {\n  if (!document.querySelector(\".custom-fonts\")) {\n    const styleElement = document.createElement(\"style\");\n    styleElement.classList.add(\"custom-fonts\");\n    styleElement.textContent = '@import \"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined\";';\n    document.body.appendChild(styleElement);\n  }\n}\nfunction reverseMap(map) {\n  const reversedMap = /* @__PURE__ */ new Map();\n  for (const [key, value] of map.entries()) {\n    if (value != null) {\n      reversedMap.set(value, key);\n    }\n  }\n  return reversedMap;\n}\n\n// js/lit_widget.ts\nvar LitWidget = class extends h3 {\n  constructor() {\n    super(...arguments);\n    this._model = void 0;\n  }\n  onCustomMessage(_msg) {\n  }\n  viewNameToModelName() {\n    return reverseMap(this.modelNameToViewName());\n  }\n  set model(model) {\n    this._model = model;\n    for (const [modelKey, widgetKey] of this.modelNameToViewName()) {\n      if (widgetKey) {\n        this[widgetKey] = model.get(modelKey);\n        model.on(`change:${String(modelKey)}`, () => {\n          this[widgetKey] = model.get(modelKey);\n        });\n      }\n    }\n    model.on(\"msg:custom\", (msg) => {\n      this.onCustomMessage?.(msg);\n    });\n  }\n  get model() {\n    return this._model;\n  }\n  updated(changedProperties) {\n    const viewToModelMap = this.viewNameToModelName();\n    for (const [viewProp, _2] of changedProperties) {\n      const castViewProp = viewProp;\n      if (viewToModelMap.has(castViewProp)) {\n        const modelProp = viewToModelMap.get(castViewProp);\n        this._model?.set(\n          modelProp,\n          this[castViewProp]\n        );\n      }\n    }\n    this._model?.save_changes();\n  }\n};\n\n// js/styles.ts\nvar materialStyles = i`\n    @font-face {\n        font-family: \"Material Symbols Outlined\";\n        font-style: normal;\n        font-weight: 400;\n        src: url(https://fonts.gstatic.com/s/materialsymbolsoutlined/v205/kJF1BvYX7BgnkSrUwT8OhrdQw4oELdPIeeII9v6oDMzByHX9rA6RzaxHMPdY43zj-jCxv3fzvRNU22ZXGJpEpjC_1v-p_4MrImHCIJIZrDCvHOejbd5zrDAt.woff2)\n            format(\"woff2\");\n    }\n\n    .material-symbols-outlined {\n        -webkit-font-feature-settings: \"liga\";\n        -webkit-font-smoothing: antialiased;\n        direction: ltr;\n        display: inline-block;\n        font-family: \"Material Symbols Outlined\";\n        font-style: normal;\n        font-weight: normal;\n        letter-spacing: normal;\n        line-height: 1;\n        text-transform: none;\n        white-space: nowrap;\n        word-wrap: normal;\n    }\n`;\nvar flexStyles = i`\n    .vertical-flex {\n        display: flex;\n        flex-direction: column;\n        gap: 8px;\n    }\n\n    .horizontal-flex {\n        align-items: center;\n        display: flex;\n        flex-wrap: nowrap;\n        gap: 8px;\n    }\n\n    input:not([type=\"radio\"]):not([type=\"checkbox\"]) {\n        width: 100%;\n    }\n\n    select {\n        width: 100%;\n    }\n\n    .horizontal-flex .legacy-text {\n        flex-shrink: 0;\n    }\n`;\n\n// node_modules/lit-html/directive.js\nvar t2 = { ATTRIBUTE: 1, CHILD: 2, PROPERTY: 3, BOOLEAN_ATTRIBUTE: 4, EVENT: 5, ELEMENT: 6 };\nvar e6 = (t3) => (...e7) => ({ _$litDirective$: t3, values: e7 });\nvar i3 = class {\n  constructor(t3) {\n  }\n  get _$AU() {\n    return this._$AM._$AU;\n  }\n  _$AT(t3, e7, i4) {\n    this.t = t3, this._$AM = e7, this.i = i4;\n  }\n  _$AS(t3, e7) {\n    return this.update(t3, e7);\n  }\n  update(t3, e7) {\n    return this.render(...e7);\n  }\n};\n\n// node_modules/lit-html/directives/class-map.js\nvar Rt = e6(class extends i3 {\n  constructor(s2) {\n    if (super(s2), s2.type !== t2.ATTRIBUTE || \"class\" !== s2.name || s2.strings?.length > 2) throw Error(\"`classMap()` can only be used in the `class` attribute and must be the only part in the attribute.\");\n  }\n  render(t3) {\n    return \" \" + Object.keys(t3).filter(((s2) => t3[s2])).join(\" \") + \" \";\n  }\n  update(t3, [s2]) {\n    if (void 0 === this.st) {\n      this.st = /* @__PURE__ */ new Set(), void 0 !== t3.strings && (this.nt = new Set(t3.strings.join(\" \").split(/\\s/).filter(((t4) => \"\" !== t4))));\n      for (const t4 in s2) s2[t4] && !this.nt?.has(t4) && this.st.add(t4);\n      return this.render(s2);\n    }\n    const i4 = t3.element.classList;\n    for (const t4 of this.st) t4 in s2 || (i4.remove(t4), this.st.delete(t4));\n    for (const t4 in s2) {\n      const r5 = !!s2[t4];\n      r5 === this.st.has(t4) || this.nt?.has(t4) || (r5 ? (i4.add(t4), this.st.add(t4)) : (i4.remove(t4), this.st.delete(t4)));\n    }\n    return R;\n  }\n});\n\n// node_modules/lit-html/directives/style-map.js\nvar ee = \"important\";\nvar ie = \" !\" + ee;\nvar se = e6(class extends i3 {\n  constructor(e7) {\n    if (super(e7), e7.type !== t2.ATTRIBUTE || \"style\" !== e7.name || e7.strings?.length > 2) throw Error(\"The `styleMap` directive must be used in the `style` attribute and must be the only part in the attribute.\");\n  }\n  render(t3) {\n    return Object.keys(t3).reduce(((e7, r5) => {\n      const s2 = t3[r5];\n      return null == s2 ? e7 : e7 + `${r5 = r5.includes(\"-\") ? r5 : r5.replace(/(?:^(webkit|moz|ms|o)|)(?=[A-Z])/g, \"-$&\").toLowerCase()}:${s2};`;\n    }), \"\");\n  }\n  update(t3, [e7]) {\n    const { style: r5 } = t3.element;\n    if (void 0 === this.ft) return this.ft = new Set(Object.keys(e7)), this.render(e7);\n    for (const t4 of this.ft) null == e7[t4] && (this.ft.delete(t4), t4.includes(\"-\") ? r5.removeProperty(t4) : r5[t4] = null);\n    for (const t4 in e7) {\n      const s2 = e7[t4];\n      if (null != s2) {\n        this.ft.add(t4);\n        const e8 = \"string\" == typeof s2 && s2.endsWith(ie);\n        t4.includes(\"-\") || e8 ? r5.setProperty(t4, e8 ? s2.slice(0, -11) : s2, e8 ? ee : \"\") : r5[t4] = s2;\n      }\n    }\n    return R;\n  }\n});\n\n// js/tab_panel.ts\nfunction convertToId(name) {\n  return (name || \"\").trim().replace(\" \", \"-\").toLowerCase();\n}\nvar TabPanel = class extends h3 {\n  constructor() {\n    super(...arguments);\n    this.tabs = [];\n    this.index = 0;\n    this.mode = 1 /* HIDE_ON_SECOND_CLICK */;\n    this.alignment = \"left\" /* LEFT */;\n  }\n  static get componentName() {\n    return `tab-panel`;\n  }\n  static {\n    this.styles = [\n      legacyStyles,\n      materialStyles,\n      i`\n            ::slotted(*) {\n                display: none;\n            }\n\n            ::slotted(.show-tab) {\n                display: block;\n            }\n\n            .container {\n                padding: 0;\n                width: 100%;\n            }\n\n            .tab-container {\n                align-items: center;\n                display: flex;\n                flex-direction: row;\n            }\n\n            .tab-container.center {\n                justify-content: center;\n            }\n\n            .tab-container.left {\n                justify-content: flex-start;\n            }\n\n            .tab-container.right {\n                justify-content: flex-end;\n            }\n\n            .tab-container button {\n                border-radius: 5px;\n                height: 28px;\n                margin: 2px 0 2px 8px;\n                user-select: none;\n            }\n\n            .tab-container button.icon {\n                font-size: 16px;\n                width: 28px;\n            }\n\n            .tab-container button.name {\n                padding: 0 8px;\n            }\n        `\n    ];\n  }\n  render() {\n    return ke`\n            <div class=\"container\">\n                <div\n                    role=\"tablist\"\n                    class=\"${Rt({\n      \"tab-container\": true,\n      \"center\": this.alignment === \"center\" /* CENTER */,\n      \"left\": this.alignment === \"left\" /* LEFT */,\n      \"right\": this.alignment === \"right\" /* RIGHT */\n    })}\">\n                    ${this.renderTabs()}\n                </div>\n                <slot @slotchange=${this.updateSlotChildren}></slot>\n            </div>\n        `;\n  }\n  update(changedProperties) {\n    super.update(changedProperties);\n    if (changedProperties.has(\"index\") && changedProperties.get(\"index\") != null) {\n      this.updateSlotChildren();\n    }\n  }\n  updateSlotChildren() {\n    if (!this.tabContentElements) {\n      return;\n    }\n    this.tabContentElements.forEach((element, i4) => {\n      element.classList.remove(\"show-tab\");\n      const id = convertToId(this.tabs[i4].name);\n      element.setAttribute(\"id\", `tabpanel-${id}-${i4}`);\n      element.setAttribute(\"role\", \"tabpanel\");\n      element.setAttribute(\"aria-labelledby\", `tab-${id}-${i4}`);\n    });\n    this.tabContentElements[this.index]?.classList.add(\"show-tab\");\n  }\n  renderTabs() {\n    return this.tabs.map((tab, i4) => {\n      const id = convertToId(this.tabs[i4].name);\n      return ke`<button\n                            id=\"tab-${id}-${i4}\"\n                            class=\"${Rt({\n        \"legacy-button\": true,\n        \"active\": i4 === this.index,\n        \"icon\": !!tab.icon,\n        \"name\": !!tab.name\n      })}\"\n                            style=\"${se({\n        width: tab.width ? `${tab.width}px` : null\n      })}\"\n                            type=\"button\"\n                            role=\"tab\"\n                            aria-selected=\"${i4 === this.index ? true : false}\"\n                            aria-controls=\"tabpanel-${id}-${i4}\"\n                            @click=${() => {\n        this.onTabClick(i4);\n      }}>\n                            ${tab.icon ? ke`<span class=\"material-symbols-outlined\">${tab.icon}</span>` : D}\n                            <span>${tab.name}</span>\n                        </button>`;\n    });\n  }\n  onTabClick(index) {\n    switch (this.mode) {\n      case 1 /* HIDE_ON_SECOND_CLICK */:\n        this.index = this.index === index ? -1 : index;\n        break;\n      case 0 /* ALWAYS_SHOW */:\n      default:\n        this.index = index;\n    }\n    this.dispatchEvent(new CustomEvent(\"tab-changed\", {\n      detail: index\n    }));\n  }\n};\n__decorateClass([\n  n4({ type: Array })\n], TabPanel.prototype, \"tabs\", 2);\n__decorateClass([\n  n4({ type: Number })\n], TabPanel.prototype, \"index\", 2);\n__decorateClass([\n  n4({ type: Number })\n], TabPanel.prototype, \"mode\", 2);\n__decorateClass([\n  n4({ type: String })\n], TabPanel.prototype, \"alignment\", 2);\n__decorateClass([\n  r4(\".tab\")\n], TabPanel.prototype, \"tabElements\", 2);\n__decorateClass([\n  o4()\n], TabPanel.prototype, \"tabContentElements\", 2);\nif (!customElements.get(TabPanel.componentName)) {\n  customElements.define(TabPanel.componentName, TabPanel);\n}\n\n// node_modules/lit-html/directives/unsafe-html.js\nvar le = class extends i3 {\n  constructor(i4) {\n    if (super(i4), this.it = D, i4.type !== t2.CHILD) throw Error(this.constructor.directiveName + \"() can only be used in child bindings\");\n  }\n  render(t3) {\n    if (t3 === D || null == t3) return this._t = void 0, this.it = t3;\n    if (t3 === R) return t3;\n    if (\"string\" != typeof t3) throw Error(this.constructor.directiveName + \"() called with a non-string value\");\n    if (t3 === this.it) return this._t;\n    this.it = t3;\n    const i4 = [t3];\n    return i4.raw = i4, this._t = { _$litType$: this.constructor.resultType, strings: i4, values: [] };\n  }\n};\nle.directiveName = \"unsafeHTML\", le.resultType = 1;\nvar ae = e6(le);\n\n// js/container.ts\nvar Container = class extends LitWidget {\n  constructor() {\n    super(...arguments);\n    this.icon = \"\";\n    this.title = \"\";\n    this.collapsed = false;\n    this.hideCloseButton = false;\n    this.compactMode = false;\n    this.noHeader = false;\n    this.reverseHeader = false;\n  }\n  static get componentName() {\n    return `widget-container`;\n  }\n  static {\n    this.styles = [\n      legacyStyles,\n      materialStyles,\n      i`\n            .container {\n                background: var(--jp-layout-color1);\n                border-radius: 4.5px;\n                box-shadow: 4px 5px 8px 0px #9e9e9e;\n            }\n\n            div {\n                background-color: var(--colab-primary-surface-color, --jp-layout-color1, white);\n            }\n\n            .header {\n                display: flex;\n                gap: 4px;\n                padding: 4px;\n            }\n\n            .reversed {\n                flex-direction: row-reverse;\n            }\n\n            .icon {\n                align-items: center;\n                display: flex;\n                font-size: 20px;\n                height: 28px;\n                justify-content: center;\n                padding: 0 4px;\n            }\n\n            .widget-container {\n                padding: 8px 12px 12px 12px;\n            }\n\n            .hidden {\n                display: none;\n            }\n\n            .header-button {\n                font-size: 16px;\n                height: 28px;\n                width: 28px;\n            }\n\n            .compact-header-button {\n                background: transparent;\n                font-size: 16px;\n                height: 28px;\n                width: 28px;\n            }\n\n            .header-text {\n                align-content: center;\n                flex-grow: 1;\n                padding: 0 12px 0 0;\n            }\n\n            .left-padding {\n                padding-left: 8px;\n            }\n        `\n    ];\n  }\n  modelNameToViewName() {\n    return /* @__PURE__ */ new Map([\n      [\"icon\", \"icon\"],\n      [\"collapsed\", \"collapsed\"],\n      [\"title\", \"title\"],\n      [\"hide_close_button\", \"hideCloseButton\"]\n    ]);\n  }\n  render() {\n    return ke`\n            <div class=\"container\">\n                ${this.noHeader ? D : this.renderHeader()}\n                <div class=\"widget-container ${this.collapsed ? \"hidden\" : \"\"}\">\n                    <slot></slot>\n                </div>\n            </div>\n        `;\n  }\n  renderHeader() {\n    return this.compactMode ? this.renderCompactHeader() : ke`\n            <div class=\"header ${this.reverseHeader ? \"reversed\" : \"\"}\">\n                ${this.renderIcon()}\n                ${this.title ? this.renderTitle() : D}\n                ${this.renderCollapseButton()}\n                ${this.renderCloseButton()}\n            </div>`;\n  }\n  renderCompactHeader() {\n    return ke`<div class=\"header ${this.reverseHeader ? \"reversed\" : \"\"}\">\n            ${this.renderCollapseButton()}\n            ${this.title && !this.collapsed ? this.renderTitle() : D}\n            ${this.renderCloseButton()}\n        </div>`;\n  }\n  renderCloseButton() {\n    if (this.hideCloseButton) {\n      return D;\n    }\n    return ke`\n            <button\n                class=\"legacy-button primary header-button\"\n                @click=\"${this.onCloseButtonClicked}\"\n            >\n                <span class=\"material-symbols-outlined\">&#xe5cd;</span>\n            </button>\n        `;\n  }\n  renderTitle() {\n    return ke`<span\n            class=\"${Rt({\n      \"legacy-text\": true,\n      \"header-text\": true,\n      \"left-padding\": this.compactMode && this.title && !this.reverseHeader\n    })}\"\n            >${this.title}</span\n        >`;\n  }\n  onCloseButtonClicked() {\n    this.dispatchEvent(new CustomEvent(\"close-clicked\", {}));\n  }\n  onCollapseToggled() {\n    this.collapsed = !this.collapsed;\n    this.dispatchEvent(new CustomEvent(\"collapse-clicked\", {}));\n  }\n  renderIcon() {\n    return ke`<span class=\"icon material-symbols-outlined\">\n                        ${this.icon}\n                    </span>`;\n  }\n  renderCollapseButton() {\n    let icon;\n    if (this.compactMode) {\n      icon = this.renderIcon();\n    } else if (this.collapsed) {\n      icon = ke`<span class=\"material-symbols-outlined\"\n                >&#xf830;</span\n            >`;\n    } else {\n      icon = ke`<span class=\"material-symbols-outlined\">&#xf507;</span>`;\n    }\n    return ke`<button\n            class=\"${Rt({\n      \"legacy-button\": true,\n      \"header-button\": !this.compactMode,\n      \"compact-header-button\": this.compactMode,\n      \"active\": !this.collapsed\n    })}\"\n            class=\"legacy-button header-button\"\n            @click=\"${this.onCollapseToggled}\"\n        >\n            ${icon}\n        </button>`;\n  }\n};\n__decorateClass([\n  n4({ type: String })\n], Container.prototype, \"icon\", 2);\n__decorateClass([\n  n4({ type: String })\n], Container.prototype, \"title\", 2);\n__decorateClass([\n  n4({ type: Boolean })\n], Container.prototype, \"collapsed\", 2);\n__decorateClass([\n  n4({ type: Boolean })\n], Container.prototype, \"hideCloseButton\", 2);\n__decorateClass([\n  n4({ type: Boolean })\n], Container.prototype, \"compactMode\", 2);\n__decorateClass([\n  n4({ type: Boolean })\n], Container.prototype, \"noHeader\", 2);\n__decorateClass([\n  n4({ type: Boolean })\n], Container.prototype, \"reverseHeader\", 2);\nif (!customElements.get(Container.componentName)) {\n  customElements.define(Container.componentName, Container);\n}\n\n// js/search_bar.ts\nvar SearchBar = class extends LitWidget {\n  constructor() {\n    super(...arguments);\n    this.collapsed = true;\n    this.tab_index = 0;\n    this.locationModel = JSON.stringify({\n      search: \"\",\n      results: [],\n      selected: \"\",\n      additional_html: \"\"\n    });\n    this.datasetModel = JSON.stringify({\n      search: \"\",\n      results: [],\n      selected: \"\",\n      additional_html: \"\"\n    });\n  }\n  static get componentName() {\n    return `search-bar`;\n  }\n  static {\n    this.styles = [\n      legacyStyles,\n      materialStyles,\n      i`\n            .row {\n                display: flex;\n                gap: 6px;\n            }\n\n            .input-container {\n                max-width: 320px;\n            }\n\n            .input-container > p {\n                margin: 8px 3px;\n            }\n\n            input.search {\n                margin: 2px 2px 8px 2px;\n                width: calc(100% - 4px);\n            }\n\n            ul.results {\n                list-style-type: none;\n                margin: 0;\n                margin-bottom: 4px;\n                padding: 8px 0;\n            }\n\n            label.result {\n                align-items: center;\n                display: flex;\n                margin-bottom: 4px;\n            }\n\n            .import-button, .reset-button {\n                margin: 0 2px 2px 2px;\n                padding: 0 8px;\n                white-space: nowrap;\n            }\n\n            .dataset-select {\n                margin-bottom: 2px;\n                margin-right: 2px;\n            }\n\n            .additional-html-container {\n                max-height: 300px;\n                overflow: auto;\n                padding: 8px 0;\n            }\n\n            .additional-html-container pre {\n                white-space: break-spaces;\n            }\n        `\n    ];\n  }\n  modelNameToViewName() {\n    return /* @__PURE__ */ new Map([\n      [\"collapsed\", \"collapsed\"],\n      [\"tab_index\", \"tab_index\"],\n      [\"location_model\", \"locationModel\"],\n      [\"dataset_model\", \"datasetModel\"]\n    ]);\n  }\n  render() {\n    return ke`\n            <widget-container\n                icon=\"search\"\n                title=\"Search\"\n                .collapsed=\"${this.collapsed}\"\n                .hideCloseButton=\"${true}\"\n                .compactMode=\"${true}\">\n                <tab-panel\n                    .index=\"${this.tab_index}\"\n                    .tabs=${[\n      { name: \"location\", width: 110 },\n      { name: \"data\", width: 110 }\n    ]}\n                    @tab-changed=${(e7) => {\n      this.tab_index = e7.detail;\n    }}\n                    .mode=\"${0 /* ALWAYS_SHOW */}\">\n                    <div class=\"input-container location-container\">\n                        ${this.renderLocationSearch()}\n                    </div>\n                    <div class=\"input-container dataset-container\">\n                        ${this.renderDatasetSearch()}\n                    </div>\n                </tab-panel>\n            </widget-container>`;\n  }\n  renderLocationSearch() {\n    const locationModel = JSON.parse(this.locationModel);\n    const helpText = ke`<p>\n            Find your point of interest (by place name,\n            address, or coordinates, e.g. 40,-100)\n        </p>`;\n    const searchInput = ke`<input\n            class=\"legacy-input search location-search\"\n            type=\"search\"\n            placeholder=\"Search by location / lat-lon\"\n            @keydown=\"${(e7) => {\n      if (e7.key === \"Enter\") {\n        e7.preventDefault();\n        const locationModel2 = JSON.parse(this.locationModel);\n        locationModel2.search = this.locationSearch.value || \"\";\n        this.locationModel = JSON.stringify(locationModel2);\n      }\n    }}\" />`;\n    const renderedInputs = [helpText, searchInput];\n    if (locationModel.results.length) {\n      const results = ke`\n                ${locationModel.results.map((result) => ke`\n                    <li>\n                        <label class=\"result\">\n                            <input\n                            type=\"radio\"\n                            name=\"location-result\"\n                            value=\"${result}\"\n                            .checked=\"${locationModel.selected === result}\"\n                            @input=\"${(e7) => {\n        const input = e7.target;\n        const locationModel2 = JSON.parse(this.locationModel);\n        locationModel2.selected = input.value || \"\";\n        this.locationModel = JSON.stringify(locationModel2);\n      }}\" />\n                            <span>${result}</span>\n                        </label>\n                    </li>`)}\n            `;\n      renderedInputs.push(ke`<ul class=\"results location-results\">\n                ${results}\n            </ul>`);\n    }\n    if (locationModel.additional_html) {\n      renderedInputs.push(ke`<div class=\"additional-html-container\">\n                ${ae(locationModel.additional_html)}\n            </div>`);\n    }\n    if (locationModel.search || locationModel.results.length || locationModel.selected) {\n      renderedInputs.push(ke`<button\n                    class=\"legacy-button primary reset-button\"\n                    @click=\"${() => {\n        this.locationModel = JSON.stringify({\n          search: \"\",\n          results: [],\n          selected: \"\",\n          additional_html: \"\"\n        });\n        if (this.locationSearch) {\n          this.locationSearch.value = \"\";\n        }\n      }}\">Reset</button>`);\n    }\n    return renderedInputs;\n  }\n  renderDatasetSearch() {\n    const datasetModel = JSON.parse(this.datasetModel);\n    const helpText = ke`<p>\n            Find a dataset by GEE data catalog name or keywords, e.g. elevation\n        </p>`;\n    const searchInput = ke`<input\n            class=\"legacy-input search dataset-search\"\n            type=\"search\"\n            placeholder=\"Search dataset / keywords\"\n            @keydown=\"${(e7) => {\n      if (e7.key === \"Enter\") {\n        e7.preventDefault();\n        const datasetModel2 = JSON.parse(this.datasetModel);\n        datasetModel2.search = this.datasetSearch?.value || \"\";\n        this.datasetModel = JSON.stringify(datasetModel2);\n      }\n    }}\" />`;\n    const renderedInputs = [helpText, searchInput];\n    const importButton = ke`<button\n            class=\"legacy-button primary import-button\"\n            title=\"Click to import the selected asset\"\n            @click=\"${() => {\n      this.model?.send({ type: \"click\", id: \"import\" });\n    }}\">\n            Reveal Code\n        </button>`;\n    const results = ke`\n            <select\n                class=\"legacy-select dataset-select\"\n                @input=\"${(e7) => {\n      const input = e7.target;\n      const datasetModel2 = JSON.parse(this.datasetModel);\n      datasetModel2.selected = input.value || \"\";\n      this.datasetModel = JSON.stringify(datasetModel2);\n    }}\">\n                ${datasetModel.results.map((result) => ke`\n                <option>\n                    ${result}\n                </option>\n                `)}\n            </select>\n        `;\n    renderedInputs.push(\n      ke`<div class=\"row\">\n                ${importButton}\n                ${results}\n            </div>`\n    );\n    if (datasetModel.additional_html) {\n      renderedInputs.push(ke`<div class=\"additional-html-container\">\n                ${ae(datasetModel.additional_html)}\n            </div>`);\n    }\n    return renderedInputs;\n  }\n};\n__decorateClass([\n  n4()\n], SearchBar.prototype, \"collapsed\", 2);\n__decorateClass([\n  n4()\n], SearchBar.prototype, \"tab_index\", 2);\n__decorateClass([\n  n4()\n], SearchBar.prototype, \"locationModel\", 2);\n__decorateClass([\n  n4()\n], SearchBar.prototype, \"datasetModel\", 2);\n__decorateClass([\n  e4(\".location-search\")\n], SearchBar.prototype, \"locationSearch\", 2);\n__decorateClass([\n  r4(\".location-results input\")\n], SearchBar.prototype, \"locationResults\", 2);\n__decorateClass([\n  e4(\".dataset-search\")\n], SearchBar.prototype, \"datasetSearch\", 2);\nif (!customElements.get(SearchBar.componentName)) {\n  customElements.define(SearchBar.componentName, SearchBar);\n}\nasync function render({ model, el }) {\n  loadFonts();\n  const row = document.createElement(SearchBar.componentName);\n  row.model = model;\n  el.appendChild(row);\n}\nvar search_bar_default = { render };\nexport {\n  SearchBar,\n  search_bar_default as default\n};\n/*! Bundled license information:\n\n@lit/reactive-element/css-tag.js:\n  (**\n   * @license\n   * Copyright 2019 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n\n@lit/reactive-element/reactive-element.js:\nlit-html/lit-html.js:\nlit-element/lit-element.js:\n@lit/reactive-element/decorators/custom-element.js:\n@lit/reactive-element/decorators/property.js:\n@lit/reactive-element/decorators/state.js:\n@lit/reactive-element/decorators/event-options.js:\n@lit/reactive-element/decorators/base.js:\n@lit/reactive-element/decorators/query.js:\n@lit/reactive-element/decorators/query-all.js:\n@lit/reactive-element/decorators/query-async.js:\n@lit/reactive-element/decorators/query-assigned-nodes.js:\nlit-html/directive.js:\nlit-html/directives/unsafe-html.js:\n  (**\n   * @license\n   * Copyright 2017 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n\nlit-html/is-server.js:\n  (**\n   * @license\n   * Copyright 2022 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n\n@lit/reactive-element/decorators/query-assigned-elements.js:\n  (**\n   * @license\n   * Copyright 2021 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n\nlit-html/directives/class-map.js:\nlit-html/directives/style-map.js:\n  (**\n   * @license\n   * Copyright 2018 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n*/\n",
              "_model_module": "anywidget",
              "_model_module_version": "~0.9.*",
              "_model_name": "AnyModel",
              "_view_count": null,
              "_view_module": "anywidget",
              "_view_module_version": "~0.9.*",
              "_view_name": "AnyView",
              "collapsed": true,
              "dataset_model": "{\"search\": \"\", \"results\": [], \"selected\": \"\", \"additional_html\": \"\"}",
              "layout": "IPY_MODEL_e50e3eb6d9684c01b2534bd56aa7cd46",
              "location_model": "{\"search\": \"\", \"results\": [], \"selected\": \"\", \"additional_html\": \"\"}",
              "tab_index": 0
            }
          },
          "2de3fe8a5d624d1f8bf4df3eab4a5f76": {
            "model_module": "anywidget",
            "model_name": "AnyModel",
            "model_module_version": "~0.9.*",
            "state": {
              "_anywidget_id": "geemap.map_widgets.LayerManager",
              "_dom_classes": [],
              "_esm": "var __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __decorateClass = (decorators, target, key, kind) => {\n  var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;\n  for (var i4 = decorators.length - 1, decorator; i4 >= 0; i4--)\n    if (decorator = decorators[i4])\n      result = (kind ? decorator(target, key, result) : decorator(result)) || result;\n  if (kind && result) __defProp(target, key, result);\n  return result;\n};\n\n// node_modules/@lit/reactive-element/css-tag.js\nvar t = globalThis;\nvar e = t.ShadowRoot && (void 0 === t.ShadyCSS || t.ShadyCSS.nativeShadow) && \"adoptedStyleSheets\" in Document.prototype && \"replace\" in CSSStyleSheet.prototype;\nvar s = /* @__PURE__ */ Symbol();\nvar o = /* @__PURE__ */ new WeakMap();\nvar n = class {\n  constructor(t3, e5, o4) {\n    if (this._$cssResult$ = true, o4 !== s) throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");\n    this.cssText = t3, this.t = e5;\n  }\n  get styleSheet() {\n    let t3 = this.o;\n    const s2 = this.t;\n    if (e && void 0 === t3) {\n      const e5 = void 0 !== s2 && 1 === s2.length;\n      e5 && (t3 = o.get(s2)), void 0 === t3 && ((this.o = t3 = new CSSStyleSheet()).replaceSync(this.cssText), e5 && o.set(s2, t3));\n    }\n    return t3;\n  }\n  toString() {\n    return this.cssText;\n  }\n};\nvar r = (t3) => new n(\"string\" == typeof t3 ? t3 : t3 + \"\", void 0, s);\nvar i = (t3, ...e5) => {\n  const o4 = 1 === t3.length ? t3[0] : e5.reduce(((e6, s2, o5) => e6 + ((t4) => {\n    if (true === t4._$cssResult$) return t4.cssText;\n    if (\"number\" == typeof t4) return t4;\n    throw Error(\"Value passed to 'css' function must be a 'css' function result: \" + t4 + \". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\");\n  })(s2) + t3[o5 + 1]), t3[0]);\n  return new n(o4, t3, s);\n};\nvar S = (s2, o4) => {\n  if (e) s2.adoptedStyleSheets = o4.map(((t3) => t3 instanceof CSSStyleSheet ? t3 : t3.styleSheet));\n  else for (const e5 of o4) {\n    const o5 = document.createElement(\"style\"), n5 = t.litNonce;\n    void 0 !== n5 && o5.setAttribute(\"nonce\", n5), o5.textContent = e5.cssText, s2.appendChild(o5);\n  }\n};\nvar c = e ? (t3) => t3 : (t3) => t3 instanceof CSSStyleSheet ? ((t4) => {\n  let e5 = \"\";\n  for (const s2 of t4.cssRules) e5 += s2.cssText;\n  return r(e5);\n})(t3) : t3;\n\n// node_modules/@lit/reactive-element/reactive-element.js\nvar { is: i2, defineProperty: e2, getOwnPropertyDescriptor: r2, getOwnPropertyNames: h, getOwnPropertySymbols: o2, getPrototypeOf: n2 } = Object;\nvar a = globalThis;\nvar c2 = a.trustedTypes;\nvar l = c2 ? c2.emptyScript : \"\";\nvar p = a.reactiveElementPolyfillSupport;\nvar d = (t3, s2) => t3;\nvar u = { toAttribute(t3, s2) {\n  switch (s2) {\n    case Boolean:\n      t3 = t3 ? l : null;\n      break;\n    case Object:\n    case Array:\n      t3 = null == t3 ? t3 : JSON.stringify(t3);\n  }\n  return t3;\n}, fromAttribute(t3, s2) {\n  let i4 = t3;\n  switch (s2) {\n    case Boolean:\n      i4 = null !== t3;\n      break;\n    case Number:\n      i4 = null === t3 ? null : Number(t3);\n      break;\n    case Object:\n    case Array:\n      try {\n        i4 = JSON.parse(t3);\n      } catch (t4) {\n        i4 = null;\n      }\n  }\n  return i4;\n} };\nvar f = (t3, s2) => !i2(t3, s2);\nvar y = { attribute: true, type: String, converter: u, reflect: false, hasChanged: f };\nSymbol.metadata ??= /* @__PURE__ */ Symbol(\"metadata\"), a.litPropertyMetadata ??= /* @__PURE__ */ new WeakMap();\nvar b = class extends HTMLElement {\n  static addInitializer(t3) {\n    this._$Ei(), (this.l ??= []).push(t3);\n  }\n  static get observedAttributes() {\n    return this.finalize(), this._$Eh && [...this._$Eh.keys()];\n  }\n  static createProperty(t3, s2 = y) {\n    if (s2.state && (s2.attribute = false), this._$Ei(), this.elementProperties.set(t3, s2), !s2.noAccessor) {\n      const i4 = /* @__PURE__ */ Symbol(), r4 = this.getPropertyDescriptor(t3, i4, s2);\n      void 0 !== r4 && e2(this.prototype, t3, r4);\n    }\n  }\n  static getPropertyDescriptor(t3, s2, i4) {\n    const { get: e5, set: h4 } = r2(this.prototype, t3) ?? { get() {\n      return this[s2];\n    }, set(t4) {\n      this[s2] = t4;\n    } };\n    return { get() {\n      return e5?.call(this);\n    }, set(s3) {\n      const r4 = e5?.call(this);\n      h4.call(this, s3), this.requestUpdate(t3, r4, i4);\n    }, configurable: true, enumerable: true };\n  }\n  static getPropertyOptions(t3) {\n    return this.elementProperties.get(t3) ?? y;\n  }\n  static _$Ei() {\n    if (this.hasOwnProperty(d(\"elementProperties\"))) return;\n    const t3 = n2(this);\n    t3.finalize(), void 0 !== t3.l && (this.l = [...t3.l]), this.elementProperties = new Map(t3.elementProperties);\n  }\n  static finalize() {\n    if (this.hasOwnProperty(d(\"finalized\"))) return;\n    if (this.finalized = true, this._$Ei(), this.hasOwnProperty(d(\"properties\"))) {\n      const t4 = this.properties, s2 = [...h(t4), ...o2(t4)];\n      for (const i4 of s2) this.createProperty(i4, t4[i4]);\n    }\n    const t3 = this[Symbol.metadata];\n    if (null !== t3) {\n      const s2 = litPropertyMetadata.get(t3);\n      if (void 0 !== s2) for (const [t4, i4] of s2) this.elementProperties.set(t4, i4);\n    }\n    this._$Eh = /* @__PURE__ */ new Map();\n    for (const [t4, s2] of this.elementProperties) {\n      const i4 = this._$Eu(t4, s2);\n      void 0 !== i4 && this._$Eh.set(i4, t4);\n    }\n    this.elementStyles = this.finalizeStyles(this.styles);\n  }\n  static finalizeStyles(s2) {\n    const i4 = [];\n    if (Array.isArray(s2)) {\n      const e5 = new Set(s2.flat(1 / 0).reverse());\n      for (const s3 of e5) i4.unshift(c(s3));\n    } else void 0 !== s2 && i4.push(c(s2));\n    return i4;\n  }\n  static _$Eu(t3, s2) {\n    const i4 = s2.attribute;\n    return false === i4 ? void 0 : \"string\" == typeof i4 ? i4 : \"string\" == typeof t3 ? t3.toLowerCase() : void 0;\n  }\n  constructor() {\n    super(), this._$Ep = void 0, this.isUpdatePending = false, this.hasUpdated = false, this._$Em = null, this._$Ev();\n  }\n  _$Ev() {\n    this._$ES = new Promise(((t3) => this.enableUpdating = t3)), this._$AL = /* @__PURE__ */ new Map(), this._$E_(), this.requestUpdate(), this.constructor.l?.forEach(((t3) => t3(this)));\n  }\n  addController(t3) {\n    (this._$EO ??= /* @__PURE__ */ new Set()).add(t3), void 0 !== this.renderRoot && this.isConnected && t3.hostConnected?.();\n  }\n  removeController(t3) {\n    this._$EO?.delete(t3);\n  }\n  _$E_() {\n    const t3 = /* @__PURE__ */ new Map(), s2 = this.constructor.elementProperties;\n    for (const i4 of s2.keys()) this.hasOwnProperty(i4) && (t3.set(i4, this[i4]), delete this[i4]);\n    t3.size > 0 && (this._$Ep = t3);\n  }\n  createRenderRoot() {\n    const t3 = this.shadowRoot ?? this.attachShadow(this.constructor.shadowRootOptions);\n    return S(t3, this.constructor.elementStyles), t3;\n  }\n  connectedCallback() {\n    this.renderRoot ??= this.createRenderRoot(), this.enableUpdating(true), this._$EO?.forEach(((t3) => t3.hostConnected?.()));\n  }\n  enableUpdating(t3) {\n  }\n  disconnectedCallback() {\n    this._$EO?.forEach(((t3) => t3.hostDisconnected?.()));\n  }\n  attributeChangedCallback(t3, s2, i4) {\n    this._$AK(t3, i4);\n  }\n  _$EC(t3, s2) {\n    const i4 = this.constructor.elementProperties.get(t3), e5 = this.constructor._$Eu(t3, i4);\n    if (void 0 !== e5 && true === i4.reflect) {\n      const r4 = (void 0 !== i4.converter?.toAttribute ? i4.converter : u).toAttribute(s2, i4.type);\n      this._$Em = t3, null == r4 ? this.removeAttribute(e5) : this.setAttribute(e5, r4), this._$Em = null;\n    }\n  }\n  _$AK(t3, s2) {\n    const i4 = this.constructor, e5 = i4._$Eh.get(t3);\n    if (void 0 !== e5 && this._$Em !== e5) {\n      const t4 = i4.getPropertyOptions(e5), r4 = \"function\" == typeof t4.converter ? { fromAttribute: t4.converter } : void 0 !== t4.converter?.fromAttribute ? t4.converter : u;\n      this._$Em = e5, this[e5] = r4.fromAttribute(s2, t4.type), this._$Em = null;\n    }\n  }\n  requestUpdate(t3, s2, i4) {\n    if (void 0 !== t3) {\n      if (i4 ??= this.constructor.getPropertyOptions(t3), !(i4.hasChanged ?? f)(this[t3], s2)) return;\n      this.P(t3, s2, i4);\n    }\n    false === this.isUpdatePending && (this._$ES = this._$ET());\n  }\n  P(t3, s2, i4) {\n    this._$AL.has(t3) || this._$AL.set(t3, s2), true === i4.reflect && this._$Em !== t3 && (this._$Ej ??= /* @__PURE__ */ new Set()).add(t3);\n  }\n  async _$ET() {\n    this.isUpdatePending = true;\n    try {\n      await this._$ES;\n    } catch (t4) {\n      Promise.reject(t4);\n    }\n    const t3 = this.scheduleUpdate();\n    return null != t3 && await t3, !this.isUpdatePending;\n  }\n  scheduleUpdate() {\n    return this.performUpdate();\n  }\n  performUpdate() {\n    if (!this.isUpdatePending) return;\n    if (!this.hasUpdated) {\n      if (this.renderRoot ??= this.createRenderRoot(), this._$Ep) {\n        for (const [t5, s3] of this._$Ep) this[t5] = s3;\n        this._$Ep = void 0;\n      }\n      const t4 = this.constructor.elementProperties;\n      if (t4.size > 0) for (const [s3, i4] of t4) true !== i4.wrapped || this._$AL.has(s3) || void 0 === this[s3] || this.P(s3, this[s3], i4);\n    }\n    let t3 = false;\n    const s2 = this._$AL;\n    try {\n      t3 = this.shouldUpdate(s2), t3 ? (this.willUpdate(s2), this._$EO?.forEach(((t4) => t4.hostUpdate?.())), this.update(s2)) : this._$EU();\n    } catch (s3) {\n      throw t3 = false, this._$EU(), s3;\n    }\n    t3 && this._$AE(s2);\n  }\n  willUpdate(t3) {\n  }\n  _$AE(t3) {\n    this._$EO?.forEach(((t4) => t4.hostUpdated?.())), this.hasUpdated || (this.hasUpdated = true, this.firstUpdated(t3)), this.updated(t3);\n  }\n  _$EU() {\n    this._$AL = /* @__PURE__ */ new Map(), this.isUpdatePending = false;\n  }\n  get updateComplete() {\n    return this.getUpdateComplete();\n  }\n  getUpdateComplete() {\n    return this._$ES;\n  }\n  shouldUpdate(t3) {\n    return true;\n  }\n  update(t3) {\n    this._$Ej &&= this._$Ej.forEach(((t4) => this._$EC(t4, this[t4]))), this._$EU();\n  }\n  updated(t3) {\n  }\n  firstUpdated(t3) {\n  }\n};\nb.elementStyles = [], b.shadowRootOptions = { mode: \"open\" }, b[d(\"elementProperties\")] = /* @__PURE__ */ new Map(), b[d(\"finalized\")] = /* @__PURE__ */ new Map(), p?.({ ReactiveElement: b }), (a.reactiveElementVersions ??= []).push(\"2.0.4\");\n\n// node_modules/lit-html/lit-html.js\nvar n3 = globalThis;\nvar c3 = n3.trustedTypes;\nvar h2 = c3 ? c3.createPolicy(\"lit-html\", { createHTML: (t3) => t3 }) : void 0;\nvar f2 = \"$lit$\";\nvar v = `lit$${Math.random().toFixed(9).slice(2)}$`;\nvar m = \"?\" + v;\nvar _ = `<${m}>`;\nvar w = document;\nvar lt = () => w.createComment(\"\");\nvar st = (t3) => null === t3 || \"object\" != typeof t3 && \"function\" != typeof t3;\nvar g = Array.isArray;\nvar $ = (t3) => g(t3) || \"function\" == typeof t3?.[Symbol.iterator];\nvar x = \"[ \t\\n\\f\\r]\";\nvar T = /<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g;\nvar E = /-->/g;\nvar k = />/g;\nvar O = RegExp(`>|${x}(?:([^\\\\s\"'>=/]+)(${x}*=${x}*(?:[^ \t\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`, \"g\");\nvar S2 = /'/g;\nvar j = /\"/g;\nvar M = /^(?:script|style|textarea|title)$/i;\nvar P = (t3) => (i4, ...s2) => ({ _$litType$: t3, strings: i4, values: s2 });\nvar ke = P(1);\nvar Oe = P(2);\nvar Se = P(3);\nvar R = /* @__PURE__ */ Symbol.for(\"lit-noChange\");\nvar D = /* @__PURE__ */ Symbol.for(\"lit-nothing\");\nvar V = /* @__PURE__ */ new WeakMap();\nvar I = w.createTreeWalker(w, 129);\nfunction N(t3, i4) {\n  if (!g(t3) || !t3.hasOwnProperty(\"raw\")) throw Error(\"invalid template strings array\");\n  return void 0 !== h2 ? h2.createHTML(i4) : i4;\n}\nvar U = (t3, i4) => {\n  const s2 = t3.length - 1, e5 = [];\n  let h4, o4 = 2 === i4 ? \"<svg>\" : 3 === i4 ? \"<math>\" : \"\", n5 = T;\n  for (let i5 = 0; i5 < s2; i5++) {\n    const s3 = t3[i5];\n    let r4, l2, c4 = -1, a2 = 0;\n    for (; a2 < s3.length && (n5.lastIndex = a2, l2 = n5.exec(s3), null !== l2); ) a2 = n5.lastIndex, n5 === T ? \"!--\" === l2[1] ? n5 = E : void 0 !== l2[1] ? n5 = k : void 0 !== l2[2] ? (M.test(l2[2]) && (h4 = RegExp(\"</\" + l2[2], \"g\")), n5 = O) : void 0 !== l2[3] && (n5 = O) : n5 === O ? \">\" === l2[0] ? (n5 = h4 ?? T, c4 = -1) : void 0 === l2[1] ? c4 = -2 : (c4 = n5.lastIndex - l2[2].length, r4 = l2[1], n5 = void 0 === l2[3] ? O : '\"' === l2[3] ? j : S2) : n5 === j || n5 === S2 ? n5 = O : n5 === E || n5 === k ? n5 = T : (n5 = O, h4 = void 0);\n    const u2 = n5 === O && t3[i5 + 1].startsWith(\"/>\") ? \" \" : \"\";\n    o4 += n5 === T ? s3 + _ : c4 >= 0 ? (e5.push(r4), s3.slice(0, c4) + f2 + s3.slice(c4) + v + u2) : s3 + v + (-2 === c4 ? i5 : u2);\n  }\n  return [N(t3, o4 + (t3[s2] || \"<?>\") + (2 === i4 ? \"</svg>\" : 3 === i4 ? \"</math>\" : \"\")), e5];\n};\nvar B = class _B {\n  constructor({ strings: t3, _$litType$: i4 }, s2) {\n    let e5;\n    this.parts = [];\n    let h4 = 0, o4 = 0;\n    const n5 = t3.length - 1, r4 = this.parts, [l2, a2] = U(t3, i4);\n    if (this.el = _B.createElement(l2, s2), I.currentNode = this.el.content, 2 === i4 || 3 === i4) {\n      const t4 = this.el.content.firstChild;\n      t4.replaceWith(...t4.childNodes);\n    }\n    for (; null !== (e5 = I.nextNode()) && r4.length < n5; ) {\n      if (1 === e5.nodeType) {\n        if (e5.hasAttributes()) for (const t4 of e5.getAttributeNames()) if (t4.endsWith(f2)) {\n          const i5 = a2[o4++], s3 = e5.getAttribute(t4).split(v), n6 = /([.?@])?(.*)/.exec(i5);\n          r4.push({ type: 1, index: h4, name: n6[2], strings: s3, ctor: \".\" === n6[1] ? Y : \"?\" === n6[1] ? Z : \"@\" === n6[1] ? q : G }), e5.removeAttribute(t4);\n        } else t4.startsWith(v) && (r4.push({ type: 6, index: h4 }), e5.removeAttribute(t4));\n        if (M.test(e5.tagName)) {\n          const t4 = e5.textContent.split(v), i5 = t4.length - 1;\n          if (i5 > 0) {\n            e5.textContent = c3 ? c3.emptyScript : \"\";\n            for (let s3 = 0; s3 < i5; s3++) e5.append(t4[s3], lt()), I.nextNode(), r4.push({ type: 2, index: ++h4 });\n            e5.append(t4[i5], lt());\n          }\n        }\n      } else if (8 === e5.nodeType) if (e5.data === m) r4.push({ type: 2, index: h4 });\n      else {\n        let t4 = -1;\n        for (; -1 !== (t4 = e5.data.indexOf(v, t4 + 1)); ) r4.push({ type: 7, index: h4 }), t4 += v.length - 1;\n      }\n      h4++;\n    }\n  }\n  static createElement(t3, i4) {\n    const s2 = w.createElement(\"template\");\n    return s2.innerHTML = t3, s2;\n  }\n};\nfunction z(t3, i4, s2 = t3, e5) {\n  if (i4 === R) return i4;\n  let h4 = void 0 !== e5 ? s2.o?.[e5] : s2.l;\n  const o4 = st(i4) ? void 0 : i4._$litDirective$;\n  return h4?.constructor !== o4 && (h4?._$AO?.(false), void 0 === o4 ? h4 = void 0 : (h4 = new o4(t3), h4._$AT(t3, s2, e5)), void 0 !== e5 ? (s2.o ??= [])[e5] = h4 : s2.l = h4), void 0 !== h4 && (i4 = z(t3, h4._$AS(t3, i4.values), h4, e5)), i4;\n}\nvar F = class {\n  constructor(t3, i4) {\n    this._$AV = [], this._$AN = void 0, this._$AD = t3, this._$AM = i4;\n  }\n  get parentNode() {\n    return this._$AM.parentNode;\n  }\n  get _$AU() {\n    return this._$AM._$AU;\n  }\n  u(t3) {\n    const { el: { content: i4 }, parts: s2 } = this._$AD, e5 = (t3?.creationScope ?? w).importNode(i4, true);\n    I.currentNode = e5;\n    let h4 = I.nextNode(), o4 = 0, n5 = 0, r4 = s2[0];\n    for (; void 0 !== r4; ) {\n      if (o4 === r4.index) {\n        let i5;\n        2 === r4.type ? i5 = new et(h4, h4.nextSibling, this, t3) : 1 === r4.type ? i5 = new r4.ctor(h4, r4.name, r4.strings, this, t3) : 6 === r4.type && (i5 = new K(h4, this, t3)), this._$AV.push(i5), r4 = s2[++n5];\n      }\n      o4 !== r4?.index && (h4 = I.nextNode(), o4++);\n    }\n    return I.currentNode = w, e5;\n  }\n  p(t3) {\n    let i4 = 0;\n    for (const s2 of this._$AV) void 0 !== s2 && (void 0 !== s2.strings ? (s2._$AI(t3, s2, i4), i4 += s2.strings.length - 2) : s2._$AI(t3[i4])), i4++;\n  }\n};\nvar et = class _et {\n  get _$AU() {\n    return this._$AM?._$AU ?? this.v;\n  }\n  constructor(t3, i4, s2, e5) {\n    this.type = 2, this._$AH = D, this._$AN = void 0, this._$AA = t3, this._$AB = i4, this._$AM = s2, this.options = e5, this.v = e5?.isConnected ?? true;\n  }\n  get parentNode() {\n    let t3 = this._$AA.parentNode;\n    const i4 = this._$AM;\n    return void 0 !== i4 && 11 === t3?.nodeType && (t3 = i4.parentNode), t3;\n  }\n  get startNode() {\n    return this._$AA;\n  }\n  get endNode() {\n    return this._$AB;\n  }\n  _$AI(t3, i4 = this) {\n    t3 = z(this, t3, i4), st(t3) ? t3 === D || null == t3 || \"\" === t3 ? (this._$AH !== D && this._$AR(), this._$AH = D) : t3 !== this._$AH && t3 !== R && this._(t3) : void 0 !== t3._$litType$ ? this.$(t3) : void 0 !== t3.nodeType ? this.T(t3) : $(t3) ? this.k(t3) : this._(t3);\n  }\n  O(t3) {\n    return this._$AA.parentNode.insertBefore(t3, this._$AB);\n  }\n  T(t3) {\n    this._$AH !== t3 && (this._$AR(), this._$AH = this.O(t3));\n  }\n  _(t3) {\n    this._$AH !== D && st(this._$AH) ? this._$AA.nextSibling.data = t3 : this.T(w.createTextNode(t3)), this._$AH = t3;\n  }\n  $(t3) {\n    const { values: i4, _$litType$: s2 } = t3, e5 = \"number\" == typeof s2 ? this._$AC(t3) : (void 0 === s2.el && (s2.el = B.createElement(N(s2.h, s2.h[0]), this.options)), s2);\n    if (this._$AH?._$AD === e5) this._$AH.p(i4);\n    else {\n      const t4 = new F(e5, this), s3 = t4.u(this.options);\n      t4.p(i4), this.T(s3), this._$AH = t4;\n    }\n  }\n  _$AC(t3) {\n    let i4 = V.get(t3.strings);\n    return void 0 === i4 && V.set(t3.strings, i4 = new B(t3)), i4;\n  }\n  k(t3) {\n    g(this._$AH) || (this._$AH = [], this._$AR());\n    const i4 = this._$AH;\n    let s2, e5 = 0;\n    for (const h4 of t3) e5 === i4.length ? i4.push(s2 = new _et(this.O(lt()), this.O(lt()), this, this.options)) : s2 = i4[e5], s2._$AI(h4), e5++;\n    e5 < i4.length && (this._$AR(s2 && s2._$AB.nextSibling, e5), i4.length = e5);\n  }\n  _$AR(t3 = this._$AA.nextSibling, i4) {\n    for (this._$AP?.(false, true, i4); t3 && t3 !== this._$AB; ) {\n      const i5 = t3.nextSibling;\n      t3.remove(), t3 = i5;\n    }\n  }\n  setConnected(t3) {\n    void 0 === this._$AM && (this.v = t3, this._$AP?.(t3));\n  }\n};\nvar G = class {\n  get tagName() {\n    return this.element.tagName;\n  }\n  get _$AU() {\n    return this._$AM._$AU;\n  }\n  constructor(t3, i4, s2, e5, h4) {\n    this.type = 1, this._$AH = D, this._$AN = void 0, this.element = t3, this.name = i4, this._$AM = e5, this.options = h4, s2.length > 2 || \"\" !== s2[0] || \"\" !== s2[1] ? (this._$AH = Array(s2.length - 1).fill(new String()), this.strings = s2) : this._$AH = D;\n  }\n  _$AI(t3, i4 = this, s2, e5) {\n    const h4 = this.strings;\n    let o4 = false;\n    if (void 0 === h4) t3 = z(this, t3, i4, 0), o4 = !st(t3) || t3 !== this._$AH && t3 !== R, o4 && (this._$AH = t3);\n    else {\n      const e6 = t3;\n      let n5, r4;\n      for (t3 = h4[0], n5 = 0; n5 < h4.length - 1; n5++) r4 = z(this, e6[s2 + n5], i4, n5), r4 === R && (r4 = this._$AH[n5]), o4 ||= !st(r4) || r4 !== this._$AH[n5], r4 === D ? t3 = D : t3 !== D && (t3 += (r4 ?? \"\") + h4[n5 + 1]), this._$AH[n5] = r4;\n    }\n    o4 && !e5 && this.j(t3);\n  }\n  j(t3) {\n    t3 === D ? this.element.removeAttribute(this.name) : this.element.setAttribute(this.name, t3 ?? \"\");\n  }\n};\nvar Y = class extends G {\n  constructor() {\n    super(...arguments), this.type = 3;\n  }\n  j(t3) {\n    this.element[this.name] = t3 === D ? void 0 : t3;\n  }\n};\nvar Z = class extends G {\n  constructor() {\n    super(...arguments), this.type = 4;\n  }\n  j(t3) {\n    this.element.toggleAttribute(this.name, !!t3 && t3 !== D);\n  }\n};\nvar q = class extends G {\n  constructor(t3, i4, s2, e5, h4) {\n    super(t3, i4, s2, e5, h4), this.type = 5;\n  }\n  _$AI(t3, i4 = this) {\n    if ((t3 = z(this, t3, i4, 0) ?? D) === R) return;\n    const s2 = this._$AH, e5 = t3 === D && s2 !== D || t3.capture !== s2.capture || t3.once !== s2.once || t3.passive !== s2.passive, h4 = t3 !== D && (s2 === D || e5);\n    e5 && this.element.removeEventListener(this.name, this, s2), h4 && this.element.addEventListener(this.name, this, t3), this._$AH = t3;\n  }\n  handleEvent(t3) {\n    \"function\" == typeof this._$AH ? this._$AH.call(this.options?.host ?? this.element, t3) : this._$AH.handleEvent(t3);\n  }\n};\nvar K = class {\n  constructor(t3, i4, s2) {\n    this.element = t3, this.type = 6, this._$AN = void 0, this._$AM = i4, this.options = s2;\n  }\n  get _$AU() {\n    return this._$AM._$AU;\n  }\n  _$AI(t3) {\n    z(this, t3);\n  }\n};\nvar Re = n3.litHtmlPolyfillSupport;\nRe?.(B, et), (n3.litHtmlVersions ??= []).push(\"3.2.0\");\nvar Q = (t3, i4, s2) => {\n  const e5 = s2?.renderBefore ?? i4;\n  let h4 = e5._$litPart$;\n  if (void 0 === h4) {\n    const t4 = s2?.renderBefore ?? null;\n    e5._$litPart$ = h4 = new et(i4.insertBefore(lt(), t4), t4, void 0, s2 ?? {});\n  }\n  return h4._$AI(t3), h4;\n};\n\n// node_modules/lit-element/lit-element.js\nvar h3 = class extends b {\n  constructor() {\n    super(...arguments), this.renderOptions = { host: this }, this.o = void 0;\n  }\n  createRenderRoot() {\n    const t3 = super.createRenderRoot();\n    return this.renderOptions.renderBefore ??= t3.firstChild, t3;\n  }\n  update(t3) {\n    const e5 = this.render();\n    this.hasUpdated || (this.renderOptions.isConnected = this.isConnected), super.update(t3), this.o = Q(e5, this.renderRoot, this.renderOptions);\n  }\n  connectedCallback() {\n    super.connectedCallback(), this.o?.setConnected(true);\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback(), this.o?.setConnected(false);\n  }\n  render() {\n    return R;\n  }\n};\nh3._$litElement$ = true, h3[\"finalized\"] = true, globalThis.litElementHydrateSupport?.({ LitElement: h3 });\nvar f3 = globalThis.litElementPolyfillSupport;\nf3?.({ LitElement: h3 });\n(globalThis.litElementVersions ??= []).push(\"4.1.0\");\n\n// node_modules/@lit/reactive-element/decorators/property.js\nvar o3 = { attribute: true, type: String, converter: u, reflect: false, hasChanged: f };\nvar r3 = (t3 = o3, e5, r4) => {\n  const { kind: n5, metadata: i4 } = r4;\n  let s2 = globalThis.litPropertyMetadata.get(i4);\n  if (void 0 === s2 && globalThis.litPropertyMetadata.set(i4, s2 = /* @__PURE__ */ new Map()), s2.set(r4.name, t3), \"accessor\" === n5) {\n    const { name: o4 } = r4;\n    return { set(r5) {\n      const n6 = e5.get.call(this);\n      e5.set.call(this, r5), this.requestUpdate(o4, n6, t3);\n    }, init(e6) {\n      return void 0 !== e6 && this.P(o4, void 0, t3), e6;\n    } };\n  }\n  if (\"setter\" === n5) {\n    const { name: o4 } = r4;\n    return function(r5) {\n      const n6 = this[o4];\n      e5.call(this, r5), this.requestUpdate(o4, n6, t3);\n    };\n  }\n  throw Error(\"Unsupported decorator location: \" + n5);\n};\nfunction n4(t3) {\n  return (e5, o4) => \"object\" == typeof o4 ? r3(t3, e5, o4) : ((t4, e6, o5) => {\n    const r4 = e6.hasOwnProperty(o5);\n    return e6.constructor.createProperty(o5, r4 ? { ...t4, wrapped: true } : t4), r4 ? Object.getOwnPropertyDescriptor(e6, o5) : void 0;\n  })(t3, e5, o4);\n}\n\n// js/ipywidgets_styles.ts\nvar legacyStyles = i`\n    .legacy-button {\n        align-items: center;\n        background-color: var(--jp-layout-color2);\n        border-width: 0;\n        box-shadow: none;\n        color: var(--jp-ui-font-color1);\n        cursor: pointer;\n        display: flex;\n        font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n        font-size: var(--jp-widgets-font-size);\n        justify-content: center;\n        line-height: var(--jp-widgets-inline-height);\n        padding: 0;\n        user-select: none;\n    }\n\n    .legacy-button.primary {\n        background-color: var(--jp-brand-color1);\n        color: var(--jp-ui-inverse-font-color1);\n    }\n\n    .legacy-button:hover:enabled,\n    .legacy-button:focus:enabled {\n        box-shadow: 0 2px 2px 0\n                rgba(0, 0, 0, var(--md-shadow-key-penumbra-opacity)),\n            0 3px 1px -2px rgba(0, 0, 0, var(--md-shadow-key-umbra-opacity)),\n            0 1px 5px 0 rgba(0, 0, 0, var(--md-shadow-ambient-shadow-opacity));\n    }\n\n    .legacy-slider {\n        -webkit-appearance: none;\n        appearance: none;\n        background: var(--jp-layout-color3);\n        border-radius: 3px;\n        height: 4px;\n        outline: none;\n    }\n\n    .legacy-slider::-webkit-slider-thumb,\n    .legacy-slider::-moz-range-thumb {\n        -moz-appearance: none;\n        -webkit-appearance: none;\n        appearance: none;\n        border-radius: 50%;\n        cursor: pointer;\n        height: var(--jp-widgets-slider-handle-size);\n        width: var(--jp-widgets-slider-handle-size);\n    }\n\n    .legacy-text {\n        color: var(--jp-widgets-label-color);\n        font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n        font-size: var(--jp-widgets-font-size);\n        height: var(--jp-widgets-inline-height);\n        line-height: var(--jp-widgets-inline-height);\n        vertical-align: middle;\n    }\n\n    .legacy-select {\n        -moz-appearance: none;\n        -webkit-appearance: none;\n        appearance: none;\n        background-color: var(--jp-widgets-input-background-color);\n        background-image: var(--jp-widgets-dropdown-arrow);\n        background-position: right center;\n        background-repeat: no-repeat;\n        background-size: 20px;\n        border-radius: 0;\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        box-shadow: none;\n        box-sizing: border-box;\n        color: var(--jp-widgets-input-color);\n        flex: 1 1 var(--jp-widgets-inline-width-short);\n        font-size: var(--jp-widgets-font-size);\n        height: 28px;\n        line-height: 28px;\n        min-width: 0;\n        outline: none !important;\n        padding-left: calc(var(--jp-widgets-input-padding)* 2);\n        padding-right: 20px;\n        vertical-align: top;\n    }\n\n    .legacy-select[disabled] {\n        opacity: 0.4;\n        cursor: not-allowed;\n    }\n\n    .legacy-text-input {\n        background: var(--jp-widgets-input-background-color);\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        box-sizing: border-box;\n        color: var(--jp-widgets-input-color);\n        flex-grow: 1;\n        flex-shrink: 1;\n        font-size: var(--jp-widgets-font-size);\n        height: var(--jp-widgets-inline-height);\n        line-height: var(--jp-widgets-inline-height);\n        min-width: 0;\n        outline: none !important;\n        padding: var(--jp-widgets-input-padding) calc(var(--jp-widgets-input-padding) * 2);\n    }\n\n    .legacy-text-input:disabled {\n        opacity: var(--jp-widgets-disabled-opacity);\n    }\n\n    .legacy-color {\n        align-self: stretch;\n        background: var(--jp-widgets-input-background-color);\n        border-left: none;\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        box-sizing: border-box;\n        color: var(--jp-widgets-input-color);\n        flex-grow: 0;\n        flex-shrink: 0;\n        height: var(--jp-widgets-inline-height);\n        outline: none !important;\n        padding: 0 2px;\n        width: var(--jp-widgets-inline-height);\n    }\n\n    .legacy-radio {\n        margin: 0;\n        vertical-align: middle;\n    }\n\n    .legacy-button.active {\n        background-color: var(--colab-primary-surface-color, --jp-layout-color3);\n        color: var(--jp-ui-font-color1);\n        box-shadow: 0 4px 5px 0 rgba(0, 0, 0, var(--md-shadow-key-penumbra-opacity)),\n                    0 1px 10px 0 rgba(0, 0, 0, var(--md-shadow-ambient-shadow-opacity)),\n                    0 2px 4px -1px rgba(0, 0, 0, var(--md-shadow-key-umbra-opacity));\n    }\n\n    .legacy-button.primary {\n        background-color: var(--jp-brand-color1);\n        color: var(--jp-ui-inverse-font-color1);\n    }\n\n    .legacy-button.primary.active {\n        background-color: var(--jp-brand-color0);\n        color: var(--jp-ui-inverse-font-color0);\n    }\n\n    .legacy-button.active {\n        background-color: var(--colab-primary-surface-color, --jp-layout-color3);\n        color: var(--jp-ui-font-color1);\n        box-shadow: 0 4px 5px 0 rgba(0, 0, 0, var(--md-shadow-key-penumbra-opacity)),\n                    0 1px 10px 0 rgba(0, 0, 0, var(--md-shadow-ambient-shadow-opacity)),\n                    0 2px 4px -1px rgba(0, 0, 0, var(--md-shadow-key-umbra-opacity));\n    }\n\n    .legacy-button.primary {\n        background-color: var(--jp-brand-color1);\n        color: var(--jp-ui-inverse-font-color1);\n    }\n\n    .legacy-button.primary.active {\n        background-color: var(--jp-brand-color0);\n        color: var(--jp-ui-inverse-font-color0);\n    }\n\n    .legacy-select {\n        -moz-appearance: none;\n        -webkit-appearance: none;\n        appearance: none;\n        background-color: var(--jp-widgets-input-background-color);\n        background-image: var(--jp-widgets-dropdown-arrow);\n        background-position: right center;\n        background-repeat: no-repeat;\n        background-size: 20px;\n        border-radius: 0;\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        box-shadow: none;\n        box-sizing: border-box;\n        color: var(--jp-widgets-input-color);\n        flex: 1 1 var(--jp-widgets-inline-width-short);\n        font-size: var(--jp-widgets-font-size);\n        height: inherit;\n        min-width: 0;\n        outline: none !important;\n        padding-left: calc(var(--jp-widgets-input-padding)* 2);\n        padding-right: 20px;\n        vertical-align: top;\n    }\n\n    .legacy-input {\n        box-sizing: border-box;\n        background-color: var(--colab-primary-surface-color, --jp-widgets-input-background-color);\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        color: var(--jp-widgets-input-color);\n        flex-grow: 1;\n        flex-shrink: 1;\n        font-size: var(--jp-widgets-font-size);\n        min-width: 0;\n        outline: none !important;\n        padding: var(--jp-widgets-input-padding) calc(var(--jp-widgets-input-padding)* 2);\n        height: var(--jp-widgets-inline-height);\n        line-height: var(--jp-widgets-inline-height);\n    }\n`;\n\n// js/utils.ts\nasync function unpackModels(modelIds, manager) {\n  return Promise.all(\n    modelIds.map((id) => manager.get_model(id.slice(\"IPY_MODEL_\".length)))\n  );\n}\nfunction loadFonts() {\n  if (!document.querySelector(\".custom-fonts\")) {\n    const styleElement = document.createElement(\"style\");\n    styleElement.classList.add(\"custom-fonts\");\n    styleElement.textContent = '@import \"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined\";';\n    document.body.appendChild(styleElement);\n  }\n}\nasync function updateChildren(container, model, property = \"children\") {\n  let children = model.get(property);\n  if (!Array.isArray(children)) {\n    children = [children];\n  }\n  const child_models = await unpackModels(children, model.widget_manager);\n  const child_views = await Promise.all(\n    child_models.map((model2) => model2.widget_manager.create_view(model2))\n  );\n  container.innerHTML = ``;\n  for (const child_view of child_views) {\n    container.appendChild(child_view.el);\n  }\n}\nfunction reverseMap(map) {\n  const reversedMap = /* @__PURE__ */ new Map();\n  for (const [key, value] of map.entries()) {\n    if (value != null) {\n      reversedMap.set(value, key);\n    }\n  }\n  return reversedMap;\n}\n\n// js/lit_widget.ts\nvar LitWidget = class extends h3 {\n  constructor() {\n    super(...arguments);\n    this._model = void 0;\n  }\n  onCustomMessage(_msg) {\n  }\n  viewNameToModelName() {\n    return reverseMap(this.modelNameToViewName());\n  }\n  set model(model) {\n    this._model = model;\n    for (const [modelKey, widgetKey] of this.modelNameToViewName()) {\n      if (widgetKey) {\n        this[widgetKey] = model.get(modelKey);\n        model.on(`change:${String(modelKey)}`, () => {\n          this[widgetKey] = model.get(modelKey);\n        });\n      }\n    }\n    model.on(\"msg:custom\", (msg) => {\n      this.onCustomMessage?.(msg);\n    });\n  }\n  get model() {\n    return this._model;\n  }\n  updated(changedProperties) {\n    const viewToModelMap = this.viewNameToModelName();\n    for (const [viewProp, _2] of changedProperties) {\n      const castViewProp = viewProp;\n      if (viewToModelMap.has(castViewProp)) {\n        const modelProp = viewToModelMap.get(castViewProp);\n        this._model?.set(\n          modelProp,\n          this[castViewProp]\n        );\n      }\n    }\n    this._model?.save_changes();\n  }\n};\n\n// node_modules/lit-html/directive.js\nvar t2 = { ATTRIBUTE: 1, CHILD: 2, PROPERTY: 3, BOOLEAN_ATTRIBUTE: 4, EVENT: 5, ELEMENT: 6 };\nvar e4 = (t3) => (...e5) => ({ _$litDirective$: t3, values: e5 });\nvar i3 = class {\n  constructor(t3) {\n  }\n  get _$AU() {\n    return this._$AM._$AU;\n  }\n  _$AT(t3, e5, i4) {\n    this.t = t3, this._$AM = e5, this.i = i4;\n  }\n  _$AS(t3, e5) {\n    return this.update(t3, e5);\n  }\n  update(t3, e5) {\n    return this.render(...e5);\n  }\n};\n\n// node_modules/lit-html/directives/class-map.js\nvar Rt = e4(class extends i3 {\n  constructor(s2) {\n    if (super(s2), s2.type !== t2.ATTRIBUTE || \"class\" !== s2.name || s2.strings?.length > 2) throw Error(\"`classMap()` can only be used in the `class` attribute and must be the only part in the attribute.\");\n  }\n  render(t3) {\n    return \" \" + Object.keys(t3).filter(((s2) => t3[s2])).join(\" \") + \" \";\n  }\n  update(t3, [s2]) {\n    if (void 0 === this.st) {\n      this.st = /* @__PURE__ */ new Set(), void 0 !== t3.strings && (this.nt = new Set(t3.strings.join(\" \").split(/\\s/).filter(((t4) => \"\" !== t4))));\n      for (const t4 in s2) s2[t4] && !this.nt?.has(t4) && this.st.add(t4);\n      return this.render(s2);\n    }\n    const i4 = t3.element.classList;\n    for (const t4 of this.st) t4 in s2 || (i4.remove(t4), this.st.delete(t4));\n    for (const t4 in s2) {\n      const r4 = !!s2[t4];\n      r4 === this.st.has(t4) || this.nt?.has(t4) || (r4 ? (i4.add(t4), this.st.add(t4)) : (i4.remove(t4), this.st.delete(t4)));\n    }\n    return R;\n  }\n});\n\n// js/styles.ts\nvar materialStyles = i`\n    @font-face {\n        font-family: \"Material Symbols Outlined\";\n        font-style: normal;\n        font-weight: 400;\n        src: url(https://fonts.gstatic.com/s/materialsymbolsoutlined/v205/kJF1BvYX7BgnkSrUwT8OhrdQw4oELdPIeeII9v6oDMzByHX9rA6RzaxHMPdY43zj-jCxv3fzvRNU22ZXGJpEpjC_1v-p_4MrImHCIJIZrDCvHOejbd5zrDAt.woff2)\n            format(\"woff2\");\n    }\n\n    .material-symbols-outlined {\n        -webkit-font-feature-settings: \"liga\";\n        -webkit-font-smoothing: antialiased;\n        direction: ltr;\n        display: inline-block;\n        font-family: \"Material Symbols Outlined\";\n        font-style: normal;\n        font-weight: normal;\n        letter-spacing: normal;\n        line-height: 1;\n        text-transform: none;\n        white-space: nowrap;\n        word-wrap: normal;\n    }\n`;\nvar flexStyles = i`\n    .vertical-flex {\n        display: flex;\n        flex-direction: column;\n        gap: 8px;\n    }\n\n    .horizontal-flex {\n        align-items: center;\n        display: flex;\n        flex-wrap: nowrap;\n        gap: 8px;\n    }\n\n    input:not([type=\"radio\"]):not([type=\"checkbox\"]) {\n        width: 100%;\n    }\n\n    select {\n        width: 100%;\n    }\n\n    .horizontal-flex .legacy-text {\n        flex-shrink: 0;\n    }\n`;\n\n// js/container.ts\nvar Container = class extends LitWidget {\n  constructor() {\n    super(...arguments);\n    this.icon = \"\";\n    this.title = \"\";\n    this.collapsed = false;\n    this.hideCloseButton = false;\n    this.compactMode = false;\n    this.noHeader = false;\n    this.reverseHeader = false;\n  }\n  static get componentName() {\n    return `widget-container`;\n  }\n  static {\n    this.styles = [\n      legacyStyles,\n      materialStyles,\n      i`\n            .container {\n                background: var(--jp-layout-color1);\n                border-radius: 4.5px;\n                box-shadow: 4px 5px 8px 0px #9e9e9e;\n            }\n\n            div {\n                background-color: var(--colab-primary-surface-color, --jp-layout-color1, white);\n            }\n\n            .header {\n                display: flex;\n                gap: 4px;\n                padding: 4px;\n            }\n\n            .reversed {\n                flex-direction: row-reverse;\n            }\n\n            .icon {\n                align-items: center;\n                display: flex;\n                font-size: 20px;\n                height: 28px;\n                justify-content: center;\n                padding: 0 4px;\n            }\n\n            .widget-container {\n                padding: 8px 12px 12px 12px;\n            }\n\n            .hidden {\n                display: none;\n            }\n\n            .header-button {\n                font-size: 16px;\n                height: 28px;\n                width: 28px;\n            }\n\n            .compact-header-button {\n                background: transparent;\n                font-size: 16px;\n                height: 28px;\n                width: 28px;\n            }\n\n            .header-text {\n                align-content: center;\n                flex-grow: 1;\n                padding: 0 12px 0 0;\n            }\n\n            .left-padding {\n                padding-left: 8px;\n            }\n        `\n    ];\n  }\n  modelNameToViewName() {\n    return /* @__PURE__ */ new Map([\n      [\"icon\", \"icon\"],\n      [\"collapsed\", \"collapsed\"],\n      [\"title\", \"title\"],\n      [\"hide_close_button\", \"hideCloseButton\"]\n    ]);\n  }\n  render() {\n    return ke`\n            <div class=\"container\">\n                ${this.noHeader ? D : this.renderHeader()}\n                <div class=\"widget-container ${this.collapsed ? \"hidden\" : \"\"}\">\n                    <slot></slot>\n                </div>\n            </div>\n        `;\n  }\n  renderHeader() {\n    return this.compactMode ? this.renderCompactHeader() : ke`\n            <div class=\"header ${this.reverseHeader ? \"reversed\" : \"\"}\">\n                ${this.renderIcon()}\n                ${this.title ? this.renderTitle() : D}\n                ${this.renderCollapseButton()}\n                ${this.renderCloseButton()}\n            </div>`;\n  }\n  renderCompactHeader() {\n    return ke`<div class=\"header ${this.reverseHeader ? \"reversed\" : \"\"}\">\n            ${this.renderCollapseButton()}\n            ${this.title && !this.collapsed ? this.renderTitle() : D}\n            ${this.renderCloseButton()}\n        </div>`;\n  }\n  renderCloseButton() {\n    if (this.hideCloseButton) {\n      return D;\n    }\n    return ke`\n            <button\n                class=\"legacy-button primary header-button\"\n                @click=\"${this.onCloseButtonClicked}\"\n            >\n                <span class=\"material-symbols-outlined\">&#xe5cd;</span>\n            </button>\n        `;\n  }\n  renderTitle() {\n    return ke`<span\n            class=\"${Rt({\n      \"legacy-text\": true,\n      \"header-text\": true,\n      \"left-padding\": this.compactMode && this.title && !this.reverseHeader\n    })}\"\n            >${this.title}</span\n        >`;\n  }\n  onCloseButtonClicked() {\n    this.dispatchEvent(new CustomEvent(\"close-clicked\", {}));\n  }\n  onCollapseToggled() {\n    this.collapsed = !this.collapsed;\n    this.dispatchEvent(new CustomEvent(\"collapse-clicked\", {}));\n  }\n  renderIcon() {\n    return ke`<span class=\"icon material-symbols-outlined\">\n                        ${this.icon}\n                    </span>`;\n  }\n  renderCollapseButton() {\n    let icon;\n    if (this.compactMode) {\n      icon = this.renderIcon();\n    } else if (this.collapsed) {\n      icon = ke`<span class=\"material-symbols-outlined\"\n                >&#xf830;</span\n            >`;\n    } else {\n      icon = ke`<span class=\"material-symbols-outlined\">&#xf507;</span>`;\n    }\n    return ke`<button\n            class=\"${Rt({\n      \"legacy-button\": true,\n      \"header-button\": !this.compactMode,\n      \"compact-header-button\": this.compactMode,\n      \"active\": !this.collapsed\n    })}\"\n            class=\"legacy-button header-button\"\n            @click=\"${this.onCollapseToggled}\"\n        >\n            ${icon}\n        </button>`;\n  }\n};\n__decorateClass([\n  n4({ type: String })\n], Container.prototype, \"icon\", 2);\n__decorateClass([\n  n4({ type: String })\n], Container.prototype, \"title\", 2);\n__decorateClass([\n  n4({ type: Boolean })\n], Container.prototype, \"collapsed\", 2);\n__decorateClass([\n  n4({ type: Boolean })\n], Container.prototype, \"hideCloseButton\", 2);\n__decorateClass([\n  n4({ type: Boolean })\n], Container.prototype, \"compactMode\", 2);\n__decorateClass([\n  n4({ type: Boolean })\n], Container.prototype, \"noHeader\", 2);\n__decorateClass([\n  n4({ type: Boolean })\n], Container.prototype, \"reverseHeader\", 2);\nif (!customElements.get(Container.componentName)) {\n  customElements.define(Container.componentName, Container);\n}\n\n// js/layer_manager.ts\nvar LayerManager = class extends LitWidget {\n  constructor() {\n    super(...arguments);\n    this.visible = false;\n    this.tabIndex = 0;\n    this.collapsed = true;\n  }\n  static get componentName() {\n    return `layer-manager`;\n  }\n  static {\n    this.styles = [\n      legacyStyles,\n      i`\n            .row {\n                align-items: center;\n                display: flex;\n                gap: 4px;\n                height: 28px;\n            }\n\n            .visibility-checkbox {\n                margin: 2px;\n            }\n\n            .layer-manager-rows {\n                display: flex;\n                flex-direction: column;\n                gap: 10px;\n            }\n        `\n    ];\n  }\n  modelNameToViewName() {\n    return /* @__PURE__ */ new Map([\n      [\"children\", null],\n      [\"visible\", \"visible\"]\n    ]);\n  }\n  render() {\n    return ke`\n            <widget-container\n                icon=\"layers\"\n                title=\"\"\n                .collapsed=\"${this.collapsed}\"\n                .hideCloseButton=\"${true}\"\n                .compactMode=\"${true}\"\n                .reverseHeader=\"${true}\"\n            >\n                <div class=\"container\">\n                    <div class=\"layer-manager-rows\">\n                        <div class=\"row\">\n                            <input\n                                type=\"checkbox\"\n                                class=\"visibility-checkbox\"\n                                .checked=\"${this.visible}\"\n                                @change=\"${this.onLayerVisibilityChanged}\"\n                            />\n                            <span\n                                class=\"legacy-text all-layers-text\"\n                                @click=\"${this.onLayerVisibilityChanged}\"\n                            >\n                                All layers on/off</span\n                            >\n                        </div>\n                        <slot></slot>\n                    </div>\n                </div>\n            </widget-container>\n        `;\n  }\n  onLayerVisibilityChanged(_event) {\n    this.visible = !this.visible;\n  }\n};\n__decorateClass([\n  n4()\n], LayerManager.prototype, \"visible\", 2);\n__decorateClass([\n  n4()\n], LayerManager.prototype, \"tabIndex\", 2);\n__decorateClass([\n  n4()\n], LayerManager.prototype, \"collapsed\", 2);\nif (!customElements.get(LayerManager.componentName)) {\n  customElements.define(LayerManager.componentName, LayerManager);\n}\nasync function render({ model, el }) {\n  loadFonts();\n  const manager = document.createElement(LayerManager.componentName);\n  manager.model = model;\n  el.appendChild(manager);\n  updateChildren(manager, model);\n  model.on(\"change:children\", () => {\n    updateChildren(manager, model);\n  });\n}\nvar layer_manager_default = { render };\nexport {\n  LayerManager,\n  layer_manager_default as default\n};\n/*! Bundled license information:\n\n@lit/reactive-element/css-tag.js:\n  (**\n   * @license\n   * Copyright 2019 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n\n@lit/reactive-element/reactive-element.js:\nlit-html/lit-html.js:\nlit-element/lit-element.js:\n@lit/reactive-element/decorators/custom-element.js:\n@lit/reactive-element/decorators/property.js:\n@lit/reactive-element/decorators/state.js:\n@lit/reactive-element/decorators/event-options.js:\n@lit/reactive-element/decorators/base.js:\n@lit/reactive-element/decorators/query.js:\n@lit/reactive-element/decorators/query-all.js:\n@lit/reactive-element/decorators/query-async.js:\n@lit/reactive-element/decorators/query-assigned-nodes.js:\nlit-html/directive.js:\n  (**\n   * @license\n   * Copyright 2017 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n\nlit-html/is-server.js:\n  (**\n   * @license\n   * Copyright 2022 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n\n@lit/reactive-element/decorators/query-assigned-elements.js:\n  (**\n   * @license\n   * Copyright 2021 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n\nlit-html/directives/class-map.js:\n  (**\n   * @license\n   * Copyright 2018 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n*/\n",
              "_model_module": "anywidget",
              "_model_module_version": "~0.9.*",
              "_model_name": "AnyModel",
              "_view_count": null,
              "_view_module": "anywidget",
              "_view_module_version": "~0.9.*",
              "_view_name": "AnyView",
              "children": [
                "IPY_MODEL_5aa638b0302248cd87912ae3dcbe2cd2",
                "IPY_MODEL_9fb60667bc284246bca52ee205161aac"
              ],
              "layout": "IPY_MODEL_7ddc1e0f7faa4b4b82634a434d4f84d0",
              "visible": true
            }
          },
          "ef2e409694784d638d5d9f36f7142797": {
            "model_module": "anywidget",
            "model_name": "AnyModel",
            "model_module_version": "~0.9.*",
            "state": {
              "_anywidget_id": "geemap.toolbar.Toolbar",
              "_dom_classes": [],
              "_esm": "var __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __decorateClass = (decorators, target, key, kind) => {\n  var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;\n  for (var i4 = decorators.length - 1, decorator; i4 >= 0; i4--)\n    if (decorator = decorators[i4])\n      result = (kind ? decorator(target, key, result) : decorator(result)) || result;\n  if (kind && result) __defProp(target, key, result);\n  return result;\n};\n\n// node_modules/@lit/reactive-element/css-tag.js\nvar t = globalThis;\nvar e = t.ShadowRoot && (void 0 === t.ShadyCSS || t.ShadyCSS.nativeShadow) && \"adoptedStyleSheets\" in Document.prototype && \"replace\" in CSSStyleSheet.prototype;\nvar s = /* @__PURE__ */ Symbol();\nvar o = /* @__PURE__ */ new WeakMap();\nvar n = class {\n  constructor(t3, e6, o5) {\n    if (this._$cssResult$ = true, o5 !== s) throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");\n    this.cssText = t3, this.t = e6;\n  }\n  get styleSheet() {\n    let t3 = this.o;\n    const s2 = this.t;\n    if (e && void 0 === t3) {\n      const e6 = void 0 !== s2 && 1 === s2.length;\n      e6 && (t3 = o.get(s2)), void 0 === t3 && ((this.o = t3 = new CSSStyleSheet()).replaceSync(this.cssText), e6 && o.set(s2, t3));\n    }\n    return t3;\n  }\n  toString() {\n    return this.cssText;\n  }\n};\nvar r = (t3) => new n(\"string\" == typeof t3 ? t3 : t3 + \"\", void 0, s);\nvar i = (t3, ...e6) => {\n  const o5 = 1 === t3.length ? t3[0] : e6.reduce(((e7, s2, o6) => e7 + ((t4) => {\n    if (true === t4._$cssResult$) return t4.cssText;\n    if (\"number\" == typeof t4) return t4;\n    throw Error(\"Value passed to 'css' function must be a 'css' function result: \" + t4 + \". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\");\n  })(s2) + t3[o6 + 1]), t3[0]);\n  return new n(o5, t3, s);\n};\nvar S = (s2, o5) => {\n  if (e) s2.adoptedStyleSheets = o5.map(((t3) => t3 instanceof CSSStyleSheet ? t3 : t3.styleSheet));\n  else for (const e6 of o5) {\n    const o6 = document.createElement(\"style\"), n5 = t.litNonce;\n    void 0 !== n5 && o6.setAttribute(\"nonce\", n5), o6.textContent = e6.cssText, s2.appendChild(o6);\n  }\n};\nvar c = e ? (t3) => t3 : (t3) => t3 instanceof CSSStyleSheet ? ((t4) => {\n  let e6 = \"\";\n  for (const s2 of t4.cssRules) e6 += s2.cssText;\n  return r(e6);\n})(t3) : t3;\n\n// node_modules/@lit/reactive-element/reactive-element.js\nvar { is: i2, defineProperty: e2, getOwnPropertyDescriptor: r2, getOwnPropertyNames: h, getOwnPropertySymbols: o2, getPrototypeOf: n2 } = Object;\nvar a = globalThis;\nvar c2 = a.trustedTypes;\nvar l = c2 ? c2.emptyScript : \"\";\nvar p = a.reactiveElementPolyfillSupport;\nvar d = (t3, s2) => t3;\nvar u = { toAttribute(t3, s2) {\n  switch (s2) {\n    case Boolean:\n      t3 = t3 ? l : null;\n      break;\n    case Object:\n    case Array:\n      t3 = null == t3 ? t3 : JSON.stringify(t3);\n  }\n  return t3;\n}, fromAttribute(t3, s2) {\n  let i4 = t3;\n  switch (s2) {\n    case Boolean:\n      i4 = null !== t3;\n      break;\n    case Number:\n      i4 = null === t3 ? null : Number(t3);\n      break;\n    case Object:\n    case Array:\n      try {\n        i4 = JSON.parse(t3);\n      } catch (t4) {\n        i4 = null;\n      }\n  }\n  return i4;\n} };\nvar f = (t3, s2) => !i2(t3, s2);\nvar y = { attribute: true, type: String, converter: u, reflect: false, hasChanged: f };\nSymbol.metadata ??= /* @__PURE__ */ Symbol(\"metadata\"), a.litPropertyMetadata ??= /* @__PURE__ */ new WeakMap();\nvar b = class extends HTMLElement {\n  static addInitializer(t3) {\n    this._$Ei(), (this.l ??= []).push(t3);\n  }\n  static get observedAttributes() {\n    return this.finalize(), this._$Eh && [...this._$Eh.keys()];\n  }\n  static createProperty(t3, s2 = y) {\n    if (s2.state && (s2.attribute = false), this._$Ei(), this.elementProperties.set(t3, s2), !s2.noAccessor) {\n      const i4 = /* @__PURE__ */ Symbol(), r5 = this.getPropertyDescriptor(t3, i4, s2);\n      void 0 !== r5 && e2(this.prototype, t3, r5);\n    }\n  }\n  static getPropertyDescriptor(t3, s2, i4) {\n    const { get: e6, set: h4 } = r2(this.prototype, t3) ?? { get() {\n      return this[s2];\n    }, set(t4) {\n      this[s2] = t4;\n    } };\n    return { get() {\n      return e6?.call(this);\n    }, set(s3) {\n      const r5 = e6?.call(this);\n      h4.call(this, s3), this.requestUpdate(t3, r5, i4);\n    }, configurable: true, enumerable: true };\n  }\n  static getPropertyOptions(t3) {\n    return this.elementProperties.get(t3) ?? y;\n  }\n  static _$Ei() {\n    if (this.hasOwnProperty(d(\"elementProperties\"))) return;\n    const t3 = n2(this);\n    t3.finalize(), void 0 !== t3.l && (this.l = [...t3.l]), this.elementProperties = new Map(t3.elementProperties);\n  }\n  static finalize() {\n    if (this.hasOwnProperty(d(\"finalized\"))) return;\n    if (this.finalized = true, this._$Ei(), this.hasOwnProperty(d(\"properties\"))) {\n      const t4 = this.properties, s2 = [...h(t4), ...o2(t4)];\n      for (const i4 of s2) this.createProperty(i4, t4[i4]);\n    }\n    const t3 = this[Symbol.metadata];\n    if (null !== t3) {\n      const s2 = litPropertyMetadata.get(t3);\n      if (void 0 !== s2) for (const [t4, i4] of s2) this.elementProperties.set(t4, i4);\n    }\n    this._$Eh = /* @__PURE__ */ new Map();\n    for (const [t4, s2] of this.elementProperties) {\n      const i4 = this._$Eu(t4, s2);\n      void 0 !== i4 && this._$Eh.set(i4, t4);\n    }\n    this.elementStyles = this.finalizeStyles(this.styles);\n  }\n  static finalizeStyles(s2) {\n    const i4 = [];\n    if (Array.isArray(s2)) {\n      const e6 = new Set(s2.flat(1 / 0).reverse());\n      for (const s3 of e6) i4.unshift(c(s3));\n    } else void 0 !== s2 && i4.push(c(s2));\n    return i4;\n  }\n  static _$Eu(t3, s2) {\n    const i4 = s2.attribute;\n    return false === i4 ? void 0 : \"string\" == typeof i4 ? i4 : \"string\" == typeof t3 ? t3.toLowerCase() : void 0;\n  }\n  constructor() {\n    super(), this._$Ep = void 0, this.isUpdatePending = false, this.hasUpdated = false, this._$Em = null, this._$Ev();\n  }\n  _$Ev() {\n    this._$ES = new Promise(((t3) => this.enableUpdating = t3)), this._$AL = /* @__PURE__ */ new Map(), this._$E_(), this.requestUpdate(), this.constructor.l?.forEach(((t3) => t3(this)));\n  }\n  addController(t3) {\n    (this._$EO ??= /* @__PURE__ */ new Set()).add(t3), void 0 !== this.renderRoot && this.isConnected && t3.hostConnected?.();\n  }\n  removeController(t3) {\n    this._$EO?.delete(t3);\n  }\n  _$E_() {\n    const t3 = /* @__PURE__ */ new Map(), s2 = this.constructor.elementProperties;\n    for (const i4 of s2.keys()) this.hasOwnProperty(i4) && (t3.set(i4, this[i4]), delete this[i4]);\n    t3.size > 0 && (this._$Ep = t3);\n  }\n  createRenderRoot() {\n    const t3 = this.shadowRoot ?? this.attachShadow(this.constructor.shadowRootOptions);\n    return S(t3, this.constructor.elementStyles), t3;\n  }\n  connectedCallback() {\n    this.renderRoot ??= this.createRenderRoot(), this.enableUpdating(true), this._$EO?.forEach(((t3) => t3.hostConnected?.()));\n  }\n  enableUpdating(t3) {\n  }\n  disconnectedCallback() {\n    this._$EO?.forEach(((t3) => t3.hostDisconnected?.()));\n  }\n  attributeChangedCallback(t3, s2, i4) {\n    this._$AK(t3, i4);\n  }\n  _$EC(t3, s2) {\n    const i4 = this.constructor.elementProperties.get(t3), e6 = this.constructor._$Eu(t3, i4);\n    if (void 0 !== e6 && true === i4.reflect) {\n      const r5 = (void 0 !== i4.converter?.toAttribute ? i4.converter : u).toAttribute(s2, i4.type);\n      this._$Em = t3, null == r5 ? this.removeAttribute(e6) : this.setAttribute(e6, r5), this._$Em = null;\n    }\n  }\n  _$AK(t3, s2) {\n    const i4 = this.constructor, e6 = i4._$Eh.get(t3);\n    if (void 0 !== e6 && this._$Em !== e6) {\n      const t4 = i4.getPropertyOptions(e6), r5 = \"function\" == typeof t4.converter ? { fromAttribute: t4.converter } : void 0 !== t4.converter?.fromAttribute ? t4.converter : u;\n      this._$Em = e6, this[e6] = r5.fromAttribute(s2, t4.type), this._$Em = null;\n    }\n  }\n  requestUpdate(t3, s2, i4) {\n    if (void 0 !== t3) {\n      if (i4 ??= this.constructor.getPropertyOptions(t3), !(i4.hasChanged ?? f)(this[t3], s2)) return;\n      this.P(t3, s2, i4);\n    }\n    false === this.isUpdatePending && (this._$ES = this._$ET());\n  }\n  P(t3, s2, i4) {\n    this._$AL.has(t3) || this._$AL.set(t3, s2), true === i4.reflect && this._$Em !== t3 && (this._$Ej ??= /* @__PURE__ */ new Set()).add(t3);\n  }\n  async _$ET() {\n    this.isUpdatePending = true;\n    try {\n      await this._$ES;\n    } catch (t4) {\n      Promise.reject(t4);\n    }\n    const t3 = this.scheduleUpdate();\n    return null != t3 && await t3, !this.isUpdatePending;\n  }\n  scheduleUpdate() {\n    return this.performUpdate();\n  }\n  performUpdate() {\n    if (!this.isUpdatePending) return;\n    if (!this.hasUpdated) {\n      if (this.renderRoot ??= this.createRenderRoot(), this._$Ep) {\n        for (const [t5, s3] of this._$Ep) this[t5] = s3;\n        this._$Ep = void 0;\n      }\n      const t4 = this.constructor.elementProperties;\n      if (t4.size > 0) for (const [s3, i4] of t4) true !== i4.wrapped || this._$AL.has(s3) || void 0 === this[s3] || this.P(s3, this[s3], i4);\n    }\n    let t3 = false;\n    const s2 = this._$AL;\n    try {\n      t3 = this.shouldUpdate(s2), t3 ? (this.willUpdate(s2), this._$EO?.forEach(((t4) => t4.hostUpdate?.())), this.update(s2)) : this._$EU();\n    } catch (s3) {\n      throw t3 = false, this._$EU(), s3;\n    }\n    t3 && this._$AE(s2);\n  }\n  willUpdate(t3) {\n  }\n  _$AE(t3) {\n    this._$EO?.forEach(((t4) => t4.hostUpdated?.())), this.hasUpdated || (this.hasUpdated = true, this.firstUpdated(t3)), this.updated(t3);\n  }\n  _$EU() {\n    this._$AL = /* @__PURE__ */ new Map(), this.isUpdatePending = false;\n  }\n  get updateComplete() {\n    return this.getUpdateComplete();\n  }\n  getUpdateComplete() {\n    return this._$ES;\n  }\n  shouldUpdate(t3) {\n    return true;\n  }\n  update(t3) {\n    this._$Ej &&= this._$Ej.forEach(((t4) => this._$EC(t4, this[t4]))), this._$EU();\n  }\n  updated(t3) {\n  }\n  firstUpdated(t3) {\n  }\n};\nb.elementStyles = [], b.shadowRootOptions = { mode: \"open\" }, b[d(\"elementProperties\")] = /* @__PURE__ */ new Map(), b[d(\"finalized\")] = /* @__PURE__ */ new Map(), p?.({ ReactiveElement: b }), (a.reactiveElementVersions ??= []).push(\"2.0.4\");\n\n// node_modules/lit-html/lit-html.js\nvar n3 = globalThis;\nvar c3 = n3.trustedTypes;\nvar h2 = c3 ? c3.createPolicy(\"lit-html\", { createHTML: (t3) => t3 }) : void 0;\nvar f2 = \"$lit$\";\nvar v = `lit$${Math.random().toFixed(9).slice(2)}$`;\nvar m = \"?\" + v;\nvar _ = `<${m}>`;\nvar w = document;\nvar lt = () => w.createComment(\"\");\nvar st = (t3) => null === t3 || \"object\" != typeof t3 && \"function\" != typeof t3;\nvar g = Array.isArray;\nvar $ = (t3) => g(t3) || \"function\" == typeof t3?.[Symbol.iterator];\nvar x = \"[ \t\\n\\f\\r]\";\nvar T = /<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g;\nvar E = /-->/g;\nvar k = />/g;\nvar O = RegExp(`>|${x}(?:([^\\\\s\"'>=/]+)(${x}*=${x}*(?:[^ \t\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`, \"g\");\nvar S2 = /'/g;\nvar j = /\"/g;\nvar M = /^(?:script|style|textarea|title)$/i;\nvar P = (t3) => (i4, ...s2) => ({ _$litType$: t3, strings: i4, values: s2 });\nvar ke = P(1);\nvar Oe = P(2);\nvar Se = P(3);\nvar R = /* @__PURE__ */ Symbol.for(\"lit-noChange\");\nvar D = /* @__PURE__ */ Symbol.for(\"lit-nothing\");\nvar V = /* @__PURE__ */ new WeakMap();\nvar I = w.createTreeWalker(w, 129);\nfunction N(t3, i4) {\n  if (!g(t3) || !t3.hasOwnProperty(\"raw\")) throw Error(\"invalid template strings array\");\n  return void 0 !== h2 ? h2.createHTML(i4) : i4;\n}\nvar U = (t3, i4) => {\n  const s2 = t3.length - 1, e6 = [];\n  let h4, o5 = 2 === i4 ? \"<svg>\" : 3 === i4 ? \"<math>\" : \"\", n5 = T;\n  for (let i5 = 0; i5 < s2; i5++) {\n    const s3 = t3[i5];\n    let r5, l2, c4 = -1, a2 = 0;\n    for (; a2 < s3.length && (n5.lastIndex = a2, l2 = n5.exec(s3), null !== l2); ) a2 = n5.lastIndex, n5 === T ? \"!--\" === l2[1] ? n5 = E : void 0 !== l2[1] ? n5 = k : void 0 !== l2[2] ? (M.test(l2[2]) && (h4 = RegExp(\"</\" + l2[2], \"g\")), n5 = O) : void 0 !== l2[3] && (n5 = O) : n5 === O ? \">\" === l2[0] ? (n5 = h4 ?? T, c4 = -1) : void 0 === l2[1] ? c4 = -2 : (c4 = n5.lastIndex - l2[2].length, r5 = l2[1], n5 = void 0 === l2[3] ? O : '\"' === l2[3] ? j : S2) : n5 === j || n5 === S2 ? n5 = O : n5 === E || n5 === k ? n5 = T : (n5 = O, h4 = void 0);\n    const u2 = n5 === O && t3[i5 + 1].startsWith(\"/>\") ? \" \" : \"\";\n    o5 += n5 === T ? s3 + _ : c4 >= 0 ? (e6.push(r5), s3.slice(0, c4) + f2 + s3.slice(c4) + v + u2) : s3 + v + (-2 === c4 ? i5 : u2);\n  }\n  return [N(t3, o5 + (t3[s2] || \"<?>\") + (2 === i4 ? \"</svg>\" : 3 === i4 ? \"</math>\" : \"\")), e6];\n};\nvar B = class _B {\n  constructor({ strings: t3, _$litType$: i4 }, s2) {\n    let e6;\n    this.parts = [];\n    let h4 = 0, o5 = 0;\n    const n5 = t3.length - 1, r5 = this.parts, [l2, a2] = U(t3, i4);\n    if (this.el = _B.createElement(l2, s2), I.currentNode = this.el.content, 2 === i4 || 3 === i4) {\n      const t4 = this.el.content.firstChild;\n      t4.replaceWith(...t4.childNodes);\n    }\n    for (; null !== (e6 = I.nextNode()) && r5.length < n5; ) {\n      if (1 === e6.nodeType) {\n        if (e6.hasAttributes()) for (const t4 of e6.getAttributeNames()) if (t4.endsWith(f2)) {\n          const i5 = a2[o5++], s3 = e6.getAttribute(t4).split(v), n6 = /([.?@])?(.*)/.exec(i5);\n          r5.push({ type: 1, index: h4, name: n6[2], strings: s3, ctor: \".\" === n6[1] ? Y : \"?\" === n6[1] ? Z : \"@\" === n6[1] ? q : G }), e6.removeAttribute(t4);\n        } else t4.startsWith(v) && (r5.push({ type: 6, index: h4 }), e6.removeAttribute(t4));\n        if (M.test(e6.tagName)) {\n          const t4 = e6.textContent.split(v), i5 = t4.length - 1;\n          if (i5 > 0) {\n            e6.textContent = c3 ? c3.emptyScript : \"\";\n            for (let s3 = 0; s3 < i5; s3++) e6.append(t4[s3], lt()), I.nextNode(), r5.push({ type: 2, index: ++h4 });\n            e6.append(t4[i5], lt());\n          }\n        }\n      } else if (8 === e6.nodeType) if (e6.data === m) r5.push({ type: 2, index: h4 });\n      else {\n        let t4 = -1;\n        for (; -1 !== (t4 = e6.data.indexOf(v, t4 + 1)); ) r5.push({ type: 7, index: h4 }), t4 += v.length - 1;\n      }\n      h4++;\n    }\n  }\n  static createElement(t3, i4) {\n    const s2 = w.createElement(\"template\");\n    return s2.innerHTML = t3, s2;\n  }\n};\nfunction z(t3, i4, s2 = t3, e6) {\n  if (i4 === R) return i4;\n  let h4 = void 0 !== e6 ? s2.o?.[e6] : s2.l;\n  const o5 = st(i4) ? void 0 : i4._$litDirective$;\n  return h4?.constructor !== o5 && (h4?._$AO?.(false), void 0 === o5 ? h4 = void 0 : (h4 = new o5(t3), h4._$AT(t3, s2, e6)), void 0 !== e6 ? (s2.o ??= [])[e6] = h4 : s2.l = h4), void 0 !== h4 && (i4 = z(t3, h4._$AS(t3, i4.values), h4, e6)), i4;\n}\nvar F = class {\n  constructor(t3, i4) {\n    this._$AV = [], this._$AN = void 0, this._$AD = t3, this._$AM = i4;\n  }\n  get parentNode() {\n    return this._$AM.parentNode;\n  }\n  get _$AU() {\n    return this._$AM._$AU;\n  }\n  u(t3) {\n    const { el: { content: i4 }, parts: s2 } = this._$AD, e6 = (t3?.creationScope ?? w).importNode(i4, true);\n    I.currentNode = e6;\n    let h4 = I.nextNode(), o5 = 0, n5 = 0, r5 = s2[0];\n    for (; void 0 !== r5; ) {\n      if (o5 === r5.index) {\n        let i5;\n        2 === r5.type ? i5 = new et(h4, h4.nextSibling, this, t3) : 1 === r5.type ? i5 = new r5.ctor(h4, r5.name, r5.strings, this, t3) : 6 === r5.type && (i5 = new K(h4, this, t3)), this._$AV.push(i5), r5 = s2[++n5];\n      }\n      o5 !== r5?.index && (h4 = I.nextNode(), o5++);\n    }\n    return I.currentNode = w, e6;\n  }\n  p(t3) {\n    let i4 = 0;\n    for (const s2 of this._$AV) void 0 !== s2 && (void 0 !== s2.strings ? (s2._$AI(t3, s2, i4), i4 += s2.strings.length - 2) : s2._$AI(t3[i4])), i4++;\n  }\n};\nvar et = class _et {\n  get _$AU() {\n    return this._$AM?._$AU ?? this.v;\n  }\n  constructor(t3, i4, s2, e6) {\n    this.type = 2, this._$AH = D, this._$AN = void 0, this._$AA = t3, this._$AB = i4, this._$AM = s2, this.options = e6, this.v = e6?.isConnected ?? true;\n  }\n  get parentNode() {\n    let t3 = this._$AA.parentNode;\n    const i4 = this._$AM;\n    return void 0 !== i4 && 11 === t3?.nodeType && (t3 = i4.parentNode), t3;\n  }\n  get startNode() {\n    return this._$AA;\n  }\n  get endNode() {\n    return this._$AB;\n  }\n  _$AI(t3, i4 = this) {\n    t3 = z(this, t3, i4), st(t3) ? t3 === D || null == t3 || \"\" === t3 ? (this._$AH !== D && this._$AR(), this._$AH = D) : t3 !== this._$AH && t3 !== R && this._(t3) : void 0 !== t3._$litType$ ? this.$(t3) : void 0 !== t3.nodeType ? this.T(t3) : $(t3) ? this.k(t3) : this._(t3);\n  }\n  O(t3) {\n    return this._$AA.parentNode.insertBefore(t3, this._$AB);\n  }\n  T(t3) {\n    this._$AH !== t3 && (this._$AR(), this._$AH = this.O(t3));\n  }\n  _(t3) {\n    this._$AH !== D && st(this._$AH) ? this._$AA.nextSibling.data = t3 : this.T(w.createTextNode(t3)), this._$AH = t3;\n  }\n  $(t3) {\n    const { values: i4, _$litType$: s2 } = t3, e6 = \"number\" == typeof s2 ? this._$AC(t3) : (void 0 === s2.el && (s2.el = B.createElement(N(s2.h, s2.h[0]), this.options)), s2);\n    if (this._$AH?._$AD === e6) this._$AH.p(i4);\n    else {\n      const t4 = new F(e6, this), s3 = t4.u(this.options);\n      t4.p(i4), this.T(s3), this._$AH = t4;\n    }\n  }\n  _$AC(t3) {\n    let i4 = V.get(t3.strings);\n    return void 0 === i4 && V.set(t3.strings, i4 = new B(t3)), i4;\n  }\n  k(t3) {\n    g(this._$AH) || (this._$AH = [], this._$AR());\n    const i4 = this._$AH;\n    let s2, e6 = 0;\n    for (const h4 of t3) e6 === i4.length ? i4.push(s2 = new _et(this.O(lt()), this.O(lt()), this, this.options)) : s2 = i4[e6], s2._$AI(h4), e6++;\n    e6 < i4.length && (this._$AR(s2 && s2._$AB.nextSibling, e6), i4.length = e6);\n  }\n  _$AR(t3 = this._$AA.nextSibling, i4) {\n    for (this._$AP?.(false, true, i4); t3 && t3 !== this._$AB; ) {\n      const i5 = t3.nextSibling;\n      t3.remove(), t3 = i5;\n    }\n  }\n  setConnected(t3) {\n    void 0 === this._$AM && (this.v = t3, this._$AP?.(t3));\n  }\n};\nvar G = class {\n  get tagName() {\n    return this.element.tagName;\n  }\n  get _$AU() {\n    return this._$AM._$AU;\n  }\n  constructor(t3, i4, s2, e6, h4) {\n    this.type = 1, this._$AH = D, this._$AN = void 0, this.element = t3, this.name = i4, this._$AM = e6, this.options = h4, s2.length > 2 || \"\" !== s2[0] || \"\" !== s2[1] ? (this._$AH = Array(s2.length - 1).fill(new String()), this.strings = s2) : this._$AH = D;\n  }\n  _$AI(t3, i4 = this, s2, e6) {\n    const h4 = this.strings;\n    let o5 = false;\n    if (void 0 === h4) t3 = z(this, t3, i4, 0), o5 = !st(t3) || t3 !== this._$AH && t3 !== R, o5 && (this._$AH = t3);\n    else {\n      const e7 = t3;\n      let n5, r5;\n      for (t3 = h4[0], n5 = 0; n5 < h4.length - 1; n5++) r5 = z(this, e7[s2 + n5], i4, n5), r5 === R && (r5 = this._$AH[n5]), o5 ||= !st(r5) || r5 !== this._$AH[n5], r5 === D ? t3 = D : t3 !== D && (t3 += (r5 ?? \"\") + h4[n5 + 1]), this._$AH[n5] = r5;\n    }\n    o5 && !e6 && this.j(t3);\n  }\n  j(t3) {\n    t3 === D ? this.element.removeAttribute(this.name) : this.element.setAttribute(this.name, t3 ?? \"\");\n  }\n};\nvar Y = class extends G {\n  constructor() {\n    super(...arguments), this.type = 3;\n  }\n  j(t3) {\n    this.element[this.name] = t3 === D ? void 0 : t3;\n  }\n};\nvar Z = class extends G {\n  constructor() {\n    super(...arguments), this.type = 4;\n  }\n  j(t3) {\n    this.element.toggleAttribute(this.name, !!t3 && t3 !== D);\n  }\n};\nvar q = class extends G {\n  constructor(t3, i4, s2, e6, h4) {\n    super(t3, i4, s2, e6, h4), this.type = 5;\n  }\n  _$AI(t3, i4 = this) {\n    if ((t3 = z(this, t3, i4, 0) ?? D) === R) return;\n    const s2 = this._$AH, e6 = t3 === D && s2 !== D || t3.capture !== s2.capture || t3.once !== s2.once || t3.passive !== s2.passive, h4 = t3 !== D && (s2 === D || e6);\n    e6 && this.element.removeEventListener(this.name, this, s2), h4 && this.element.addEventListener(this.name, this, t3), this._$AH = t3;\n  }\n  handleEvent(t3) {\n    \"function\" == typeof this._$AH ? this._$AH.call(this.options?.host ?? this.element, t3) : this._$AH.handleEvent(t3);\n  }\n};\nvar K = class {\n  constructor(t3, i4, s2) {\n    this.element = t3, this.type = 6, this._$AN = void 0, this._$AM = i4, this.options = s2;\n  }\n  get _$AU() {\n    return this._$AM._$AU;\n  }\n  _$AI(t3) {\n    z(this, t3);\n  }\n};\nvar Re = n3.litHtmlPolyfillSupport;\nRe?.(B, et), (n3.litHtmlVersions ??= []).push(\"3.2.0\");\nvar Q = (t3, i4, s2) => {\n  const e6 = s2?.renderBefore ?? i4;\n  let h4 = e6._$litPart$;\n  if (void 0 === h4) {\n    const t4 = s2?.renderBefore ?? null;\n    e6._$litPart$ = h4 = new et(i4.insertBefore(lt(), t4), t4, void 0, s2 ?? {});\n  }\n  return h4._$AI(t3), h4;\n};\n\n// node_modules/lit-element/lit-element.js\nvar h3 = class extends b {\n  constructor() {\n    super(...arguments), this.renderOptions = { host: this }, this.o = void 0;\n  }\n  createRenderRoot() {\n    const t3 = super.createRenderRoot();\n    return this.renderOptions.renderBefore ??= t3.firstChild, t3;\n  }\n  update(t3) {\n    const e6 = this.render();\n    this.hasUpdated || (this.renderOptions.isConnected = this.isConnected), super.update(t3), this.o = Q(e6, this.renderRoot, this.renderOptions);\n  }\n  connectedCallback() {\n    super.connectedCallback(), this.o?.setConnected(true);\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback(), this.o?.setConnected(false);\n  }\n  render() {\n    return R;\n  }\n};\nh3._$litElement$ = true, h3[\"finalized\"] = true, globalThis.litElementHydrateSupport?.({ LitElement: h3 });\nvar f3 = globalThis.litElementPolyfillSupport;\nf3?.({ LitElement: h3 });\n(globalThis.litElementVersions ??= []).push(\"4.1.0\");\n\n// node_modules/@lit/reactive-element/decorators/property.js\nvar o3 = { attribute: true, type: String, converter: u, reflect: false, hasChanged: f };\nvar r3 = (t3 = o3, e6, r5) => {\n  const { kind: n5, metadata: i4 } = r5;\n  let s2 = globalThis.litPropertyMetadata.get(i4);\n  if (void 0 === s2 && globalThis.litPropertyMetadata.set(i4, s2 = /* @__PURE__ */ new Map()), s2.set(r5.name, t3), \"accessor\" === n5) {\n    const { name: o5 } = r5;\n    return { set(r6) {\n      const n6 = e6.get.call(this);\n      e6.set.call(this, r6), this.requestUpdate(o5, n6, t3);\n    }, init(e7) {\n      return void 0 !== e7 && this.P(o5, void 0, t3), e7;\n    } };\n  }\n  if (\"setter\" === n5) {\n    const { name: o5 } = r5;\n    return function(r6) {\n      const n6 = this[o5];\n      e6.call(this, r6), this.requestUpdate(o5, n6, t3);\n    };\n  }\n  throw Error(\"Unsupported decorator location: \" + n5);\n};\nfunction n4(t3) {\n  return (e6, o5) => \"object\" == typeof o5 ? r3(t3, e6, o5) : ((t4, e7, o6) => {\n    const r5 = e7.hasOwnProperty(o6);\n    return e7.constructor.createProperty(o6, r5 ? { ...t4, wrapped: true } : t4), r5 ? Object.getOwnPropertyDescriptor(e7, o6) : void 0;\n  })(t3, e6, o5);\n}\n\n// node_modules/@lit/reactive-element/decorators/base.js\nvar e3 = (e6, t3, c4) => (c4.configurable = true, c4.enumerable = true, Reflect.decorate && \"object\" != typeof t3 && Object.defineProperty(e6, t3, c4), c4);\n\n// node_modules/@lit/reactive-element/decorators/query-all.js\nvar e4;\nfunction r4(r5) {\n  return (n5, o5) => e3(n5, o5, { get() {\n    return (this.renderRoot ?? (e4 ??= document.createDocumentFragment())).querySelectorAll(r5);\n  } });\n}\n\n// node_modules/@lit/reactive-element/decorators/query-assigned-elements.js\nfunction o4(o5) {\n  return (e6, n5) => {\n    const { slot: r5, selector: s2 } = o5 ?? {}, c4 = \"slot\" + (r5 ? `[name=${r5}]` : \":not([name])\");\n    return e3(e6, n5, { get() {\n      const t3 = this.renderRoot?.querySelector(c4), e7 = t3?.assignedElements(o5) ?? [];\n      return void 0 === s2 ? e7 : e7.filter(((t4) => t4.matches(s2)));\n    } });\n  };\n}\n\n// node_modules/lit-html/directive.js\nvar t2 = { ATTRIBUTE: 1, CHILD: 2, PROPERTY: 3, BOOLEAN_ATTRIBUTE: 4, EVENT: 5, ELEMENT: 6 };\nvar e5 = (t3) => (...e6) => ({ _$litDirective$: t3, values: e6 });\nvar i3 = class {\n  constructor(t3) {\n  }\n  get _$AU() {\n    return this._$AM._$AU;\n  }\n  _$AT(t3, e6, i4) {\n    this.t = t3, this._$AM = e6, this.i = i4;\n  }\n  _$AS(t3, e6) {\n    return this.update(t3, e6);\n  }\n  update(t3, e6) {\n    return this.render(...e6);\n  }\n};\n\n// node_modules/lit-html/directives/class-map.js\nvar Rt = e5(class extends i3 {\n  constructor(s2) {\n    if (super(s2), s2.type !== t2.ATTRIBUTE || \"class\" !== s2.name || s2.strings?.length > 2) throw Error(\"`classMap()` can only be used in the `class` attribute and must be the only part in the attribute.\");\n  }\n  render(t3) {\n    return \" \" + Object.keys(t3).filter(((s2) => t3[s2])).join(\" \") + \" \";\n  }\n  update(t3, [s2]) {\n    if (void 0 === this.st) {\n      this.st = /* @__PURE__ */ new Set(), void 0 !== t3.strings && (this.nt = new Set(t3.strings.join(\" \").split(/\\s/).filter(((t4) => \"\" !== t4))));\n      for (const t4 in s2) s2[t4] && !this.nt?.has(t4) && this.st.add(t4);\n      return this.render(s2);\n    }\n    const i4 = t3.element.classList;\n    for (const t4 of this.st) t4 in s2 || (i4.remove(t4), this.st.delete(t4));\n    for (const t4 in s2) {\n      const r5 = !!s2[t4];\n      r5 === this.st.has(t4) || this.nt?.has(t4) || (r5 ? (i4.add(t4), this.st.add(t4)) : (i4.remove(t4), this.st.delete(t4)));\n    }\n    return R;\n  }\n});\n\n// js/ipywidgets_styles.ts\nvar legacyStyles = i`\n    .legacy-button {\n        align-items: center;\n        background-color: var(--jp-layout-color2);\n        border-width: 0;\n        box-shadow: none;\n        color: var(--jp-ui-font-color1);\n        cursor: pointer;\n        display: flex;\n        font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n        font-size: var(--jp-widgets-font-size);\n        justify-content: center;\n        line-height: var(--jp-widgets-inline-height);\n        padding: 0;\n        user-select: none;\n    }\n\n    .legacy-button.primary {\n        background-color: var(--jp-brand-color1);\n        color: var(--jp-ui-inverse-font-color1);\n    }\n\n    .legacy-button:hover:enabled,\n    .legacy-button:focus:enabled {\n        box-shadow: 0 2px 2px 0\n                rgba(0, 0, 0, var(--md-shadow-key-penumbra-opacity)),\n            0 3px 1px -2px rgba(0, 0, 0, var(--md-shadow-key-umbra-opacity)),\n            0 1px 5px 0 rgba(0, 0, 0, var(--md-shadow-ambient-shadow-opacity));\n    }\n\n    .legacy-slider {\n        -webkit-appearance: none;\n        appearance: none;\n        background: var(--jp-layout-color3);\n        border-radius: 3px;\n        height: 4px;\n        outline: none;\n    }\n\n    .legacy-slider::-webkit-slider-thumb,\n    .legacy-slider::-moz-range-thumb {\n        -moz-appearance: none;\n        -webkit-appearance: none;\n        appearance: none;\n        border-radius: 50%;\n        cursor: pointer;\n        height: var(--jp-widgets-slider-handle-size);\n        width: var(--jp-widgets-slider-handle-size);\n    }\n\n    .legacy-text {\n        color: var(--jp-widgets-label-color);\n        font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n        font-size: var(--jp-widgets-font-size);\n        height: var(--jp-widgets-inline-height);\n        line-height: var(--jp-widgets-inline-height);\n        vertical-align: middle;\n    }\n\n    .legacy-select {\n        -moz-appearance: none;\n        -webkit-appearance: none;\n        appearance: none;\n        background-color: var(--jp-widgets-input-background-color);\n        background-image: var(--jp-widgets-dropdown-arrow);\n        background-position: right center;\n        background-repeat: no-repeat;\n        background-size: 20px;\n        border-radius: 0;\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        box-shadow: none;\n        box-sizing: border-box;\n        color: var(--jp-widgets-input-color);\n        flex: 1 1 var(--jp-widgets-inline-width-short);\n        font-size: var(--jp-widgets-font-size);\n        height: 28px;\n        line-height: 28px;\n        min-width: 0;\n        outline: none !important;\n        padding-left: calc(var(--jp-widgets-input-padding)* 2);\n        padding-right: 20px;\n        vertical-align: top;\n    }\n\n    .legacy-select[disabled] {\n        opacity: 0.4;\n        cursor: not-allowed;\n    }\n\n    .legacy-text-input {\n        background: var(--jp-widgets-input-background-color);\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        box-sizing: border-box;\n        color: var(--jp-widgets-input-color);\n        flex-grow: 1;\n        flex-shrink: 1;\n        font-size: var(--jp-widgets-font-size);\n        height: var(--jp-widgets-inline-height);\n        line-height: var(--jp-widgets-inline-height);\n        min-width: 0;\n        outline: none !important;\n        padding: var(--jp-widgets-input-padding) calc(var(--jp-widgets-input-padding) * 2);\n    }\n\n    .legacy-text-input:disabled {\n        opacity: var(--jp-widgets-disabled-opacity);\n    }\n\n    .legacy-color {\n        align-self: stretch;\n        background: var(--jp-widgets-input-background-color);\n        border-left: none;\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        box-sizing: border-box;\n        color: var(--jp-widgets-input-color);\n        flex-grow: 0;\n        flex-shrink: 0;\n        height: var(--jp-widgets-inline-height);\n        outline: none !important;\n        padding: 0 2px;\n        width: var(--jp-widgets-inline-height);\n    }\n\n    .legacy-radio {\n        margin: 0;\n        vertical-align: middle;\n    }\n\n    .legacy-button.active {\n        background-color: var(--colab-primary-surface-color, --jp-layout-color3);\n        color: var(--jp-ui-font-color1);\n        box-shadow: 0 4px 5px 0 rgba(0, 0, 0, var(--md-shadow-key-penumbra-opacity)),\n                    0 1px 10px 0 rgba(0, 0, 0, var(--md-shadow-ambient-shadow-opacity)),\n                    0 2px 4px -1px rgba(0, 0, 0, var(--md-shadow-key-umbra-opacity));\n    }\n\n    .legacy-button.primary {\n        background-color: var(--jp-brand-color1);\n        color: var(--jp-ui-inverse-font-color1);\n    }\n\n    .legacy-button.primary.active {\n        background-color: var(--jp-brand-color0);\n        color: var(--jp-ui-inverse-font-color0);\n    }\n\n    .legacy-button.active {\n        background-color: var(--colab-primary-surface-color, --jp-layout-color3);\n        color: var(--jp-ui-font-color1);\n        box-shadow: 0 4px 5px 0 rgba(0, 0, 0, var(--md-shadow-key-penumbra-opacity)),\n                    0 1px 10px 0 rgba(0, 0, 0, var(--md-shadow-ambient-shadow-opacity)),\n                    0 2px 4px -1px rgba(0, 0, 0, var(--md-shadow-key-umbra-opacity));\n    }\n\n    .legacy-button.primary {\n        background-color: var(--jp-brand-color1);\n        color: var(--jp-ui-inverse-font-color1);\n    }\n\n    .legacy-button.primary.active {\n        background-color: var(--jp-brand-color0);\n        color: var(--jp-ui-inverse-font-color0);\n    }\n\n    .legacy-select {\n        -moz-appearance: none;\n        -webkit-appearance: none;\n        appearance: none;\n        background-color: var(--jp-widgets-input-background-color);\n        background-image: var(--jp-widgets-dropdown-arrow);\n        background-position: right center;\n        background-repeat: no-repeat;\n        background-size: 20px;\n        border-radius: 0;\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        box-shadow: none;\n        box-sizing: border-box;\n        color: var(--jp-widgets-input-color);\n        flex: 1 1 var(--jp-widgets-inline-width-short);\n        font-size: var(--jp-widgets-font-size);\n        height: inherit;\n        min-width: 0;\n        outline: none !important;\n        padding-left: calc(var(--jp-widgets-input-padding)* 2);\n        padding-right: 20px;\n        vertical-align: top;\n    }\n\n    .legacy-input {\n        box-sizing: border-box;\n        background-color: var(--colab-primary-surface-color, --jp-widgets-input-background-color);\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        color: var(--jp-widgets-input-color);\n        flex-grow: 1;\n        flex-shrink: 1;\n        font-size: var(--jp-widgets-font-size);\n        min-width: 0;\n        outline: none !important;\n        padding: var(--jp-widgets-input-padding) calc(var(--jp-widgets-input-padding)* 2);\n        height: var(--jp-widgets-inline-height);\n        line-height: var(--jp-widgets-inline-height);\n    }\n`;\n\n// js/utils.ts\nasync function unpackModels(modelIds, manager) {\n  return Promise.all(\n    modelIds.map((id) => manager.get_model(id.slice(\"IPY_MODEL_\".length)))\n  );\n}\nfunction loadFonts() {\n  if (!document.querySelector(\".custom-fonts\")) {\n    const styleElement = document.createElement(\"style\");\n    styleElement.classList.add(\"custom-fonts\");\n    styleElement.textContent = '@import \"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined\";';\n    document.body.appendChild(styleElement);\n  }\n}\nasync function updateChildren(container, model, property = \"children\") {\n  let children = model.get(property);\n  if (!Array.isArray(children)) {\n    children = [children];\n  }\n  const child_models = await unpackModels(children, model.widget_manager);\n  const child_views = await Promise.all(\n    child_models.map((model2) => model2.widget_manager.create_view(model2))\n  );\n  container.innerHTML = ``;\n  for (const child_view of child_views) {\n    container.appendChild(child_view.el);\n  }\n}\nfunction reverseMap(map) {\n  const reversedMap = /* @__PURE__ */ new Map();\n  for (const [key, value] of map.entries()) {\n    if (value != null) {\n      reversedMap.set(value, key);\n    }\n  }\n  return reversedMap;\n}\n\n// js/lit_widget.ts\nvar LitWidget = class extends h3 {\n  constructor() {\n    super(...arguments);\n    this._model = void 0;\n  }\n  onCustomMessage(_msg) {\n  }\n  viewNameToModelName() {\n    return reverseMap(this.modelNameToViewName());\n  }\n  set model(model) {\n    this._model = model;\n    for (const [modelKey, widgetKey] of this.modelNameToViewName()) {\n      if (widgetKey) {\n        this[widgetKey] = model.get(modelKey);\n        model.on(`change:${String(modelKey)}`, () => {\n          this[widgetKey] = model.get(modelKey);\n        });\n      }\n    }\n    model.on(\"msg:custom\", (msg) => {\n      this.onCustomMessage?.(msg);\n    });\n  }\n  get model() {\n    return this._model;\n  }\n  updated(changedProperties) {\n    const viewToModelMap = this.viewNameToModelName();\n    for (const [viewProp, _2] of changedProperties) {\n      const castViewProp = viewProp;\n      if (viewToModelMap.has(castViewProp)) {\n        const modelProp = viewToModelMap.get(castViewProp);\n        this._model?.set(\n          modelProp,\n          this[castViewProp]\n        );\n      }\n    }\n    this._model?.save_changes();\n  }\n};\n\n// js/styles.ts\nvar materialStyles = i`\n    @font-face {\n        font-family: \"Material Symbols Outlined\";\n        font-style: normal;\n        font-weight: 400;\n        src: url(https://fonts.gstatic.com/s/materialsymbolsoutlined/v205/kJF1BvYX7BgnkSrUwT8OhrdQw4oELdPIeeII9v6oDMzByHX9rA6RzaxHMPdY43zj-jCxv3fzvRNU22ZXGJpEpjC_1v-p_4MrImHCIJIZrDCvHOejbd5zrDAt.woff2)\n            format(\"woff2\");\n    }\n\n    .material-symbols-outlined {\n        -webkit-font-feature-settings: \"liga\";\n        -webkit-font-smoothing: antialiased;\n        direction: ltr;\n        display: inline-block;\n        font-family: \"Material Symbols Outlined\";\n        font-style: normal;\n        font-weight: normal;\n        letter-spacing: normal;\n        line-height: 1;\n        text-transform: none;\n        white-space: nowrap;\n        word-wrap: normal;\n    }\n`;\nvar flexStyles = i`\n    .vertical-flex {\n        display: flex;\n        flex-direction: column;\n        gap: 8px;\n    }\n\n    .horizontal-flex {\n        align-items: center;\n        display: flex;\n        flex-wrap: nowrap;\n        gap: 8px;\n    }\n\n    input:not([type=\"radio\"]):not([type=\"checkbox\"]) {\n        width: 100%;\n    }\n\n    select {\n        width: 100%;\n    }\n\n    .horizontal-flex .legacy-text {\n        flex-shrink: 0;\n    }\n`;\n\n// js/container.ts\nvar Container = class extends LitWidget {\n  constructor() {\n    super(...arguments);\n    this.icon = \"\";\n    this.title = \"\";\n    this.collapsed = false;\n    this.hideCloseButton = false;\n    this.compactMode = false;\n    this.noHeader = false;\n    this.reverseHeader = false;\n  }\n  static get componentName() {\n    return `widget-container`;\n  }\n  static {\n    this.styles = [\n      legacyStyles,\n      materialStyles,\n      i`\n            .container {\n                background: var(--jp-layout-color1);\n                border-radius: 4.5px;\n                box-shadow: 4px 5px 8px 0px #9e9e9e;\n            }\n\n            div {\n                background-color: var(--colab-primary-surface-color, --jp-layout-color1, white);\n            }\n\n            .header {\n                display: flex;\n                gap: 4px;\n                padding: 4px;\n            }\n\n            .reversed {\n                flex-direction: row-reverse;\n            }\n\n            .icon {\n                align-items: center;\n                display: flex;\n                font-size: 20px;\n                height: 28px;\n                justify-content: center;\n                padding: 0 4px;\n            }\n\n            .widget-container {\n                padding: 8px 12px 12px 12px;\n            }\n\n            .hidden {\n                display: none;\n            }\n\n            .header-button {\n                font-size: 16px;\n                height: 28px;\n                width: 28px;\n            }\n\n            .compact-header-button {\n                background: transparent;\n                font-size: 16px;\n                height: 28px;\n                width: 28px;\n            }\n\n            .header-text {\n                align-content: center;\n                flex-grow: 1;\n                padding: 0 12px 0 0;\n            }\n\n            .left-padding {\n                padding-left: 8px;\n            }\n        `\n    ];\n  }\n  modelNameToViewName() {\n    return /* @__PURE__ */ new Map([\n      [\"icon\", \"icon\"],\n      [\"collapsed\", \"collapsed\"],\n      [\"title\", \"title\"],\n      [\"hide_close_button\", \"hideCloseButton\"]\n    ]);\n  }\n  render() {\n    return ke`\n            <div class=\"container\">\n                ${this.noHeader ? D : this.renderHeader()}\n                <div class=\"widget-container ${this.collapsed ? \"hidden\" : \"\"}\">\n                    <slot></slot>\n                </div>\n            </div>\n        `;\n  }\n  renderHeader() {\n    return this.compactMode ? this.renderCompactHeader() : ke`\n            <div class=\"header ${this.reverseHeader ? \"reversed\" : \"\"}\">\n                ${this.renderIcon()}\n                ${this.title ? this.renderTitle() : D}\n                ${this.renderCollapseButton()}\n                ${this.renderCloseButton()}\n            </div>`;\n  }\n  renderCompactHeader() {\n    return ke`<div class=\"header ${this.reverseHeader ? \"reversed\" : \"\"}\">\n            ${this.renderCollapseButton()}\n            ${this.title && !this.collapsed ? this.renderTitle() : D}\n            ${this.renderCloseButton()}\n        </div>`;\n  }\n  renderCloseButton() {\n    if (this.hideCloseButton) {\n      return D;\n    }\n    return ke`\n            <button\n                class=\"legacy-button primary header-button\"\n                @click=\"${this.onCloseButtonClicked}\"\n            >\n                <span class=\"material-symbols-outlined\">&#xe5cd;</span>\n            </button>\n        `;\n  }\n  renderTitle() {\n    return ke`<span\n            class=\"${Rt({\n      \"legacy-text\": true,\n      \"header-text\": true,\n      \"left-padding\": this.compactMode && this.title && !this.reverseHeader\n    })}\"\n            >${this.title}</span\n        >`;\n  }\n  onCloseButtonClicked() {\n    this.dispatchEvent(new CustomEvent(\"close-clicked\", {}));\n  }\n  onCollapseToggled() {\n    this.collapsed = !this.collapsed;\n    this.dispatchEvent(new CustomEvent(\"collapse-clicked\", {}));\n  }\n  renderIcon() {\n    return ke`<span class=\"icon material-symbols-outlined\">\n                        ${this.icon}\n                    </span>`;\n  }\n  renderCollapseButton() {\n    let icon;\n    if (this.compactMode) {\n      icon = this.renderIcon();\n    } else if (this.collapsed) {\n      icon = ke`<span class=\"material-symbols-outlined\"\n                >&#xf830;</span\n            >`;\n    } else {\n      icon = ke`<span class=\"material-symbols-outlined\">&#xf507;</span>`;\n    }\n    return ke`<button\n            class=\"${Rt({\n      \"legacy-button\": true,\n      \"header-button\": !this.compactMode,\n      \"compact-header-button\": this.compactMode,\n      \"active\": !this.collapsed\n    })}\"\n            class=\"legacy-button header-button\"\n            @click=\"${this.onCollapseToggled}\"\n        >\n            ${icon}\n        </button>`;\n  }\n};\n__decorateClass([\n  n4({ type: String })\n], Container.prototype, \"icon\", 2);\n__decorateClass([\n  n4({ type: String })\n], Container.prototype, \"title\", 2);\n__decorateClass([\n  n4({ type: Boolean })\n], Container.prototype, \"collapsed\", 2);\n__decorateClass([\n  n4({ type: Boolean })\n], Container.prototype, \"hideCloseButton\", 2);\n__decorateClass([\n  n4({ type: Boolean })\n], Container.prototype, \"compactMode\", 2);\n__decorateClass([\n  n4({ type: Boolean })\n], Container.prototype, \"noHeader\", 2);\n__decorateClass([\n  n4({ type: Boolean })\n], Container.prototype, \"reverseHeader\", 2);\nif (!customElements.get(Container.componentName)) {\n  customElements.define(Container.componentName, Container);\n}\n\n// node_modules/lit-html/directives/style-map.js\nvar ee = \"important\";\nvar ie = \" !\" + ee;\nvar se = e5(class extends i3 {\n  constructor(e6) {\n    if (super(e6), e6.type !== t2.ATTRIBUTE || \"style\" !== e6.name || e6.strings?.length > 2) throw Error(\"The `styleMap` directive must be used in the `style` attribute and must be the only part in the attribute.\");\n  }\n  render(t3) {\n    return Object.keys(t3).reduce(((e6, r5) => {\n      const s2 = t3[r5];\n      return null == s2 ? e6 : e6 + `${r5 = r5.includes(\"-\") ? r5 : r5.replace(/(?:^(webkit|moz|ms|o)|)(?=[A-Z])/g, \"-$&\").toLowerCase()}:${s2};`;\n    }), \"\");\n  }\n  update(t3, [e6]) {\n    const { style: r5 } = t3.element;\n    if (void 0 === this.ft) return this.ft = new Set(Object.keys(e6)), this.render(e6);\n    for (const t4 of this.ft) null == e6[t4] && (this.ft.delete(t4), t4.includes(\"-\") ? r5.removeProperty(t4) : r5[t4] = null);\n    for (const t4 in e6) {\n      const s2 = e6[t4];\n      if (null != s2) {\n        this.ft.add(t4);\n        const e7 = \"string\" == typeof s2 && s2.endsWith(ie);\n        t4.includes(\"-\") || e7 ? r5.setProperty(t4, e7 ? s2.slice(0, -11) : s2, e7 ? ee : \"\") : r5[t4] = s2;\n      }\n    }\n    return R;\n  }\n});\n\n// js/tab_panel.ts\nfunction convertToId(name) {\n  return (name || \"\").trim().replace(\" \", \"-\").toLowerCase();\n}\nvar TabPanel = class extends h3 {\n  constructor() {\n    super(...arguments);\n    this.tabs = [];\n    this.index = 0;\n    this.mode = 1 /* HIDE_ON_SECOND_CLICK */;\n    this.alignment = \"left\" /* LEFT */;\n  }\n  static get componentName() {\n    return `tab-panel`;\n  }\n  static {\n    this.styles = [\n      legacyStyles,\n      materialStyles,\n      i`\n            ::slotted(*) {\n                display: none;\n            }\n\n            ::slotted(.show-tab) {\n                display: block;\n            }\n\n            .container {\n                padding: 0;\n                width: 100%;\n            }\n\n            .tab-container {\n                align-items: center;\n                display: flex;\n                flex-direction: row;\n            }\n\n            .tab-container.center {\n                justify-content: center;\n            }\n\n            .tab-container.left {\n                justify-content: flex-start;\n            }\n\n            .tab-container.right {\n                justify-content: flex-end;\n            }\n\n            .tab-container button {\n                border-radius: 5px;\n                height: 28px;\n                margin: 2px 0 2px 8px;\n                user-select: none;\n            }\n\n            .tab-container button.icon {\n                font-size: 16px;\n                width: 28px;\n            }\n\n            .tab-container button.name {\n                padding: 0 8px;\n            }\n        `\n    ];\n  }\n  render() {\n    return ke`\n            <div class=\"container\">\n                <div\n                    role=\"tablist\"\n                    class=\"${Rt({\n      \"tab-container\": true,\n      \"center\": this.alignment === \"center\" /* CENTER */,\n      \"left\": this.alignment === \"left\" /* LEFT */,\n      \"right\": this.alignment === \"right\" /* RIGHT */\n    })}\">\n                    ${this.renderTabs()}\n                </div>\n                <slot @slotchange=${this.updateSlotChildren}></slot>\n            </div>\n        `;\n  }\n  update(changedProperties) {\n    super.update(changedProperties);\n    if (changedProperties.has(\"index\") && changedProperties.get(\"index\") != null) {\n      this.updateSlotChildren();\n    }\n  }\n  updateSlotChildren() {\n    if (!this.tabContentElements) {\n      return;\n    }\n    this.tabContentElements.forEach((element, i4) => {\n      element.classList.remove(\"show-tab\");\n      const id = convertToId(this.tabs[i4].name);\n      element.setAttribute(\"id\", `tabpanel-${id}-${i4}`);\n      element.setAttribute(\"role\", \"tabpanel\");\n      element.setAttribute(\"aria-labelledby\", `tab-${id}-${i4}`);\n    });\n    this.tabContentElements[this.index]?.classList.add(\"show-tab\");\n  }\n  renderTabs() {\n    return this.tabs.map((tab, i4) => {\n      const id = convertToId(this.tabs[i4].name);\n      return ke`<button\n                            id=\"tab-${id}-${i4}\"\n                            class=\"${Rt({\n        \"legacy-button\": true,\n        \"active\": i4 === this.index,\n        \"icon\": !!tab.icon,\n        \"name\": !!tab.name\n      })}\"\n                            style=\"${se({\n        width: tab.width ? `${tab.width}px` : null\n      })}\"\n                            type=\"button\"\n                            role=\"tab\"\n                            aria-selected=\"${i4 === this.index ? true : false}\"\n                            aria-controls=\"tabpanel-${id}-${i4}\"\n                            @click=${() => {\n        this.onTabClick(i4);\n      }}>\n                            ${tab.icon ? ke`<span class=\"material-symbols-outlined\">${tab.icon}</span>` : D}\n                            <span>${tab.name}</span>\n                        </button>`;\n    });\n  }\n  onTabClick(index) {\n    switch (this.mode) {\n      case 1 /* HIDE_ON_SECOND_CLICK */:\n        this.index = this.index === index ? -1 : index;\n        break;\n      case 0 /* ALWAYS_SHOW */:\n      default:\n        this.index = index;\n    }\n    this.dispatchEvent(new CustomEvent(\"tab-changed\", {\n      detail: index\n    }));\n  }\n};\n__decorateClass([\n  n4({ type: Array })\n], TabPanel.prototype, \"tabs\", 2);\n__decorateClass([\n  n4({ type: Number })\n], TabPanel.prototype, \"index\", 2);\n__decorateClass([\n  n4({ type: Number })\n], TabPanel.prototype, \"mode\", 2);\n__decorateClass([\n  n4({ type: String })\n], TabPanel.prototype, \"alignment\", 2);\n__decorateClass([\n  r4(\".tab\")\n], TabPanel.prototype, \"tabElements\", 2);\n__decorateClass([\n  o4()\n], TabPanel.prototype, \"tabContentElements\", 2);\nif (!customElements.get(TabPanel.componentName)) {\n  customElements.define(TabPanel.componentName, TabPanel);\n}\n\n// js/toolbar.ts\nvar Toolbar = class extends LitWidget {\n  constructor() {\n    super(...arguments);\n    this.expanded = false;\n  }\n  static get componentName() {\n    return `toolbar-panel`;\n  }\n  static {\n    this.styles = [\n      legacyStyles,\n      materialStyles,\n      i`\n            .hide {\n                display: none;\n            }\n\n            .expanded {\n                display: block; !important\n            }\n\n            slot[name=\"extra-tools\"] {\n                margin-top: 4px;\n            }\n\n            ::slotted([slot=\"main-tools\"]),\n            ::slotted([slot=\"extra-tools\"])  {\n                align-items: center;\n                display: inline-grid;\n                grid-template-columns: auto auto auto;\n                grid-gap: 4px;\n                justify-items: center;\n            }\n        `\n    ];\n  }\n  modelNameToViewName() {\n    return /* @__PURE__ */ new Map([\n      [\"main_tools\", null],\n      [\"extra_tools\", null],\n      [\"expanded\", \"expanded\"]\n    ]);\n  }\n  render() {\n    return ke`\n            <widget-container\n                icon=\"build\"\n                title=\"\"\n                .collapsed=\"${true}\"\n                .hideCloseButton=${true}\n                .compactMode=\"${true}\"\n                .reverseHeader=\"${true}\"\n            >\n                <div class=\"tools-container\">\n                    <slot name=\"main-tools\"></slot>\n                    <slot\n                        name=\"extra-tools\"\n                        class=\"${Rt({\n      hide: !this.expanded,\n      expanded: this.expanded\n    })}\"\n                    ></slot>\n                </div>\n            </widget-container>\n        `;\n  }\n};\n__decorateClass([\n  n4()\n], Toolbar.prototype, \"expanded\", 2);\nif (!customElements.get(Toolbar.componentName)) {\n  customElements.define(Toolbar.componentName, Toolbar);\n}\nasync function render({ model, el }) {\n  loadFonts();\n  const manager = document.createElement(Toolbar.componentName);\n  manager.model = model;\n  el.appendChild(manager);\n  const mainToolsEl = document.createElement(\"div\");\n  mainToolsEl.slot = \"main-tools\";\n  manager.appendChild(mainToolsEl);\n  updateChildren(mainToolsEl, model, \"main_tools\");\n  model.on(\"change:main_tools\", () => {\n    updateChildren(mainToolsEl, model, \"main_tools\");\n  });\n  const extraToolsEl = document.createElement(\"div\");\n  extraToolsEl.slot = \"extra-tools\";\n  manager.appendChild(extraToolsEl);\n  updateChildren(extraToolsEl, model, \"extra_tools\");\n  model.on(\"change:extra_tools\", () => {\n    updateChildren(extraToolsEl, model, \"extra_tools\");\n  });\n}\nvar toolbar_default = { render };\nexport {\n  Toolbar,\n  toolbar_default as default\n};\n/*! Bundled license information:\n\n@lit/reactive-element/css-tag.js:\n  (**\n   * @license\n   * Copyright 2019 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n\n@lit/reactive-element/reactive-element.js:\nlit-html/lit-html.js:\nlit-element/lit-element.js:\n@lit/reactive-element/decorators/custom-element.js:\n@lit/reactive-element/decorators/property.js:\n@lit/reactive-element/decorators/state.js:\n@lit/reactive-element/decorators/event-options.js:\n@lit/reactive-element/decorators/base.js:\n@lit/reactive-element/decorators/query.js:\n@lit/reactive-element/decorators/query-all.js:\n@lit/reactive-element/decorators/query-async.js:\n@lit/reactive-element/decorators/query-assigned-nodes.js:\nlit-html/directive.js:\n  (**\n   * @license\n   * Copyright 2017 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n\nlit-html/is-server.js:\n  (**\n   * @license\n   * Copyright 2022 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n\n@lit/reactive-element/decorators/query-assigned-elements.js:\n  (**\n   * @license\n   * Copyright 2021 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n\nlit-html/directives/class-map.js:\nlit-html/directives/style-map.js:\n  (**\n   * @license\n   * Copyright 2018 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n*/\n",
              "_model_module": "anywidget",
              "_model_module_version": "~0.9.*",
              "_model_name": "AnyModel",
              "_view_count": null,
              "_view_module": "anywidget",
              "_view_module_version": "~0.9.*",
              "_view_name": "AnyView",
              "expanded": false,
              "extra_tools": [],
              "layout": "IPY_MODEL_2314f10e643e4bfbb67dc11458918460",
              "main_tools": [
                "IPY_MODEL_4fce6d6d582e4acea783a88e521f77d5",
                "IPY_MODEL_aa8c8a28e55a4b7b9a332a4e98a26801",
                "IPY_MODEL_93481c7795bb4b2cab944c52df48948f"
              ]
            }
          },
          "ec42985c80454f3ea892450cc944711c": {
            "model_module": "@jupyter-widgets/base",
            "model_name": "LayoutModel",
            "model_module_version": "1.2.0",
            "state": {
              "_model_module": "@jupyter-widgets/base",
              "_model_module_version": "1.2.0",
              "_model_name": "LayoutModel",
              "_view_count": null,
              "_view_module": "@jupyter-widgets/base",
              "_view_module_version": "1.2.0",
              "_view_name": "LayoutView",
              "align_content": null,
              "align_items": null,
              "align_self": null,
              "border": null,
              "bottom": null,
              "display": null,
              "flex": null,
              "flex_flow": null,
              "grid_area": null,
              "grid_auto_columns": null,
              "grid_auto_flow": null,
              "grid_auto_rows": null,
              "grid_column": null,
              "grid_gap": "0px 10px",
              "grid_row": null,
              "grid_template_areas": null,
              "grid_template_columns": "auto auto",
              "grid_template_rows": null,
              "height": null,
              "justify_content": null,
              "justify_items": null,
              "left": null,
              "margin": null,
              "max_height": null,
              "max_width": null,
              "min_height": null,
              "min_width": null,
              "object_fit": null,
              "object_position": null,
              "order": null,
              "overflow": "visible",
              "overflow_x": null,
              "overflow_y": null,
              "padding": null,
              "right": null,
              "top": null,
              "visibility": null,
              "width": null
            }
          },
          "e50e3eb6d9684c01b2534bd56aa7cd46": {
            "model_module": "@jupyter-widgets/base",
            "model_name": "LayoutModel",
            "model_module_version": "1.2.0",
            "state": {
              "_model_module": "@jupyter-widgets/base",
              "_model_module_version": "1.2.0",
              "_model_name": "LayoutModel",
              "_view_count": null,
              "_view_module": "@jupyter-widgets/base",
              "_view_module_version": "1.2.0",
              "_view_name": "LayoutView",
              "align_content": null,
              "align_items": null,
              "align_self": null,
              "border": null,
              "bottom": null,
              "display": null,
              "flex": null,
              "flex_flow": null,
              "grid_area": null,
              "grid_auto_columns": null,
              "grid_auto_flow": null,
              "grid_auto_rows": null,
              "grid_column": null,
              "grid_gap": null,
              "grid_row": null,
              "grid_template_areas": null,
              "grid_template_columns": null,
              "grid_template_rows": null,
              "height": null,
              "justify_content": null,
              "justify_items": null,
              "left": null,
              "margin": null,
              "max_height": null,
              "max_width": null,
              "min_height": null,
              "min_width": null,
              "object_fit": null,
              "object_position": null,
              "order": null,
              "overflow": null,
              "overflow_x": null,
              "overflow_y": null,
              "padding": null,
              "right": null,
              "top": null,
              "visibility": null,
              "width": null
            }
          },
          "7ddc1e0f7faa4b4b82634a434d4f84d0": {
            "model_module": "@jupyter-widgets/base",
            "model_name": "LayoutModel",
            "model_module_version": "1.2.0",
            "state": {
              "_model_module": "@jupyter-widgets/base",
              "_model_module_version": "1.2.0",
              "_model_name": "LayoutModel",
              "_view_count": null,
              "_view_module": "@jupyter-widgets/base",
              "_view_module_version": "1.2.0",
              "_view_name": "LayoutView",
              "align_content": null,
              "align_items": null,
              "align_self": null,
              "border": null,
              "bottom": null,
              "display": null,
              "flex": null,
              "flex_flow": null,
              "grid_area": null,
              "grid_auto_columns": null,
              "grid_auto_flow": null,
              "grid_auto_rows": null,
              "grid_column": null,
              "grid_gap": null,
              "grid_row": null,
              "grid_template_areas": null,
              "grid_template_columns": null,
              "grid_template_rows": null,
              "height": null,
              "justify_content": null,
              "justify_items": null,
              "left": null,
              "margin": null,
              "max_height": null,
              "max_width": null,
              "min_height": null,
              "min_width": null,
              "object_fit": null,
              "object_position": null,
              "order": null,
              "overflow": null,
              "overflow_x": null,
              "overflow_y": null,
              "padding": null,
              "right": null,
              "top": null,
              "visibility": null,
              "width": null
            }
          },
          "2314f10e643e4bfbb67dc11458918460": {
            "model_module": "@jupyter-widgets/base",
            "model_name": "LayoutModel",
            "model_module_version": "1.2.0",
            "state": {
              "_model_module": "@jupyter-widgets/base",
              "_model_module_version": "1.2.0",
              "_model_name": "LayoutModel",
              "_view_count": null,
              "_view_module": "@jupyter-widgets/base",
              "_view_module_version": "1.2.0",
              "_view_name": "LayoutView",
              "align_content": null,
              "align_items": null,
              "align_self": null,
              "border": null,
              "bottom": null,
              "display": null,
              "flex": null,
              "flex_flow": null,
              "grid_area": null,
              "grid_auto_columns": null,
              "grid_auto_flow": null,
              "grid_auto_rows": null,
              "grid_column": null,
              "grid_gap": null,
              "grid_row": null,
              "grid_template_areas": null,
              "grid_template_columns": null,
              "grid_template_rows": null,
              "height": null,
              "justify_content": null,
              "justify_items": null,
              "left": null,
              "margin": null,
              "max_height": null,
              "max_width": null,
              "min_height": null,
              "min_width": null,
              "object_fit": null,
              "object_position": null,
              "order": null,
              "overflow": null,
              "overflow_x": null,
              "overflow_y": null,
              "padding": null,
              "right": null,
              "top": null,
              "visibility": null,
              "width": null
            }
          },
          "5aa638b0302248cd87912ae3dcbe2cd2": {
            "model_module": "anywidget",
            "model_name": "AnyModel",
            "model_module_version": "~0.9.*",
            "state": {
              "_anywidget_id": "geemap.map_widgets.LayerManagerRow",
              "_dom_classes": [
                "geemap-colab"
              ],
              "_esm": "var __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __decorateClass = (decorators, target, key, kind) => {\n  var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;\n  for (var i4 = decorators.length - 1, decorator; i4 >= 0; i4--)\n    if (decorator = decorators[i4])\n      result = (kind ? decorator(target, key, result) : decorator(result)) || result;\n  if (kind && result) __defProp(target, key, result);\n  return result;\n};\n\n// node_modules/@lit/reactive-element/css-tag.js\nvar t = globalThis;\nvar e = t.ShadowRoot && (void 0 === t.ShadyCSS || t.ShadyCSS.nativeShadow) && \"adoptedStyleSheets\" in Document.prototype && \"replace\" in CSSStyleSheet.prototype;\nvar s = /* @__PURE__ */ Symbol();\nvar o = /* @__PURE__ */ new WeakMap();\nvar n = class {\n  constructor(t3, e5, o4) {\n    if (this._$cssResult$ = true, o4 !== s) throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");\n    this.cssText = t3, this.t = e5;\n  }\n  get styleSheet() {\n    let t3 = this.o;\n    const s2 = this.t;\n    if (e && void 0 === t3) {\n      const e5 = void 0 !== s2 && 1 === s2.length;\n      e5 && (t3 = o.get(s2)), void 0 === t3 && ((this.o = t3 = new CSSStyleSheet()).replaceSync(this.cssText), e5 && o.set(s2, t3));\n    }\n    return t3;\n  }\n  toString() {\n    return this.cssText;\n  }\n};\nvar r = (t3) => new n(\"string\" == typeof t3 ? t3 : t3 + \"\", void 0, s);\nvar i = (t3, ...e5) => {\n  const o4 = 1 === t3.length ? t3[0] : e5.reduce(((e6, s2, o5) => e6 + ((t4) => {\n    if (true === t4._$cssResult$) return t4.cssText;\n    if (\"number\" == typeof t4) return t4;\n    throw Error(\"Value passed to 'css' function must be a 'css' function result: \" + t4 + \". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\");\n  })(s2) + t3[o5 + 1]), t3[0]);\n  return new n(o4, t3, s);\n};\nvar S = (s2, o4) => {\n  if (e) s2.adoptedStyleSheets = o4.map(((t3) => t3 instanceof CSSStyleSheet ? t3 : t3.styleSheet));\n  else for (const e5 of o4) {\n    const o5 = document.createElement(\"style\"), n5 = t.litNonce;\n    void 0 !== n5 && o5.setAttribute(\"nonce\", n5), o5.textContent = e5.cssText, s2.appendChild(o5);\n  }\n};\nvar c = e ? (t3) => t3 : (t3) => t3 instanceof CSSStyleSheet ? ((t4) => {\n  let e5 = \"\";\n  for (const s2 of t4.cssRules) e5 += s2.cssText;\n  return r(e5);\n})(t3) : t3;\n\n// node_modules/@lit/reactive-element/reactive-element.js\nvar { is: i2, defineProperty: e2, getOwnPropertyDescriptor: r2, getOwnPropertyNames: h, getOwnPropertySymbols: o2, getPrototypeOf: n2 } = Object;\nvar a = globalThis;\nvar c2 = a.trustedTypes;\nvar l = c2 ? c2.emptyScript : \"\";\nvar p = a.reactiveElementPolyfillSupport;\nvar d = (t3, s2) => t3;\nvar u = { toAttribute(t3, s2) {\n  switch (s2) {\n    case Boolean:\n      t3 = t3 ? l : null;\n      break;\n    case Object:\n    case Array:\n      t3 = null == t3 ? t3 : JSON.stringify(t3);\n  }\n  return t3;\n}, fromAttribute(t3, s2) {\n  let i4 = t3;\n  switch (s2) {\n    case Boolean:\n      i4 = null !== t3;\n      break;\n    case Number:\n      i4 = null === t3 ? null : Number(t3);\n      break;\n    case Object:\n    case Array:\n      try {\n        i4 = JSON.parse(t3);\n      } catch (t4) {\n        i4 = null;\n      }\n  }\n  return i4;\n} };\nvar f = (t3, s2) => !i2(t3, s2);\nvar y = { attribute: true, type: String, converter: u, reflect: false, hasChanged: f };\nSymbol.metadata ??= /* @__PURE__ */ Symbol(\"metadata\"), a.litPropertyMetadata ??= /* @__PURE__ */ new WeakMap();\nvar b = class extends HTMLElement {\n  static addInitializer(t3) {\n    this._$Ei(), (this.l ??= []).push(t3);\n  }\n  static get observedAttributes() {\n    return this.finalize(), this._$Eh && [...this._$Eh.keys()];\n  }\n  static createProperty(t3, s2 = y) {\n    if (s2.state && (s2.attribute = false), this._$Ei(), this.elementProperties.set(t3, s2), !s2.noAccessor) {\n      const i4 = /* @__PURE__ */ Symbol(), r4 = this.getPropertyDescriptor(t3, i4, s2);\n      void 0 !== r4 && e2(this.prototype, t3, r4);\n    }\n  }\n  static getPropertyDescriptor(t3, s2, i4) {\n    const { get: e5, set: h4 } = r2(this.prototype, t3) ?? { get() {\n      return this[s2];\n    }, set(t4) {\n      this[s2] = t4;\n    } };\n    return { get() {\n      return e5?.call(this);\n    }, set(s3) {\n      const r4 = e5?.call(this);\n      h4.call(this, s3), this.requestUpdate(t3, r4, i4);\n    }, configurable: true, enumerable: true };\n  }\n  static getPropertyOptions(t3) {\n    return this.elementProperties.get(t3) ?? y;\n  }\n  static _$Ei() {\n    if (this.hasOwnProperty(d(\"elementProperties\"))) return;\n    const t3 = n2(this);\n    t3.finalize(), void 0 !== t3.l && (this.l = [...t3.l]), this.elementProperties = new Map(t3.elementProperties);\n  }\n  static finalize() {\n    if (this.hasOwnProperty(d(\"finalized\"))) return;\n    if (this.finalized = true, this._$Ei(), this.hasOwnProperty(d(\"properties\"))) {\n      const t4 = this.properties, s2 = [...h(t4), ...o2(t4)];\n      for (const i4 of s2) this.createProperty(i4, t4[i4]);\n    }\n    const t3 = this[Symbol.metadata];\n    if (null !== t3) {\n      const s2 = litPropertyMetadata.get(t3);\n      if (void 0 !== s2) for (const [t4, i4] of s2) this.elementProperties.set(t4, i4);\n    }\n    this._$Eh = /* @__PURE__ */ new Map();\n    for (const [t4, s2] of this.elementProperties) {\n      const i4 = this._$Eu(t4, s2);\n      void 0 !== i4 && this._$Eh.set(i4, t4);\n    }\n    this.elementStyles = this.finalizeStyles(this.styles);\n  }\n  static finalizeStyles(s2) {\n    const i4 = [];\n    if (Array.isArray(s2)) {\n      const e5 = new Set(s2.flat(1 / 0).reverse());\n      for (const s3 of e5) i4.unshift(c(s3));\n    } else void 0 !== s2 && i4.push(c(s2));\n    return i4;\n  }\n  static _$Eu(t3, s2) {\n    const i4 = s2.attribute;\n    return false === i4 ? void 0 : \"string\" == typeof i4 ? i4 : \"string\" == typeof t3 ? t3.toLowerCase() : void 0;\n  }\n  constructor() {\n    super(), this._$Ep = void 0, this.isUpdatePending = false, this.hasUpdated = false, this._$Em = null, this._$Ev();\n  }\n  _$Ev() {\n    this._$ES = new Promise(((t3) => this.enableUpdating = t3)), this._$AL = /* @__PURE__ */ new Map(), this._$E_(), this.requestUpdate(), this.constructor.l?.forEach(((t3) => t3(this)));\n  }\n  addController(t3) {\n    (this._$EO ??= /* @__PURE__ */ new Set()).add(t3), void 0 !== this.renderRoot && this.isConnected && t3.hostConnected?.();\n  }\n  removeController(t3) {\n    this._$EO?.delete(t3);\n  }\n  _$E_() {\n    const t3 = /* @__PURE__ */ new Map(), s2 = this.constructor.elementProperties;\n    for (const i4 of s2.keys()) this.hasOwnProperty(i4) && (t3.set(i4, this[i4]), delete this[i4]);\n    t3.size > 0 && (this._$Ep = t3);\n  }\n  createRenderRoot() {\n    const t3 = this.shadowRoot ?? this.attachShadow(this.constructor.shadowRootOptions);\n    return S(t3, this.constructor.elementStyles), t3;\n  }\n  connectedCallback() {\n    this.renderRoot ??= this.createRenderRoot(), this.enableUpdating(true), this._$EO?.forEach(((t3) => t3.hostConnected?.()));\n  }\n  enableUpdating(t3) {\n  }\n  disconnectedCallback() {\n    this._$EO?.forEach(((t3) => t3.hostDisconnected?.()));\n  }\n  attributeChangedCallback(t3, s2, i4) {\n    this._$AK(t3, i4);\n  }\n  _$EC(t3, s2) {\n    const i4 = this.constructor.elementProperties.get(t3), e5 = this.constructor._$Eu(t3, i4);\n    if (void 0 !== e5 && true === i4.reflect) {\n      const r4 = (void 0 !== i4.converter?.toAttribute ? i4.converter : u).toAttribute(s2, i4.type);\n      this._$Em = t3, null == r4 ? this.removeAttribute(e5) : this.setAttribute(e5, r4), this._$Em = null;\n    }\n  }\n  _$AK(t3, s2) {\n    const i4 = this.constructor, e5 = i4._$Eh.get(t3);\n    if (void 0 !== e5 && this._$Em !== e5) {\n      const t4 = i4.getPropertyOptions(e5), r4 = \"function\" == typeof t4.converter ? { fromAttribute: t4.converter } : void 0 !== t4.converter?.fromAttribute ? t4.converter : u;\n      this._$Em = e5, this[e5] = r4.fromAttribute(s2, t4.type), this._$Em = null;\n    }\n  }\n  requestUpdate(t3, s2, i4) {\n    if (void 0 !== t3) {\n      if (i4 ??= this.constructor.getPropertyOptions(t3), !(i4.hasChanged ?? f)(this[t3], s2)) return;\n      this.P(t3, s2, i4);\n    }\n    false === this.isUpdatePending && (this._$ES = this._$ET());\n  }\n  P(t3, s2, i4) {\n    this._$AL.has(t3) || this._$AL.set(t3, s2), true === i4.reflect && this._$Em !== t3 && (this._$Ej ??= /* @__PURE__ */ new Set()).add(t3);\n  }\n  async _$ET() {\n    this.isUpdatePending = true;\n    try {\n      await this._$ES;\n    } catch (t4) {\n      Promise.reject(t4);\n    }\n    const t3 = this.scheduleUpdate();\n    return null != t3 && await t3, !this.isUpdatePending;\n  }\n  scheduleUpdate() {\n    return this.performUpdate();\n  }\n  performUpdate() {\n    if (!this.isUpdatePending) return;\n    if (!this.hasUpdated) {\n      if (this.renderRoot ??= this.createRenderRoot(), this._$Ep) {\n        for (const [t5, s3] of this._$Ep) this[t5] = s3;\n        this._$Ep = void 0;\n      }\n      const t4 = this.constructor.elementProperties;\n      if (t4.size > 0) for (const [s3, i4] of t4) true !== i4.wrapped || this._$AL.has(s3) || void 0 === this[s3] || this.P(s3, this[s3], i4);\n    }\n    let t3 = false;\n    const s2 = this._$AL;\n    try {\n      t3 = this.shouldUpdate(s2), t3 ? (this.willUpdate(s2), this._$EO?.forEach(((t4) => t4.hostUpdate?.())), this.update(s2)) : this._$EU();\n    } catch (s3) {\n      throw t3 = false, this._$EU(), s3;\n    }\n    t3 && this._$AE(s2);\n  }\n  willUpdate(t3) {\n  }\n  _$AE(t3) {\n    this._$EO?.forEach(((t4) => t4.hostUpdated?.())), this.hasUpdated || (this.hasUpdated = true, this.firstUpdated(t3)), this.updated(t3);\n  }\n  _$EU() {\n    this._$AL = /* @__PURE__ */ new Map(), this.isUpdatePending = false;\n  }\n  get updateComplete() {\n    return this.getUpdateComplete();\n  }\n  getUpdateComplete() {\n    return this._$ES;\n  }\n  shouldUpdate(t3) {\n    return true;\n  }\n  update(t3) {\n    this._$Ej &&= this._$Ej.forEach(((t4) => this._$EC(t4, this[t4]))), this._$EU();\n  }\n  updated(t3) {\n  }\n  firstUpdated(t3) {\n  }\n};\nb.elementStyles = [], b.shadowRootOptions = { mode: \"open\" }, b[d(\"elementProperties\")] = /* @__PURE__ */ new Map(), b[d(\"finalized\")] = /* @__PURE__ */ new Map(), p?.({ ReactiveElement: b }), (a.reactiveElementVersions ??= []).push(\"2.0.4\");\n\n// node_modules/lit-html/lit-html.js\nvar n3 = globalThis;\nvar c3 = n3.trustedTypes;\nvar h2 = c3 ? c3.createPolicy(\"lit-html\", { createHTML: (t3) => t3 }) : void 0;\nvar f2 = \"$lit$\";\nvar v = `lit$${Math.random().toFixed(9).slice(2)}$`;\nvar m = \"?\" + v;\nvar _ = `<${m}>`;\nvar w = document;\nvar lt = () => w.createComment(\"\");\nvar st = (t3) => null === t3 || \"object\" != typeof t3 && \"function\" != typeof t3;\nvar g = Array.isArray;\nvar $ = (t3) => g(t3) || \"function\" == typeof t3?.[Symbol.iterator];\nvar x = \"[ \t\\n\\f\\r]\";\nvar T = /<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g;\nvar E = /-->/g;\nvar k = />/g;\nvar O = RegExp(`>|${x}(?:([^\\\\s\"'>=/]+)(${x}*=${x}*(?:[^ \t\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`, \"g\");\nvar S2 = /'/g;\nvar j = /\"/g;\nvar M = /^(?:script|style|textarea|title)$/i;\nvar P = (t3) => (i4, ...s2) => ({ _$litType$: t3, strings: i4, values: s2 });\nvar ke = P(1);\nvar Oe = P(2);\nvar Se = P(3);\nvar R = /* @__PURE__ */ Symbol.for(\"lit-noChange\");\nvar D = /* @__PURE__ */ Symbol.for(\"lit-nothing\");\nvar V = /* @__PURE__ */ new WeakMap();\nvar I = w.createTreeWalker(w, 129);\nfunction N(t3, i4) {\n  if (!g(t3) || !t3.hasOwnProperty(\"raw\")) throw Error(\"invalid template strings array\");\n  return void 0 !== h2 ? h2.createHTML(i4) : i4;\n}\nvar U = (t3, i4) => {\n  const s2 = t3.length - 1, e5 = [];\n  let h4, o4 = 2 === i4 ? \"<svg>\" : 3 === i4 ? \"<math>\" : \"\", n5 = T;\n  for (let i5 = 0; i5 < s2; i5++) {\n    const s3 = t3[i5];\n    let r4, l2, c4 = -1, a2 = 0;\n    for (; a2 < s3.length && (n5.lastIndex = a2, l2 = n5.exec(s3), null !== l2); ) a2 = n5.lastIndex, n5 === T ? \"!--\" === l2[1] ? n5 = E : void 0 !== l2[1] ? n5 = k : void 0 !== l2[2] ? (M.test(l2[2]) && (h4 = RegExp(\"</\" + l2[2], \"g\")), n5 = O) : void 0 !== l2[3] && (n5 = O) : n5 === O ? \">\" === l2[0] ? (n5 = h4 ?? T, c4 = -1) : void 0 === l2[1] ? c4 = -2 : (c4 = n5.lastIndex - l2[2].length, r4 = l2[1], n5 = void 0 === l2[3] ? O : '\"' === l2[3] ? j : S2) : n5 === j || n5 === S2 ? n5 = O : n5 === E || n5 === k ? n5 = T : (n5 = O, h4 = void 0);\n    const u2 = n5 === O && t3[i5 + 1].startsWith(\"/>\") ? \" \" : \"\";\n    o4 += n5 === T ? s3 + _ : c4 >= 0 ? (e5.push(r4), s3.slice(0, c4) + f2 + s3.slice(c4) + v + u2) : s3 + v + (-2 === c4 ? i5 : u2);\n  }\n  return [N(t3, o4 + (t3[s2] || \"<?>\") + (2 === i4 ? \"</svg>\" : 3 === i4 ? \"</math>\" : \"\")), e5];\n};\nvar B = class _B {\n  constructor({ strings: t3, _$litType$: i4 }, s2) {\n    let e5;\n    this.parts = [];\n    let h4 = 0, o4 = 0;\n    const n5 = t3.length - 1, r4 = this.parts, [l2, a2] = U(t3, i4);\n    if (this.el = _B.createElement(l2, s2), I.currentNode = this.el.content, 2 === i4 || 3 === i4) {\n      const t4 = this.el.content.firstChild;\n      t4.replaceWith(...t4.childNodes);\n    }\n    for (; null !== (e5 = I.nextNode()) && r4.length < n5; ) {\n      if (1 === e5.nodeType) {\n        if (e5.hasAttributes()) for (const t4 of e5.getAttributeNames()) if (t4.endsWith(f2)) {\n          const i5 = a2[o4++], s3 = e5.getAttribute(t4).split(v), n6 = /([.?@])?(.*)/.exec(i5);\n          r4.push({ type: 1, index: h4, name: n6[2], strings: s3, ctor: \".\" === n6[1] ? Y : \"?\" === n6[1] ? Z : \"@\" === n6[1] ? q : G }), e5.removeAttribute(t4);\n        } else t4.startsWith(v) && (r4.push({ type: 6, index: h4 }), e5.removeAttribute(t4));\n        if (M.test(e5.tagName)) {\n          const t4 = e5.textContent.split(v), i5 = t4.length - 1;\n          if (i5 > 0) {\n            e5.textContent = c3 ? c3.emptyScript : \"\";\n            for (let s3 = 0; s3 < i5; s3++) e5.append(t4[s3], lt()), I.nextNode(), r4.push({ type: 2, index: ++h4 });\n            e5.append(t4[i5], lt());\n          }\n        }\n      } else if (8 === e5.nodeType) if (e5.data === m) r4.push({ type: 2, index: h4 });\n      else {\n        let t4 = -1;\n        for (; -1 !== (t4 = e5.data.indexOf(v, t4 + 1)); ) r4.push({ type: 7, index: h4 }), t4 += v.length - 1;\n      }\n      h4++;\n    }\n  }\n  static createElement(t3, i4) {\n    const s2 = w.createElement(\"template\");\n    return s2.innerHTML = t3, s2;\n  }\n};\nfunction z(t3, i4, s2 = t3, e5) {\n  if (i4 === R) return i4;\n  let h4 = void 0 !== e5 ? s2.o?.[e5] : s2.l;\n  const o4 = st(i4) ? void 0 : i4._$litDirective$;\n  return h4?.constructor !== o4 && (h4?._$AO?.(false), void 0 === o4 ? h4 = void 0 : (h4 = new o4(t3), h4._$AT(t3, s2, e5)), void 0 !== e5 ? (s2.o ??= [])[e5] = h4 : s2.l = h4), void 0 !== h4 && (i4 = z(t3, h4._$AS(t3, i4.values), h4, e5)), i4;\n}\nvar F = class {\n  constructor(t3, i4) {\n    this._$AV = [], this._$AN = void 0, this._$AD = t3, this._$AM = i4;\n  }\n  get parentNode() {\n    return this._$AM.parentNode;\n  }\n  get _$AU() {\n    return this._$AM._$AU;\n  }\n  u(t3) {\n    const { el: { content: i4 }, parts: s2 } = this._$AD, e5 = (t3?.creationScope ?? w).importNode(i4, true);\n    I.currentNode = e5;\n    let h4 = I.nextNode(), o4 = 0, n5 = 0, r4 = s2[0];\n    for (; void 0 !== r4; ) {\n      if (o4 === r4.index) {\n        let i5;\n        2 === r4.type ? i5 = new et(h4, h4.nextSibling, this, t3) : 1 === r4.type ? i5 = new r4.ctor(h4, r4.name, r4.strings, this, t3) : 6 === r4.type && (i5 = new K(h4, this, t3)), this._$AV.push(i5), r4 = s2[++n5];\n      }\n      o4 !== r4?.index && (h4 = I.nextNode(), o4++);\n    }\n    return I.currentNode = w, e5;\n  }\n  p(t3) {\n    let i4 = 0;\n    for (const s2 of this._$AV) void 0 !== s2 && (void 0 !== s2.strings ? (s2._$AI(t3, s2, i4), i4 += s2.strings.length - 2) : s2._$AI(t3[i4])), i4++;\n  }\n};\nvar et = class _et {\n  get _$AU() {\n    return this._$AM?._$AU ?? this.v;\n  }\n  constructor(t3, i4, s2, e5) {\n    this.type = 2, this._$AH = D, this._$AN = void 0, this._$AA = t3, this._$AB = i4, this._$AM = s2, this.options = e5, this.v = e5?.isConnected ?? true;\n  }\n  get parentNode() {\n    let t3 = this._$AA.parentNode;\n    const i4 = this._$AM;\n    return void 0 !== i4 && 11 === t3?.nodeType && (t3 = i4.parentNode), t3;\n  }\n  get startNode() {\n    return this._$AA;\n  }\n  get endNode() {\n    return this._$AB;\n  }\n  _$AI(t3, i4 = this) {\n    t3 = z(this, t3, i4), st(t3) ? t3 === D || null == t3 || \"\" === t3 ? (this._$AH !== D && this._$AR(), this._$AH = D) : t3 !== this._$AH && t3 !== R && this._(t3) : void 0 !== t3._$litType$ ? this.$(t3) : void 0 !== t3.nodeType ? this.T(t3) : $(t3) ? this.k(t3) : this._(t3);\n  }\n  O(t3) {\n    return this._$AA.parentNode.insertBefore(t3, this._$AB);\n  }\n  T(t3) {\n    this._$AH !== t3 && (this._$AR(), this._$AH = this.O(t3));\n  }\n  _(t3) {\n    this._$AH !== D && st(this._$AH) ? this._$AA.nextSibling.data = t3 : this.T(w.createTextNode(t3)), this._$AH = t3;\n  }\n  $(t3) {\n    const { values: i4, _$litType$: s2 } = t3, e5 = \"number\" == typeof s2 ? this._$AC(t3) : (void 0 === s2.el && (s2.el = B.createElement(N(s2.h, s2.h[0]), this.options)), s2);\n    if (this._$AH?._$AD === e5) this._$AH.p(i4);\n    else {\n      const t4 = new F(e5, this), s3 = t4.u(this.options);\n      t4.p(i4), this.T(s3), this._$AH = t4;\n    }\n  }\n  _$AC(t3) {\n    let i4 = V.get(t3.strings);\n    return void 0 === i4 && V.set(t3.strings, i4 = new B(t3)), i4;\n  }\n  k(t3) {\n    g(this._$AH) || (this._$AH = [], this._$AR());\n    const i4 = this._$AH;\n    let s2, e5 = 0;\n    for (const h4 of t3) e5 === i4.length ? i4.push(s2 = new _et(this.O(lt()), this.O(lt()), this, this.options)) : s2 = i4[e5], s2._$AI(h4), e5++;\n    e5 < i4.length && (this._$AR(s2 && s2._$AB.nextSibling, e5), i4.length = e5);\n  }\n  _$AR(t3 = this._$AA.nextSibling, i4) {\n    for (this._$AP?.(false, true, i4); t3 && t3 !== this._$AB; ) {\n      const i5 = t3.nextSibling;\n      t3.remove(), t3 = i5;\n    }\n  }\n  setConnected(t3) {\n    void 0 === this._$AM && (this.v = t3, this._$AP?.(t3));\n  }\n};\nvar G = class {\n  get tagName() {\n    return this.element.tagName;\n  }\n  get _$AU() {\n    return this._$AM._$AU;\n  }\n  constructor(t3, i4, s2, e5, h4) {\n    this.type = 1, this._$AH = D, this._$AN = void 0, this.element = t3, this.name = i4, this._$AM = e5, this.options = h4, s2.length > 2 || \"\" !== s2[0] || \"\" !== s2[1] ? (this._$AH = Array(s2.length - 1).fill(new String()), this.strings = s2) : this._$AH = D;\n  }\n  _$AI(t3, i4 = this, s2, e5) {\n    const h4 = this.strings;\n    let o4 = false;\n    if (void 0 === h4) t3 = z(this, t3, i4, 0), o4 = !st(t3) || t3 !== this._$AH && t3 !== R, o4 && (this._$AH = t3);\n    else {\n      const e6 = t3;\n      let n5, r4;\n      for (t3 = h4[0], n5 = 0; n5 < h4.length - 1; n5++) r4 = z(this, e6[s2 + n5], i4, n5), r4 === R && (r4 = this._$AH[n5]), o4 ||= !st(r4) || r4 !== this._$AH[n5], r4 === D ? t3 = D : t3 !== D && (t3 += (r4 ?? \"\") + h4[n5 + 1]), this._$AH[n5] = r4;\n    }\n    o4 && !e5 && this.j(t3);\n  }\n  j(t3) {\n    t3 === D ? this.element.removeAttribute(this.name) : this.element.setAttribute(this.name, t3 ?? \"\");\n  }\n};\nvar Y = class extends G {\n  constructor() {\n    super(...arguments), this.type = 3;\n  }\n  j(t3) {\n    this.element[this.name] = t3 === D ? void 0 : t3;\n  }\n};\nvar Z = class extends G {\n  constructor() {\n    super(...arguments), this.type = 4;\n  }\n  j(t3) {\n    this.element.toggleAttribute(this.name, !!t3 && t3 !== D);\n  }\n};\nvar q = class extends G {\n  constructor(t3, i4, s2, e5, h4) {\n    super(t3, i4, s2, e5, h4), this.type = 5;\n  }\n  _$AI(t3, i4 = this) {\n    if ((t3 = z(this, t3, i4, 0) ?? D) === R) return;\n    const s2 = this._$AH, e5 = t3 === D && s2 !== D || t3.capture !== s2.capture || t3.once !== s2.once || t3.passive !== s2.passive, h4 = t3 !== D && (s2 === D || e5);\n    e5 && this.element.removeEventListener(this.name, this, s2), h4 && this.element.addEventListener(this.name, this, t3), this._$AH = t3;\n  }\n  handleEvent(t3) {\n    \"function\" == typeof this._$AH ? this._$AH.call(this.options?.host ?? this.element, t3) : this._$AH.handleEvent(t3);\n  }\n};\nvar K = class {\n  constructor(t3, i4, s2) {\n    this.element = t3, this.type = 6, this._$AN = void 0, this._$AM = i4, this.options = s2;\n  }\n  get _$AU() {\n    return this._$AM._$AU;\n  }\n  _$AI(t3) {\n    z(this, t3);\n  }\n};\nvar Re = n3.litHtmlPolyfillSupport;\nRe?.(B, et), (n3.litHtmlVersions ??= []).push(\"3.2.0\");\nvar Q = (t3, i4, s2) => {\n  const e5 = s2?.renderBefore ?? i4;\n  let h4 = e5._$litPart$;\n  if (void 0 === h4) {\n    const t4 = s2?.renderBefore ?? null;\n    e5._$litPart$ = h4 = new et(i4.insertBefore(lt(), t4), t4, void 0, s2 ?? {});\n  }\n  return h4._$AI(t3), h4;\n};\n\n// node_modules/lit-element/lit-element.js\nvar h3 = class extends b {\n  constructor() {\n    super(...arguments), this.renderOptions = { host: this }, this.o = void 0;\n  }\n  createRenderRoot() {\n    const t3 = super.createRenderRoot();\n    return this.renderOptions.renderBefore ??= t3.firstChild, t3;\n  }\n  update(t3) {\n    const e5 = this.render();\n    this.hasUpdated || (this.renderOptions.isConnected = this.isConnected), super.update(t3), this.o = Q(e5, this.renderRoot, this.renderOptions);\n  }\n  connectedCallback() {\n    super.connectedCallback(), this.o?.setConnected(true);\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback(), this.o?.setConnected(false);\n  }\n  render() {\n    return R;\n  }\n};\nh3._$litElement$ = true, h3[\"finalized\"] = true, globalThis.litElementHydrateSupport?.({ LitElement: h3 });\nvar f3 = globalThis.litElementPolyfillSupport;\nf3?.({ LitElement: h3 });\n(globalThis.litElementVersions ??= []).push(\"4.1.0\");\n\n// node_modules/@lit/reactive-element/decorators/property.js\nvar o3 = { attribute: true, type: String, converter: u, reflect: false, hasChanged: f };\nvar r3 = (t3 = o3, e5, r4) => {\n  const { kind: n5, metadata: i4 } = r4;\n  let s2 = globalThis.litPropertyMetadata.get(i4);\n  if (void 0 === s2 && globalThis.litPropertyMetadata.set(i4, s2 = /* @__PURE__ */ new Map()), s2.set(r4.name, t3), \"accessor\" === n5) {\n    const { name: o4 } = r4;\n    return { set(r5) {\n      const n6 = e5.get.call(this);\n      e5.set.call(this, r5), this.requestUpdate(o4, n6, t3);\n    }, init(e6) {\n      return void 0 !== e6 && this.P(o4, void 0, t3), e6;\n    } };\n  }\n  if (\"setter\" === n5) {\n    const { name: o4 } = r4;\n    return function(r5) {\n      const n6 = this[o4];\n      e5.call(this, r5), this.requestUpdate(o4, n6, t3);\n    };\n  }\n  throw Error(\"Unsupported decorator location: \" + n5);\n};\nfunction n4(t3) {\n  return (e5, o4) => \"object\" == typeof o4 ? r3(t3, e5, o4) : ((t4, e6, o5) => {\n    const r4 = e6.hasOwnProperty(o5);\n    return e6.constructor.createProperty(o5, r4 ? { ...t4, wrapped: true } : t4), r4 ? Object.getOwnPropertyDescriptor(e6, o5) : void 0;\n  })(t3, e5, o4);\n}\n\n// node_modules/lit-html/directive.js\nvar t2 = { ATTRIBUTE: 1, CHILD: 2, PROPERTY: 3, BOOLEAN_ATTRIBUTE: 4, EVENT: 5, ELEMENT: 6 };\nvar e4 = (t3) => (...e5) => ({ _$litDirective$: t3, values: e5 });\nvar i3 = class {\n  constructor(t3) {\n  }\n  get _$AU() {\n    return this._$AM._$AU;\n  }\n  _$AT(t3, e5, i4) {\n    this.t = t3, this._$AM = e5, this.i = i4;\n  }\n  _$AS(t3, e5) {\n    return this.update(t3, e5);\n  }\n  update(t3, e5) {\n    return this.render(...e5);\n  }\n};\n\n// node_modules/lit-html/directives/class-map.js\nvar Rt = e4(class extends i3 {\n  constructor(s2) {\n    if (super(s2), s2.type !== t2.ATTRIBUTE || \"class\" !== s2.name || s2.strings?.length > 2) throw Error(\"`classMap()` can only be used in the `class` attribute and must be the only part in the attribute.\");\n  }\n  render(t3) {\n    return \" \" + Object.keys(t3).filter(((s2) => t3[s2])).join(\" \") + \" \";\n  }\n  update(t3, [s2]) {\n    if (void 0 === this.st) {\n      this.st = /* @__PURE__ */ new Set(), void 0 !== t3.strings && (this.nt = new Set(t3.strings.join(\" \").split(/\\s/).filter(((t4) => \"\" !== t4))));\n      for (const t4 in s2) s2[t4] && !this.nt?.has(t4) && this.st.add(t4);\n      return this.render(s2);\n    }\n    const i4 = t3.element.classList;\n    for (const t4 of this.st) t4 in s2 || (i4.remove(t4), this.st.delete(t4));\n    for (const t4 in s2) {\n      const r4 = !!s2[t4];\n      r4 === this.st.has(t4) || this.nt?.has(t4) || (r4 ? (i4.add(t4), this.st.add(t4)) : (i4.remove(t4), this.st.delete(t4)));\n    }\n    return R;\n  }\n});\n\n// js/ipywidgets_styles.ts\nvar legacyStyles = i`\n    .legacy-button {\n        align-items: center;\n        background-color: var(--jp-layout-color2);\n        border-width: 0;\n        box-shadow: none;\n        color: var(--jp-ui-font-color1);\n        cursor: pointer;\n        display: flex;\n        font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n        font-size: var(--jp-widgets-font-size);\n        justify-content: center;\n        line-height: var(--jp-widgets-inline-height);\n        padding: 0;\n        user-select: none;\n    }\n\n    .legacy-button.primary {\n        background-color: var(--jp-brand-color1);\n        color: var(--jp-ui-inverse-font-color1);\n    }\n\n    .legacy-button:hover:enabled,\n    .legacy-button:focus:enabled {\n        box-shadow: 0 2px 2px 0\n                rgba(0, 0, 0, var(--md-shadow-key-penumbra-opacity)),\n            0 3px 1px -2px rgba(0, 0, 0, var(--md-shadow-key-umbra-opacity)),\n            0 1px 5px 0 rgba(0, 0, 0, var(--md-shadow-ambient-shadow-opacity));\n    }\n\n    .legacy-slider {\n        -webkit-appearance: none;\n        appearance: none;\n        background: var(--jp-layout-color3);\n        border-radius: 3px;\n        height: 4px;\n        outline: none;\n    }\n\n    .legacy-slider::-webkit-slider-thumb,\n    .legacy-slider::-moz-range-thumb {\n        -moz-appearance: none;\n        -webkit-appearance: none;\n        appearance: none;\n        border-radius: 50%;\n        cursor: pointer;\n        height: var(--jp-widgets-slider-handle-size);\n        width: var(--jp-widgets-slider-handle-size);\n    }\n\n    .legacy-text {\n        color: var(--jp-widgets-label-color);\n        font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n        font-size: var(--jp-widgets-font-size);\n        height: var(--jp-widgets-inline-height);\n        line-height: var(--jp-widgets-inline-height);\n        vertical-align: middle;\n    }\n\n    .legacy-select {\n        -moz-appearance: none;\n        -webkit-appearance: none;\n        appearance: none;\n        background-color: var(--jp-widgets-input-background-color);\n        background-image: var(--jp-widgets-dropdown-arrow);\n        background-position: right center;\n        background-repeat: no-repeat;\n        background-size: 20px;\n        border-radius: 0;\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        box-shadow: none;\n        box-sizing: border-box;\n        color: var(--jp-widgets-input-color);\n        flex: 1 1 var(--jp-widgets-inline-width-short);\n        font-size: var(--jp-widgets-font-size);\n        height: 28px;\n        line-height: 28px;\n        min-width: 0;\n        outline: none !important;\n        padding-left: calc(var(--jp-widgets-input-padding)* 2);\n        padding-right: 20px;\n        vertical-align: top;\n    }\n\n    .legacy-select[disabled] {\n        opacity: 0.4;\n        cursor: not-allowed;\n    }\n\n    .legacy-text-input {\n        background: var(--jp-widgets-input-background-color);\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        box-sizing: border-box;\n        color: var(--jp-widgets-input-color);\n        flex-grow: 1;\n        flex-shrink: 1;\n        font-size: var(--jp-widgets-font-size);\n        height: var(--jp-widgets-inline-height);\n        line-height: var(--jp-widgets-inline-height);\n        min-width: 0;\n        outline: none !important;\n        padding: var(--jp-widgets-input-padding) calc(var(--jp-widgets-input-padding) * 2);\n    }\n\n    .legacy-text-input:disabled {\n        opacity: var(--jp-widgets-disabled-opacity);\n    }\n\n    .legacy-color {\n        align-self: stretch;\n        background: var(--jp-widgets-input-background-color);\n        border-left: none;\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        box-sizing: border-box;\n        color: var(--jp-widgets-input-color);\n        flex-grow: 0;\n        flex-shrink: 0;\n        height: var(--jp-widgets-inline-height);\n        outline: none !important;\n        padding: 0 2px;\n        width: var(--jp-widgets-inline-height);\n    }\n\n    .legacy-radio {\n        margin: 0;\n        vertical-align: middle;\n    }\n\n    .legacy-button.active {\n        background-color: var(--colab-primary-surface-color, --jp-layout-color3);\n        color: var(--jp-ui-font-color1);\n        box-shadow: 0 4px 5px 0 rgba(0, 0, 0, var(--md-shadow-key-penumbra-opacity)),\n                    0 1px 10px 0 rgba(0, 0, 0, var(--md-shadow-ambient-shadow-opacity)),\n                    0 2px 4px -1px rgba(0, 0, 0, var(--md-shadow-key-umbra-opacity));\n    }\n\n    .legacy-button.primary {\n        background-color: var(--jp-brand-color1);\n        color: var(--jp-ui-inverse-font-color1);\n    }\n\n    .legacy-button.primary.active {\n        background-color: var(--jp-brand-color0);\n        color: var(--jp-ui-inverse-font-color0);\n    }\n\n    .legacy-button.active {\n        background-color: var(--colab-primary-surface-color, --jp-layout-color3);\n        color: var(--jp-ui-font-color1);\n        box-shadow: 0 4px 5px 0 rgba(0, 0, 0, var(--md-shadow-key-penumbra-opacity)),\n                    0 1px 10px 0 rgba(0, 0, 0, var(--md-shadow-ambient-shadow-opacity)),\n                    0 2px 4px -1px rgba(0, 0, 0, var(--md-shadow-key-umbra-opacity));\n    }\n\n    .legacy-button.primary {\n        background-color: var(--jp-brand-color1);\n        color: var(--jp-ui-inverse-font-color1);\n    }\n\n    .legacy-button.primary.active {\n        background-color: var(--jp-brand-color0);\n        color: var(--jp-ui-inverse-font-color0);\n    }\n\n    .legacy-select {\n        -moz-appearance: none;\n        -webkit-appearance: none;\n        appearance: none;\n        background-color: var(--jp-widgets-input-background-color);\n        background-image: var(--jp-widgets-dropdown-arrow);\n        background-position: right center;\n        background-repeat: no-repeat;\n        background-size: 20px;\n        border-radius: 0;\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        box-shadow: none;\n        box-sizing: border-box;\n        color: var(--jp-widgets-input-color);\n        flex: 1 1 var(--jp-widgets-inline-width-short);\n        font-size: var(--jp-widgets-font-size);\n        height: inherit;\n        min-width: 0;\n        outline: none !important;\n        padding-left: calc(var(--jp-widgets-input-padding)* 2);\n        padding-right: 20px;\n        vertical-align: top;\n    }\n\n    .legacy-input {\n        box-sizing: border-box;\n        background-color: var(--colab-primary-surface-color, --jp-widgets-input-background-color);\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        color: var(--jp-widgets-input-color);\n        flex-grow: 1;\n        flex-shrink: 1;\n        font-size: var(--jp-widgets-font-size);\n        min-width: 0;\n        outline: none !important;\n        padding: var(--jp-widgets-input-padding) calc(var(--jp-widgets-input-padding)* 2);\n        height: var(--jp-widgets-inline-height);\n        line-height: var(--jp-widgets-inline-height);\n    }\n`;\n\n// js/styles.ts\nvar materialStyles = i`\n    @font-face {\n        font-family: \"Material Symbols Outlined\";\n        font-style: normal;\n        font-weight: 400;\n        src: url(https://fonts.gstatic.com/s/materialsymbolsoutlined/v205/kJF1BvYX7BgnkSrUwT8OhrdQw4oELdPIeeII9v6oDMzByHX9rA6RzaxHMPdY43zj-jCxv3fzvRNU22ZXGJpEpjC_1v-p_4MrImHCIJIZrDCvHOejbd5zrDAt.woff2)\n            format(\"woff2\");\n    }\n\n    .material-symbols-outlined {\n        -webkit-font-feature-settings: \"liga\";\n        -webkit-font-smoothing: antialiased;\n        direction: ltr;\n        display: inline-block;\n        font-family: \"Material Symbols Outlined\";\n        font-style: normal;\n        font-weight: normal;\n        letter-spacing: normal;\n        line-height: 1;\n        text-transform: none;\n        white-space: nowrap;\n        word-wrap: normal;\n    }\n`;\nvar flexStyles = i`\n    .vertical-flex {\n        display: flex;\n        flex-direction: column;\n        gap: 8px;\n    }\n\n    .horizontal-flex {\n        align-items: center;\n        display: flex;\n        flex-wrap: nowrap;\n        gap: 8px;\n    }\n\n    input:not([type=\"radio\"]):not([type=\"checkbox\"]) {\n        width: 100%;\n    }\n\n    select {\n        width: 100%;\n    }\n\n    .horizontal-flex .legacy-text {\n        flex-shrink: 0;\n    }\n`;\n\n// js/utils.ts\nfunction loadFonts() {\n  if (!document.querySelector(\".custom-fonts\")) {\n    const styleElement = document.createElement(\"style\");\n    styleElement.classList.add(\"custom-fonts\");\n    styleElement.textContent = '@import \"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined\";';\n    document.body.appendChild(styleElement);\n  }\n}\nfunction reverseMap(map) {\n  const reversedMap = /* @__PURE__ */ new Map();\n  for (const [key, value] of map.entries()) {\n    if (value != null) {\n      reversedMap.set(value, key);\n    }\n  }\n  return reversedMap;\n}\n\n// js/lit_widget.ts\nvar LitWidget = class extends h3 {\n  constructor() {\n    super(...arguments);\n    this._model = void 0;\n  }\n  onCustomMessage(_msg) {\n  }\n  viewNameToModelName() {\n    return reverseMap(this.modelNameToViewName());\n  }\n  set model(model) {\n    this._model = model;\n    for (const [modelKey, widgetKey] of this.modelNameToViewName()) {\n      if (widgetKey) {\n        this[widgetKey] = model.get(modelKey);\n        model.on(`change:${String(modelKey)}`, () => {\n          this[widgetKey] = model.get(modelKey);\n        });\n      }\n    }\n    model.on(\"msg:custom\", (msg) => {\n      this.onCustomMessage?.(msg);\n    });\n  }\n  get model() {\n    return this._model;\n  }\n  updated(changedProperties) {\n    const viewToModelMap = this.viewNameToModelName();\n    for (const [viewProp, _2] of changedProperties) {\n      const castViewProp = viewProp;\n      if (viewToModelMap.has(castViewProp)) {\n        const modelProp = viewToModelMap.get(castViewProp);\n        this._model?.set(\n          modelProp,\n          this[castViewProp]\n        );\n      }\n    }\n    this._model?.save_changes();\n  }\n};\n\n// js/layer_manager_row.ts\nvar LayerManagerRow = class extends LitWidget {\n  constructor() {\n    super(...arguments);\n    this.name = \"\";\n    this.visible = true;\n    this.opacity = 1;\n    this.isLoading = false;\n    this.isConfirmDialogVisible = false;\n  }\n  static get componentName() {\n    return `layer-manager-row`;\n  }\n  static {\n    this.styles = [\n      legacyStyles,\n      materialStyles,\n      i`\n            .row {\n                align-items: center;\n                display: flex;\n                gap: 4px;\n            }\n\n            .layer-name {\n                cursor: pointer;\n                flex-grow: 1;\n                max-width: 150px;\n                overflow: hidden;\n                text-overflow: ellipsis;\n            }\n\n            .row-button {\n                font-size: 16px;\n                height: 28px;\n                width: 28px;\n            }\n\n            .layer-opacity-slider {\n                width: 70px;\n            }\n\n            .layer-visibility-checkbox {\n                margin: 2px;\n            }\n\n            .spinner {\n                -webkit-animation: spin 2s linear infinite;\n                animation: spin 2s linear infinite;\n                border-radius: 50%;\n                border: 4px solid var(--jp-widgets-input-border-color);\n                border-top: 4px solid var(--jp-widgets-color);\n                height: 12px;\n                width: 12px;\n            }\n\n            @-webkit-keyframes spin {\n                0% {\n                    -webkit-transform: rotate(0deg);\n                }\n                100% {\n                    -webkit-transform: rotate(360deg);\n                }\n            }\n\n            @keyframes spin {\n                0% {\n                    transform: rotate(0deg);\n                }\n                100% {\n                    transform: rotate(360deg);\n                }\n            }\n\n            button.loading .spinner,\n            button.loading:hover .close-icon,\n            button.done-loading .close-icon {\n                display: block;\n            }\n\n            button.loading .close-icon,\n            button.loading:hover .spinner,\n            button.done-loading .spinner {\n                display: none;\n            }\n\n            .remove-layer-text {\n                flex-grow: 1;\n                padding-left: 22px;\n            }\n\n            .confirm-deletion-container {\n                margin-top: 4px;\n            }\n\n            .confirm-deletion-container button {\n                height: 28px;\n                width: 70px;\n            }\n        `\n    ];\n  }\n  modelNameToViewName() {\n    return /* @__PURE__ */ new Map([\n      [\"name\", \"name\"],\n      [\"visible\", \"visible\"],\n      [\"opacity\", \"opacity\"],\n      [\"is_loading\", \"isLoading\"]\n    ]);\n  }\n  render() {\n    return ke`\n            <div class=\"row\">\n                <input\n                    type=\"checkbox\"\n                    class=\"layer-visibility-checkbox\"\n                    .checked=\"${this.visible}\"\n                    @click=\"${this.onLayerVisibilityChanged}\"\n                />\n                <span\n                    class=\"legacy-text layer-name\"\n                    @click=\"${this.onLayerVisibilityChanged}\"\n                >\n                    ${this.name}\n                </span>\n                <input\n                    type=\"range\"\n                    class=\"legacy-slider layer-opacity-slider\"\n                    min=\"0\"\n                    max=\"1\"\n                    step=\"0.01\"\n                    .value=\"${this.opacity}\"\n                    @input=\"${this.onLayerOpacityChanged}\"\n                />\n                <button\n                    class=\"legacy-button row-button settings-button\"\n                    @click=\"${this.onSettingsClicked}\"\n                >\n                    <span class=\"material-symbols-outlined\">settings</span>\n                </button>\n                <button\n                    class=${Rt({\n      \"legacy-button\": true,\n      \"row-button\": true,\n      \"delete-button\": true,\n      loading: this.isLoading,\n      \"done-loading\": !this.isLoading\n    })}\n                    @click=\"${this.onDeleteClicked}\"\n                >\n                    <div class=\"spinner\"></div>\n                    <span class=\"close-icon material-symbols-outlined\"\n                        >delete</span\n                    >\n                </button>\n            </div>\n            ${this.renderConfirmDialog()}\n        `;\n  }\n  renderConfirmDialog() {\n    if (!this.isConfirmDialogVisible) {\n      return D;\n    }\n    return ke`\n            <div class=\"row confirm-deletion-container\">\n                <span class=\"legacy-text remove-layer-text\">Remove layer?</span>\n                <button\n                    class=\"legacy-button\"\n                    @click=\"${this.cancelDeletion}\"\n                >\n                    No\n                </button>\n                <button\n                    class=\"legacy-button primary confirm-deletion-button\"\n                    @click=\"${this.confirmDeletion}\"\n                >\n                    Yes\n                </button>\n            </div>\n        `;\n  }\n  onLayerVisibilityChanged(_event) {\n    this.visible = !this.visible;\n  }\n  onLayerOpacityChanged(event) {\n    const target = event.target;\n    this.opacity = parseFloat(target.value);\n  }\n  onSettingsClicked(_2) {\n    this.model?.send({ type: \"click\", id: \"settings\" });\n  }\n  onDeleteClicked(_2) {\n    this.isConfirmDialogVisible = true;\n  }\n  confirmDeletion(_2) {\n    this.model?.send({ type: \"click\", id: \"delete\" });\n  }\n  cancelDeletion(_2) {\n    this.isConfirmDialogVisible = false;\n  }\n};\n__decorateClass([\n  n4()\n], LayerManagerRow.prototype, \"name\", 2);\n__decorateClass([\n  n4()\n], LayerManagerRow.prototype, \"visible\", 2);\n__decorateClass([\n  n4()\n], LayerManagerRow.prototype, \"opacity\", 2);\n__decorateClass([\n  n4()\n], LayerManagerRow.prototype, \"isLoading\", 2);\n__decorateClass([\n  n4()\n], LayerManagerRow.prototype, \"isConfirmDialogVisible\", 2);\nif (!customElements.get(LayerManagerRow.componentName)) {\n  customElements.define(LayerManagerRow.componentName, LayerManagerRow);\n}\nfunction render({ model, el }) {\n  loadFonts();\n  const row = document.createElement(LayerManagerRow.componentName);\n  row.model = model;\n  el.appendChild(row);\n}\nvar layer_manager_row_default = { render };\nexport {\n  LayerManagerRow,\n  layer_manager_row_default as default\n};\n/*! Bundled license information:\n\n@lit/reactive-element/css-tag.js:\n  (**\n   * @license\n   * Copyright 2019 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n\n@lit/reactive-element/reactive-element.js:\nlit-html/lit-html.js:\nlit-element/lit-element.js:\n@lit/reactive-element/decorators/custom-element.js:\n@lit/reactive-element/decorators/property.js:\n@lit/reactive-element/decorators/state.js:\n@lit/reactive-element/decorators/event-options.js:\n@lit/reactive-element/decorators/base.js:\n@lit/reactive-element/decorators/query.js:\n@lit/reactive-element/decorators/query-all.js:\n@lit/reactive-element/decorators/query-async.js:\n@lit/reactive-element/decorators/query-assigned-nodes.js:\nlit-html/directive.js:\n  (**\n   * @license\n   * Copyright 2017 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n\nlit-html/is-server.js:\n  (**\n   * @license\n   * Copyright 2022 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n\n@lit/reactive-element/decorators/query-assigned-elements.js:\n  (**\n   * @license\n   * Copyright 2021 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n\nlit-html/directives/class-map.js:\n  (**\n   * @license\n   * Copyright 2018 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n*/\n",
              "_model_module": "anywidget",
              "_model_module_version": "~0.9.*",
              "_model_name": "AnyModel",
              "_view_count": null,
              "_view_module": "anywidget",
              "_view_module_version": "~0.9.*",
              "_view_name": "AnyView",
              "is_loading": false,
              "layout": "IPY_MODEL_c4c256a26eee4aeab6dc8b96039bd87e",
              "name": "OpenStreetMap.Mapnik",
              "opacity": 1,
              "visible": true
            }
          },
          "9fb60667bc284246bca52ee205161aac": {
            "model_module": "anywidget",
            "model_name": "AnyModel",
            "model_module_version": "~0.9.*",
            "state": {
              "_anywidget_id": "geemap.map_widgets.LayerManagerRow",
              "_dom_classes": [
                "geemap-colab"
              ],
              "_esm": "var __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __decorateClass = (decorators, target, key, kind) => {\n  var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;\n  for (var i4 = decorators.length - 1, decorator; i4 >= 0; i4--)\n    if (decorator = decorators[i4])\n      result = (kind ? decorator(target, key, result) : decorator(result)) || result;\n  if (kind && result) __defProp(target, key, result);\n  return result;\n};\n\n// node_modules/@lit/reactive-element/css-tag.js\nvar t = globalThis;\nvar e = t.ShadowRoot && (void 0 === t.ShadyCSS || t.ShadyCSS.nativeShadow) && \"adoptedStyleSheets\" in Document.prototype && \"replace\" in CSSStyleSheet.prototype;\nvar s = /* @__PURE__ */ Symbol();\nvar o = /* @__PURE__ */ new WeakMap();\nvar n = class {\n  constructor(t3, e5, o4) {\n    if (this._$cssResult$ = true, o4 !== s) throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");\n    this.cssText = t3, this.t = e5;\n  }\n  get styleSheet() {\n    let t3 = this.o;\n    const s2 = this.t;\n    if (e && void 0 === t3) {\n      const e5 = void 0 !== s2 && 1 === s2.length;\n      e5 && (t3 = o.get(s2)), void 0 === t3 && ((this.o = t3 = new CSSStyleSheet()).replaceSync(this.cssText), e5 && o.set(s2, t3));\n    }\n    return t3;\n  }\n  toString() {\n    return this.cssText;\n  }\n};\nvar r = (t3) => new n(\"string\" == typeof t3 ? t3 : t3 + \"\", void 0, s);\nvar i = (t3, ...e5) => {\n  const o4 = 1 === t3.length ? t3[0] : e5.reduce(((e6, s2, o5) => e6 + ((t4) => {\n    if (true === t4._$cssResult$) return t4.cssText;\n    if (\"number\" == typeof t4) return t4;\n    throw Error(\"Value passed to 'css' function must be a 'css' function result: \" + t4 + \". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\");\n  })(s2) + t3[o5 + 1]), t3[0]);\n  return new n(o4, t3, s);\n};\nvar S = (s2, o4) => {\n  if (e) s2.adoptedStyleSheets = o4.map(((t3) => t3 instanceof CSSStyleSheet ? t3 : t3.styleSheet));\n  else for (const e5 of o4) {\n    const o5 = document.createElement(\"style\"), n5 = t.litNonce;\n    void 0 !== n5 && o5.setAttribute(\"nonce\", n5), o5.textContent = e5.cssText, s2.appendChild(o5);\n  }\n};\nvar c = e ? (t3) => t3 : (t3) => t3 instanceof CSSStyleSheet ? ((t4) => {\n  let e5 = \"\";\n  for (const s2 of t4.cssRules) e5 += s2.cssText;\n  return r(e5);\n})(t3) : t3;\n\n// node_modules/@lit/reactive-element/reactive-element.js\nvar { is: i2, defineProperty: e2, getOwnPropertyDescriptor: r2, getOwnPropertyNames: h, getOwnPropertySymbols: o2, getPrototypeOf: n2 } = Object;\nvar a = globalThis;\nvar c2 = a.trustedTypes;\nvar l = c2 ? c2.emptyScript : \"\";\nvar p = a.reactiveElementPolyfillSupport;\nvar d = (t3, s2) => t3;\nvar u = { toAttribute(t3, s2) {\n  switch (s2) {\n    case Boolean:\n      t3 = t3 ? l : null;\n      break;\n    case Object:\n    case Array:\n      t3 = null == t3 ? t3 : JSON.stringify(t3);\n  }\n  return t3;\n}, fromAttribute(t3, s2) {\n  let i4 = t3;\n  switch (s2) {\n    case Boolean:\n      i4 = null !== t3;\n      break;\n    case Number:\n      i4 = null === t3 ? null : Number(t3);\n      break;\n    case Object:\n    case Array:\n      try {\n        i4 = JSON.parse(t3);\n      } catch (t4) {\n        i4 = null;\n      }\n  }\n  return i4;\n} };\nvar f = (t3, s2) => !i2(t3, s2);\nvar y = { attribute: true, type: String, converter: u, reflect: false, hasChanged: f };\nSymbol.metadata ??= /* @__PURE__ */ Symbol(\"metadata\"), a.litPropertyMetadata ??= /* @__PURE__ */ new WeakMap();\nvar b = class extends HTMLElement {\n  static addInitializer(t3) {\n    this._$Ei(), (this.l ??= []).push(t3);\n  }\n  static get observedAttributes() {\n    return this.finalize(), this._$Eh && [...this._$Eh.keys()];\n  }\n  static createProperty(t3, s2 = y) {\n    if (s2.state && (s2.attribute = false), this._$Ei(), this.elementProperties.set(t3, s2), !s2.noAccessor) {\n      const i4 = /* @__PURE__ */ Symbol(), r4 = this.getPropertyDescriptor(t3, i4, s2);\n      void 0 !== r4 && e2(this.prototype, t3, r4);\n    }\n  }\n  static getPropertyDescriptor(t3, s2, i4) {\n    const { get: e5, set: h4 } = r2(this.prototype, t3) ?? { get() {\n      return this[s2];\n    }, set(t4) {\n      this[s2] = t4;\n    } };\n    return { get() {\n      return e5?.call(this);\n    }, set(s3) {\n      const r4 = e5?.call(this);\n      h4.call(this, s3), this.requestUpdate(t3, r4, i4);\n    }, configurable: true, enumerable: true };\n  }\n  static getPropertyOptions(t3) {\n    return this.elementProperties.get(t3) ?? y;\n  }\n  static _$Ei() {\n    if (this.hasOwnProperty(d(\"elementProperties\"))) return;\n    const t3 = n2(this);\n    t3.finalize(), void 0 !== t3.l && (this.l = [...t3.l]), this.elementProperties = new Map(t3.elementProperties);\n  }\n  static finalize() {\n    if (this.hasOwnProperty(d(\"finalized\"))) return;\n    if (this.finalized = true, this._$Ei(), this.hasOwnProperty(d(\"properties\"))) {\n      const t4 = this.properties, s2 = [...h(t4), ...o2(t4)];\n      for (const i4 of s2) this.createProperty(i4, t4[i4]);\n    }\n    const t3 = this[Symbol.metadata];\n    if (null !== t3) {\n      const s2 = litPropertyMetadata.get(t3);\n      if (void 0 !== s2) for (const [t4, i4] of s2) this.elementProperties.set(t4, i4);\n    }\n    this._$Eh = /* @__PURE__ */ new Map();\n    for (const [t4, s2] of this.elementProperties) {\n      const i4 = this._$Eu(t4, s2);\n      void 0 !== i4 && this._$Eh.set(i4, t4);\n    }\n    this.elementStyles = this.finalizeStyles(this.styles);\n  }\n  static finalizeStyles(s2) {\n    const i4 = [];\n    if (Array.isArray(s2)) {\n      const e5 = new Set(s2.flat(1 / 0).reverse());\n      for (const s3 of e5) i4.unshift(c(s3));\n    } else void 0 !== s2 && i4.push(c(s2));\n    return i4;\n  }\n  static _$Eu(t3, s2) {\n    const i4 = s2.attribute;\n    return false === i4 ? void 0 : \"string\" == typeof i4 ? i4 : \"string\" == typeof t3 ? t3.toLowerCase() : void 0;\n  }\n  constructor() {\n    super(), this._$Ep = void 0, this.isUpdatePending = false, this.hasUpdated = false, this._$Em = null, this._$Ev();\n  }\n  _$Ev() {\n    this._$ES = new Promise(((t3) => this.enableUpdating = t3)), this._$AL = /* @__PURE__ */ new Map(), this._$E_(), this.requestUpdate(), this.constructor.l?.forEach(((t3) => t3(this)));\n  }\n  addController(t3) {\n    (this._$EO ??= /* @__PURE__ */ new Set()).add(t3), void 0 !== this.renderRoot && this.isConnected && t3.hostConnected?.();\n  }\n  removeController(t3) {\n    this._$EO?.delete(t3);\n  }\n  _$E_() {\n    const t3 = /* @__PURE__ */ new Map(), s2 = this.constructor.elementProperties;\n    for (const i4 of s2.keys()) this.hasOwnProperty(i4) && (t3.set(i4, this[i4]), delete this[i4]);\n    t3.size > 0 && (this._$Ep = t3);\n  }\n  createRenderRoot() {\n    const t3 = this.shadowRoot ?? this.attachShadow(this.constructor.shadowRootOptions);\n    return S(t3, this.constructor.elementStyles), t3;\n  }\n  connectedCallback() {\n    this.renderRoot ??= this.createRenderRoot(), this.enableUpdating(true), this._$EO?.forEach(((t3) => t3.hostConnected?.()));\n  }\n  enableUpdating(t3) {\n  }\n  disconnectedCallback() {\n    this._$EO?.forEach(((t3) => t3.hostDisconnected?.()));\n  }\n  attributeChangedCallback(t3, s2, i4) {\n    this._$AK(t3, i4);\n  }\n  _$EC(t3, s2) {\n    const i4 = this.constructor.elementProperties.get(t3), e5 = this.constructor._$Eu(t3, i4);\n    if (void 0 !== e5 && true === i4.reflect) {\n      const r4 = (void 0 !== i4.converter?.toAttribute ? i4.converter : u).toAttribute(s2, i4.type);\n      this._$Em = t3, null == r4 ? this.removeAttribute(e5) : this.setAttribute(e5, r4), this._$Em = null;\n    }\n  }\n  _$AK(t3, s2) {\n    const i4 = this.constructor, e5 = i4._$Eh.get(t3);\n    if (void 0 !== e5 && this._$Em !== e5) {\n      const t4 = i4.getPropertyOptions(e5), r4 = \"function\" == typeof t4.converter ? { fromAttribute: t4.converter } : void 0 !== t4.converter?.fromAttribute ? t4.converter : u;\n      this._$Em = e5, this[e5] = r4.fromAttribute(s2, t4.type), this._$Em = null;\n    }\n  }\n  requestUpdate(t3, s2, i4) {\n    if (void 0 !== t3) {\n      if (i4 ??= this.constructor.getPropertyOptions(t3), !(i4.hasChanged ?? f)(this[t3], s2)) return;\n      this.P(t3, s2, i4);\n    }\n    false === this.isUpdatePending && (this._$ES = this._$ET());\n  }\n  P(t3, s2, i4) {\n    this._$AL.has(t3) || this._$AL.set(t3, s2), true === i4.reflect && this._$Em !== t3 && (this._$Ej ??= /* @__PURE__ */ new Set()).add(t3);\n  }\n  async _$ET() {\n    this.isUpdatePending = true;\n    try {\n      await this._$ES;\n    } catch (t4) {\n      Promise.reject(t4);\n    }\n    const t3 = this.scheduleUpdate();\n    return null != t3 && await t3, !this.isUpdatePending;\n  }\n  scheduleUpdate() {\n    return this.performUpdate();\n  }\n  performUpdate() {\n    if (!this.isUpdatePending) return;\n    if (!this.hasUpdated) {\n      if (this.renderRoot ??= this.createRenderRoot(), this._$Ep) {\n        for (const [t5, s3] of this._$Ep) this[t5] = s3;\n        this._$Ep = void 0;\n      }\n      const t4 = this.constructor.elementProperties;\n      if (t4.size > 0) for (const [s3, i4] of t4) true !== i4.wrapped || this._$AL.has(s3) || void 0 === this[s3] || this.P(s3, this[s3], i4);\n    }\n    let t3 = false;\n    const s2 = this._$AL;\n    try {\n      t3 = this.shouldUpdate(s2), t3 ? (this.willUpdate(s2), this._$EO?.forEach(((t4) => t4.hostUpdate?.())), this.update(s2)) : this._$EU();\n    } catch (s3) {\n      throw t3 = false, this._$EU(), s3;\n    }\n    t3 && this._$AE(s2);\n  }\n  willUpdate(t3) {\n  }\n  _$AE(t3) {\n    this._$EO?.forEach(((t4) => t4.hostUpdated?.())), this.hasUpdated || (this.hasUpdated = true, this.firstUpdated(t3)), this.updated(t3);\n  }\n  _$EU() {\n    this._$AL = /* @__PURE__ */ new Map(), this.isUpdatePending = false;\n  }\n  get updateComplete() {\n    return this.getUpdateComplete();\n  }\n  getUpdateComplete() {\n    return this._$ES;\n  }\n  shouldUpdate(t3) {\n    return true;\n  }\n  update(t3) {\n    this._$Ej &&= this._$Ej.forEach(((t4) => this._$EC(t4, this[t4]))), this._$EU();\n  }\n  updated(t3) {\n  }\n  firstUpdated(t3) {\n  }\n};\nb.elementStyles = [], b.shadowRootOptions = { mode: \"open\" }, b[d(\"elementProperties\")] = /* @__PURE__ */ new Map(), b[d(\"finalized\")] = /* @__PURE__ */ new Map(), p?.({ ReactiveElement: b }), (a.reactiveElementVersions ??= []).push(\"2.0.4\");\n\n// node_modules/lit-html/lit-html.js\nvar n3 = globalThis;\nvar c3 = n3.trustedTypes;\nvar h2 = c3 ? c3.createPolicy(\"lit-html\", { createHTML: (t3) => t3 }) : void 0;\nvar f2 = \"$lit$\";\nvar v = `lit$${Math.random().toFixed(9).slice(2)}$`;\nvar m = \"?\" + v;\nvar _ = `<${m}>`;\nvar w = document;\nvar lt = () => w.createComment(\"\");\nvar st = (t3) => null === t3 || \"object\" != typeof t3 && \"function\" != typeof t3;\nvar g = Array.isArray;\nvar $ = (t3) => g(t3) || \"function\" == typeof t3?.[Symbol.iterator];\nvar x = \"[ \t\\n\\f\\r]\";\nvar T = /<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g;\nvar E = /-->/g;\nvar k = />/g;\nvar O = RegExp(`>|${x}(?:([^\\\\s\"'>=/]+)(${x}*=${x}*(?:[^ \t\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`, \"g\");\nvar S2 = /'/g;\nvar j = /\"/g;\nvar M = /^(?:script|style|textarea|title)$/i;\nvar P = (t3) => (i4, ...s2) => ({ _$litType$: t3, strings: i4, values: s2 });\nvar ke = P(1);\nvar Oe = P(2);\nvar Se = P(3);\nvar R = /* @__PURE__ */ Symbol.for(\"lit-noChange\");\nvar D = /* @__PURE__ */ Symbol.for(\"lit-nothing\");\nvar V = /* @__PURE__ */ new WeakMap();\nvar I = w.createTreeWalker(w, 129);\nfunction N(t3, i4) {\n  if (!g(t3) || !t3.hasOwnProperty(\"raw\")) throw Error(\"invalid template strings array\");\n  return void 0 !== h2 ? h2.createHTML(i4) : i4;\n}\nvar U = (t3, i4) => {\n  const s2 = t3.length - 1, e5 = [];\n  let h4, o4 = 2 === i4 ? \"<svg>\" : 3 === i4 ? \"<math>\" : \"\", n5 = T;\n  for (let i5 = 0; i5 < s2; i5++) {\n    const s3 = t3[i5];\n    let r4, l2, c4 = -1, a2 = 0;\n    for (; a2 < s3.length && (n5.lastIndex = a2, l2 = n5.exec(s3), null !== l2); ) a2 = n5.lastIndex, n5 === T ? \"!--\" === l2[1] ? n5 = E : void 0 !== l2[1] ? n5 = k : void 0 !== l2[2] ? (M.test(l2[2]) && (h4 = RegExp(\"</\" + l2[2], \"g\")), n5 = O) : void 0 !== l2[3] && (n5 = O) : n5 === O ? \">\" === l2[0] ? (n5 = h4 ?? T, c4 = -1) : void 0 === l2[1] ? c4 = -2 : (c4 = n5.lastIndex - l2[2].length, r4 = l2[1], n5 = void 0 === l2[3] ? O : '\"' === l2[3] ? j : S2) : n5 === j || n5 === S2 ? n5 = O : n5 === E || n5 === k ? n5 = T : (n5 = O, h4 = void 0);\n    const u2 = n5 === O && t3[i5 + 1].startsWith(\"/>\") ? \" \" : \"\";\n    o4 += n5 === T ? s3 + _ : c4 >= 0 ? (e5.push(r4), s3.slice(0, c4) + f2 + s3.slice(c4) + v + u2) : s3 + v + (-2 === c4 ? i5 : u2);\n  }\n  return [N(t3, o4 + (t3[s2] || \"<?>\") + (2 === i4 ? \"</svg>\" : 3 === i4 ? \"</math>\" : \"\")), e5];\n};\nvar B = class _B {\n  constructor({ strings: t3, _$litType$: i4 }, s2) {\n    let e5;\n    this.parts = [];\n    let h4 = 0, o4 = 0;\n    const n5 = t3.length - 1, r4 = this.parts, [l2, a2] = U(t3, i4);\n    if (this.el = _B.createElement(l2, s2), I.currentNode = this.el.content, 2 === i4 || 3 === i4) {\n      const t4 = this.el.content.firstChild;\n      t4.replaceWith(...t4.childNodes);\n    }\n    for (; null !== (e5 = I.nextNode()) && r4.length < n5; ) {\n      if (1 === e5.nodeType) {\n        if (e5.hasAttributes()) for (const t4 of e5.getAttributeNames()) if (t4.endsWith(f2)) {\n          const i5 = a2[o4++], s3 = e5.getAttribute(t4).split(v), n6 = /([.?@])?(.*)/.exec(i5);\n          r4.push({ type: 1, index: h4, name: n6[2], strings: s3, ctor: \".\" === n6[1] ? Y : \"?\" === n6[1] ? Z : \"@\" === n6[1] ? q : G }), e5.removeAttribute(t4);\n        } else t4.startsWith(v) && (r4.push({ type: 6, index: h4 }), e5.removeAttribute(t4));\n        if (M.test(e5.tagName)) {\n          const t4 = e5.textContent.split(v), i5 = t4.length - 1;\n          if (i5 > 0) {\n            e5.textContent = c3 ? c3.emptyScript : \"\";\n            for (let s3 = 0; s3 < i5; s3++) e5.append(t4[s3], lt()), I.nextNode(), r4.push({ type: 2, index: ++h4 });\n            e5.append(t4[i5], lt());\n          }\n        }\n      } else if (8 === e5.nodeType) if (e5.data === m) r4.push({ type: 2, index: h4 });\n      else {\n        let t4 = -1;\n        for (; -1 !== (t4 = e5.data.indexOf(v, t4 + 1)); ) r4.push({ type: 7, index: h4 }), t4 += v.length - 1;\n      }\n      h4++;\n    }\n  }\n  static createElement(t3, i4) {\n    const s2 = w.createElement(\"template\");\n    return s2.innerHTML = t3, s2;\n  }\n};\nfunction z(t3, i4, s2 = t3, e5) {\n  if (i4 === R) return i4;\n  let h4 = void 0 !== e5 ? s2.o?.[e5] : s2.l;\n  const o4 = st(i4) ? void 0 : i4._$litDirective$;\n  return h4?.constructor !== o4 && (h4?._$AO?.(false), void 0 === o4 ? h4 = void 0 : (h4 = new o4(t3), h4._$AT(t3, s2, e5)), void 0 !== e5 ? (s2.o ??= [])[e5] = h4 : s2.l = h4), void 0 !== h4 && (i4 = z(t3, h4._$AS(t3, i4.values), h4, e5)), i4;\n}\nvar F = class {\n  constructor(t3, i4) {\n    this._$AV = [], this._$AN = void 0, this._$AD = t3, this._$AM = i4;\n  }\n  get parentNode() {\n    return this._$AM.parentNode;\n  }\n  get _$AU() {\n    return this._$AM._$AU;\n  }\n  u(t3) {\n    const { el: { content: i4 }, parts: s2 } = this._$AD, e5 = (t3?.creationScope ?? w).importNode(i4, true);\n    I.currentNode = e5;\n    let h4 = I.nextNode(), o4 = 0, n5 = 0, r4 = s2[0];\n    for (; void 0 !== r4; ) {\n      if (o4 === r4.index) {\n        let i5;\n        2 === r4.type ? i5 = new et(h4, h4.nextSibling, this, t3) : 1 === r4.type ? i5 = new r4.ctor(h4, r4.name, r4.strings, this, t3) : 6 === r4.type && (i5 = new K(h4, this, t3)), this._$AV.push(i5), r4 = s2[++n5];\n      }\n      o4 !== r4?.index && (h4 = I.nextNode(), o4++);\n    }\n    return I.currentNode = w, e5;\n  }\n  p(t3) {\n    let i4 = 0;\n    for (const s2 of this._$AV) void 0 !== s2 && (void 0 !== s2.strings ? (s2._$AI(t3, s2, i4), i4 += s2.strings.length - 2) : s2._$AI(t3[i4])), i4++;\n  }\n};\nvar et = class _et {\n  get _$AU() {\n    return this._$AM?._$AU ?? this.v;\n  }\n  constructor(t3, i4, s2, e5) {\n    this.type = 2, this._$AH = D, this._$AN = void 0, this._$AA = t3, this._$AB = i4, this._$AM = s2, this.options = e5, this.v = e5?.isConnected ?? true;\n  }\n  get parentNode() {\n    let t3 = this._$AA.parentNode;\n    const i4 = this._$AM;\n    return void 0 !== i4 && 11 === t3?.nodeType && (t3 = i4.parentNode), t3;\n  }\n  get startNode() {\n    return this._$AA;\n  }\n  get endNode() {\n    return this._$AB;\n  }\n  _$AI(t3, i4 = this) {\n    t3 = z(this, t3, i4), st(t3) ? t3 === D || null == t3 || \"\" === t3 ? (this._$AH !== D && this._$AR(), this._$AH = D) : t3 !== this._$AH && t3 !== R && this._(t3) : void 0 !== t3._$litType$ ? this.$(t3) : void 0 !== t3.nodeType ? this.T(t3) : $(t3) ? this.k(t3) : this._(t3);\n  }\n  O(t3) {\n    return this._$AA.parentNode.insertBefore(t3, this._$AB);\n  }\n  T(t3) {\n    this._$AH !== t3 && (this._$AR(), this._$AH = this.O(t3));\n  }\n  _(t3) {\n    this._$AH !== D && st(this._$AH) ? this._$AA.nextSibling.data = t3 : this.T(w.createTextNode(t3)), this._$AH = t3;\n  }\n  $(t3) {\n    const { values: i4, _$litType$: s2 } = t3, e5 = \"number\" == typeof s2 ? this._$AC(t3) : (void 0 === s2.el && (s2.el = B.createElement(N(s2.h, s2.h[0]), this.options)), s2);\n    if (this._$AH?._$AD === e5) this._$AH.p(i4);\n    else {\n      const t4 = new F(e5, this), s3 = t4.u(this.options);\n      t4.p(i4), this.T(s3), this._$AH = t4;\n    }\n  }\n  _$AC(t3) {\n    let i4 = V.get(t3.strings);\n    return void 0 === i4 && V.set(t3.strings, i4 = new B(t3)), i4;\n  }\n  k(t3) {\n    g(this._$AH) || (this._$AH = [], this._$AR());\n    const i4 = this._$AH;\n    let s2, e5 = 0;\n    for (const h4 of t3) e5 === i4.length ? i4.push(s2 = new _et(this.O(lt()), this.O(lt()), this, this.options)) : s2 = i4[e5], s2._$AI(h4), e5++;\n    e5 < i4.length && (this._$AR(s2 && s2._$AB.nextSibling, e5), i4.length = e5);\n  }\n  _$AR(t3 = this._$AA.nextSibling, i4) {\n    for (this._$AP?.(false, true, i4); t3 && t3 !== this._$AB; ) {\n      const i5 = t3.nextSibling;\n      t3.remove(), t3 = i5;\n    }\n  }\n  setConnected(t3) {\n    void 0 === this._$AM && (this.v = t3, this._$AP?.(t3));\n  }\n};\nvar G = class {\n  get tagName() {\n    return this.element.tagName;\n  }\n  get _$AU() {\n    return this._$AM._$AU;\n  }\n  constructor(t3, i4, s2, e5, h4) {\n    this.type = 1, this._$AH = D, this._$AN = void 0, this.element = t3, this.name = i4, this._$AM = e5, this.options = h4, s2.length > 2 || \"\" !== s2[0] || \"\" !== s2[1] ? (this._$AH = Array(s2.length - 1).fill(new String()), this.strings = s2) : this._$AH = D;\n  }\n  _$AI(t3, i4 = this, s2, e5) {\n    const h4 = this.strings;\n    let o4 = false;\n    if (void 0 === h4) t3 = z(this, t3, i4, 0), o4 = !st(t3) || t3 !== this._$AH && t3 !== R, o4 && (this._$AH = t3);\n    else {\n      const e6 = t3;\n      let n5, r4;\n      for (t3 = h4[0], n5 = 0; n5 < h4.length - 1; n5++) r4 = z(this, e6[s2 + n5], i4, n5), r4 === R && (r4 = this._$AH[n5]), o4 ||= !st(r4) || r4 !== this._$AH[n5], r4 === D ? t3 = D : t3 !== D && (t3 += (r4 ?? \"\") + h4[n5 + 1]), this._$AH[n5] = r4;\n    }\n    o4 && !e5 && this.j(t3);\n  }\n  j(t3) {\n    t3 === D ? this.element.removeAttribute(this.name) : this.element.setAttribute(this.name, t3 ?? \"\");\n  }\n};\nvar Y = class extends G {\n  constructor() {\n    super(...arguments), this.type = 3;\n  }\n  j(t3) {\n    this.element[this.name] = t3 === D ? void 0 : t3;\n  }\n};\nvar Z = class extends G {\n  constructor() {\n    super(...arguments), this.type = 4;\n  }\n  j(t3) {\n    this.element.toggleAttribute(this.name, !!t3 && t3 !== D);\n  }\n};\nvar q = class extends G {\n  constructor(t3, i4, s2, e5, h4) {\n    super(t3, i4, s2, e5, h4), this.type = 5;\n  }\n  _$AI(t3, i4 = this) {\n    if ((t3 = z(this, t3, i4, 0) ?? D) === R) return;\n    const s2 = this._$AH, e5 = t3 === D && s2 !== D || t3.capture !== s2.capture || t3.once !== s2.once || t3.passive !== s2.passive, h4 = t3 !== D && (s2 === D || e5);\n    e5 && this.element.removeEventListener(this.name, this, s2), h4 && this.element.addEventListener(this.name, this, t3), this._$AH = t3;\n  }\n  handleEvent(t3) {\n    \"function\" == typeof this._$AH ? this._$AH.call(this.options?.host ?? this.element, t3) : this._$AH.handleEvent(t3);\n  }\n};\nvar K = class {\n  constructor(t3, i4, s2) {\n    this.element = t3, this.type = 6, this._$AN = void 0, this._$AM = i4, this.options = s2;\n  }\n  get _$AU() {\n    return this._$AM._$AU;\n  }\n  _$AI(t3) {\n    z(this, t3);\n  }\n};\nvar Re = n3.litHtmlPolyfillSupport;\nRe?.(B, et), (n3.litHtmlVersions ??= []).push(\"3.2.0\");\nvar Q = (t3, i4, s2) => {\n  const e5 = s2?.renderBefore ?? i4;\n  let h4 = e5._$litPart$;\n  if (void 0 === h4) {\n    const t4 = s2?.renderBefore ?? null;\n    e5._$litPart$ = h4 = new et(i4.insertBefore(lt(), t4), t4, void 0, s2 ?? {});\n  }\n  return h4._$AI(t3), h4;\n};\n\n// node_modules/lit-element/lit-element.js\nvar h3 = class extends b {\n  constructor() {\n    super(...arguments), this.renderOptions = { host: this }, this.o = void 0;\n  }\n  createRenderRoot() {\n    const t3 = super.createRenderRoot();\n    return this.renderOptions.renderBefore ??= t3.firstChild, t3;\n  }\n  update(t3) {\n    const e5 = this.render();\n    this.hasUpdated || (this.renderOptions.isConnected = this.isConnected), super.update(t3), this.o = Q(e5, this.renderRoot, this.renderOptions);\n  }\n  connectedCallback() {\n    super.connectedCallback(), this.o?.setConnected(true);\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback(), this.o?.setConnected(false);\n  }\n  render() {\n    return R;\n  }\n};\nh3._$litElement$ = true, h3[\"finalized\"] = true, globalThis.litElementHydrateSupport?.({ LitElement: h3 });\nvar f3 = globalThis.litElementPolyfillSupport;\nf3?.({ LitElement: h3 });\n(globalThis.litElementVersions ??= []).push(\"4.1.0\");\n\n// node_modules/@lit/reactive-element/decorators/property.js\nvar o3 = { attribute: true, type: String, converter: u, reflect: false, hasChanged: f };\nvar r3 = (t3 = o3, e5, r4) => {\n  const { kind: n5, metadata: i4 } = r4;\n  let s2 = globalThis.litPropertyMetadata.get(i4);\n  if (void 0 === s2 && globalThis.litPropertyMetadata.set(i4, s2 = /* @__PURE__ */ new Map()), s2.set(r4.name, t3), \"accessor\" === n5) {\n    const { name: o4 } = r4;\n    return { set(r5) {\n      const n6 = e5.get.call(this);\n      e5.set.call(this, r5), this.requestUpdate(o4, n6, t3);\n    }, init(e6) {\n      return void 0 !== e6 && this.P(o4, void 0, t3), e6;\n    } };\n  }\n  if (\"setter\" === n5) {\n    const { name: o4 } = r4;\n    return function(r5) {\n      const n6 = this[o4];\n      e5.call(this, r5), this.requestUpdate(o4, n6, t3);\n    };\n  }\n  throw Error(\"Unsupported decorator location: \" + n5);\n};\nfunction n4(t3) {\n  return (e5, o4) => \"object\" == typeof o4 ? r3(t3, e5, o4) : ((t4, e6, o5) => {\n    const r4 = e6.hasOwnProperty(o5);\n    return e6.constructor.createProperty(o5, r4 ? { ...t4, wrapped: true } : t4), r4 ? Object.getOwnPropertyDescriptor(e6, o5) : void 0;\n  })(t3, e5, o4);\n}\n\n// node_modules/lit-html/directive.js\nvar t2 = { ATTRIBUTE: 1, CHILD: 2, PROPERTY: 3, BOOLEAN_ATTRIBUTE: 4, EVENT: 5, ELEMENT: 6 };\nvar e4 = (t3) => (...e5) => ({ _$litDirective$: t3, values: e5 });\nvar i3 = class {\n  constructor(t3) {\n  }\n  get _$AU() {\n    return this._$AM._$AU;\n  }\n  _$AT(t3, e5, i4) {\n    this.t = t3, this._$AM = e5, this.i = i4;\n  }\n  _$AS(t3, e5) {\n    return this.update(t3, e5);\n  }\n  update(t3, e5) {\n    return this.render(...e5);\n  }\n};\n\n// node_modules/lit-html/directives/class-map.js\nvar Rt = e4(class extends i3 {\n  constructor(s2) {\n    if (super(s2), s2.type !== t2.ATTRIBUTE || \"class\" !== s2.name || s2.strings?.length > 2) throw Error(\"`classMap()` can only be used in the `class` attribute and must be the only part in the attribute.\");\n  }\n  render(t3) {\n    return \" \" + Object.keys(t3).filter(((s2) => t3[s2])).join(\" \") + \" \";\n  }\n  update(t3, [s2]) {\n    if (void 0 === this.st) {\n      this.st = /* @__PURE__ */ new Set(), void 0 !== t3.strings && (this.nt = new Set(t3.strings.join(\" \").split(/\\s/).filter(((t4) => \"\" !== t4))));\n      for (const t4 in s2) s2[t4] && !this.nt?.has(t4) && this.st.add(t4);\n      return this.render(s2);\n    }\n    const i4 = t3.element.classList;\n    for (const t4 of this.st) t4 in s2 || (i4.remove(t4), this.st.delete(t4));\n    for (const t4 in s2) {\n      const r4 = !!s2[t4];\n      r4 === this.st.has(t4) || this.nt?.has(t4) || (r4 ? (i4.add(t4), this.st.add(t4)) : (i4.remove(t4), this.st.delete(t4)));\n    }\n    return R;\n  }\n});\n\n// js/ipywidgets_styles.ts\nvar legacyStyles = i`\n    .legacy-button {\n        align-items: center;\n        background-color: var(--jp-layout-color2);\n        border-width: 0;\n        box-shadow: none;\n        color: var(--jp-ui-font-color1);\n        cursor: pointer;\n        display: flex;\n        font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n        font-size: var(--jp-widgets-font-size);\n        justify-content: center;\n        line-height: var(--jp-widgets-inline-height);\n        padding: 0;\n        user-select: none;\n    }\n\n    .legacy-button.primary {\n        background-color: var(--jp-brand-color1);\n        color: var(--jp-ui-inverse-font-color1);\n    }\n\n    .legacy-button:hover:enabled,\n    .legacy-button:focus:enabled {\n        box-shadow: 0 2px 2px 0\n                rgba(0, 0, 0, var(--md-shadow-key-penumbra-opacity)),\n            0 3px 1px -2px rgba(0, 0, 0, var(--md-shadow-key-umbra-opacity)),\n            0 1px 5px 0 rgba(0, 0, 0, var(--md-shadow-ambient-shadow-opacity));\n    }\n\n    .legacy-slider {\n        -webkit-appearance: none;\n        appearance: none;\n        background: var(--jp-layout-color3);\n        border-radius: 3px;\n        height: 4px;\n        outline: none;\n    }\n\n    .legacy-slider::-webkit-slider-thumb,\n    .legacy-slider::-moz-range-thumb {\n        -moz-appearance: none;\n        -webkit-appearance: none;\n        appearance: none;\n        border-radius: 50%;\n        cursor: pointer;\n        height: var(--jp-widgets-slider-handle-size);\n        width: var(--jp-widgets-slider-handle-size);\n    }\n\n    .legacy-text {\n        color: var(--jp-widgets-label-color);\n        font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n        font-size: var(--jp-widgets-font-size);\n        height: var(--jp-widgets-inline-height);\n        line-height: var(--jp-widgets-inline-height);\n        vertical-align: middle;\n    }\n\n    .legacy-select {\n        -moz-appearance: none;\n        -webkit-appearance: none;\n        appearance: none;\n        background-color: var(--jp-widgets-input-background-color);\n        background-image: var(--jp-widgets-dropdown-arrow);\n        background-position: right center;\n        background-repeat: no-repeat;\n        background-size: 20px;\n        border-radius: 0;\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        box-shadow: none;\n        box-sizing: border-box;\n        color: var(--jp-widgets-input-color);\n        flex: 1 1 var(--jp-widgets-inline-width-short);\n        font-size: var(--jp-widgets-font-size);\n        height: 28px;\n        line-height: 28px;\n        min-width: 0;\n        outline: none !important;\n        padding-left: calc(var(--jp-widgets-input-padding)* 2);\n        padding-right: 20px;\n        vertical-align: top;\n    }\n\n    .legacy-select[disabled] {\n        opacity: 0.4;\n        cursor: not-allowed;\n    }\n\n    .legacy-text-input {\n        background: var(--jp-widgets-input-background-color);\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        box-sizing: border-box;\n        color: var(--jp-widgets-input-color);\n        flex-grow: 1;\n        flex-shrink: 1;\n        font-size: var(--jp-widgets-font-size);\n        height: var(--jp-widgets-inline-height);\n        line-height: var(--jp-widgets-inline-height);\n        min-width: 0;\n        outline: none !important;\n        padding: var(--jp-widgets-input-padding) calc(var(--jp-widgets-input-padding) * 2);\n    }\n\n    .legacy-text-input:disabled {\n        opacity: var(--jp-widgets-disabled-opacity);\n    }\n\n    .legacy-color {\n        align-self: stretch;\n        background: var(--jp-widgets-input-background-color);\n        border-left: none;\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        box-sizing: border-box;\n        color: var(--jp-widgets-input-color);\n        flex-grow: 0;\n        flex-shrink: 0;\n        height: var(--jp-widgets-inline-height);\n        outline: none !important;\n        padding: 0 2px;\n        width: var(--jp-widgets-inline-height);\n    }\n\n    .legacy-radio {\n        margin: 0;\n        vertical-align: middle;\n    }\n\n    .legacy-button.active {\n        background-color: var(--colab-primary-surface-color, --jp-layout-color3);\n        color: var(--jp-ui-font-color1);\n        box-shadow: 0 4px 5px 0 rgba(0, 0, 0, var(--md-shadow-key-penumbra-opacity)),\n                    0 1px 10px 0 rgba(0, 0, 0, var(--md-shadow-ambient-shadow-opacity)),\n                    0 2px 4px -1px rgba(0, 0, 0, var(--md-shadow-key-umbra-opacity));\n    }\n\n    .legacy-button.primary {\n        background-color: var(--jp-brand-color1);\n        color: var(--jp-ui-inverse-font-color1);\n    }\n\n    .legacy-button.primary.active {\n        background-color: var(--jp-brand-color0);\n        color: var(--jp-ui-inverse-font-color0);\n    }\n\n    .legacy-button.active {\n        background-color: var(--colab-primary-surface-color, --jp-layout-color3);\n        color: var(--jp-ui-font-color1);\n        box-shadow: 0 4px 5px 0 rgba(0, 0, 0, var(--md-shadow-key-penumbra-opacity)),\n                    0 1px 10px 0 rgba(0, 0, 0, var(--md-shadow-ambient-shadow-opacity)),\n                    0 2px 4px -1px rgba(0, 0, 0, var(--md-shadow-key-umbra-opacity));\n    }\n\n    .legacy-button.primary {\n        background-color: var(--jp-brand-color1);\n        color: var(--jp-ui-inverse-font-color1);\n    }\n\n    .legacy-button.primary.active {\n        background-color: var(--jp-brand-color0);\n        color: var(--jp-ui-inverse-font-color0);\n    }\n\n    .legacy-select {\n        -moz-appearance: none;\n        -webkit-appearance: none;\n        appearance: none;\n        background-color: var(--jp-widgets-input-background-color);\n        background-image: var(--jp-widgets-dropdown-arrow);\n        background-position: right center;\n        background-repeat: no-repeat;\n        background-size: 20px;\n        border-radius: 0;\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        box-shadow: none;\n        box-sizing: border-box;\n        color: var(--jp-widgets-input-color);\n        flex: 1 1 var(--jp-widgets-inline-width-short);\n        font-size: var(--jp-widgets-font-size);\n        height: inherit;\n        min-width: 0;\n        outline: none !important;\n        padding-left: calc(var(--jp-widgets-input-padding)* 2);\n        padding-right: 20px;\n        vertical-align: top;\n    }\n\n    .legacy-input {\n        box-sizing: border-box;\n        background-color: var(--colab-primary-surface-color, --jp-widgets-input-background-color);\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        color: var(--jp-widgets-input-color);\n        flex-grow: 1;\n        flex-shrink: 1;\n        font-size: var(--jp-widgets-font-size);\n        min-width: 0;\n        outline: none !important;\n        padding: var(--jp-widgets-input-padding) calc(var(--jp-widgets-input-padding)* 2);\n        height: var(--jp-widgets-inline-height);\n        line-height: var(--jp-widgets-inline-height);\n    }\n`;\n\n// js/styles.ts\nvar materialStyles = i`\n    @font-face {\n        font-family: \"Material Symbols Outlined\";\n        font-style: normal;\n        font-weight: 400;\n        src: url(https://fonts.gstatic.com/s/materialsymbolsoutlined/v205/kJF1BvYX7BgnkSrUwT8OhrdQw4oELdPIeeII9v6oDMzByHX9rA6RzaxHMPdY43zj-jCxv3fzvRNU22ZXGJpEpjC_1v-p_4MrImHCIJIZrDCvHOejbd5zrDAt.woff2)\n            format(\"woff2\");\n    }\n\n    .material-symbols-outlined {\n        -webkit-font-feature-settings: \"liga\";\n        -webkit-font-smoothing: antialiased;\n        direction: ltr;\n        display: inline-block;\n        font-family: \"Material Symbols Outlined\";\n        font-style: normal;\n        font-weight: normal;\n        letter-spacing: normal;\n        line-height: 1;\n        text-transform: none;\n        white-space: nowrap;\n        word-wrap: normal;\n    }\n`;\nvar flexStyles = i`\n    .vertical-flex {\n        display: flex;\n        flex-direction: column;\n        gap: 8px;\n    }\n\n    .horizontal-flex {\n        align-items: center;\n        display: flex;\n        flex-wrap: nowrap;\n        gap: 8px;\n    }\n\n    input:not([type=\"radio\"]):not([type=\"checkbox\"]) {\n        width: 100%;\n    }\n\n    select {\n        width: 100%;\n    }\n\n    .horizontal-flex .legacy-text {\n        flex-shrink: 0;\n    }\n`;\n\n// js/utils.ts\nfunction loadFonts() {\n  if (!document.querySelector(\".custom-fonts\")) {\n    const styleElement = document.createElement(\"style\");\n    styleElement.classList.add(\"custom-fonts\");\n    styleElement.textContent = '@import \"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined\";';\n    document.body.appendChild(styleElement);\n  }\n}\nfunction reverseMap(map) {\n  const reversedMap = /* @__PURE__ */ new Map();\n  for (const [key, value] of map.entries()) {\n    if (value != null) {\n      reversedMap.set(value, key);\n    }\n  }\n  return reversedMap;\n}\n\n// js/lit_widget.ts\nvar LitWidget = class extends h3 {\n  constructor() {\n    super(...arguments);\n    this._model = void 0;\n  }\n  onCustomMessage(_msg) {\n  }\n  viewNameToModelName() {\n    return reverseMap(this.modelNameToViewName());\n  }\n  set model(model) {\n    this._model = model;\n    for (const [modelKey, widgetKey] of this.modelNameToViewName()) {\n      if (widgetKey) {\n        this[widgetKey] = model.get(modelKey);\n        model.on(`change:${String(modelKey)}`, () => {\n          this[widgetKey] = model.get(modelKey);\n        });\n      }\n    }\n    model.on(\"msg:custom\", (msg) => {\n      this.onCustomMessage?.(msg);\n    });\n  }\n  get model() {\n    return this._model;\n  }\n  updated(changedProperties) {\n    const viewToModelMap = this.viewNameToModelName();\n    for (const [viewProp, _2] of changedProperties) {\n      const castViewProp = viewProp;\n      if (viewToModelMap.has(castViewProp)) {\n        const modelProp = viewToModelMap.get(castViewProp);\n        this._model?.set(\n          modelProp,\n          this[castViewProp]\n        );\n      }\n    }\n    this._model?.save_changes();\n  }\n};\n\n// js/layer_manager_row.ts\nvar LayerManagerRow = class extends LitWidget {\n  constructor() {\n    super(...arguments);\n    this.name = \"\";\n    this.visible = true;\n    this.opacity = 1;\n    this.isLoading = false;\n    this.isConfirmDialogVisible = false;\n  }\n  static get componentName() {\n    return `layer-manager-row`;\n  }\n  static {\n    this.styles = [\n      legacyStyles,\n      materialStyles,\n      i`\n            .row {\n                align-items: center;\n                display: flex;\n                gap: 4px;\n            }\n\n            .layer-name {\n                cursor: pointer;\n                flex-grow: 1;\n                max-width: 150px;\n                overflow: hidden;\n                text-overflow: ellipsis;\n            }\n\n            .row-button {\n                font-size: 16px;\n                height: 28px;\n                width: 28px;\n            }\n\n            .layer-opacity-slider {\n                width: 70px;\n            }\n\n            .layer-visibility-checkbox {\n                margin: 2px;\n            }\n\n            .spinner {\n                -webkit-animation: spin 2s linear infinite;\n                animation: spin 2s linear infinite;\n                border-radius: 50%;\n                border: 4px solid var(--jp-widgets-input-border-color);\n                border-top: 4px solid var(--jp-widgets-color);\n                height: 12px;\n                width: 12px;\n            }\n\n            @-webkit-keyframes spin {\n                0% {\n                    -webkit-transform: rotate(0deg);\n                }\n                100% {\n                    -webkit-transform: rotate(360deg);\n                }\n            }\n\n            @keyframes spin {\n                0% {\n                    transform: rotate(0deg);\n                }\n                100% {\n                    transform: rotate(360deg);\n                }\n            }\n\n            button.loading .spinner,\n            button.loading:hover .close-icon,\n            button.done-loading .close-icon {\n                display: block;\n            }\n\n            button.loading .close-icon,\n            button.loading:hover .spinner,\n            button.done-loading .spinner {\n                display: none;\n            }\n\n            .remove-layer-text {\n                flex-grow: 1;\n                padding-left: 22px;\n            }\n\n            .confirm-deletion-container {\n                margin-top: 4px;\n            }\n\n            .confirm-deletion-container button {\n                height: 28px;\n                width: 70px;\n            }\n        `\n    ];\n  }\n  modelNameToViewName() {\n    return /* @__PURE__ */ new Map([\n      [\"name\", \"name\"],\n      [\"visible\", \"visible\"],\n      [\"opacity\", \"opacity\"],\n      [\"is_loading\", \"isLoading\"]\n    ]);\n  }\n  render() {\n    return ke`\n            <div class=\"row\">\n                <input\n                    type=\"checkbox\"\n                    class=\"layer-visibility-checkbox\"\n                    .checked=\"${this.visible}\"\n                    @click=\"${this.onLayerVisibilityChanged}\"\n                />\n                <span\n                    class=\"legacy-text layer-name\"\n                    @click=\"${this.onLayerVisibilityChanged}\"\n                >\n                    ${this.name}\n                </span>\n                <input\n                    type=\"range\"\n                    class=\"legacy-slider layer-opacity-slider\"\n                    min=\"0\"\n                    max=\"1\"\n                    step=\"0.01\"\n                    .value=\"${this.opacity}\"\n                    @input=\"${this.onLayerOpacityChanged}\"\n                />\n                <button\n                    class=\"legacy-button row-button settings-button\"\n                    @click=\"${this.onSettingsClicked}\"\n                >\n                    <span class=\"material-symbols-outlined\">settings</span>\n                </button>\n                <button\n                    class=${Rt({\n      \"legacy-button\": true,\n      \"row-button\": true,\n      \"delete-button\": true,\n      loading: this.isLoading,\n      \"done-loading\": !this.isLoading\n    })}\n                    @click=\"${this.onDeleteClicked}\"\n                >\n                    <div class=\"spinner\"></div>\n                    <span class=\"close-icon material-symbols-outlined\"\n                        >delete</span\n                    >\n                </button>\n            </div>\n            ${this.renderConfirmDialog()}\n        `;\n  }\n  renderConfirmDialog() {\n    if (!this.isConfirmDialogVisible) {\n      return D;\n    }\n    return ke`\n            <div class=\"row confirm-deletion-container\">\n                <span class=\"legacy-text remove-layer-text\">Remove layer?</span>\n                <button\n                    class=\"legacy-button\"\n                    @click=\"${this.cancelDeletion}\"\n                >\n                    No\n                </button>\n                <button\n                    class=\"legacy-button primary confirm-deletion-button\"\n                    @click=\"${this.confirmDeletion}\"\n                >\n                    Yes\n                </button>\n            </div>\n        `;\n  }\n  onLayerVisibilityChanged(_event) {\n    this.visible = !this.visible;\n  }\n  onLayerOpacityChanged(event) {\n    const target = event.target;\n    this.opacity = parseFloat(target.value);\n  }\n  onSettingsClicked(_2) {\n    this.model?.send({ type: \"click\", id: \"settings\" });\n  }\n  onDeleteClicked(_2) {\n    this.isConfirmDialogVisible = true;\n  }\n  confirmDeletion(_2) {\n    this.model?.send({ type: \"click\", id: \"delete\" });\n  }\n  cancelDeletion(_2) {\n    this.isConfirmDialogVisible = false;\n  }\n};\n__decorateClass([\n  n4()\n], LayerManagerRow.prototype, \"name\", 2);\n__decorateClass([\n  n4()\n], LayerManagerRow.prototype, \"visible\", 2);\n__decorateClass([\n  n4()\n], LayerManagerRow.prototype, \"opacity\", 2);\n__decorateClass([\n  n4()\n], LayerManagerRow.prototype, \"isLoading\", 2);\n__decorateClass([\n  n4()\n], LayerManagerRow.prototype, \"isConfirmDialogVisible\", 2);\nif (!customElements.get(LayerManagerRow.componentName)) {\n  customElements.define(LayerManagerRow.componentName, LayerManagerRow);\n}\nfunction render({ model, el }) {\n  loadFonts();\n  const row = document.createElement(LayerManagerRow.componentName);\n  row.model = model;\n  el.appendChild(row);\n}\nvar layer_manager_row_default = { render };\nexport {\n  LayerManagerRow,\n  layer_manager_row_default as default\n};\n/*! Bundled license information:\n\n@lit/reactive-element/css-tag.js:\n  (**\n   * @license\n   * Copyright 2019 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n\n@lit/reactive-element/reactive-element.js:\nlit-html/lit-html.js:\nlit-element/lit-element.js:\n@lit/reactive-element/decorators/custom-element.js:\n@lit/reactive-element/decorators/property.js:\n@lit/reactive-element/decorators/state.js:\n@lit/reactive-element/decorators/event-options.js:\n@lit/reactive-element/decorators/base.js:\n@lit/reactive-element/decorators/query.js:\n@lit/reactive-element/decorators/query-all.js:\n@lit/reactive-element/decorators/query-async.js:\n@lit/reactive-element/decorators/query-assigned-nodes.js:\nlit-html/directive.js:\n  (**\n   * @license\n   * Copyright 2017 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n\nlit-html/is-server.js:\n  (**\n   * @license\n   * Copyright 2022 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n\n@lit/reactive-element/decorators/query-assigned-elements.js:\n  (**\n   * @license\n   * Copyright 2021 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n\nlit-html/directives/class-map.js:\n  (**\n   * @license\n   * Copyright 2018 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n*/\n",
              "_model_module": "anywidget",
              "_model_module_version": "~0.9.*",
              "_model_name": "AnyModel",
              "_view_count": null,
              "_view_module": "anywidget",
              "_view_module_version": "~0.9.*",
              "_view_name": "AnyView",
              "is_loading": false,
              "layout": "IPY_MODEL_9bebcddc39024e28bb8ec2e271931482",
              "name": "station_head_temperature_2m_mean average",
              "opacity": 0.5,
              "visible": true
            }
          },
          "4fce6d6d582e4acea783a88e521f77d5": {
            "model_module": "anywidget",
            "model_name": "AnyModel",
            "model_module_version": "~0.9.*",
            "state": {
              "_anywidget_id": "geemap.toolbar.ToolbarItem",
              "_dom_classes": [
                "geemap-colab"
              ],
              "_esm": "var __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __decorateClass = (decorators, target, key, kind) => {\n  var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;\n  for (var i4 = decorators.length - 1, decorator; i4 >= 0; i4--)\n    if (decorator = decorators[i4])\n      result = (kind ? decorator(target, key, result) : decorator(result)) || result;\n  if (kind && result) __defProp(target, key, result);\n  return result;\n};\n\n// node_modules/@lit/reactive-element/css-tag.js\nvar t = globalThis;\nvar e = t.ShadowRoot && (void 0 === t.ShadyCSS || t.ShadyCSS.nativeShadow) && \"adoptedStyleSheets\" in Document.prototype && \"replace\" in CSSStyleSheet.prototype;\nvar s = /* @__PURE__ */ Symbol();\nvar o = /* @__PURE__ */ new WeakMap();\nvar n = class {\n  constructor(t3, e5, o4) {\n    if (this._$cssResult$ = true, o4 !== s) throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");\n    this.cssText = t3, this.t = e5;\n  }\n  get styleSheet() {\n    let t3 = this.o;\n    const s2 = this.t;\n    if (e && void 0 === t3) {\n      const e5 = void 0 !== s2 && 1 === s2.length;\n      e5 && (t3 = o.get(s2)), void 0 === t3 && ((this.o = t3 = new CSSStyleSheet()).replaceSync(this.cssText), e5 && o.set(s2, t3));\n    }\n    return t3;\n  }\n  toString() {\n    return this.cssText;\n  }\n};\nvar r = (t3) => new n(\"string\" == typeof t3 ? t3 : t3 + \"\", void 0, s);\nvar i = (t3, ...e5) => {\n  const o4 = 1 === t3.length ? t3[0] : e5.reduce(((e6, s2, o5) => e6 + ((t4) => {\n    if (true === t4._$cssResult$) return t4.cssText;\n    if (\"number\" == typeof t4) return t4;\n    throw Error(\"Value passed to 'css' function must be a 'css' function result: \" + t4 + \". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\");\n  })(s2) + t3[o5 + 1]), t3[0]);\n  return new n(o4, t3, s);\n};\nvar S = (s2, o4) => {\n  if (e) s2.adoptedStyleSheets = o4.map(((t3) => t3 instanceof CSSStyleSheet ? t3 : t3.styleSheet));\n  else for (const e5 of o4) {\n    const o5 = document.createElement(\"style\"), n5 = t.litNonce;\n    void 0 !== n5 && o5.setAttribute(\"nonce\", n5), o5.textContent = e5.cssText, s2.appendChild(o5);\n  }\n};\nvar c = e ? (t3) => t3 : (t3) => t3 instanceof CSSStyleSheet ? ((t4) => {\n  let e5 = \"\";\n  for (const s2 of t4.cssRules) e5 += s2.cssText;\n  return r(e5);\n})(t3) : t3;\n\n// node_modules/@lit/reactive-element/reactive-element.js\nvar { is: i2, defineProperty: e2, getOwnPropertyDescriptor: r2, getOwnPropertyNames: h, getOwnPropertySymbols: o2, getPrototypeOf: n2 } = Object;\nvar a = globalThis;\nvar c2 = a.trustedTypes;\nvar l = c2 ? c2.emptyScript : \"\";\nvar p = a.reactiveElementPolyfillSupport;\nvar d = (t3, s2) => t3;\nvar u = { toAttribute(t3, s2) {\n  switch (s2) {\n    case Boolean:\n      t3 = t3 ? l : null;\n      break;\n    case Object:\n    case Array:\n      t3 = null == t3 ? t3 : JSON.stringify(t3);\n  }\n  return t3;\n}, fromAttribute(t3, s2) {\n  let i4 = t3;\n  switch (s2) {\n    case Boolean:\n      i4 = null !== t3;\n      break;\n    case Number:\n      i4 = null === t3 ? null : Number(t3);\n      break;\n    case Object:\n    case Array:\n      try {\n        i4 = JSON.parse(t3);\n      } catch (t4) {\n        i4 = null;\n      }\n  }\n  return i4;\n} };\nvar f = (t3, s2) => !i2(t3, s2);\nvar y = { attribute: true, type: String, converter: u, reflect: false, hasChanged: f };\nSymbol.metadata ??= /* @__PURE__ */ Symbol(\"metadata\"), a.litPropertyMetadata ??= /* @__PURE__ */ new WeakMap();\nvar b = class extends HTMLElement {\n  static addInitializer(t3) {\n    this._$Ei(), (this.l ??= []).push(t3);\n  }\n  static get observedAttributes() {\n    return this.finalize(), this._$Eh && [...this._$Eh.keys()];\n  }\n  static createProperty(t3, s2 = y) {\n    if (s2.state && (s2.attribute = false), this._$Ei(), this.elementProperties.set(t3, s2), !s2.noAccessor) {\n      const i4 = /* @__PURE__ */ Symbol(), r4 = this.getPropertyDescriptor(t3, i4, s2);\n      void 0 !== r4 && e2(this.prototype, t3, r4);\n    }\n  }\n  static getPropertyDescriptor(t3, s2, i4) {\n    const { get: e5, set: h4 } = r2(this.prototype, t3) ?? { get() {\n      return this[s2];\n    }, set(t4) {\n      this[s2] = t4;\n    } };\n    return { get() {\n      return e5?.call(this);\n    }, set(s3) {\n      const r4 = e5?.call(this);\n      h4.call(this, s3), this.requestUpdate(t3, r4, i4);\n    }, configurable: true, enumerable: true };\n  }\n  static getPropertyOptions(t3) {\n    return this.elementProperties.get(t3) ?? y;\n  }\n  static _$Ei() {\n    if (this.hasOwnProperty(d(\"elementProperties\"))) return;\n    const t3 = n2(this);\n    t3.finalize(), void 0 !== t3.l && (this.l = [...t3.l]), this.elementProperties = new Map(t3.elementProperties);\n  }\n  static finalize() {\n    if (this.hasOwnProperty(d(\"finalized\"))) return;\n    if (this.finalized = true, this._$Ei(), this.hasOwnProperty(d(\"properties\"))) {\n      const t4 = this.properties, s2 = [...h(t4), ...o2(t4)];\n      for (const i4 of s2) this.createProperty(i4, t4[i4]);\n    }\n    const t3 = this[Symbol.metadata];\n    if (null !== t3) {\n      const s2 = litPropertyMetadata.get(t3);\n      if (void 0 !== s2) for (const [t4, i4] of s2) this.elementProperties.set(t4, i4);\n    }\n    this._$Eh = /* @__PURE__ */ new Map();\n    for (const [t4, s2] of this.elementProperties) {\n      const i4 = this._$Eu(t4, s2);\n      void 0 !== i4 && this._$Eh.set(i4, t4);\n    }\n    this.elementStyles = this.finalizeStyles(this.styles);\n  }\n  static finalizeStyles(s2) {\n    const i4 = [];\n    if (Array.isArray(s2)) {\n      const e5 = new Set(s2.flat(1 / 0).reverse());\n      for (const s3 of e5) i4.unshift(c(s3));\n    } else void 0 !== s2 && i4.push(c(s2));\n    return i4;\n  }\n  static _$Eu(t3, s2) {\n    const i4 = s2.attribute;\n    return false === i4 ? void 0 : \"string\" == typeof i4 ? i4 : \"string\" == typeof t3 ? t3.toLowerCase() : void 0;\n  }\n  constructor() {\n    super(), this._$Ep = void 0, this.isUpdatePending = false, this.hasUpdated = false, this._$Em = null, this._$Ev();\n  }\n  _$Ev() {\n    this._$ES = new Promise(((t3) => this.enableUpdating = t3)), this._$AL = /* @__PURE__ */ new Map(), this._$E_(), this.requestUpdate(), this.constructor.l?.forEach(((t3) => t3(this)));\n  }\n  addController(t3) {\n    (this._$EO ??= /* @__PURE__ */ new Set()).add(t3), void 0 !== this.renderRoot && this.isConnected && t3.hostConnected?.();\n  }\n  removeController(t3) {\n    this._$EO?.delete(t3);\n  }\n  _$E_() {\n    const t3 = /* @__PURE__ */ new Map(), s2 = this.constructor.elementProperties;\n    for (const i4 of s2.keys()) this.hasOwnProperty(i4) && (t3.set(i4, this[i4]), delete this[i4]);\n    t3.size > 0 && (this._$Ep = t3);\n  }\n  createRenderRoot() {\n    const t3 = this.shadowRoot ?? this.attachShadow(this.constructor.shadowRootOptions);\n    return S(t3, this.constructor.elementStyles), t3;\n  }\n  connectedCallback() {\n    this.renderRoot ??= this.createRenderRoot(), this.enableUpdating(true), this._$EO?.forEach(((t3) => t3.hostConnected?.()));\n  }\n  enableUpdating(t3) {\n  }\n  disconnectedCallback() {\n    this._$EO?.forEach(((t3) => t3.hostDisconnected?.()));\n  }\n  attributeChangedCallback(t3, s2, i4) {\n    this._$AK(t3, i4);\n  }\n  _$EC(t3, s2) {\n    const i4 = this.constructor.elementProperties.get(t3), e5 = this.constructor._$Eu(t3, i4);\n    if (void 0 !== e5 && true === i4.reflect) {\n      const r4 = (void 0 !== i4.converter?.toAttribute ? i4.converter : u).toAttribute(s2, i4.type);\n      this._$Em = t3, null == r4 ? this.removeAttribute(e5) : this.setAttribute(e5, r4), this._$Em = null;\n    }\n  }\n  _$AK(t3, s2) {\n    const i4 = this.constructor, e5 = i4._$Eh.get(t3);\n    if (void 0 !== e5 && this._$Em !== e5) {\n      const t4 = i4.getPropertyOptions(e5), r4 = \"function\" == typeof t4.converter ? { fromAttribute: t4.converter } : void 0 !== t4.converter?.fromAttribute ? t4.converter : u;\n      this._$Em = e5, this[e5] = r4.fromAttribute(s2, t4.type), this._$Em = null;\n    }\n  }\n  requestUpdate(t3, s2, i4) {\n    if (void 0 !== t3) {\n      if (i4 ??= this.constructor.getPropertyOptions(t3), !(i4.hasChanged ?? f)(this[t3], s2)) return;\n      this.P(t3, s2, i4);\n    }\n    false === this.isUpdatePending && (this._$ES = this._$ET());\n  }\n  P(t3, s2, i4) {\n    this._$AL.has(t3) || this._$AL.set(t3, s2), true === i4.reflect && this._$Em !== t3 && (this._$Ej ??= /* @__PURE__ */ new Set()).add(t3);\n  }\n  async _$ET() {\n    this.isUpdatePending = true;\n    try {\n      await this._$ES;\n    } catch (t4) {\n      Promise.reject(t4);\n    }\n    const t3 = this.scheduleUpdate();\n    return null != t3 && await t3, !this.isUpdatePending;\n  }\n  scheduleUpdate() {\n    return this.performUpdate();\n  }\n  performUpdate() {\n    if (!this.isUpdatePending) return;\n    if (!this.hasUpdated) {\n      if (this.renderRoot ??= this.createRenderRoot(), this._$Ep) {\n        for (const [t5, s3] of this._$Ep) this[t5] = s3;\n        this._$Ep = void 0;\n      }\n      const t4 = this.constructor.elementProperties;\n      if (t4.size > 0) for (const [s3, i4] of t4) true !== i4.wrapped || this._$AL.has(s3) || void 0 === this[s3] || this.P(s3, this[s3], i4);\n    }\n    let t3 = false;\n    const s2 = this._$AL;\n    try {\n      t3 = this.shouldUpdate(s2), t3 ? (this.willUpdate(s2), this._$EO?.forEach(((t4) => t4.hostUpdate?.())), this.update(s2)) : this._$EU();\n    } catch (s3) {\n      throw t3 = false, this._$EU(), s3;\n    }\n    t3 && this._$AE(s2);\n  }\n  willUpdate(t3) {\n  }\n  _$AE(t3) {\n    this._$EO?.forEach(((t4) => t4.hostUpdated?.())), this.hasUpdated || (this.hasUpdated = true, this.firstUpdated(t3)), this.updated(t3);\n  }\n  _$EU() {\n    this._$AL = /* @__PURE__ */ new Map(), this.isUpdatePending = false;\n  }\n  get updateComplete() {\n    return this.getUpdateComplete();\n  }\n  getUpdateComplete() {\n    return this._$ES;\n  }\n  shouldUpdate(t3) {\n    return true;\n  }\n  update(t3) {\n    this._$Ej &&= this._$Ej.forEach(((t4) => this._$EC(t4, this[t4]))), this._$EU();\n  }\n  updated(t3) {\n  }\n  firstUpdated(t3) {\n  }\n};\nb.elementStyles = [], b.shadowRootOptions = { mode: \"open\" }, b[d(\"elementProperties\")] = /* @__PURE__ */ new Map(), b[d(\"finalized\")] = /* @__PURE__ */ new Map(), p?.({ ReactiveElement: b }), (a.reactiveElementVersions ??= []).push(\"2.0.4\");\n\n// node_modules/lit-html/lit-html.js\nvar n3 = globalThis;\nvar c3 = n3.trustedTypes;\nvar h2 = c3 ? c3.createPolicy(\"lit-html\", { createHTML: (t3) => t3 }) : void 0;\nvar f2 = \"$lit$\";\nvar v = `lit$${Math.random().toFixed(9).slice(2)}$`;\nvar m = \"?\" + v;\nvar _ = `<${m}>`;\nvar w = document;\nvar lt = () => w.createComment(\"\");\nvar st = (t3) => null === t3 || \"object\" != typeof t3 && \"function\" != typeof t3;\nvar g = Array.isArray;\nvar $ = (t3) => g(t3) || \"function\" == typeof t3?.[Symbol.iterator];\nvar x = \"[ \t\\n\\f\\r]\";\nvar T = /<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g;\nvar E = /-->/g;\nvar k = />/g;\nvar O = RegExp(`>|${x}(?:([^\\\\s\"'>=/]+)(${x}*=${x}*(?:[^ \t\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`, \"g\");\nvar S2 = /'/g;\nvar j = /\"/g;\nvar M = /^(?:script|style|textarea|title)$/i;\nvar P = (t3) => (i4, ...s2) => ({ _$litType$: t3, strings: i4, values: s2 });\nvar ke = P(1);\nvar Oe = P(2);\nvar Se = P(3);\nvar R = /* @__PURE__ */ Symbol.for(\"lit-noChange\");\nvar D = /* @__PURE__ */ Symbol.for(\"lit-nothing\");\nvar V = /* @__PURE__ */ new WeakMap();\nvar I = w.createTreeWalker(w, 129);\nfunction N(t3, i4) {\n  if (!g(t3) || !t3.hasOwnProperty(\"raw\")) throw Error(\"invalid template strings array\");\n  return void 0 !== h2 ? h2.createHTML(i4) : i4;\n}\nvar U = (t3, i4) => {\n  const s2 = t3.length - 1, e5 = [];\n  let h4, o4 = 2 === i4 ? \"<svg>\" : 3 === i4 ? \"<math>\" : \"\", n5 = T;\n  for (let i5 = 0; i5 < s2; i5++) {\n    const s3 = t3[i5];\n    let r4, l2, c4 = -1, a2 = 0;\n    for (; a2 < s3.length && (n5.lastIndex = a2, l2 = n5.exec(s3), null !== l2); ) a2 = n5.lastIndex, n5 === T ? \"!--\" === l2[1] ? n5 = E : void 0 !== l2[1] ? n5 = k : void 0 !== l2[2] ? (M.test(l2[2]) && (h4 = RegExp(\"</\" + l2[2], \"g\")), n5 = O) : void 0 !== l2[3] && (n5 = O) : n5 === O ? \">\" === l2[0] ? (n5 = h4 ?? T, c4 = -1) : void 0 === l2[1] ? c4 = -2 : (c4 = n5.lastIndex - l2[2].length, r4 = l2[1], n5 = void 0 === l2[3] ? O : '\"' === l2[3] ? j : S2) : n5 === j || n5 === S2 ? n5 = O : n5 === E || n5 === k ? n5 = T : (n5 = O, h4 = void 0);\n    const u2 = n5 === O && t3[i5 + 1].startsWith(\"/>\") ? \" \" : \"\";\n    o4 += n5 === T ? s3 + _ : c4 >= 0 ? (e5.push(r4), s3.slice(0, c4) + f2 + s3.slice(c4) + v + u2) : s3 + v + (-2 === c4 ? i5 : u2);\n  }\n  return [N(t3, o4 + (t3[s2] || \"<?>\") + (2 === i4 ? \"</svg>\" : 3 === i4 ? \"</math>\" : \"\")), e5];\n};\nvar B = class _B {\n  constructor({ strings: t3, _$litType$: i4 }, s2) {\n    let e5;\n    this.parts = [];\n    let h4 = 0, o4 = 0;\n    const n5 = t3.length - 1, r4 = this.parts, [l2, a2] = U(t3, i4);\n    if (this.el = _B.createElement(l2, s2), I.currentNode = this.el.content, 2 === i4 || 3 === i4) {\n      const t4 = this.el.content.firstChild;\n      t4.replaceWith(...t4.childNodes);\n    }\n    for (; null !== (e5 = I.nextNode()) && r4.length < n5; ) {\n      if (1 === e5.nodeType) {\n        if (e5.hasAttributes()) for (const t4 of e5.getAttributeNames()) if (t4.endsWith(f2)) {\n          const i5 = a2[o4++], s3 = e5.getAttribute(t4).split(v), n6 = /([.?@])?(.*)/.exec(i5);\n          r4.push({ type: 1, index: h4, name: n6[2], strings: s3, ctor: \".\" === n6[1] ? Y : \"?\" === n6[1] ? Z : \"@\" === n6[1] ? q : G }), e5.removeAttribute(t4);\n        } else t4.startsWith(v) && (r4.push({ type: 6, index: h4 }), e5.removeAttribute(t4));\n        if (M.test(e5.tagName)) {\n          const t4 = e5.textContent.split(v), i5 = t4.length - 1;\n          if (i5 > 0) {\n            e5.textContent = c3 ? c3.emptyScript : \"\";\n            for (let s3 = 0; s3 < i5; s3++) e5.append(t4[s3], lt()), I.nextNode(), r4.push({ type: 2, index: ++h4 });\n            e5.append(t4[i5], lt());\n          }\n        }\n      } else if (8 === e5.nodeType) if (e5.data === m) r4.push({ type: 2, index: h4 });\n      else {\n        let t4 = -1;\n        for (; -1 !== (t4 = e5.data.indexOf(v, t4 + 1)); ) r4.push({ type: 7, index: h4 }), t4 += v.length - 1;\n      }\n      h4++;\n    }\n  }\n  static createElement(t3, i4) {\n    const s2 = w.createElement(\"template\");\n    return s2.innerHTML = t3, s2;\n  }\n};\nfunction z(t3, i4, s2 = t3, e5) {\n  if (i4 === R) return i4;\n  let h4 = void 0 !== e5 ? s2.o?.[e5] : s2.l;\n  const o4 = st(i4) ? void 0 : i4._$litDirective$;\n  return h4?.constructor !== o4 && (h4?._$AO?.(false), void 0 === o4 ? h4 = void 0 : (h4 = new o4(t3), h4._$AT(t3, s2, e5)), void 0 !== e5 ? (s2.o ??= [])[e5] = h4 : s2.l = h4), void 0 !== h4 && (i4 = z(t3, h4._$AS(t3, i4.values), h4, e5)), i4;\n}\nvar F = class {\n  constructor(t3, i4) {\n    this._$AV = [], this._$AN = void 0, this._$AD = t3, this._$AM = i4;\n  }\n  get parentNode() {\n    return this._$AM.parentNode;\n  }\n  get _$AU() {\n    return this._$AM._$AU;\n  }\n  u(t3) {\n    const { el: { content: i4 }, parts: s2 } = this._$AD, e5 = (t3?.creationScope ?? w).importNode(i4, true);\n    I.currentNode = e5;\n    let h4 = I.nextNode(), o4 = 0, n5 = 0, r4 = s2[0];\n    for (; void 0 !== r4; ) {\n      if (o4 === r4.index) {\n        let i5;\n        2 === r4.type ? i5 = new et(h4, h4.nextSibling, this, t3) : 1 === r4.type ? i5 = new r4.ctor(h4, r4.name, r4.strings, this, t3) : 6 === r4.type && (i5 = new K(h4, this, t3)), this._$AV.push(i5), r4 = s2[++n5];\n      }\n      o4 !== r4?.index && (h4 = I.nextNode(), o4++);\n    }\n    return I.currentNode = w, e5;\n  }\n  p(t3) {\n    let i4 = 0;\n    for (const s2 of this._$AV) void 0 !== s2 && (void 0 !== s2.strings ? (s2._$AI(t3, s2, i4), i4 += s2.strings.length - 2) : s2._$AI(t3[i4])), i4++;\n  }\n};\nvar et = class _et {\n  get _$AU() {\n    return this._$AM?._$AU ?? this.v;\n  }\n  constructor(t3, i4, s2, e5) {\n    this.type = 2, this._$AH = D, this._$AN = void 0, this._$AA = t3, this._$AB = i4, this._$AM = s2, this.options = e5, this.v = e5?.isConnected ?? true;\n  }\n  get parentNode() {\n    let t3 = this._$AA.parentNode;\n    const i4 = this._$AM;\n    return void 0 !== i4 && 11 === t3?.nodeType && (t3 = i4.parentNode), t3;\n  }\n  get startNode() {\n    return this._$AA;\n  }\n  get endNode() {\n    return this._$AB;\n  }\n  _$AI(t3, i4 = this) {\n    t3 = z(this, t3, i4), st(t3) ? t3 === D || null == t3 || \"\" === t3 ? (this._$AH !== D && this._$AR(), this._$AH = D) : t3 !== this._$AH && t3 !== R && this._(t3) : void 0 !== t3._$litType$ ? this.$(t3) : void 0 !== t3.nodeType ? this.T(t3) : $(t3) ? this.k(t3) : this._(t3);\n  }\n  O(t3) {\n    return this._$AA.parentNode.insertBefore(t3, this._$AB);\n  }\n  T(t3) {\n    this._$AH !== t3 && (this._$AR(), this._$AH = this.O(t3));\n  }\n  _(t3) {\n    this._$AH !== D && st(this._$AH) ? this._$AA.nextSibling.data = t3 : this.T(w.createTextNode(t3)), this._$AH = t3;\n  }\n  $(t3) {\n    const { values: i4, _$litType$: s2 } = t3, e5 = \"number\" == typeof s2 ? this._$AC(t3) : (void 0 === s2.el && (s2.el = B.createElement(N(s2.h, s2.h[0]), this.options)), s2);\n    if (this._$AH?._$AD === e5) this._$AH.p(i4);\n    else {\n      const t4 = new F(e5, this), s3 = t4.u(this.options);\n      t4.p(i4), this.T(s3), this._$AH = t4;\n    }\n  }\n  _$AC(t3) {\n    let i4 = V.get(t3.strings);\n    return void 0 === i4 && V.set(t3.strings, i4 = new B(t3)), i4;\n  }\n  k(t3) {\n    g(this._$AH) || (this._$AH = [], this._$AR());\n    const i4 = this._$AH;\n    let s2, e5 = 0;\n    for (const h4 of t3) e5 === i4.length ? i4.push(s2 = new _et(this.O(lt()), this.O(lt()), this, this.options)) : s2 = i4[e5], s2._$AI(h4), e5++;\n    e5 < i4.length && (this._$AR(s2 && s2._$AB.nextSibling, e5), i4.length = e5);\n  }\n  _$AR(t3 = this._$AA.nextSibling, i4) {\n    for (this._$AP?.(false, true, i4); t3 && t3 !== this._$AB; ) {\n      const i5 = t3.nextSibling;\n      t3.remove(), t3 = i5;\n    }\n  }\n  setConnected(t3) {\n    void 0 === this._$AM && (this.v = t3, this._$AP?.(t3));\n  }\n};\nvar G = class {\n  get tagName() {\n    return this.element.tagName;\n  }\n  get _$AU() {\n    return this._$AM._$AU;\n  }\n  constructor(t3, i4, s2, e5, h4) {\n    this.type = 1, this._$AH = D, this._$AN = void 0, this.element = t3, this.name = i4, this._$AM = e5, this.options = h4, s2.length > 2 || \"\" !== s2[0] || \"\" !== s2[1] ? (this._$AH = Array(s2.length - 1).fill(new String()), this.strings = s2) : this._$AH = D;\n  }\n  _$AI(t3, i4 = this, s2, e5) {\n    const h4 = this.strings;\n    let o4 = false;\n    if (void 0 === h4) t3 = z(this, t3, i4, 0), o4 = !st(t3) || t3 !== this._$AH && t3 !== R, o4 && (this._$AH = t3);\n    else {\n      const e6 = t3;\n      let n5, r4;\n      for (t3 = h4[0], n5 = 0; n5 < h4.length - 1; n5++) r4 = z(this, e6[s2 + n5], i4, n5), r4 === R && (r4 = this._$AH[n5]), o4 ||= !st(r4) || r4 !== this._$AH[n5], r4 === D ? t3 = D : t3 !== D && (t3 += (r4 ?? \"\") + h4[n5 + 1]), this._$AH[n5] = r4;\n    }\n    o4 && !e5 && this.j(t3);\n  }\n  j(t3) {\n    t3 === D ? this.element.removeAttribute(this.name) : this.element.setAttribute(this.name, t3 ?? \"\");\n  }\n};\nvar Y = class extends G {\n  constructor() {\n    super(...arguments), this.type = 3;\n  }\n  j(t3) {\n    this.element[this.name] = t3 === D ? void 0 : t3;\n  }\n};\nvar Z = class extends G {\n  constructor() {\n    super(...arguments), this.type = 4;\n  }\n  j(t3) {\n    this.element.toggleAttribute(this.name, !!t3 && t3 !== D);\n  }\n};\nvar q = class extends G {\n  constructor(t3, i4, s2, e5, h4) {\n    super(t3, i4, s2, e5, h4), this.type = 5;\n  }\n  _$AI(t3, i4 = this) {\n    if ((t3 = z(this, t3, i4, 0) ?? D) === R) return;\n    const s2 = this._$AH, e5 = t3 === D && s2 !== D || t3.capture !== s2.capture || t3.once !== s2.once || t3.passive !== s2.passive, h4 = t3 !== D && (s2 === D || e5);\n    e5 && this.element.removeEventListener(this.name, this, s2), h4 && this.element.addEventListener(this.name, this, t3), this._$AH = t3;\n  }\n  handleEvent(t3) {\n    \"function\" == typeof this._$AH ? this._$AH.call(this.options?.host ?? this.element, t3) : this._$AH.handleEvent(t3);\n  }\n};\nvar K = class {\n  constructor(t3, i4, s2) {\n    this.element = t3, this.type = 6, this._$AN = void 0, this._$AM = i4, this.options = s2;\n  }\n  get _$AU() {\n    return this._$AM._$AU;\n  }\n  _$AI(t3) {\n    z(this, t3);\n  }\n};\nvar Re = n3.litHtmlPolyfillSupport;\nRe?.(B, et), (n3.litHtmlVersions ??= []).push(\"3.2.0\");\nvar Q = (t3, i4, s2) => {\n  const e5 = s2?.renderBefore ?? i4;\n  let h4 = e5._$litPart$;\n  if (void 0 === h4) {\n    const t4 = s2?.renderBefore ?? null;\n    e5._$litPart$ = h4 = new et(i4.insertBefore(lt(), t4), t4, void 0, s2 ?? {});\n  }\n  return h4._$AI(t3), h4;\n};\n\n// node_modules/lit-element/lit-element.js\nvar h3 = class extends b {\n  constructor() {\n    super(...arguments), this.renderOptions = { host: this }, this.o = void 0;\n  }\n  createRenderRoot() {\n    const t3 = super.createRenderRoot();\n    return this.renderOptions.renderBefore ??= t3.firstChild, t3;\n  }\n  update(t3) {\n    const e5 = this.render();\n    this.hasUpdated || (this.renderOptions.isConnected = this.isConnected), super.update(t3), this.o = Q(e5, this.renderRoot, this.renderOptions);\n  }\n  connectedCallback() {\n    super.connectedCallback(), this.o?.setConnected(true);\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback(), this.o?.setConnected(false);\n  }\n  render() {\n    return R;\n  }\n};\nh3._$litElement$ = true, h3[\"finalized\"] = true, globalThis.litElementHydrateSupport?.({ LitElement: h3 });\nvar f3 = globalThis.litElementPolyfillSupport;\nf3?.({ LitElement: h3 });\n(globalThis.litElementVersions ??= []).push(\"4.1.0\");\n\n// node_modules/@lit/reactive-element/decorators/property.js\nvar o3 = { attribute: true, type: String, converter: u, reflect: false, hasChanged: f };\nvar r3 = (t3 = o3, e5, r4) => {\n  const { kind: n5, metadata: i4 } = r4;\n  let s2 = globalThis.litPropertyMetadata.get(i4);\n  if (void 0 === s2 && globalThis.litPropertyMetadata.set(i4, s2 = /* @__PURE__ */ new Map()), s2.set(r4.name, t3), \"accessor\" === n5) {\n    const { name: o4 } = r4;\n    return { set(r5) {\n      const n6 = e5.get.call(this);\n      e5.set.call(this, r5), this.requestUpdate(o4, n6, t3);\n    }, init(e6) {\n      return void 0 !== e6 && this.P(o4, void 0, t3), e6;\n    } };\n  }\n  if (\"setter\" === n5) {\n    const { name: o4 } = r4;\n    return function(r5) {\n      const n6 = this[o4];\n      e5.call(this, r5), this.requestUpdate(o4, n6, t3);\n    };\n  }\n  throw Error(\"Unsupported decorator location: \" + n5);\n};\nfunction n4(t3) {\n  return (e5, o4) => \"object\" == typeof o4 ? r3(t3, e5, o4) : ((t4, e6, o5) => {\n    const r4 = e6.hasOwnProperty(o5);\n    return e6.constructor.createProperty(o5, r4 ? { ...t4, wrapped: true } : t4), r4 ? Object.getOwnPropertyDescriptor(e6, o5) : void 0;\n  })(t3, e5, o4);\n}\n\n// node_modules/lit-html/directive.js\nvar t2 = { ATTRIBUTE: 1, CHILD: 2, PROPERTY: 3, BOOLEAN_ATTRIBUTE: 4, EVENT: 5, ELEMENT: 6 };\nvar e4 = (t3) => (...e5) => ({ _$litDirective$: t3, values: e5 });\nvar i3 = class {\n  constructor(t3) {\n  }\n  get _$AU() {\n    return this._$AM._$AU;\n  }\n  _$AT(t3, e5, i4) {\n    this.t = t3, this._$AM = e5, this.i = i4;\n  }\n  _$AS(t3, e5) {\n    return this.update(t3, e5);\n  }\n  update(t3, e5) {\n    return this.render(...e5);\n  }\n};\n\n// node_modules/lit-html/directives/class-map.js\nvar Rt = e4(class extends i3 {\n  constructor(s2) {\n    if (super(s2), s2.type !== t2.ATTRIBUTE || \"class\" !== s2.name || s2.strings?.length > 2) throw Error(\"`classMap()` can only be used in the `class` attribute and must be the only part in the attribute.\");\n  }\n  render(t3) {\n    return \" \" + Object.keys(t3).filter(((s2) => t3[s2])).join(\" \") + \" \";\n  }\n  update(t3, [s2]) {\n    if (void 0 === this.st) {\n      this.st = /* @__PURE__ */ new Set(), void 0 !== t3.strings && (this.nt = new Set(t3.strings.join(\" \").split(/\\s/).filter(((t4) => \"\" !== t4))));\n      for (const t4 in s2) s2[t4] && !this.nt?.has(t4) && this.st.add(t4);\n      return this.render(s2);\n    }\n    const i4 = t3.element.classList;\n    for (const t4 of this.st) t4 in s2 || (i4.remove(t4), this.st.delete(t4));\n    for (const t4 in s2) {\n      const r4 = !!s2[t4];\n      r4 === this.st.has(t4) || this.nt?.has(t4) || (r4 ? (i4.add(t4), this.st.add(t4)) : (i4.remove(t4), this.st.delete(t4)));\n    }\n    return R;\n  }\n});\n\n// js/ipywidgets_styles.ts\nvar legacyStyles = i`\n    .legacy-button {\n        align-items: center;\n        background-color: var(--jp-layout-color2);\n        border-width: 0;\n        box-shadow: none;\n        color: var(--jp-ui-font-color1);\n        cursor: pointer;\n        display: flex;\n        font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n        font-size: var(--jp-widgets-font-size);\n        justify-content: center;\n        line-height: var(--jp-widgets-inline-height);\n        padding: 0;\n        user-select: none;\n    }\n\n    .legacy-button.primary {\n        background-color: var(--jp-brand-color1);\n        color: var(--jp-ui-inverse-font-color1);\n    }\n\n    .legacy-button:hover:enabled,\n    .legacy-button:focus:enabled {\n        box-shadow: 0 2px 2px 0\n                rgba(0, 0, 0, var(--md-shadow-key-penumbra-opacity)),\n            0 3px 1px -2px rgba(0, 0, 0, var(--md-shadow-key-umbra-opacity)),\n            0 1px 5px 0 rgba(0, 0, 0, var(--md-shadow-ambient-shadow-opacity));\n    }\n\n    .legacy-slider {\n        -webkit-appearance: none;\n        appearance: none;\n        background: var(--jp-layout-color3);\n        border-radius: 3px;\n        height: 4px;\n        outline: none;\n    }\n\n    .legacy-slider::-webkit-slider-thumb,\n    .legacy-slider::-moz-range-thumb {\n        -moz-appearance: none;\n        -webkit-appearance: none;\n        appearance: none;\n        border-radius: 50%;\n        cursor: pointer;\n        height: var(--jp-widgets-slider-handle-size);\n        width: var(--jp-widgets-slider-handle-size);\n    }\n\n    .legacy-text {\n        color: var(--jp-widgets-label-color);\n        font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n        font-size: var(--jp-widgets-font-size);\n        height: var(--jp-widgets-inline-height);\n        line-height: var(--jp-widgets-inline-height);\n        vertical-align: middle;\n    }\n\n    .legacy-select {\n        -moz-appearance: none;\n        -webkit-appearance: none;\n        appearance: none;\n        background-color: var(--jp-widgets-input-background-color);\n        background-image: var(--jp-widgets-dropdown-arrow);\n        background-position: right center;\n        background-repeat: no-repeat;\n        background-size: 20px;\n        border-radius: 0;\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        box-shadow: none;\n        box-sizing: border-box;\n        color: var(--jp-widgets-input-color);\n        flex: 1 1 var(--jp-widgets-inline-width-short);\n        font-size: var(--jp-widgets-font-size);\n        height: 28px;\n        line-height: 28px;\n        min-width: 0;\n        outline: none !important;\n        padding-left: calc(var(--jp-widgets-input-padding)* 2);\n        padding-right: 20px;\n        vertical-align: top;\n    }\n\n    .legacy-select[disabled] {\n        opacity: 0.4;\n        cursor: not-allowed;\n    }\n\n    .legacy-text-input {\n        background: var(--jp-widgets-input-background-color);\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        box-sizing: border-box;\n        color: var(--jp-widgets-input-color);\n        flex-grow: 1;\n        flex-shrink: 1;\n        font-size: var(--jp-widgets-font-size);\n        height: var(--jp-widgets-inline-height);\n        line-height: var(--jp-widgets-inline-height);\n        min-width: 0;\n        outline: none !important;\n        padding: var(--jp-widgets-input-padding) calc(var(--jp-widgets-input-padding) * 2);\n    }\n\n    .legacy-text-input:disabled {\n        opacity: var(--jp-widgets-disabled-opacity);\n    }\n\n    .legacy-color {\n        align-self: stretch;\n        background: var(--jp-widgets-input-background-color);\n        border-left: none;\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        box-sizing: border-box;\n        color: var(--jp-widgets-input-color);\n        flex-grow: 0;\n        flex-shrink: 0;\n        height: var(--jp-widgets-inline-height);\n        outline: none !important;\n        padding: 0 2px;\n        width: var(--jp-widgets-inline-height);\n    }\n\n    .legacy-radio {\n        margin: 0;\n        vertical-align: middle;\n    }\n\n    .legacy-button.active {\n        background-color: var(--colab-primary-surface-color, --jp-layout-color3);\n        color: var(--jp-ui-font-color1);\n        box-shadow: 0 4px 5px 0 rgba(0, 0, 0, var(--md-shadow-key-penumbra-opacity)),\n                    0 1px 10px 0 rgba(0, 0, 0, var(--md-shadow-ambient-shadow-opacity)),\n                    0 2px 4px -1px rgba(0, 0, 0, var(--md-shadow-key-umbra-opacity));\n    }\n\n    .legacy-button.primary {\n        background-color: var(--jp-brand-color1);\n        color: var(--jp-ui-inverse-font-color1);\n    }\n\n    .legacy-button.primary.active {\n        background-color: var(--jp-brand-color0);\n        color: var(--jp-ui-inverse-font-color0);\n    }\n\n    .legacy-button.active {\n        background-color: var(--colab-primary-surface-color, --jp-layout-color3);\n        color: var(--jp-ui-font-color1);\n        box-shadow: 0 4px 5px 0 rgba(0, 0, 0, var(--md-shadow-key-penumbra-opacity)),\n                    0 1px 10px 0 rgba(0, 0, 0, var(--md-shadow-ambient-shadow-opacity)),\n                    0 2px 4px -1px rgba(0, 0, 0, var(--md-shadow-key-umbra-opacity));\n    }\n\n    .legacy-button.primary {\n        background-color: var(--jp-brand-color1);\n        color: var(--jp-ui-inverse-font-color1);\n    }\n\n    .legacy-button.primary.active {\n        background-color: var(--jp-brand-color0);\n        color: var(--jp-ui-inverse-font-color0);\n    }\n\n    .legacy-select {\n        -moz-appearance: none;\n        -webkit-appearance: none;\n        appearance: none;\n        background-color: var(--jp-widgets-input-background-color);\n        background-image: var(--jp-widgets-dropdown-arrow);\n        background-position: right center;\n        background-repeat: no-repeat;\n        background-size: 20px;\n        border-radius: 0;\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        box-shadow: none;\n        box-sizing: border-box;\n        color: var(--jp-widgets-input-color);\n        flex: 1 1 var(--jp-widgets-inline-width-short);\n        font-size: var(--jp-widgets-font-size);\n        height: inherit;\n        min-width: 0;\n        outline: none !important;\n        padding-left: calc(var(--jp-widgets-input-padding)* 2);\n        padding-right: 20px;\n        vertical-align: top;\n    }\n\n    .legacy-input {\n        box-sizing: border-box;\n        background-color: var(--colab-primary-surface-color, --jp-widgets-input-background-color);\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        color: var(--jp-widgets-input-color);\n        flex-grow: 1;\n        flex-shrink: 1;\n        font-size: var(--jp-widgets-font-size);\n        min-width: 0;\n        outline: none !important;\n        padding: var(--jp-widgets-input-padding) calc(var(--jp-widgets-input-padding)* 2);\n        height: var(--jp-widgets-inline-height);\n        line-height: var(--jp-widgets-inline-height);\n    }\n`;\n\n// js/utils.ts\nfunction loadFonts() {\n  if (!document.querySelector(\".custom-fonts\")) {\n    const styleElement = document.createElement(\"style\");\n    styleElement.classList.add(\"custom-fonts\");\n    styleElement.textContent = '@import \"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined\";';\n    document.body.appendChild(styleElement);\n  }\n}\nfunction reverseMap(map) {\n  const reversedMap = /* @__PURE__ */ new Map();\n  for (const [key, value] of map.entries()) {\n    if (value != null) {\n      reversedMap.set(value, key);\n    }\n  }\n  return reversedMap;\n}\n\n// js/lit_widget.ts\nvar LitWidget = class extends h3 {\n  constructor() {\n    super(...arguments);\n    this._model = void 0;\n  }\n  onCustomMessage(_msg) {\n  }\n  viewNameToModelName() {\n    return reverseMap(this.modelNameToViewName());\n  }\n  set model(model) {\n    this._model = model;\n    for (const [modelKey, widgetKey] of this.modelNameToViewName()) {\n      if (widgetKey) {\n        this[widgetKey] = model.get(modelKey);\n        model.on(`change:${String(modelKey)}`, () => {\n          this[widgetKey] = model.get(modelKey);\n        });\n      }\n    }\n    model.on(\"msg:custom\", (msg) => {\n      this.onCustomMessage?.(msg);\n    });\n  }\n  get model() {\n    return this._model;\n  }\n  updated(changedProperties) {\n    const viewToModelMap = this.viewNameToModelName();\n    for (const [viewProp, _2] of changedProperties) {\n      const castViewProp = viewProp;\n      if (viewToModelMap.has(castViewProp)) {\n        const modelProp = viewToModelMap.get(castViewProp);\n        this._model?.set(\n          modelProp,\n          this[castViewProp]\n        );\n      }\n    }\n    this._model?.save_changes();\n  }\n};\n\n// js/styles.ts\nvar materialStyles = i`\n    @font-face {\n        font-family: \"Material Symbols Outlined\";\n        font-style: normal;\n        font-weight: 400;\n        src: url(https://fonts.gstatic.com/s/materialsymbolsoutlined/v205/kJF1BvYX7BgnkSrUwT8OhrdQw4oELdPIeeII9v6oDMzByHX9rA6RzaxHMPdY43zj-jCxv3fzvRNU22ZXGJpEpjC_1v-p_4MrImHCIJIZrDCvHOejbd5zrDAt.woff2)\n            format(\"woff2\");\n    }\n\n    .material-symbols-outlined {\n        -webkit-font-feature-settings: \"liga\";\n        -webkit-font-smoothing: antialiased;\n        direction: ltr;\n        display: inline-block;\n        font-family: \"Material Symbols Outlined\";\n        font-style: normal;\n        font-weight: normal;\n        letter-spacing: normal;\n        line-height: 1;\n        text-transform: none;\n        white-space: nowrap;\n        word-wrap: normal;\n    }\n`;\nvar flexStyles = i`\n    .vertical-flex {\n        display: flex;\n        flex-direction: column;\n        gap: 8px;\n    }\n\n    .horizontal-flex {\n        align-items: center;\n        display: flex;\n        flex-wrap: nowrap;\n        gap: 8px;\n    }\n\n    input:not([type=\"radio\"]):not([type=\"checkbox\"]) {\n        width: 100%;\n    }\n\n    select {\n        width: 100%;\n    }\n\n    .horizontal-flex .legacy-text {\n        flex-shrink: 0;\n    }\n`;\n\n// js/toolbar_item.ts\nvar ToolbarItem = class extends LitWidget {\n  constructor() {\n    super(...arguments);\n    this.active = false;\n    this.primary = true;\n    this.icon = \"\";\n    this.tooltip_text = \"\";\n  }\n  static get componentName() {\n    return `tool-button`;\n  }\n  static {\n    this.styles = [\n      legacyStyles,\n      materialStyles,\n      i`\n            button {\n                font-size: 16px !important;\n                height: 32px;\n                padding: 0px 0px 0px 4px;\n                width: 32px;\n            }\n        `\n    ];\n  }\n  modelNameToViewName() {\n    return /* @__PURE__ */ new Map([\n      [\"active\", \"active\"],\n      [\"primary\", \"primary\"],\n      [\"icon\", \"icon\"],\n      [\"tooltip_text\", \"tooltip_text\"]\n    ]);\n  }\n  render() {\n    return ke`\n            <button\n                class=${Rt({\n      \"legacy-button\": true,\n      \"primary\": this.primary,\n      \"active\": this.active\n    })}\n                title=\"${this.tooltip_text}\"\n                @click=\"${this.onClick}\">\n                <span class=\"material-symbols-outlined\">${this.icon}</span>\n            </button>`;\n  }\n  onClick(_2) {\n    this.active = !this.active;\n  }\n};\n__decorateClass([\n  n4({ type: Boolean })\n], ToolbarItem.prototype, \"active\", 2);\n__decorateClass([\n  n4({ type: Boolean })\n], ToolbarItem.prototype, \"primary\", 2);\n__decorateClass([\n  n4({ type: String })\n], ToolbarItem.prototype, \"icon\", 2);\n__decorateClass([\n  n4({ type: String })\n], ToolbarItem.prototype, \"tooltip_text\", 2);\nif (!customElements.get(ToolbarItem.componentName)) {\n  customElements.define(ToolbarItem.componentName, ToolbarItem);\n}\nasync function render({ model, el }) {\n  loadFonts();\n  const manager = document.createElement(ToolbarItem.componentName);\n  manager.model = model;\n  el.appendChild(manager);\n}\nvar toolbar_item_default = { render };\nexport {\n  ToolbarItem,\n  toolbar_item_default as default\n};\n/*! Bundled license information:\n\n@lit/reactive-element/css-tag.js:\n  (**\n   * @license\n   * Copyright 2019 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n\n@lit/reactive-element/reactive-element.js:\nlit-html/lit-html.js:\nlit-element/lit-element.js:\n@lit/reactive-element/decorators/custom-element.js:\n@lit/reactive-element/decorators/property.js:\n@lit/reactive-element/decorators/state.js:\n@lit/reactive-element/decorators/event-options.js:\n@lit/reactive-element/decorators/base.js:\n@lit/reactive-element/decorators/query.js:\n@lit/reactive-element/decorators/query-all.js:\n@lit/reactive-element/decorators/query-async.js:\n@lit/reactive-element/decorators/query-assigned-nodes.js:\nlit-html/directive.js:\n  (**\n   * @license\n   * Copyright 2017 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n\nlit-html/is-server.js:\n  (**\n   * @license\n   * Copyright 2022 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n\n@lit/reactive-element/decorators/query-assigned-elements.js:\n  (**\n   * @license\n   * Copyright 2021 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n\nlit-html/directives/class-map.js:\n  (**\n   * @license\n   * Copyright 2018 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n*/\n",
              "_model_module": "anywidget",
              "_model_module_version": "~0.9.*",
              "_model_name": "AnyModel",
              "_view_count": null,
              "_view_module": "anywidget",
              "_view_module_version": "~0.9.*",
              "_view_name": "AnyView",
              "active": false,
              "icon": "map",
              "layout": "IPY_MODEL_11552b9fd81f41ab80417dc432721a7e",
              "primary": true,
              "tooltip_text": "Basemap selector"
            }
          },
          "aa8c8a28e55a4b7b9a332a4e98a26801": {
            "model_module": "anywidget",
            "model_name": "AnyModel",
            "model_module_version": "~0.9.*",
            "state": {
              "_anywidget_id": "geemap.toolbar.ToolbarItem",
              "_dom_classes": [
                "geemap-colab"
              ],
              "_esm": "var __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __decorateClass = (decorators, target, key, kind) => {\n  var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;\n  for (var i4 = decorators.length - 1, decorator; i4 >= 0; i4--)\n    if (decorator = decorators[i4])\n      result = (kind ? decorator(target, key, result) : decorator(result)) || result;\n  if (kind && result) __defProp(target, key, result);\n  return result;\n};\n\n// node_modules/@lit/reactive-element/css-tag.js\nvar t = globalThis;\nvar e = t.ShadowRoot && (void 0 === t.ShadyCSS || t.ShadyCSS.nativeShadow) && \"adoptedStyleSheets\" in Document.prototype && \"replace\" in CSSStyleSheet.prototype;\nvar s = /* @__PURE__ */ Symbol();\nvar o = /* @__PURE__ */ new WeakMap();\nvar n = class {\n  constructor(t3, e5, o4) {\n    if (this._$cssResult$ = true, o4 !== s) throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");\n    this.cssText = t3, this.t = e5;\n  }\n  get styleSheet() {\n    let t3 = this.o;\n    const s2 = this.t;\n    if (e && void 0 === t3) {\n      const e5 = void 0 !== s2 && 1 === s2.length;\n      e5 && (t3 = o.get(s2)), void 0 === t3 && ((this.o = t3 = new CSSStyleSheet()).replaceSync(this.cssText), e5 && o.set(s2, t3));\n    }\n    return t3;\n  }\n  toString() {\n    return this.cssText;\n  }\n};\nvar r = (t3) => new n(\"string\" == typeof t3 ? t3 : t3 + \"\", void 0, s);\nvar i = (t3, ...e5) => {\n  const o4 = 1 === t3.length ? t3[0] : e5.reduce(((e6, s2, o5) => e6 + ((t4) => {\n    if (true === t4._$cssResult$) return t4.cssText;\n    if (\"number\" == typeof t4) return t4;\n    throw Error(\"Value passed to 'css' function must be a 'css' function result: \" + t4 + \". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\");\n  })(s2) + t3[o5 + 1]), t3[0]);\n  return new n(o4, t3, s);\n};\nvar S = (s2, o4) => {\n  if (e) s2.adoptedStyleSheets = o4.map(((t3) => t3 instanceof CSSStyleSheet ? t3 : t3.styleSheet));\n  else for (const e5 of o4) {\n    const o5 = document.createElement(\"style\"), n5 = t.litNonce;\n    void 0 !== n5 && o5.setAttribute(\"nonce\", n5), o5.textContent = e5.cssText, s2.appendChild(o5);\n  }\n};\nvar c = e ? (t3) => t3 : (t3) => t3 instanceof CSSStyleSheet ? ((t4) => {\n  let e5 = \"\";\n  for (const s2 of t4.cssRules) e5 += s2.cssText;\n  return r(e5);\n})(t3) : t3;\n\n// node_modules/@lit/reactive-element/reactive-element.js\nvar { is: i2, defineProperty: e2, getOwnPropertyDescriptor: r2, getOwnPropertyNames: h, getOwnPropertySymbols: o2, getPrototypeOf: n2 } = Object;\nvar a = globalThis;\nvar c2 = a.trustedTypes;\nvar l = c2 ? c2.emptyScript : \"\";\nvar p = a.reactiveElementPolyfillSupport;\nvar d = (t3, s2) => t3;\nvar u = { toAttribute(t3, s2) {\n  switch (s2) {\n    case Boolean:\n      t3 = t3 ? l : null;\n      break;\n    case Object:\n    case Array:\n      t3 = null == t3 ? t3 : JSON.stringify(t3);\n  }\n  return t3;\n}, fromAttribute(t3, s2) {\n  let i4 = t3;\n  switch (s2) {\n    case Boolean:\n      i4 = null !== t3;\n      break;\n    case Number:\n      i4 = null === t3 ? null : Number(t3);\n      break;\n    case Object:\n    case Array:\n      try {\n        i4 = JSON.parse(t3);\n      } catch (t4) {\n        i4 = null;\n      }\n  }\n  return i4;\n} };\nvar f = (t3, s2) => !i2(t3, s2);\nvar y = { attribute: true, type: String, converter: u, reflect: false, hasChanged: f };\nSymbol.metadata ??= /* @__PURE__ */ Symbol(\"metadata\"), a.litPropertyMetadata ??= /* @__PURE__ */ new WeakMap();\nvar b = class extends HTMLElement {\n  static addInitializer(t3) {\n    this._$Ei(), (this.l ??= []).push(t3);\n  }\n  static get observedAttributes() {\n    return this.finalize(), this._$Eh && [...this._$Eh.keys()];\n  }\n  static createProperty(t3, s2 = y) {\n    if (s2.state && (s2.attribute = false), this._$Ei(), this.elementProperties.set(t3, s2), !s2.noAccessor) {\n      const i4 = /* @__PURE__ */ Symbol(), r4 = this.getPropertyDescriptor(t3, i4, s2);\n      void 0 !== r4 && e2(this.prototype, t3, r4);\n    }\n  }\n  static getPropertyDescriptor(t3, s2, i4) {\n    const { get: e5, set: h4 } = r2(this.prototype, t3) ?? { get() {\n      return this[s2];\n    }, set(t4) {\n      this[s2] = t4;\n    } };\n    return { get() {\n      return e5?.call(this);\n    }, set(s3) {\n      const r4 = e5?.call(this);\n      h4.call(this, s3), this.requestUpdate(t3, r4, i4);\n    }, configurable: true, enumerable: true };\n  }\n  static getPropertyOptions(t3) {\n    return this.elementProperties.get(t3) ?? y;\n  }\n  static _$Ei() {\n    if (this.hasOwnProperty(d(\"elementProperties\"))) return;\n    const t3 = n2(this);\n    t3.finalize(), void 0 !== t3.l && (this.l = [...t3.l]), this.elementProperties = new Map(t3.elementProperties);\n  }\n  static finalize() {\n    if (this.hasOwnProperty(d(\"finalized\"))) return;\n    if (this.finalized = true, this._$Ei(), this.hasOwnProperty(d(\"properties\"))) {\n      const t4 = this.properties, s2 = [...h(t4), ...o2(t4)];\n      for (const i4 of s2) this.createProperty(i4, t4[i4]);\n    }\n    const t3 = this[Symbol.metadata];\n    if (null !== t3) {\n      const s2 = litPropertyMetadata.get(t3);\n      if (void 0 !== s2) for (const [t4, i4] of s2) this.elementProperties.set(t4, i4);\n    }\n    this._$Eh = /* @__PURE__ */ new Map();\n    for (const [t4, s2] of this.elementProperties) {\n      const i4 = this._$Eu(t4, s2);\n      void 0 !== i4 && this._$Eh.set(i4, t4);\n    }\n    this.elementStyles = this.finalizeStyles(this.styles);\n  }\n  static finalizeStyles(s2) {\n    const i4 = [];\n    if (Array.isArray(s2)) {\n      const e5 = new Set(s2.flat(1 / 0).reverse());\n      for (const s3 of e5) i4.unshift(c(s3));\n    } else void 0 !== s2 && i4.push(c(s2));\n    return i4;\n  }\n  static _$Eu(t3, s2) {\n    const i4 = s2.attribute;\n    return false === i4 ? void 0 : \"string\" == typeof i4 ? i4 : \"string\" == typeof t3 ? t3.toLowerCase() : void 0;\n  }\n  constructor() {\n    super(), this._$Ep = void 0, this.isUpdatePending = false, this.hasUpdated = false, this._$Em = null, this._$Ev();\n  }\n  _$Ev() {\n    this._$ES = new Promise(((t3) => this.enableUpdating = t3)), this._$AL = /* @__PURE__ */ new Map(), this._$E_(), this.requestUpdate(), this.constructor.l?.forEach(((t3) => t3(this)));\n  }\n  addController(t3) {\n    (this._$EO ??= /* @__PURE__ */ new Set()).add(t3), void 0 !== this.renderRoot && this.isConnected && t3.hostConnected?.();\n  }\n  removeController(t3) {\n    this._$EO?.delete(t3);\n  }\n  _$E_() {\n    const t3 = /* @__PURE__ */ new Map(), s2 = this.constructor.elementProperties;\n    for (const i4 of s2.keys()) this.hasOwnProperty(i4) && (t3.set(i4, this[i4]), delete this[i4]);\n    t3.size > 0 && (this._$Ep = t3);\n  }\n  createRenderRoot() {\n    const t3 = this.shadowRoot ?? this.attachShadow(this.constructor.shadowRootOptions);\n    return S(t3, this.constructor.elementStyles), t3;\n  }\n  connectedCallback() {\n    this.renderRoot ??= this.createRenderRoot(), this.enableUpdating(true), this._$EO?.forEach(((t3) => t3.hostConnected?.()));\n  }\n  enableUpdating(t3) {\n  }\n  disconnectedCallback() {\n    this._$EO?.forEach(((t3) => t3.hostDisconnected?.()));\n  }\n  attributeChangedCallback(t3, s2, i4) {\n    this._$AK(t3, i4);\n  }\n  _$EC(t3, s2) {\n    const i4 = this.constructor.elementProperties.get(t3), e5 = this.constructor._$Eu(t3, i4);\n    if (void 0 !== e5 && true === i4.reflect) {\n      const r4 = (void 0 !== i4.converter?.toAttribute ? i4.converter : u).toAttribute(s2, i4.type);\n      this._$Em = t3, null == r4 ? this.removeAttribute(e5) : this.setAttribute(e5, r4), this._$Em = null;\n    }\n  }\n  _$AK(t3, s2) {\n    const i4 = this.constructor, e5 = i4._$Eh.get(t3);\n    if (void 0 !== e5 && this._$Em !== e5) {\n      const t4 = i4.getPropertyOptions(e5), r4 = \"function\" == typeof t4.converter ? { fromAttribute: t4.converter } : void 0 !== t4.converter?.fromAttribute ? t4.converter : u;\n      this._$Em = e5, this[e5] = r4.fromAttribute(s2, t4.type), this._$Em = null;\n    }\n  }\n  requestUpdate(t3, s2, i4) {\n    if (void 0 !== t3) {\n      if (i4 ??= this.constructor.getPropertyOptions(t3), !(i4.hasChanged ?? f)(this[t3], s2)) return;\n      this.P(t3, s2, i4);\n    }\n    false === this.isUpdatePending && (this._$ES = this._$ET());\n  }\n  P(t3, s2, i4) {\n    this._$AL.has(t3) || this._$AL.set(t3, s2), true === i4.reflect && this._$Em !== t3 && (this._$Ej ??= /* @__PURE__ */ new Set()).add(t3);\n  }\n  async _$ET() {\n    this.isUpdatePending = true;\n    try {\n      await this._$ES;\n    } catch (t4) {\n      Promise.reject(t4);\n    }\n    const t3 = this.scheduleUpdate();\n    return null != t3 && await t3, !this.isUpdatePending;\n  }\n  scheduleUpdate() {\n    return this.performUpdate();\n  }\n  performUpdate() {\n    if (!this.isUpdatePending) return;\n    if (!this.hasUpdated) {\n      if (this.renderRoot ??= this.createRenderRoot(), this._$Ep) {\n        for (const [t5, s3] of this._$Ep) this[t5] = s3;\n        this._$Ep = void 0;\n      }\n      const t4 = this.constructor.elementProperties;\n      if (t4.size > 0) for (const [s3, i4] of t4) true !== i4.wrapped || this._$AL.has(s3) || void 0 === this[s3] || this.P(s3, this[s3], i4);\n    }\n    let t3 = false;\n    const s2 = this._$AL;\n    try {\n      t3 = this.shouldUpdate(s2), t3 ? (this.willUpdate(s2), this._$EO?.forEach(((t4) => t4.hostUpdate?.())), this.update(s2)) : this._$EU();\n    } catch (s3) {\n      throw t3 = false, this._$EU(), s3;\n    }\n    t3 && this._$AE(s2);\n  }\n  willUpdate(t3) {\n  }\n  _$AE(t3) {\n    this._$EO?.forEach(((t4) => t4.hostUpdated?.())), this.hasUpdated || (this.hasUpdated = true, this.firstUpdated(t3)), this.updated(t3);\n  }\n  _$EU() {\n    this._$AL = /* @__PURE__ */ new Map(), this.isUpdatePending = false;\n  }\n  get updateComplete() {\n    return this.getUpdateComplete();\n  }\n  getUpdateComplete() {\n    return this._$ES;\n  }\n  shouldUpdate(t3) {\n    return true;\n  }\n  update(t3) {\n    this._$Ej &&= this._$Ej.forEach(((t4) => this._$EC(t4, this[t4]))), this._$EU();\n  }\n  updated(t3) {\n  }\n  firstUpdated(t3) {\n  }\n};\nb.elementStyles = [], b.shadowRootOptions = { mode: \"open\" }, b[d(\"elementProperties\")] = /* @__PURE__ */ new Map(), b[d(\"finalized\")] = /* @__PURE__ */ new Map(), p?.({ ReactiveElement: b }), (a.reactiveElementVersions ??= []).push(\"2.0.4\");\n\n// node_modules/lit-html/lit-html.js\nvar n3 = globalThis;\nvar c3 = n3.trustedTypes;\nvar h2 = c3 ? c3.createPolicy(\"lit-html\", { createHTML: (t3) => t3 }) : void 0;\nvar f2 = \"$lit$\";\nvar v = `lit$${Math.random().toFixed(9).slice(2)}$`;\nvar m = \"?\" + v;\nvar _ = `<${m}>`;\nvar w = document;\nvar lt = () => w.createComment(\"\");\nvar st = (t3) => null === t3 || \"object\" != typeof t3 && \"function\" != typeof t3;\nvar g = Array.isArray;\nvar $ = (t3) => g(t3) || \"function\" == typeof t3?.[Symbol.iterator];\nvar x = \"[ \t\\n\\f\\r]\";\nvar T = /<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g;\nvar E = /-->/g;\nvar k = />/g;\nvar O = RegExp(`>|${x}(?:([^\\\\s\"'>=/]+)(${x}*=${x}*(?:[^ \t\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`, \"g\");\nvar S2 = /'/g;\nvar j = /\"/g;\nvar M = /^(?:script|style|textarea|title)$/i;\nvar P = (t3) => (i4, ...s2) => ({ _$litType$: t3, strings: i4, values: s2 });\nvar ke = P(1);\nvar Oe = P(2);\nvar Se = P(3);\nvar R = /* @__PURE__ */ Symbol.for(\"lit-noChange\");\nvar D = /* @__PURE__ */ Symbol.for(\"lit-nothing\");\nvar V = /* @__PURE__ */ new WeakMap();\nvar I = w.createTreeWalker(w, 129);\nfunction N(t3, i4) {\n  if (!g(t3) || !t3.hasOwnProperty(\"raw\")) throw Error(\"invalid template strings array\");\n  return void 0 !== h2 ? h2.createHTML(i4) : i4;\n}\nvar U = (t3, i4) => {\n  const s2 = t3.length - 1, e5 = [];\n  let h4, o4 = 2 === i4 ? \"<svg>\" : 3 === i4 ? \"<math>\" : \"\", n5 = T;\n  for (let i5 = 0; i5 < s2; i5++) {\n    const s3 = t3[i5];\n    let r4, l2, c4 = -1, a2 = 0;\n    for (; a2 < s3.length && (n5.lastIndex = a2, l2 = n5.exec(s3), null !== l2); ) a2 = n5.lastIndex, n5 === T ? \"!--\" === l2[1] ? n5 = E : void 0 !== l2[1] ? n5 = k : void 0 !== l2[2] ? (M.test(l2[2]) && (h4 = RegExp(\"</\" + l2[2], \"g\")), n5 = O) : void 0 !== l2[3] && (n5 = O) : n5 === O ? \">\" === l2[0] ? (n5 = h4 ?? T, c4 = -1) : void 0 === l2[1] ? c4 = -2 : (c4 = n5.lastIndex - l2[2].length, r4 = l2[1], n5 = void 0 === l2[3] ? O : '\"' === l2[3] ? j : S2) : n5 === j || n5 === S2 ? n5 = O : n5 === E || n5 === k ? n5 = T : (n5 = O, h4 = void 0);\n    const u2 = n5 === O && t3[i5 + 1].startsWith(\"/>\") ? \" \" : \"\";\n    o4 += n5 === T ? s3 + _ : c4 >= 0 ? (e5.push(r4), s3.slice(0, c4) + f2 + s3.slice(c4) + v + u2) : s3 + v + (-2 === c4 ? i5 : u2);\n  }\n  return [N(t3, o4 + (t3[s2] || \"<?>\") + (2 === i4 ? \"</svg>\" : 3 === i4 ? \"</math>\" : \"\")), e5];\n};\nvar B = class _B {\n  constructor({ strings: t3, _$litType$: i4 }, s2) {\n    let e5;\n    this.parts = [];\n    let h4 = 0, o4 = 0;\n    const n5 = t3.length - 1, r4 = this.parts, [l2, a2] = U(t3, i4);\n    if (this.el = _B.createElement(l2, s2), I.currentNode = this.el.content, 2 === i4 || 3 === i4) {\n      const t4 = this.el.content.firstChild;\n      t4.replaceWith(...t4.childNodes);\n    }\n    for (; null !== (e5 = I.nextNode()) && r4.length < n5; ) {\n      if (1 === e5.nodeType) {\n        if (e5.hasAttributes()) for (const t4 of e5.getAttributeNames()) if (t4.endsWith(f2)) {\n          const i5 = a2[o4++], s3 = e5.getAttribute(t4).split(v), n6 = /([.?@])?(.*)/.exec(i5);\n          r4.push({ type: 1, index: h4, name: n6[2], strings: s3, ctor: \".\" === n6[1] ? Y : \"?\" === n6[1] ? Z : \"@\" === n6[1] ? q : G }), e5.removeAttribute(t4);\n        } else t4.startsWith(v) && (r4.push({ type: 6, index: h4 }), e5.removeAttribute(t4));\n        if (M.test(e5.tagName)) {\n          const t4 = e5.textContent.split(v), i5 = t4.length - 1;\n          if (i5 > 0) {\n            e5.textContent = c3 ? c3.emptyScript : \"\";\n            for (let s3 = 0; s3 < i5; s3++) e5.append(t4[s3], lt()), I.nextNode(), r4.push({ type: 2, index: ++h4 });\n            e5.append(t4[i5], lt());\n          }\n        }\n      } else if (8 === e5.nodeType) if (e5.data === m) r4.push({ type: 2, index: h4 });\n      else {\n        let t4 = -1;\n        for (; -1 !== (t4 = e5.data.indexOf(v, t4 + 1)); ) r4.push({ type: 7, index: h4 }), t4 += v.length - 1;\n      }\n      h4++;\n    }\n  }\n  static createElement(t3, i4) {\n    const s2 = w.createElement(\"template\");\n    return s2.innerHTML = t3, s2;\n  }\n};\nfunction z(t3, i4, s2 = t3, e5) {\n  if (i4 === R) return i4;\n  let h4 = void 0 !== e5 ? s2.o?.[e5] : s2.l;\n  const o4 = st(i4) ? void 0 : i4._$litDirective$;\n  return h4?.constructor !== o4 && (h4?._$AO?.(false), void 0 === o4 ? h4 = void 0 : (h4 = new o4(t3), h4._$AT(t3, s2, e5)), void 0 !== e5 ? (s2.o ??= [])[e5] = h4 : s2.l = h4), void 0 !== h4 && (i4 = z(t3, h4._$AS(t3, i4.values), h4, e5)), i4;\n}\nvar F = class {\n  constructor(t3, i4) {\n    this._$AV = [], this._$AN = void 0, this._$AD = t3, this._$AM = i4;\n  }\n  get parentNode() {\n    return this._$AM.parentNode;\n  }\n  get _$AU() {\n    return this._$AM._$AU;\n  }\n  u(t3) {\n    const { el: { content: i4 }, parts: s2 } = this._$AD, e5 = (t3?.creationScope ?? w).importNode(i4, true);\n    I.currentNode = e5;\n    let h4 = I.nextNode(), o4 = 0, n5 = 0, r4 = s2[0];\n    for (; void 0 !== r4; ) {\n      if (o4 === r4.index) {\n        let i5;\n        2 === r4.type ? i5 = new et(h4, h4.nextSibling, this, t3) : 1 === r4.type ? i5 = new r4.ctor(h4, r4.name, r4.strings, this, t3) : 6 === r4.type && (i5 = new K(h4, this, t3)), this._$AV.push(i5), r4 = s2[++n5];\n      }\n      o4 !== r4?.index && (h4 = I.nextNode(), o4++);\n    }\n    return I.currentNode = w, e5;\n  }\n  p(t3) {\n    let i4 = 0;\n    for (const s2 of this._$AV) void 0 !== s2 && (void 0 !== s2.strings ? (s2._$AI(t3, s2, i4), i4 += s2.strings.length - 2) : s2._$AI(t3[i4])), i4++;\n  }\n};\nvar et = class _et {\n  get _$AU() {\n    return this._$AM?._$AU ?? this.v;\n  }\n  constructor(t3, i4, s2, e5) {\n    this.type = 2, this._$AH = D, this._$AN = void 0, this._$AA = t3, this._$AB = i4, this._$AM = s2, this.options = e5, this.v = e5?.isConnected ?? true;\n  }\n  get parentNode() {\n    let t3 = this._$AA.parentNode;\n    const i4 = this._$AM;\n    return void 0 !== i4 && 11 === t3?.nodeType && (t3 = i4.parentNode), t3;\n  }\n  get startNode() {\n    return this._$AA;\n  }\n  get endNode() {\n    return this._$AB;\n  }\n  _$AI(t3, i4 = this) {\n    t3 = z(this, t3, i4), st(t3) ? t3 === D || null == t3 || \"\" === t3 ? (this._$AH !== D && this._$AR(), this._$AH = D) : t3 !== this._$AH && t3 !== R && this._(t3) : void 0 !== t3._$litType$ ? this.$(t3) : void 0 !== t3.nodeType ? this.T(t3) : $(t3) ? this.k(t3) : this._(t3);\n  }\n  O(t3) {\n    return this._$AA.parentNode.insertBefore(t3, this._$AB);\n  }\n  T(t3) {\n    this._$AH !== t3 && (this._$AR(), this._$AH = this.O(t3));\n  }\n  _(t3) {\n    this._$AH !== D && st(this._$AH) ? this._$AA.nextSibling.data = t3 : this.T(w.createTextNode(t3)), this._$AH = t3;\n  }\n  $(t3) {\n    const { values: i4, _$litType$: s2 } = t3, e5 = \"number\" == typeof s2 ? this._$AC(t3) : (void 0 === s2.el && (s2.el = B.createElement(N(s2.h, s2.h[0]), this.options)), s2);\n    if (this._$AH?._$AD === e5) this._$AH.p(i4);\n    else {\n      const t4 = new F(e5, this), s3 = t4.u(this.options);\n      t4.p(i4), this.T(s3), this._$AH = t4;\n    }\n  }\n  _$AC(t3) {\n    let i4 = V.get(t3.strings);\n    return void 0 === i4 && V.set(t3.strings, i4 = new B(t3)), i4;\n  }\n  k(t3) {\n    g(this._$AH) || (this._$AH = [], this._$AR());\n    const i4 = this._$AH;\n    let s2, e5 = 0;\n    for (const h4 of t3) e5 === i4.length ? i4.push(s2 = new _et(this.O(lt()), this.O(lt()), this, this.options)) : s2 = i4[e5], s2._$AI(h4), e5++;\n    e5 < i4.length && (this._$AR(s2 && s2._$AB.nextSibling, e5), i4.length = e5);\n  }\n  _$AR(t3 = this._$AA.nextSibling, i4) {\n    for (this._$AP?.(false, true, i4); t3 && t3 !== this._$AB; ) {\n      const i5 = t3.nextSibling;\n      t3.remove(), t3 = i5;\n    }\n  }\n  setConnected(t3) {\n    void 0 === this._$AM && (this.v = t3, this._$AP?.(t3));\n  }\n};\nvar G = class {\n  get tagName() {\n    return this.element.tagName;\n  }\n  get _$AU() {\n    return this._$AM._$AU;\n  }\n  constructor(t3, i4, s2, e5, h4) {\n    this.type = 1, this._$AH = D, this._$AN = void 0, this.element = t3, this.name = i4, this._$AM = e5, this.options = h4, s2.length > 2 || \"\" !== s2[0] || \"\" !== s2[1] ? (this._$AH = Array(s2.length - 1).fill(new String()), this.strings = s2) : this._$AH = D;\n  }\n  _$AI(t3, i4 = this, s2, e5) {\n    const h4 = this.strings;\n    let o4 = false;\n    if (void 0 === h4) t3 = z(this, t3, i4, 0), o4 = !st(t3) || t3 !== this._$AH && t3 !== R, o4 && (this._$AH = t3);\n    else {\n      const e6 = t3;\n      let n5, r4;\n      for (t3 = h4[0], n5 = 0; n5 < h4.length - 1; n5++) r4 = z(this, e6[s2 + n5], i4, n5), r4 === R && (r4 = this._$AH[n5]), o4 ||= !st(r4) || r4 !== this._$AH[n5], r4 === D ? t3 = D : t3 !== D && (t3 += (r4 ?? \"\") + h4[n5 + 1]), this._$AH[n5] = r4;\n    }\n    o4 && !e5 && this.j(t3);\n  }\n  j(t3) {\n    t3 === D ? this.element.removeAttribute(this.name) : this.element.setAttribute(this.name, t3 ?? \"\");\n  }\n};\nvar Y = class extends G {\n  constructor() {\n    super(...arguments), this.type = 3;\n  }\n  j(t3) {\n    this.element[this.name] = t3 === D ? void 0 : t3;\n  }\n};\nvar Z = class extends G {\n  constructor() {\n    super(...arguments), this.type = 4;\n  }\n  j(t3) {\n    this.element.toggleAttribute(this.name, !!t3 && t3 !== D);\n  }\n};\nvar q = class extends G {\n  constructor(t3, i4, s2, e5, h4) {\n    super(t3, i4, s2, e5, h4), this.type = 5;\n  }\n  _$AI(t3, i4 = this) {\n    if ((t3 = z(this, t3, i4, 0) ?? D) === R) return;\n    const s2 = this._$AH, e5 = t3 === D && s2 !== D || t3.capture !== s2.capture || t3.once !== s2.once || t3.passive !== s2.passive, h4 = t3 !== D && (s2 === D || e5);\n    e5 && this.element.removeEventListener(this.name, this, s2), h4 && this.element.addEventListener(this.name, this, t3), this._$AH = t3;\n  }\n  handleEvent(t3) {\n    \"function\" == typeof this._$AH ? this._$AH.call(this.options?.host ?? this.element, t3) : this._$AH.handleEvent(t3);\n  }\n};\nvar K = class {\n  constructor(t3, i4, s2) {\n    this.element = t3, this.type = 6, this._$AN = void 0, this._$AM = i4, this.options = s2;\n  }\n  get _$AU() {\n    return this._$AM._$AU;\n  }\n  _$AI(t3) {\n    z(this, t3);\n  }\n};\nvar Re = n3.litHtmlPolyfillSupport;\nRe?.(B, et), (n3.litHtmlVersions ??= []).push(\"3.2.0\");\nvar Q = (t3, i4, s2) => {\n  const e5 = s2?.renderBefore ?? i4;\n  let h4 = e5._$litPart$;\n  if (void 0 === h4) {\n    const t4 = s2?.renderBefore ?? null;\n    e5._$litPart$ = h4 = new et(i4.insertBefore(lt(), t4), t4, void 0, s2 ?? {});\n  }\n  return h4._$AI(t3), h4;\n};\n\n// node_modules/lit-element/lit-element.js\nvar h3 = class extends b {\n  constructor() {\n    super(...arguments), this.renderOptions = { host: this }, this.o = void 0;\n  }\n  createRenderRoot() {\n    const t3 = super.createRenderRoot();\n    return this.renderOptions.renderBefore ??= t3.firstChild, t3;\n  }\n  update(t3) {\n    const e5 = this.render();\n    this.hasUpdated || (this.renderOptions.isConnected = this.isConnected), super.update(t3), this.o = Q(e5, this.renderRoot, this.renderOptions);\n  }\n  connectedCallback() {\n    super.connectedCallback(), this.o?.setConnected(true);\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback(), this.o?.setConnected(false);\n  }\n  render() {\n    return R;\n  }\n};\nh3._$litElement$ = true, h3[\"finalized\"] = true, globalThis.litElementHydrateSupport?.({ LitElement: h3 });\nvar f3 = globalThis.litElementPolyfillSupport;\nf3?.({ LitElement: h3 });\n(globalThis.litElementVersions ??= []).push(\"4.1.0\");\n\n// node_modules/@lit/reactive-element/decorators/property.js\nvar o3 = { attribute: true, type: String, converter: u, reflect: false, hasChanged: f };\nvar r3 = (t3 = o3, e5, r4) => {\n  const { kind: n5, metadata: i4 } = r4;\n  let s2 = globalThis.litPropertyMetadata.get(i4);\n  if (void 0 === s2 && globalThis.litPropertyMetadata.set(i4, s2 = /* @__PURE__ */ new Map()), s2.set(r4.name, t3), \"accessor\" === n5) {\n    const { name: o4 } = r4;\n    return { set(r5) {\n      const n6 = e5.get.call(this);\n      e5.set.call(this, r5), this.requestUpdate(o4, n6, t3);\n    }, init(e6) {\n      return void 0 !== e6 && this.P(o4, void 0, t3), e6;\n    } };\n  }\n  if (\"setter\" === n5) {\n    const { name: o4 } = r4;\n    return function(r5) {\n      const n6 = this[o4];\n      e5.call(this, r5), this.requestUpdate(o4, n6, t3);\n    };\n  }\n  throw Error(\"Unsupported decorator location: \" + n5);\n};\nfunction n4(t3) {\n  return (e5, o4) => \"object\" == typeof o4 ? r3(t3, e5, o4) : ((t4, e6, o5) => {\n    const r4 = e6.hasOwnProperty(o5);\n    return e6.constructor.createProperty(o5, r4 ? { ...t4, wrapped: true } : t4), r4 ? Object.getOwnPropertyDescriptor(e6, o5) : void 0;\n  })(t3, e5, o4);\n}\n\n// node_modules/lit-html/directive.js\nvar t2 = { ATTRIBUTE: 1, CHILD: 2, PROPERTY: 3, BOOLEAN_ATTRIBUTE: 4, EVENT: 5, ELEMENT: 6 };\nvar e4 = (t3) => (...e5) => ({ _$litDirective$: t3, values: e5 });\nvar i3 = class {\n  constructor(t3) {\n  }\n  get _$AU() {\n    return this._$AM._$AU;\n  }\n  _$AT(t3, e5, i4) {\n    this.t = t3, this._$AM = e5, this.i = i4;\n  }\n  _$AS(t3, e5) {\n    return this.update(t3, e5);\n  }\n  update(t3, e5) {\n    return this.render(...e5);\n  }\n};\n\n// node_modules/lit-html/directives/class-map.js\nvar Rt = e4(class extends i3 {\n  constructor(s2) {\n    if (super(s2), s2.type !== t2.ATTRIBUTE || \"class\" !== s2.name || s2.strings?.length > 2) throw Error(\"`classMap()` can only be used in the `class` attribute and must be the only part in the attribute.\");\n  }\n  render(t3) {\n    return \" \" + Object.keys(t3).filter(((s2) => t3[s2])).join(\" \") + \" \";\n  }\n  update(t3, [s2]) {\n    if (void 0 === this.st) {\n      this.st = /* @__PURE__ */ new Set(), void 0 !== t3.strings && (this.nt = new Set(t3.strings.join(\" \").split(/\\s/).filter(((t4) => \"\" !== t4))));\n      for (const t4 in s2) s2[t4] && !this.nt?.has(t4) && this.st.add(t4);\n      return this.render(s2);\n    }\n    const i4 = t3.element.classList;\n    for (const t4 of this.st) t4 in s2 || (i4.remove(t4), this.st.delete(t4));\n    for (const t4 in s2) {\n      const r4 = !!s2[t4];\n      r4 === this.st.has(t4) || this.nt?.has(t4) || (r4 ? (i4.add(t4), this.st.add(t4)) : (i4.remove(t4), this.st.delete(t4)));\n    }\n    return R;\n  }\n});\n\n// js/ipywidgets_styles.ts\nvar legacyStyles = i`\n    .legacy-button {\n        align-items: center;\n        background-color: var(--jp-layout-color2);\n        border-width: 0;\n        box-shadow: none;\n        color: var(--jp-ui-font-color1);\n        cursor: pointer;\n        display: flex;\n        font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n        font-size: var(--jp-widgets-font-size);\n        justify-content: center;\n        line-height: var(--jp-widgets-inline-height);\n        padding: 0;\n        user-select: none;\n    }\n\n    .legacy-button.primary {\n        background-color: var(--jp-brand-color1);\n        color: var(--jp-ui-inverse-font-color1);\n    }\n\n    .legacy-button:hover:enabled,\n    .legacy-button:focus:enabled {\n        box-shadow: 0 2px 2px 0\n                rgba(0, 0, 0, var(--md-shadow-key-penumbra-opacity)),\n            0 3px 1px -2px rgba(0, 0, 0, var(--md-shadow-key-umbra-opacity)),\n            0 1px 5px 0 rgba(0, 0, 0, var(--md-shadow-ambient-shadow-opacity));\n    }\n\n    .legacy-slider {\n        -webkit-appearance: none;\n        appearance: none;\n        background: var(--jp-layout-color3);\n        border-radius: 3px;\n        height: 4px;\n        outline: none;\n    }\n\n    .legacy-slider::-webkit-slider-thumb,\n    .legacy-slider::-moz-range-thumb {\n        -moz-appearance: none;\n        -webkit-appearance: none;\n        appearance: none;\n        border-radius: 50%;\n        cursor: pointer;\n        height: var(--jp-widgets-slider-handle-size);\n        width: var(--jp-widgets-slider-handle-size);\n    }\n\n    .legacy-text {\n        color: var(--jp-widgets-label-color);\n        font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n        font-size: var(--jp-widgets-font-size);\n        height: var(--jp-widgets-inline-height);\n        line-height: var(--jp-widgets-inline-height);\n        vertical-align: middle;\n    }\n\n    .legacy-select {\n        -moz-appearance: none;\n        -webkit-appearance: none;\n        appearance: none;\n        background-color: var(--jp-widgets-input-background-color);\n        background-image: var(--jp-widgets-dropdown-arrow);\n        background-position: right center;\n        background-repeat: no-repeat;\n        background-size: 20px;\n        border-radius: 0;\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        box-shadow: none;\n        box-sizing: border-box;\n        color: var(--jp-widgets-input-color);\n        flex: 1 1 var(--jp-widgets-inline-width-short);\n        font-size: var(--jp-widgets-font-size);\n        height: 28px;\n        line-height: 28px;\n        min-width: 0;\n        outline: none !important;\n        padding-left: calc(var(--jp-widgets-input-padding)* 2);\n        padding-right: 20px;\n        vertical-align: top;\n    }\n\n    .legacy-select[disabled] {\n        opacity: 0.4;\n        cursor: not-allowed;\n    }\n\n    .legacy-text-input {\n        background: var(--jp-widgets-input-background-color);\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        box-sizing: border-box;\n        color: var(--jp-widgets-input-color);\n        flex-grow: 1;\n        flex-shrink: 1;\n        font-size: var(--jp-widgets-font-size);\n        height: var(--jp-widgets-inline-height);\n        line-height: var(--jp-widgets-inline-height);\n        min-width: 0;\n        outline: none !important;\n        padding: var(--jp-widgets-input-padding) calc(var(--jp-widgets-input-padding) * 2);\n    }\n\n    .legacy-text-input:disabled {\n        opacity: var(--jp-widgets-disabled-opacity);\n    }\n\n    .legacy-color {\n        align-self: stretch;\n        background: var(--jp-widgets-input-background-color);\n        border-left: none;\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        box-sizing: border-box;\n        color: var(--jp-widgets-input-color);\n        flex-grow: 0;\n        flex-shrink: 0;\n        height: var(--jp-widgets-inline-height);\n        outline: none !important;\n        padding: 0 2px;\n        width: var(--jp-widgets-inline-height);\n    }\n\n    .legacy-radio {\n        margin: 0;\n        vertical-align: middle;\n    }\n\n    .legacy-button.active {\n        background-color: var(--colab-primary-surface-color, --jp-layout-color3);\n        color: var(--jp-ui-font-color1);\n        box-shadow: 0 4px 5px 0 rgba(0, 0, 0, var(--md-shadow-key-penumbra-opacity)),\n                    0 1px 10px 0 rgba(0, 0, 0, var(--md-shadow-ambient-shadow-opacity)),\n                    0 2px 4px -1px rgba(0, 0, 0, var(--md-shadow-key-umbra-opacity));\n    }\n\n    .legacy-button.primary {\n        background-color: var(--jp-brand-color1);\n        color: var(--jp-ui-inverse-font-color1);\n    }\n\n    .legacy-button.primary.active {\n        background-color: var(--jp-brand-color0);\n        color: var(--jp-ui-inverse-font-color0);\n    }\n\n    .legacy-button.active {\n        background-color: var(--colab-primary-surface-color, --jp-layout-color3);\n        color: var(--jp-ui-font-color1);\n        box-shadow: 0 4px 5px 0 rgba(0, 0, 0, var(--md-shadow-key-penumbra-opacity)),\n                    0 1px 10px 0 rgba(0, 0, 0, var(--md-shadow-ambient-shadow-opacity)),\n                    0 2px 4px -1px rgba(0, 0, 0, var(--md-shadow-key-umbra-opacity));\n    }\n\n    .legacy-button.primary {\n        background-color: var(--jp-brand-color1);\n        color: var(--jp-ui-inverse-font-color1);\n    }\n\n    .legacy-button.primary.active {\n        background-color: var(--jp-brand-color0);\n        color: var(--jp-ui-inverse-font-color0);\n    }\n\n    .legacy-select {\n        -moz-appearance: none;\n        -webkit-appearance: none;\n        appearance: none;\n        background-color: var(--jp-widgets-input-background-color);\n        background-image: var(--jp-widgets-dropdown-arrow);\n        background-position: right center;\n        background-repeat: no-repeat;\n        background-size: 20px;\n        border-radius: 0;\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        box-shadow: none;\n        box-sizing: border-box;\n        color: var(--jp-widgets-input-color);\n        flex: 1 1 var(--jp-widgets-inline-width-short);\n        font-size: var(--jp-widgets-font-size);\n        height: inherit;\n        min-width: 0;\n        outline: none !important;\n        padding-left: calc(var(--jp-widgets-input-padding)* 2);\n        padding-right: 20px;\n        vertical-align: top;\n    }\n\n    .legacy-input {\n        box-sizing: border-box;\n        background-color: var(--colab-primary-surface-color, --jp-widgets-input-background-color);\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        color: var(--jp-widgets-input-color);\n        flex-grow: 1;\n        flex-shrink: 1;\n        font-size: var(--jp-widgets-font-size);\n        min-width: 0;\n        outline: none !important;\n        padding: var(--jp-widgets-input-padding) calc(var(--jp-widgets-input-padding)* 2);\n        height: var(--jp-widgets-inline-height);\n        line-height: var(--jp-widgets-inline-height);\n    }\n`;\n\n// js/utils.ts\nfunction loadFonts() {\n  if (!document.querySelector(\".custom-fonts\")) {\n    const styleElement = document.createElement(\"style\");\n    styleElement.classList.add(\"custom-fonts\");\n    styleElement.textContent = '@import \"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined\";';\n    document.body.appendChild(styleElement);\n  }\n}\nfunction reverseMap(map) {\n  const reversedMap = /* @__PURE__ */ new Map();\n  for (const [key, value] of map.entries()) {\n    if (value != null) {\n      reversedMap.set(value, key);\n    }\n  }\n  return reversedMap;\n}\n\n// js/lit_widget.ts\nvar LitWidget = class extends h3 {\n  constructor() {\n    super(...arguments);\n    this._model = void 0;\n  }\n  onCustomMessage(_msg) {\n  }\n  viewNameToModelName() {\n    return reverseMap(this.modelNameToViewName());\n  }\n  set model(model) {\n    this._model = model;\n    for (const [modelKey, widgetKey] of this.modelNameToViewName()) {\n      if (widgetKey) {\n        this[widgetKey] = model.get(modelKey);\n        model.on(`change:${String(modelKey)}`, () => {\n          this[widgetKey] = model.get(modelKey);\n        });\n      }\n    }\n    model.on(\"msg:custom\", (msg) => {\n      this.onCustomMessage?.(msg);\n    });\n  }\n  get model() {\n    return this._model;\n  }\n  updated(changedProperties) {\n    const viewToModelMap = this.viewNameToModelName();\n    for (const [viewProp, _2] of changedProperties) {\n      const castViewProp = viewProp;\n      if (viewToModelMap.has(castViewProp)) {\n        const modelProp = viewToModelMap.get(castViewProp);\n        this._model?.set(\n          modelProp,\n          this[castViewProp]\n        );\n      }\n    }\n    this._model?.save_changes();\n  }\n};\n\n// js/styles.ts\nvar materialStyles = i`\n    @font-face {\n        font-family: \"Material Symbols Outlined\";\n        font-style: normal;\n        font-weight: 400;\n        src: url(https://fonts.gstatic.com/s/materialsymbolsoutlined/v205/kJF1BvYX7BgnkSrUwT8OhrdQw4oELdPIeeII9v6oDMzByHX9rA6RzaxHMPdY43zj-jCxv3fzvRNU22ZXGJpEpjC_1v-p_4MrImHCIJIZrDCvHOejbd5zrDAt.woff2)\n            format(\"woff2\");\n    }\n\n    .material-symbols-outlined {\n        -webkit-font-feature-settings: \"liga\";\n        -webkit-font-smoothing: antialiased;\n        direction: ltr;\n        display: inline-block;\n        font-family: \"Material Symbols Outlined\";\n        font-style: normal;\n        font-weight: normal;\n        letter-spacing: normal;\n        line-height: 1;\n        text-transform: none;\n        white-space: nowrap;\n        word-wrap: normal;\n    }\n`;\nvar flexStyles = i`\n    .vertical-flex {\n        display: flex;\n        flex-direction: column;\n        gap: 8px;\n    }\n\n    .horizontal-flex {\n        align-items: center;\n        display: flex;\n        flex-wrap: nowrap;\n        gap: 8px;\n    }\n\n    input:not([type=\"radio\"]):not([type=\"checkbox\"]) {\n        width: 100%;\n    }\n\n    select {\n        width: 100%;\n    }\n\n    .horizontal-flex .legacy-text {\n        flex-shrink: 0;\n    }\n`;\n\n// js/toolbar_item.ts\nvar ToolbarItem = class extends LitWidget {\n  constructor() {\n    super(...arguments);\n    this.active = false;\n    this.primary = true;\n    this.icon = \"\";\n    this.tooltip_text = \"\";\n  }\n  static get componentName() {\n    return `tool-button`;\n  }\n  static {\n    this.styles = [\n      legacyStyles,\n      materialStyles,\n      i`\n            button {\n                font-size: 16px !important;\n                height: 32px;\n                padding: 0px 0px 0px 4px;\n                width: 32px;\n            }\n        `\n    ];\n  }\n  modelNameToViewName() {\n    return /* @__PURE__ */ new Map([\n      [\"active\", \"active\"],\n      [\"primary\", \"primary\"],\n      [\"icon\", \"icon\"],\n      [\"tooltip_text\", \"tooltip_text\"]\n    ]);\n  }\n  render() {\n    return ke`\n            <button\n                class=${Rt({\n      \"legacy-button\": true,\n      \"primary\": this.primary,\n      \"active\": this.active\n    })}\n                title=\"${this.tooltip_text}\"\n                @click=\"${this.onClick}\">\n                <span class=\"material-symbols-outlined\">${this.icon}</span>\n            </button>`;\n  }\n  onClick(_2) {\n    this.active = !this.active;\n  }\n};\n__decorateClass([\n  n4({ type: Boolean })\n], ToolbarItem.prototype, \"active\", 2);\n__decorateClass([\n  n4({ type: Boolean })\n], ToolbarItem.prototype, \"primary\", 2);\n__decorateClass([\n  n4({ type: String })\n], ToolbarItem.prototype, \"icon\", 2);\n__decorateClass([\n  n4({ type: String })\n], ToolbarItem.prototype, \"tooltip_text\", 2);\nif (!customElements.get(ToolbarItem.componentName)) {\n  customElements.define(ToolbarItem.componentName, ToolbarItem);\n}\nasync function render({ model, el }) {\n  loadFonts();\n  const manager = document.createElement(ToolbarItem.componentName);\n  manager.model = model;\n  el.appendChild(manager);\n}\nvar toolbar_item_default = { render };\nexport {\n  ToolbarItem,\n  toolbar_item_default as default\n};\n/*! Bundled license information:\n\n@lit/reactive-element/css-tag.js:\n  (**\n   * @license\n   * Copyright 2019 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n\n@lit/reactive-element/reactive-element.js:\nlit-html/lit-html.js:\nlit-element/lit-element.js:\n@lit/reactive-element/decorators/custom-element.js:\n@lit/reactive-element/decorators/property.js:\n@lit/reactive-element/decorators/state.js:\n@lit/reactive-element/decorators/event-options.js:\n@lit/reactive-element/decorators/base.js:\n@lit/reactive-element/decorators/query.js:\n@lit/reactive-element/decorators/query-all.js:\n@lit/reactive-element/decorators/query-async.js:\n@lit/reactive-element/decorators/query-assigned-nodes.js:\nlit-html/directive.js:\n  (**\n   * @license\n   * Copyright 2017 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n\nlit-html/is-server.js:\n  (**\n   * @license\n   * Copyright 2022 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n\n@lit/reactive-element/decorators/query-assigned-elements.js:\n  (**\n   * @license\n   * Copyright 2021 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n\nlit-html/directives/class-map.js:\n  (**\n   * @license\n   * Copyright 2018 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n*/\n",
              "_model_module": "anywidget",
              "_model_module_version": "~0.9.*",
              "_model_name": "AnyModel",
              "_view_count": null,
              "_view_module": "anywidget",
              "_view_module_version": "~0.9.*",
              "_view_name": "AnyView",
              "active": false,
              "icon": "point_scan",
              "layout": "IPY_MODEL_f4c9187c1cce4ffe98ce614790abe414",
              "primary": true,
              "tooltip_text": "Inspector"
            }
          },
          "93481c7795bb4b2cab944c52df48948f": {
            "model_module": "anywidget",
            "model_name": "AnyModel",
            "model_module_version": "~0.9.*",
            "state": {
              "_anywidget_id": "geemap.toolbar.ToolbarItem",
              "_dom_classes": [
                "geemap-colab"
              ],
              "_esm": "var __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __decorateClass = (decorators, target, key, kind) => {\n  var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;\n  for (var i4 = decorators.length - 1, decorator; i4 >= 0; i4--)\n    if (decorator = decorators[i4])\n      result = (kind ? decorator(target, key, result) : decorator(result)) || result;\n  if (kind && result) __defProp(target, key, result);\n  return result;\n};\n\n// node_modules/@lit/reactive-element/css-tag.js\nvar t = globalThis;\nvar e = t.ShadowRoot && (void 0 === t.ShadyCSS || t.ShadyCSS.nativeShadow) && \"adoptedStyleSheets\" in Document.prototype && \"replace\" in CSSStyleSheet.prototype;\nvar s = /* @__PURE__ */ Symbol();\nvar o = /* @__PURE__ */ new WeakMap();\nvar n = class {\n  constructor(t3, e5, o4) {\n    if (this._$cssResult$ = true, o4 !== s) throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");\n    this.cssText = t3, this.t = e5;\n  }\n  get styleSheet() {\n    let t3 = this.o;\n    const s2 = this.t;\n    if (e && void 0 === t3) {\n      const e5 = void 0 !== s2 && 1 === s2.length;\n      e5 && (t3 = o.get(s2)), void 0 === t3 && ((this.o = t3 = new CSSStyleSheet()).replaceSync(this.cssText), e5 && o.set(s2, t3));\n    }\n    return t3;\n  }\n  toString() {\n    return this.cssText;\n  }\n};\nvar r = (t3) => new n(\"string\" == typeof t3 ? t3 : t3 + \"\", void 0, s);\nvar i = (t3, ...e5) => {\n  const o4 = 1 === t3.length ? t3[0] : e5.reduce(((e6, s2, o5) => e6 + ((t4) => {\n    if (true === t4._$cssResult$) return t4.cssText;\n    if (\"number\" == typeof t4) return t4;\n    throw Error(\"Value passed to 'css' function must be a 'css' function result: \" + t4 + \". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\");\n  })(s2) + t3[o5 + 1]), t3[0]);\n  return new n(o4, t3, s);\n};\nvar S = (s2, o4) => {\n  if (e) s2.adoptedStyleSheets = o4.map(((t3) => t3 instanceof CSSStyleSheet ? t3 : t3.styleSheet));\n  else for (const e5 of o4) {\n    const o5 = document.createElement(\"style\"), n5 = t.litNonce;\n    void 0 !== n5 && o5.setAttribute(\"nonce\", n5), o5.textContent = e5.cssText, s2.appendChild(o5);\n  }\n};\nvar c = e ? (t3) => t3 : (t3) => t3 instanceof CSSStyleSheet ? ((t4) => {\n  let e5 = \"\";\n  for (const s2 of t4.cssRules) e5 += s2.cssText;\n  return r(e5);\n})(t3) : t3;\n\n// node_modules/@lit/reactive-element/reactive-element.js\nvar { is: i2, defineProperty: e2, getOwnPropertyDescriptor: r2, getOwnPropertyNames: h, getOwnPropertySymbols: o2, getPrototypeOf: n2 } = Object;\nvar a = globalThis;\nvar c2 = a.trustedTypes;\nvar l = c2 ? c2.emptyScript : \"\";\nvar p = a.reactiveElementPolyfillSupport;\nvar d = (t3, s2) => t3;\nvar u = { toAttribute(t3, s2) {\n  switch (s2) {\n    case Boolean:\n      t3 = t3 ? l : null;\n      break;\n    case Object:\n    case Array:\n      t3 = null == t3 ? t3 : JSON.stringify(t3);\n  }\n  return t3;\n}, fromAttribute(t3, s2) {\n  let i4 = t3;\n  switch (s2) {\n    case Boolean:\n      i4 = null !== t3;\n      break;\n    case Number:\n      i4 = null === t3 ? null : Number(t3);\n      break;\n    case Object:\n    case Array:\n      try {\n        i4 = JSON.parse(t3);\n      } catch (t4) {\n        i4 = null;\n      }\n  }\n  return i4;\n} };\nvar f = (t3, s2) => !i2(t3, s2);\nvar y = { attribute: true, type: String, converter: u, reflect: false, hasChanged: f };\nSymbol.metadata ??= /* @__PURE__ */ Symbol(\"metadata\"), a.litPropertyMetadata ??= /* @__PURE__ */ new WeakMap();\nvar b = class extends HTMLElement {\n  static addInitializer(t3) {\n    this._$Ei(), (this.l ??= []).push(t3);\n  }\n  static get observedAttributes() {\n    return this.finalize(), this._$Eh && [...this._$Eh.keys()];\n  }\n  static createProperty(t3, s2 = y) {\n    if (s2.state && (s2.attribute = false), this._$Ei(), this.elementProperties.set(t3, s2), !s2.noAccessor) {\n      const i4 = /* @__PURE__ */ Symbol(), r4 = this.getPropertyDescriptor(t3, i4, s2);\n      void 0 !== r4 && e2(this.prototype, t3, r4);\n    }\n  }\n  static getPropertyDescriptor(t3, s2, i4) {\n    const { get: e5, set: h4 } = r2(this.prototype, t3) ?? { get() {\n      return this[s2];\n    }, set(t4) {\n      this[s2] = t4;\n    } };\n    return { get() {\n      return e5?.call(this);\n    }, set(s3) {\n      const r4 = e5?.call(this);\n      h4.call(this, s3), this.requestUpdate(t3, r4, i4);\n    }, configurable: true, enumerable: true };\n  }\n  static getPropertyOptions(t3) {\n    return this.elementProperties.get(t3) ?? y;\n  }\n  static _$Ei() {\n    if (this.hasOwnProperty(d(\"elementProperties\"))) return;\n    const t3 = n2(this);\n    t3.finalize(), void 0 !== t3.l && (this.l = [...t3.l]), this.elementProperties = new Map(t3.elementProperties);\n  }\n  static finalize() {\n    if (this.hasOwnProperty(d(\"finalized\"))) return;\n    if (this.finalized = true, this._$Ei(), this.hasOwnProperty(d(\"properties\"))) {\n      const t4 = this.properties, s2 = [...h(t4), ...o2(t4)];\n      for (const i4 of s2) this.createProperty(i4, t4[i4]);\n    }\n    const t3 = this[Symbol.metadata];\n    if (null !== t3) {\n      const s2 = litPropertyMetadata.get(t3);\n      if (void 0 !== s2) for (const [t4, i4] of s2) this.elementProperties.set(t4, i4);\n    }\n    this._$Eh = /* @__PURE__ */ new Map();\n    for (const [t4, s2] of this.elementProperties) {\n      const i4 = this._$Eu(t4, s2);\n      void 0 !== i4 && this._$Eh.set(i4, t4);\n    }\n    this.elementStyles = this.finalizeStyles(this.styles);\n  }\n  static finalizeStyles(s2) {\n    const i4 = [];\n    if (Array.isArray(s2)) {\n      const e5 = new Set(s2.flat(1 / 0).reverse());\n      for (const s3 of e5) i4.unshift(c(s3));\n    } else void 0 !== s2 && i4.push(c(s2));\n    return i4;\n  }\n  static _$Eu(t3, s2) {\n    const i4 = s2.attribute;\n    return false === i4 ? void 0 : \"string\" == typeof i4 ? i4 : \"string\" == typeof t3 ? t3.toLowerCase() : void 0;\n  }\n  constructor() {\n    super(), this._$Ep = void 0, this.isUpdatePending = false, this.hasUpdated = false, this._$Em = null, this._$Ev();\n  }\n  _$Ev() {\n    this._$ES = new Promise(((t3) => this.enableUpdating = t3)), this._$AL = /* @__PURE__ */ new Map(), this._$E_(), this.requestUpdate(), this.constructor.l?.forEach(((t3) => t3(this)));\n  }\n  addController(t3) {\n    (this._$EO ??= /* @__PURE__ */ new Set()).add(t3), void 0 !== this.renderRoot && this.isConnected && t3.hostConnected?.();\n  }\n  removeController(t3) {\n    this._$EO?.delete(t3);\n  }\n  _$E_() {\n    const t3 = /* @__PURE__ */ new Map(), s2 = this.constructor.elementProperties;\n    for (const i4 of s2.keys()) this.hasOwnProperty(i4) && (t3.set(i4, this[i4]), delete this[i4]);\n    t3.size > 0 && (this._$Ep = t3);\n  }\n  createRenderRoot() {\n    const t3 = this.shadowRoot ?? this.attachShadow(this.constructor.shadowRootOptions);\n    return S(t3, this.constructor.elementStyles), t3;\n  }\n  connectedCallback() {\n    this.renderRoot ??= this.createRenderRoot(), this.enableUpdating(true), this._$EO?.forEach(((t3) => t3.hostConnected?.()));\n  }\n  enableUpdating(t3) {\n  }\n  disconnectedCallback() {\n    this._$EO?.forEach(((t3) => t3.hostDisconnected?.()));\n  }\n  attributeChangedCallback(t3, s2, i4) {\n    this._$AK(t3, i4);\n  }\n  _$EC(t3, s2) {\n    const i4 = this.constructor.elementProperties.get(t3), e5 = this.constructor._$Eu(t3, i4);\n    if (void 0 !== e5 && true === i4.reflect) {\n      const r4 = (void 0 !== i4.converter?.toAttribute ? i4.converter : u).toAttribute(s2, i4.type);\n      this._$Em = t3, null == r4 ? this.removeAttribute(e5) : this.setAttribute(e5, r4), this._$Em = null;\n    }\n  }\n  _$AK(t3, s2) {\n    const i4 = this.constructor, e5 = i4._$Eh.get(t3);\n    if (void 0 !== e5 && this._$Em !== e5) {\n      const t4 = i4.getPropertyOptions(e5), r4 = \"function\" == typeof t4.converter ? { fromAttribute: t4.converter } : void 0 !== t4.converter?.fromAttribute ? t4.converter : u;\n      this._$Em = e5, this[e5] = r4.fromAttribute(s2, t4.type), this._$Em = null;\n    }\n  }\n  requestUpdate(t3, s2, i4) {\n    if (void 0 !== t3) {\n      if (i4 ??= this.constructor.getPropertyOptions(t3), !(i4.hasChanged ?? f)(this[t3], s2)) return;\n      this.P(t3, s2, i4);\n    }\n    false === this.isUpdatePending && (this._$ES = this._$ET());\n  }\n  P(t3, s2, i4) {\n    this._$AL.has(t3) || this._$AL.set(t3, s2), true === i4.reflect && this._$Em !== t3 && (this._$Ej ??= /* @__PURE__ */ new Set()).add(t3);\n  }\n  async _$ET() {\n    this.isUpdatePending = true;\n    try {\n      await this._$ES;\n    } catch (t4) {\n      Promise.reject(t4);\n    }\n    const t3 = this.scheduleUpdate();\n    return null != t3 && await t3, !this.isUpdatePending;\n  }\n  scheduleUpdate() {\n    return this.performUpdate();\n  }\n  performUpdate() {\n    if (!this.isUpdatePending) return;\n    if (!this.hasUpdated) {\n      if (this.renderRoot ??= this.createRenderRoot(), this._$Ep) {\n        for (const [t5, s3] of this._$Ep) this[t5] = s3;\n        this._$Ep = void 0;\n      }\n      const t4 = this.constructor.elementProperties;\n      if (t4.size > 0) for (const [s3, i4] of t4) true !== i4.wrapped || this._$AL.has(s3) || void 0 === this[s3] || this.P(s3, this[s3], i4);\n    }\n    let t3 = false;\n    const s2 = this._$AL;\n    try {\n      t3 = this.shouldUpdate(s2), t3 ? (this.willUpdate(s2), this._$EO?.forEach(((t4) => t4.hostUpdate?.())), this.update(s2)) : this._$EU();\n    } catch (s3) {\n      throw t3 = false, this._$EU(), s3;\n    }\n    t3 && this._$AE(s2);\n  }\n  willUpdate(t3) {\n  }\n  _$AE(t3) {\n    this._$EO?.forEach(((t4) => t4.hostUpdated?.())), this.hasUpdated || (this.hasUpdated = true, this.firstUpdated(t3)), this.updated(t3);\n  }\n  _$EU() {\n    this._$AL = /* @__PURE__ */ new Map(), this.isUpdatePending = false;\n  }\n  get updateComplete() {\n    return this.getUpdateComplete();\n  }\n  getUpdateComplete() {\n    return this._$ES;\n  }\n  shouldUpdate(t3) {\n    return true;\n  }\n  update(t3) {\n    this._$Ej &&= this._$Ej.forEach(((t4) => this._$EC(t4, this[t4]))), this._$EU();\n  }\n  updated(t3) {\n  }\n  firstUpdated(t3) {\n  }\n};\nb.elementStyles = [], b.shadowRootOptions = { mode: \"open\" }, b[d(\"elementProperties\")] = /* @__PURE__ */ new Map(), b[d(\"finalized\")] = /* @__PURE__ */ new Map(), p?.({ ReactiveElement: b }), (a.reactiveElementVersions ??= []).push(\"2.0.4\");\n\n// node_modules/lit-html/lit-html.js\nvar n3 = globalThis;\nvar c3 = n3.trustedTypes;\nvar h2 = c3 ? c3.createPolicy(\"lit-html\", { createHTML: (t3) => t3 }) : void 0;\nvar f2 = \"$lit$\";\nvar v = `lit$${Math.random().toFixed(9).slice(2)}$`;\nvar m = \"?\" + v;\nvar _ = `<${m}>`;\nvar w = document;\nvar lt = () => w.createComment(\"\");\nvar st = (t3) => null === t3 || \"object\" != typeof t3 && \"function\" != typeof t3;\nvar g = Array.isArray;\nvar $ = (t3) => g(t3) || \"function\" == typeof t3?.[Symbol.iterator];\nvar x = \"[ \t\\n\\f\\r]\";\nvar T = /<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g;\nvar E = /-->/g;\nvar k = />/g;\nvar O = RegExp(`>|${x}(?:([^\\\\s\"'>=/]+)(${x}*=${x}*(?:[^ \t\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`, \"g\");\nvar S2 = /'/g;\nvar j = /\"/g;\nvar M = /^(?:script|style|textarea|title)$/i;\nvar P = (t3) => (i4, ...s2) => ({ _$litType$: t3, strings: i4, values: s2 });\nvar ke = P(1);\nvar Oe = P(2);\nvar Se = P(3);\nvar R = /* @__PURE__ */ Symbol.for(\"lit-noChange\");\nvar D = /* @__PURE__ */ Symbol.for(\"lit-nothing\");\nvar V = /* @__PURE__ */ new WeakMap();\nvar I = w.createTreeWalker(w, 129);\nfunction N(t3, i4) {\n  if (!g(t3) || !t3.hasOwnProperty(\"raw\")) throw Error(\"invalid template strings array\");\n  return void 0 !== h2 ? h2.createHTML(i4) : i4;\n}\nvar U = (t3, i4) => {\n  const s2 = t3.length - 1, e5 = [];\n  let h4, o4 = 2 === i4 ? \"<svg>\" : 3 === i4 ? \"<math>\" : \"\", n5 = T;\n  for (let i5 = 0; i5 < s2; i5++) {\n    const s3 = t3[i5];\n    let r4, l2, c4 = -1, a2 = 0;\n    for (; a2 < s3.length && (n5.lastIndex = a2, l2 = n5.exec(s3), null !== l2); ) a2 = n5.lastIndex, n5 === T ? \"!--\" === l2[1] ? n5 = E : void 0 !== l2[1] ? n5 = k : void 0 !== l2[2] ? (M.test(l2[2]) && (h4 = RegExp(\"</\" + l2[2], \"g\")), n5 = O) : void 0 !== l2[3] && (n5 = O) : n5 === O ? \">\" === l2[0] ? (n5 = h4 ?? T, c4 = -1) : void 0 === l2[1] ? c4 = -2 : (c4 = n5.lastIndex - l2[2].length, r4 = l2[1], n5 = void 0 === l2[3] ? O : '\"' === l2[3] ? j : S2) : n5 === j || n5 === S2 ? n5 = O : n5 === E || n5 === k ? n5 = T : (n5 = O, h4 = void 0);\n    const u2 = n5 === O && t3[i5 + 1].startsWith(\"/>\") ? \" \" : \"\";\n    o4 += n5 === T ? s3 + _ : c4 >= 0 ? (e5.push(r4), s3.slice(0, c4) + f2 + s3.slice(c4) + v + u2) : s3 + v + (-2 === c4 ? i5 : u2);\n  }\n  return [N(t3, o4 + (t3[s2] || \"<?>\") + (2 === i4 ? \"</svg>\" : 3 === i4 ? \"</math>\" : \"\")), e5];\n};\nvar B = class _B {\n  constructor({ strings: t3, _$litType$: i4 }, s2) {\n    let e5;\n    this.parts = [];\n    let h4 = 0, o4 = 0;\n    const n5 = t3.length - 1, r4 = this.parts, [l2, a2] = U(t3, i4);\n    if (this.el = _B.createElement(l2, s2), I.currentNode = this.el.content, 2 === i4 || 3 === i4) {\n      const t4 = this.el.content.firstChild;\n      t4.replaceWith(...t4.childNodes);\n    }\n    for (; null !== (e5 = I.nextNode()) && r4.length < n5; ) {\n      if (1 === e5.nodeType) {\n        if (e5.hasAttributes()) for (const t4 of e5.getAttributeNames()) if (t4.endsWith(f2)) {\n          const i5 = a2[o4++], s3 = e5.getAttribute(t4).split(v), n6 = /([.?@])?(.*)/.exec(i5);\n          r4.push({ type: 1, index: h4, name: n6[2], strings: s3, ctor: \".\" === n6[1] ? Y : \"?\" === n6[1] ? Z : \"@\" === n6[1] ? q : G }), e5.removeAttribute(t4);\n        } else t4.startsWith(v) && (r4.push({ type: 6, index: h4 }), e5.removeAttribute(t4));\n        if (M.test(e5.tagName)) {\n          const t4 = e5.textContent.split(v), i5 = t4.length - 1;\n          if (i5 > 0) {\n            e5.textContent = c3 ? c3.emptyScript : \"\";\n            for (let s3 = 0; s3 < i5; s3++) e5.append(t4[s3], lt()), I.nextNode(), r4.push({ type: 2, index: ++h4 });\n            e5.append(t4[i5], lt());\n          }\n        }\n      } else if (8 === e5.nodeType) if (e5.data === m) r4.push({ type: 2, index: h4 });\n      else {\n        let t4 = -1;\n        for (; -1 !== (t4 = e5.data.indexOf(v, t4 + 1)); ) r4.push({ type: 7, index: h4 }), t4 += v.length - 1;\n      }\n      h4++;\n    }\n  }\n  static createElement(t3, i4) {\n    const s2 = w.createElement(\"template\");\n    return s2.innerHTML = t3, s2;\n  }\n};\nfunction z(t3, i4, s2 = t3, e5) {\n  if (i4 === R) return i4;\n  let h4 = void 0 !== e5 ? s2.o?.[e5] : s2.l;\n  const o4 = st(i4) ? void 0 : i4._$litDirective$;\n  return h4?.constructor !== o4 && (h4?._$AO?.(false), void 0 === o4 ? h4 = void 0 : (h4 = new o4(t3), h4._$AT(t3, s2, e5)), void 0 !== e5 ? (s2.o ??= [])[e5] = h4 : s2.l = h4), void 0 !== h4 && (i4 = z(t3, h4._$AS(t3, i4.values), h4, e5)), i4;\n}\nvar F = class {\n  constructor(t3, i4) {\n    this._$AV = [], this._$AN = void 0, this._$AD = t3, this._$AM = i4;\n  }\n  get parentNode() {\n    return this._$AM.parentNode;\n  }\n  get _$AU() {\n    return this._$AM._$AU;\n  }\n  u(t3) {\n    const { el: { content: i4 }, parts: s2 } = this._$AD, e5 = (t3?.creationScope ?? w).importNode(i4, true);\n    I.currentNode = e5;\n    let h4 = I.nextNode(), o4 = 0, n5 = 0, r4 = s2[0];\n    for (; void 0 !== r4; ) {\n      if (o4 === r4.index) {\n        let i5;\n        2 === r4.type ? i5 = new et(h4, h4.nextSibling, this, t3) : 1 === r4.type ? i5 = new r4.ctor(h4, r4.name, r4.strings, this, t3) : 6 === r4.type && (i5 = new K(h4, this, t3)), this._$AV.push(i5), r4 = s2[++n5];\n      }\n      o4 !== r4?.index && (h4 = I.nextNode(), o4++);\n    }\n    return I.currentNode = w, e5;\n  }\n  p(t3) {\n    let i4 = 0;\n    for (const s2 of this._$AV) void 0 !== s2 && (void 0 !== s2.strings ? (s2._$AI(t3, s2, i4), i4 += s2.strings.length - 2) : s2._$AI(t3[i4])), i4++;\n  }\n};\nvar et = class _et {\n  get _$AU() {\n    return this._$AM?._$AU ?? this.v;\n  }\n  constructor(t3, i4, s2, e5) {\n    this.type = 2, this._$AH = D, this._$AN = void 0, this._$AA = t3, this._$AB = i4, this._$AM = s2, this.options = e5, this.v = e5?.isConnected ?? true;\n  }\n  get parentNode() {\n    let t3 = this._$AA.parentNode;\n    const i4 = this._$AM;\n    return void 0 !== i4 && 11 === t3?.nodeType && (t3 = i4.parentNode), t3;\n  }\n  get startNode() {\n    return this._$AA;\n  }\n  get endNode() {\n    return this._$AB;\n  }\n  _$AI(t3, i4 = this) {\n    t3 = z(this, t3, i4), st(t3) ? t3 === D || null == t3 || \"\" === t3 ? (this._$AH !== D && this._$AR(), this._$AH = D) : t3 !== this._$AH && t3 !== R && this._(t3) : void 0 !== t3._$litType$ ? this.$(t3) : void 0 !== t3.nodeType ? this.T(t3) : $(t3) ? this.k(t3) : this._(t3);\n  }\n  O(t3) {\n    return this._$AA.parentNode.insertBefore(t3, this._$AB);\n  }\n  T(t3) {\n    this._$AH !== t3 && (this._$AR(), this._$AH = this.O(t3));\n  }\n  _(t3) {\n    this._$AH !== D && st(this._$AH) ? this._$AA.nextSibling.data = t3 : this.T(w.createTextNode(t3)), this._$AH = t3;\n  }\n  $(t3) {\n    const { values: i4, _$litType$: s2 } = t3, e5 = \"number\" == typeof s2 ? this._$AC(t3) : (void 0 === s2.el && (s2.el = B.createElement(N(s2.h, s2.h[0]), this.options)), s2);\n    if (this._$AH?._$AD === e5) this._$AH.p(i4);\n    else {\n      const t4 = new F(e5, this), s3 = t4.u(this.options);\n      t4.p(i4), this.T(s3), this._$AH = t4;\n    }\n  }\n  _$AC(t3) {\n    let i4 = V.get(t3.strings);\n    return void 0 === i4 && V.set(t3.strings, i4 = new B(t3)), i4;\n  }\n  k(t3) {\n    g(this._$AH) || (this._$AH = [], this._$AR());\n    const i4 = this._$AH;\n    let s2, e5 = 0;\n    for (const h4 of t3) e5 === i4.length ? i4.push(s2 = new _et(this.O(lt()), this.O(lt()), this, this.options)) : s2 = i4[e5], s2._$AI(h4), e5++;\n    e5 < i4.length && (this._$AR(s2 && s2._$AB.nextSibling, e5), i4.length = e5);\n  }\n  _$AR(t3 = this._$AA.nextSibling, i4) {\n    for (this._$AP?.(false, true, i4); t3 && t3 !== this._$AB; ) {\n      const i5 = t3.nextSibling;\n      t3.remove(), t3 = i5;\n    }\n  }\n  setConnected(t3) {\n    void 0 === this._$AM && (this.v = t3, this._$AP?.(t3));\n  }\n};\nvar G = class {\n  get tagName() {\n    return this.element.tagName;\n  }\n  get _$AU() {\n    return this._$AM._$AU;\n  }\n  constructor(t3, i4, s2, e5, h4) {\n    this.type = 1, this._$AH = D, this._$AN = void 0, this.element = t3, this.name = i4, this._$AM = e5, this.options = h4, s2.length > 2 || \"\" !== s2[0] || \"\" !== s2[1] ? (this._$AH = Array(s2.length - 1).fill(new String()), this.strings = s2) : this._$AH = D;\n  }\n  _$AI(t3, i4 = this, s2, e5) {\n    const h4 = this.strings;\n    let o4 = false;\n    if (void 0 === h4) t3 = z(this, t3, i4, 0), o4 = !st(t3) || t3 !== this._$AH && t3 !== R, o4 && (this._$AH = t3);\n    else {\n      const e6 = t3;\n      let n5, r4;\n      for (t3 = h4[0], n5 = 0; n5 < h4.length - 1; n5++) r4 = z(this, e6[s2 + n5], i4, n5), r4 === R && (r4 = this._$AH[n5]), o4 ||= !st(r4) || r4 !== this._$AH[n5], r4 === D ? t3 = D : t3 !== D && (t3 += (r4 ?? \"\") + h4[n5 + 1]), this._$AH[n5] = r4;\n    }\n    o4 && !e5 && this.j(t3);\n  }\n  j(t3) {\n    t3 === D ? this.element.removeAttribute(this.name) : this.element.setAttribute(this.name, t3 ?? \"\");\n  }\n};\nvar Y = class extends G {\n  constructor() {\n    super(...arguments), this.type = 3;\n  }\n  j(t3) {\n    this.element[this.name] = t3 === D ? void 0 : t3;\n  }\n};\nvar Z = class extends G {\n  constructor() {\n    super(...arguments), this.type = 4;\n  }\n  j(t3) {\n    this.element.toggleAttribute(this.name, !!t3 && t3 !== D);\n  }\n};\nvar q = class extends G {\n  constructor(t3, i4, s2, e5, h4) {\n    super(t3, i4, s2, e5, h4), this.type = 5;\n  }\n  _$AI(t3, i4 = this) {\n    if ((t3 = z(this, t3, i4, 0) ?? D) === R) return;\n    const s2 = this._$AH, e5 = t3 === D && s2 !== D || t3.capture !== s2.capture || t3.once !== s2.once || t3.passive !== s2.passive, h4 = t3 !== D && (s2 === D || e5);\n    e5 && this.element.removeEventListener(this.name, this, s2), h4 && this.element.addEventListener(this.name, this, t3), this._$AH = t3;\n  }\n  handleEvent(t3) {\n    \"function\" == typeof this._$AH ? this._$AH.call(this.options?.host ?? this.element, t3) : this._$AH.handleEvent(t3);\n  }\n};\nvar K = class {\n  constructor(t3, i4, s2) {\n    this.element = t3, this.type = 6, this._$AN = void 0, this._$AM = i4, this.options = s2;\n  }\n  get _$AU() {\n    return this._$AM._$AU;\n  }\n  _$AI(t3) {\n    z(this, t3);\n  }\n};\nvar Re = n3.litHtmlPolyfillSupport;\nRe?.(B, et), (n3.litHtmlVersions ??= []).push(\"3.2.0\");\nvar Q = (t3, i4, s2) => {\n  const e5 = s2?.renderBefore ?? i4;\n  let h4 = e5._$litPart$;\n  if (void 0 === h4) {\n    const t4 = s2?.renderBefore ?? null;\n    e5._$litPart$ = h4 = new et(i4.insertBefore(lt(), t4), t4, void 0, s2 ?? {});\n  }\n  return h4._$AI(t3), h4;\n};\n\n// node_modules/lit-element/lit-element.js\nvar h3 = class extends b {\n  constructor() {\n    super(...arguments), this.renderOptions = { host: this }, this.o = void 0;\n  }\n  createRenderRoot() {\n    const t3 = super.createRenderRoot();\n    return this.renderOptions.renderBefore ??= t3.firstChild, t3;\n  }\n  update(t3) {\n    const e5 = this.render();\n    this.hasUpdated || (this.renderOptions.isConnected = this.isConnected), super.update(t3), this.o = Q(e5, this.renderRoot, this.renderOptions);\n  }\n  connectedCallback() {\n    super.connectedCallback(), this.o?.setConnected(true);\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback(), this.o?.setConnected(false);\n  }\n  render() {\n    return R;\n  }\n};\nh3._$litElement$ = true, h3[\"finalized\"] = true, globalThis.litElementHydrateSupport?.({ LitElement: h3 });\nvar f3 = globalThis.litElementPolyfillSupport;\nf3?.({ LitElement: h3 });\n(globalThis.litElementVersions ??= []).push(\"4.1.0\");\n\n// node_modules/@lit/reactive-element/decorators/property.js\nvar o3 = { attribute: true, type: String, converter: u, reflect: false, hasChanged: f };\nvar r3 = (t3 = o3, e5, r4) => {\n  const { kind: n5, metadata: i4 } = r4;\n  let s2 = globalThis.litPropertyMetadata.get(i4);\n  if (void 0 === s2 && globalThis.litPropertyMetadata.set(i4, s2 = /* @__PURE__ */ new Map()), s2.set(r4.name, t3), \"accessor\" === n5) {\n    const { name: o4 } = r4;\n    return { set(r5) {\n      const n6 = e5.get.call(this);\n      e5.set.call(this, r5), this.requestUpdate(o4, n6, t3);\n    }, init(e6) {\n      return void 0 !== e6 && this.P(o4, void 0, t3), e6;\n    } };\n  }\n  if (\"setter\" === n5) {\n    const { name: o4 } = r4;\n    return function(r5) {\n      const n6 = this[o4];\n      e5.call(this, r5), this.requestUpdate(o4, n6, t3);\n    };\n  }\n  throw Error(\"Unsupported decorator location: \" + n5);\n};\nfunction n4(t3) {\n  return (e5, o4) => \"object\" == typeof o4 ? r3(t3, e5, o4) : ((t4, e6, o5) => {\n    const r4 = e6.hasOwnProperty(o5);\n    return e6.constructor.createProperty(o5, r4 ? { ...t4, wrapped: true } : t4), r4 ? Object.getOwnPropertyDescriptor(e6, o5) : void 0;\n  })(t3, e5, o4);\n}\n\n// node_modules/lit-html/directive.js\nvar t2 = { ATTRIBUTE: 1, CHILD: 2, PROPERTY: 3, BOOLEAN_ATTRIBUTE: 4, EVENT: 5, ELEMENT: 6 };\nvar e4 = (t3) => (...e5) => ({ _$litDirective$: t3, values: e5 });\nvar i3 = class {\n  constructor(t3) {\n  }\n  get _$AU() {\n    return this._$AM._$AU;\n  }\n  _$AT(t3, e5, i4) {\n    this.t = t3, this._$AM = e5, this.i = i4;\n  }\n  _$AS(t3, e5) {\n    return this.update(t3, e5);\n  }\n  update(t3, e5) {\n    return this.render(...e5);\n  }\n};\n\n// node_modules/lit-html/directives/class-map.js\nvar Rt = e4(class extends i3 {\n  constructor(s2) {\n    if (super(s2), s2.type !== t2.ATTRIBUTE || \"class\" !== s2.name || s2.strings?.length > 2) throw Error(\"`classMap()` can only be used in the `class` attribute and must be the only part in the attribute.\");\n  }\n  render(t3) {\n    return \" \" + Object.keys(t3).filter(((s2) => t3[s2])).join(\" \") + \" \";\n  }\n  update(t3, [s2]) {\n    if (void 0 === this.st) {\n      this.st = /* @__PURE__ */ new Set(), void 0 !== t3.strings && (this.nt = new Set(t3.strings.join(\" \").split(/\\s/).filter(((t4) => \"\" !== t4))));\n      for (const t4 in s2) s2[t4] && !this.nt?.has(t4) && this.st.add(t4);\n      return this.render(s2);\n    }\n    const i4 = t3.element.classList;\n    for (const t4 of this.st) t4 in s2 || (i4.remove(t4), this.st.delete(t4));\n    for (const t4 in s2) {\n      const r4 = !!s2[t4];\n      r4 === this.st.has(t4) || this.nt?.has(t4) || (r4 ? (i4.add(t4), this.st.add(t4)) : (i4.remove(t4), this.st.delete(t4)));\n    }\n    return R;\n  }\n});\n\n// js/ipywidgets_styles.ts\nvar legacyStyles = i`\n    .legacy-button {\n        align-items: center;\n        background-color: var(--jp-layout-color2);\n        border-width: 0;\n        box-shadow: none;\n        color: var(--jp-ui-font-color1);\n        cursor: pointer;\n        display: flex;\n        font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n        font-size: var(--jp-widgets-font-size);\n        justify-content: center;\n        line-height: var(--jp-widgets-inline-height);\n        padding: 0;\n        user-select: none;\n    }\n\n    .legacy-button.primary {\n        background-color: var(--jp-brand-color1);\n        color: var(--jp-ui-inverse-font-color1);\n    }\n\n    .legacy-button:hover:enabled,\n    .legacy-button:focus:enabled {\n        box-shadow: 0 2px 2px 0\n                rgba(0, 0, 0, var(--md-shadow-key-penumbra-opacity)),\n            0 3px 1px -2px rgba(0, 0, 0, var(--md-shadow-key-umbra-opacity)),\n            0 1px 5px 0 rgba(0, 0, 0, var(--md-shadow-ambient-shadow-opacity));\n    }\n\n    .legacy-slider {\n        -webkit-appearance: none;\n        appearance: none;\n        background: var(--jp-layout-color3);\n        border-radius: 3px;\n        height: 4px;\n        outline: none;\n    }\n\n    .legacy-slider::-webkit-slider-thumb,\n    .legacy-slider::-moz-range-thumb {\n        -moz-appearance: none;\n        -webkit-appearance: none;\n        appearance: none;\n        border-radius: 50%;\n        cursor: pointer;\n        height: var(--jp-widgets-slider-handle-size);\n        width: var(--jp-widgets-slider-handle-size);\n    }\n\n    .legacy-text {\n        color: var(--jp-widgets-label-color);\n        font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n        font-size: var(--jp-widgets-font-size);\n        height: var(--jp-widgets-inline-height);\n        line-height: var(--jp-widgets-inline-height);\n        vertical-align: middle;\n    }\n\n    .legacy-select {\n        -moz-appearance: none;\n        -webkit-appearance: none;\n        appearance: none;\n        background-color: var(--jp-widgets-input-background-color);\n        background-image: var(--jp-widgets-dropdown-arrow);\n        background-position: right center;\n        background-repeat: no-repeat;\n        background-size: 20px;\n        border-radius: 0;\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        box-shadow: none;\n        box-sizing: border-box;\n        color: var(--jp-widgets-input-color);\n        flex: 1 1 var(--jp-widgets-inline-width-short);\n        font-size: var(--jp-widgets-font-size);\n        height: 28px;\n        line-height: 28px;\n        min-width: 0;\n        outline: none !important;\n        padding-left: calc(var(--jp-widgets-input-padding)* 2);\n        padding-right: 20px;\n        vertical-align: top;\n    }\n\n    .legacy-select[disabled] {\n        opacity: 0.4;\n        cursor: not-allowed;\n    }\n\n    .legacy-text-input {\n        background: var(--jp-widgets-input-background-color);\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        box-sizing: border-box;\n        color: var(--jp-widgets-input-color);\n        flex-grow: 1;\n        flex-shrink: 1;\n        font-size: var(--jp-widgets-font-size);\n        height: var(--jp-widgets-inline-height);\n        line-height: var(--jp-widgets-inline-height);\n        min-width: 0;\n        outline: none !important;\n        padding: var(--jp-widgets-input-padding) calc(var(--jp-widgets-input-padding) * 2);\n    }\n\n    .legacy-text-input:disabled {\n        opacity: var(--jp-widgets-disabled-opacity);\n    }\n\n    .legacy-color {\n        align-self: stretch;\n        background: var(--jp-widgets-input-background-color);\n        border-left: none;\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        box-sizing: border-box;\n        color: var(--jp-widgets-input-color);\n        flex-grow: 0;\n        flex-shrink: 0;\n        height: var(--jp-widgets-inline-height);\n        outline: none !important;\n        padding: 0 2px;\n        width: var(--jp-widgets-inline-height);\n    }\n\n    .legacy-radio {\n        margin: 0;\n        vertical-align: middle;\n    }\n\n    .legacy-button.active {\n        background-color: var(--colab-primary-surface-color, --jp-layout-color3);\n        color: var(--jp-ui-font-color1);\n        box-shadow: 0 4px 5px 0 rgba(0, 0, 0, var(--md-shadow-key-penumbra-opacity)),\n                    0 1px 10px 0 rgba(0, 0, 0, var(--md-shadow-ambient-shadow-opacity)),\n                    0 2px 4px -1px rgba(0, 0, 0, var(--md-shadow-key-umbra-opacity));\n    }\n\n    .legacy-button.primary {\n        background-color: var(--jp-brand-color1);\n        color: var(--jp-ui-inverse-font-color1);\n    }\n\n    .legacy-button.primary.active {\n        background-color: var(--jp-brand-color0);\n        color: var(--jp-ui-inverse-font-color0);\n    }\n\n    .legacy-button.active {\n        background-color: var(--colab-primary-surface-color, --jp-layout-color3);\n        color: var(--jp-ui-font-color1);\n        box-shadow: 0 4px 5px 0 rgba(0, 0, 0, var(--md-shadow-key-penumbra-opacity)),\n                    0 1px 10px 0 rgba(0, 0, 0, var(--md-shadow-ambient-shadow-opacity)),\n                    0 2px 4px -1px rgba(0, 0, 0, var(--md-shadow-key-umbra-opacity));\n    }\n\n    .legacy-button.primary {\n        background-color: var(--jp-brand-color1);\n        color: var(--jp-ui-inverse-font-color1);\n    }\n\n    .legacy-button.primary.active {\n        background-color: var(--jp-brand-color0);\n        color: var(--jp-ui-inverse-font-color0);\n    }\n\n    .legacy-select {\n        -moz-appearance: none;\n        -webkit-appearance: none;\n        appearance: none;\n        background-color: var(--jp-widgets-input-background-color);\n        background-image: var(--jp-widgets-dropdown-arrow);\n        background-position: right center;\n        background-repeat: no-repeat;\n        background-size: 20px;\n        border-radius: 0;\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        box-shadow: none;\n        box-sizing: border-box;\n        color: var(--jp-widgets-input-color);\n        flex: 1 1 var(--jp-widgets-inline-width-short);\n        font-size: var(--jp-widgets-font-size);\n        height: inherit;\n        min-width: 0;\n        outline: none !important;\n        padding-left: calc(var(--jp-widgets-input-padding)* 2);\n        padding-right: 20px;\n        vertical-align: top;\n    }\n\n    .legacy-input {\n        box-sizing: border-box;\n        background-color: var(--colab-primary-surface-color, --jp-widgets-input-background-color);\n        border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color);\n        color: var(--jp-widgets-input-color);\n        flex-grow: 1;\n        flex-shrink: 1;\n        font-size: var(--jp-widgets-font-size);\n        min-width: 0;\n        outline: none !important;\n        padding: var(--jp-widgets-input-padding) calc(var(--jp-widgets-input-padding)* 2);\n        height: var(--jp-widgets-inline-height);\n        line-height: var(--jp-widgets-inline-height);\n    }\n`;\n\n// js/utils.ts\nfunction loadFonts() {\n  if (!document.querySelector(\".custom-fonts\")) {\n    const styleElement = document.createElement(\"style\");\n    styleElement.classList.add(\"custom-fonts\");\n    styleElement.textContent = '@import \"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined\";';\n    document.body.appendChild(styleElement);\n  }\n}\nfunction reverseMap(map) {\n  const reversedMap = /* @__PURE__ */ new Map();\n  for (const [key, value] of map.entries()) {\n    if (value != null) {\n      reversedMap.set(value, key);\n    }\n  }\n  return reversedMap;\n}\n\n// js/lit_widget.ts\nvar LitWidget = class extends h3 {\n  constructor() {\n    super(...arguments);\n    this._model = void 0;\n  }\n  onCustomMessage(_msg) {\n  }\n  viewNameToModelName() {\n    return reverseMap(this.modelNameToViewName());\n  }\n  set model(model) {\n    this._model = model;\n    for (const [modelKey, widgetKey] of this.modelNameToViewName()) {\n      if (widgetKey) {\n        this[widgetKey] = model.get(modelKey);\n        model.on(`change:${String(modelKey)}`, () => {\n          this[widgetKey] = model.get(modelKey);\n        });\n      }\n    }\n    model.on(\"msg:custom\", (msg) => {\n      this.onCustomMessage?.(msg);\n    });\n  }\n  get model() {\n    return this._model;\n  }\n  updated(changedProperties) {\n    const viewToModelMap = this.viewNameToModelName();\n    for (const [viewProp, _2] of changedProperties) {\n      const castViewProp = viewProp;\n      if (viewToModelMap.has(castViewProp)) {\n        const modelProp = viewToModelMap.get(castViewProp);\n        this._model?.set(\n          modelProp,\n          this[castViewProp]\n        );\n      }\n    }\n    this._model?.save_changes();\n  }\n};\n\n// js/styles.ts\nvar materialStyles = i`\n    @font-face {\n        font-family: \"Material Symbols Outlined\";\n        font-style: normal;\n        font-weight: 400;\n        src: url(https://fonts.gstatic.com/s/materialsymbolsoutlined/v205/kJF1BvYX7BgnkSrUwT8OhrdQw4oELdPIeeII9v6oDMzByHX9rA6RzaxHMPdY43zj-jCxv3fzvRNU22ZXGJpEpjC_1v-p_4MrImHCIJIZrDCvHOejbd5zrDAt.woff2)\n            format(\"woff2\");\n    }\n\n    .material-symbols-outlined {\n        -webkit-font-feature-settings: \"liga\";\n        -webkit-font-smoothing: antialiased;\n        direction: ltr;\n        display: inline-block;\n        font-family: \"Material Symbols Outlined\";\n        font-style: normal;\n        font-weight: normal;\n        letter-spacing: normal;\n        line-height: 1;\n        text-transform: none;\n        white-space: nowrap;\n        word-wrap: normal;\n    }\n`;\nvar flexStyles = i`\n    .vertical-flex {\n        display: flex;\n        flex-direction: column;\n        gap: 8px;\n    }\n\n    .horizontal-flex {\n        align-items: center;\n        display: flex;\n        flex-wrap: nowrap;\n        gap: 8px;\n    }\n\n    input:not([type=\"radio\"]):not([type=\"checkbox\"]) {\n        width: 100%;\n    }\n\n    select {\n        width: 100%;\n    }\n\n    .horizontal-flex .legacy-text {\n        flex-shrink: 0;\n    }\n`;\n\n// js/toolbar_item.ts\nvar ToolbarItem = class extends LitWidget {\n  constructor() {\n    super(...arguments);\n    this.active = false;\n    this.primary = true;\n    this.icon = \"\";\n    this.tooltip_text = \"\";\n  }\n  static get componentName() {\n    return `tool-button`;\n  }\n  static {\n    this.styles = [\n      legacyStyles,\n      materialStyles,\n      i`\n            button {\n                font-size: 16px !important;\n                height: 32px;\n                padding: 0px 0px 0px 4px;\n                width: 32px;\n            }\n        `\n    ];\n  }\n  modelNameToViewName() {\n    return /* @__PURE__ */ new Map([\n      [\"active\", \"active\"],\n      [\"primary\", \"primary\"],\n      [\"icon\", \"icon\"],\n      [\"tooltip_text\", \"tooltip_text\"]\n    ]);\n  }\n  render() {\n    return ke`\n            <button\n                class=${Rt({\n      \"legacy-button\": true,\n      \"primary\": this.primary,\n      \"active\": this.active\n    })}\n                title=\"${this.tooltip_text}\"\n                @click=\"${this.onClick}\">\n                <span class=\"material-symbols-outlined\">${this.icon}</span>\n            </button>`;\n  }\n  onClick(_2) {\n    this.active = !this.active;\n  }\n};\n__decorateClass([\n  n4({ type: Boolean })\n], ToolbarItem.prototype, \"active\", 2);\n__decorateClass([\n  n4({ type: Boolean })\n], ToolbarItem.prototype, \"primary\", 2);\n__decorateClass([\n  n4({ type: String })\n], ToolbarItem.prototype, \"icon\", 2);\n__decorateClass([\n  n4({ type: String })\n], ToolbarItem.prototype, \"tooltip_text\", 2);\nif (!customElements.get(ToolbarItem.componentName)) {\n  customElements.define(ToolbarItem.componentName, ToolbarItem);\n}\nasync function render({ model, el }) {\n  loadFonts();\n  const manager = document.createElement(ToolbarItem.componentName);\n  manager.model = model;\n  el.appendChild(manager);\n}\nvar toolbar_item_default = { render };\nexport {\n  ToolbarItem,\n  toolbar_item_default as default\n};\n/*! Bundled license information:\n\n@lit/reactive-element/css-tag.js:\n  (**\n   * @license\n   * Copyright 2019 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n\n@lit/reactive-element/reactive-element.js:\nlit-html/lit-html.js:\nlit-element/lit-element.js:\n@lit/reactive-element/decorators/custom-element.js:\n@lit/reactive-element/decorators/property.js:\n@lit/reactive-element/decorators/state.js:\n@lit/reactive-element/decorators/event-options.js:\n@lit/reactive-element/decorators/base.js:\n@lit/reactive-element/decorators/query.js:\n@lit/reactive-element/decorators/query-all.js:\n@lit/reactive-element/decorators/query-async.js:\n@lit/reactive-element/decorators/query-assigned-nodes.js:\nlit-html/directive.js:\n  (**\n   * @license\n   * Copyright 2017 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n\nlit-html/is-server.js:\n  (**\n   * @license\n   * Copyright 2022 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n\n@lit/reactive-element/decorators/query-assigned-elements.js:\n  (**\n   * @license\n   * Copyright 2021 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n\nlit-html/directives/class-map.js:\n  (**\n   * @license\n   * Copyright 2018 Google LLC\n   * SPDX-License-Identifier: BSD-3-Clause\n   *)\n*/\n",
              "_model_module": "anywidget",
              "_model_module_version": "~0.9.*",
              "_model_name": "AnyModel",
              "_view_count": null,
              "_view_module": "anywidget",
              "_view_module_version": "~0.9.*",
              "_view_name": "AnyView",
              "active": false,
              "icon": "question_mark",
              "layout": "IPY_MODEL_0628b47e3b124e0a84b6f5c07beb27a4",
              "primary": true,
              "tooltip_text": "Get help"
            }
          },
          "c4c256a26eee4aeab6dc8b96039bd87e": {
            "model_module": "@jupyter-widgets/base",
            "model_name": "LayoutModel",
            "model_module_version": "1.2.0",
            "state": {
              "_model_module": "@jupyter-widgets/base",
              "_model_module_version": "1.2.0",
              "_model_name": "LayoutModel",
              "_view_count": null,
              "_view_module": "@jupyter-widgets/base",
              "_view_module_version": "1.2.0",
              "_view_name": "LayoutView",
              "align_content": null,
              "align_items": null,
              "align_self": null,
              "border": null,
              "bottom": null,
              "display": null,
              "flex": null,
              "flex_flow": null,
              "grid_area": null,
              "grid_auto_columns": null,
              "grid_auto_flow": null,
              "grid_auto_rows": null,
              "grid_column": null,
              "grid_gap": null,
              "grid_row": null,
              "grid_template_areas": null,
              "grid_template_columns": null,
              "grid_template_rows": null,
              "height": null,
              "justify_content": null,
              "justify_items": null,
              "left": null,
              "margin": null,
              "max_height": null,
              "max_width": null,
              "min_height": null,
              "min_width": null,
              "object_fit": null,
              "object_position": null,
              "order": null,
              "overflow": null,
              "overflow_x": null,
              "overflow_y": null,
              "padding": null,
              "right": null,
              "top": null,
              "visibility": null,
              "width": null
            }
          },
          "9bebcddc39024e28bb8ec2e271931482": {
            "model_module": "@jupyter-widgets/base",
            "model_name": "LayoutModel",
            "model_module_version": "1.2.0",
            "state": {
              "_model_module": "@jupyter-widgets/base",
              "_model_module_version": "1.2.0",
              "_model_name": "LayoutModel",
              "_view_count": null,
              "_view_module": "@jupyter-widgets/base",
              "_view_module_version": "1.2.0",
              "_view_name": "LayoutView",
              "align_content": null,
              "align_items": null,
              "align_self": null,
              "border": null,
              "bottom": null,
              "display": null,
              "flex": null,
              "flex_flow": null,
              "grid_area": null,
              "grid_auto_columns": null,
              "grid_auto_flow": null,
              "grid_auto_rows": null,
              "grid_column": null,
              "grid_gap": null,
              "grid_row": null,
              "grid_template_areas": null,
              "grid_template_columns": null,
              "grid_template_rows": null,
              "height": null,
              "justify_content": null,
              "justify_items": null,
              "left": null,
              "margin": null,
              "max_height": null,
              "max_width": null,
              "min_height": null,
              "min_width": null,
              "object_fit": null,
              "object_position": null,
              "order": null,
              "overflow": null,
              "overflow_x": null,
              "overflow_y": null,
              "padding": null,
              "right": null,
              "top": null,
              "visibility": null,
              "width": null
            }
          },
          "11552b9fd81f41ab80417dc432721a7e": {
            "model_module": "@jupyter-widgets/base",
            "model_name": "LayoutModel",
            "model_module_version": "1.2.0",
            "state": {
              "_model_module": "@jupyter-widgets/base",
              "_model_module_version": "1.2.0",
              "_model_name": "LayoutModel",
              "_view_count": null,
              "_view_module": "@jupyter-widgets/base",
              "_view_module_version": "1.2.0",
              "_view_name": "LayoutView",
              "align_content": null,
              "align_items": null,
              "align_self": null,
              "border": null,
              "bottom": null,
              "display": null,
              "flex": null,
              "flex_flow": null,
              "grid_area": null,
              "grid_auto_columns": null,
              "grid_auto_flow": null,
              "grid_auto_rows": null,
              "grid_column": null,
              "grid_gap": null,
              "grid_row": null,
              "grid_template_areas": null,
              "grid_template_columns": null,
              "grid_template_rows": null,
              "height": null,
              "justify_content": null,
              "justify_items": null,
              "left": null,
              "margin": null,
              "max_height": null,
              "max_width": null,
              "min_height": null,
              "min_width": null,
              "object_fit": null,
              "object_position": null,
              "order": null,
              "overflow": null,
              "overflow_x": null,
              "overflow_y": null,
              "padding": null,
              "right": null,
              "top": null,
              "visibility": null,
              "width": null
            }
          },
          "f4c9187c1cce4ffe98ce614790abe414": {
            "model_module": "@jupyter-widgets/base",
            "model_name": "LayoutModel",
            "model_module_version": "1.2.0",
            "state": {
              "_model_module": "@jupyter-widgets/base",
              "_model_module_version": "1.2.0",
              "_model_name": "LayoutModel",
              "_view_count": null,
              "_view_module": "@jupyter-widgets/base",
              "_view_module_version": "1.2.0",
              "_view_name": "LayoutView",
              "align_content": null,
              "align_items": null,
              "align_self": null,
              "border": null,
              "bottom": null,
              "display": null,
              "flex": null,
              "flex_flow": null,
              "grid_area": null,
              "grid_auto_columns": null,
              "grid_auto_flow": null,
              "grid_auto_rows": null,
              "grid_column": null,
              "grid_gap": null,
              "grid_row": null,
              "grid_template_areas": null,
              "grid_template_columns": null,
              "grid_template_rows": null,
              "height": null,
              "justify_content": null,
              "justify_items": null,
              "left": null,
              "margin": null,
              "max_height": null,
              "max_width": null,
              "min_height": null,
              "min_width": null,
              "object_fit": null,
              "object_position": null,
              "order": null,
              "overflow": null,
              "overflow_x": null,
              "overflow_y": null,
              "padding": null,
              "right": null,
              "top": null,
              "visibility": null,
              "width": null
            }
          },
          "0628b47e3b124e0a84b6f5c07beb27a4": {
            "model_module": "@jupyter-widgets/base",
            "model_name": "LayoutModel",
            "model_module_version": "1.2.0",
            "state": {
              "_model_module": "@jupyter-widgets/base",
              "_model_module_version": "1.2.0",
              "_model_name": "LayoutModel",
              "_view_count": null,
              "_view_module": "@jupyter-widgets/base",
              "_view_module_version": "1.2.0",
              "_view_name": "LayoutView",
              "align_content": null,
              "align_items": null,
              "align_self": null,
              "border": null,
              "bottom": null,
              "display": null,
              "flex": null,
              "flex_flow": null,
              "grid_area": null,
              "grid_auto_columns": null,
              "grid_auto_flow": null,
              "grid_auto_rows": null,
              "grid_column": null,
              "grid_gap": null,
              "grid_row": null,
              "grid_template_areas": null,
              "grid_template_columns": null,
              "grid_template_rows": null,
              "height": null,
              "justify_content": null,
              "justify_items": null,
              "left": null,
              "margin": null,
              "max_height": null,
              "max_width": null,
              "min_height": null,
              "min_width": null,
              "object_fit": null,
              "object_position": null,
              "order": null,
              "overflow": null,
              "overflow_x": null,
              "overflow_y": null,
              "padding": null,
              "right": null,
              "top": null,
              "visibility": null,
              "width": null
            }
          }
        }
      }
    }
  },
  "nbformat_minor": 0,
  "nbformat": 4
}