{
  "cells": [
    {
      "cell_type": "markdown",
      "source": [
        "<a target=\"_blank\" href=\"https://storage.googleapis.com/weathernext-public/colabs/WeatherNext_3_Starter_Guide_Earth_Engine_0p1deg.ipynb\">\n",
        "  <img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/>\n",
        "</a>"
      ],
      "metadata": {
        "id": "RG9sIje1AHA2"
      }
    },
    {
      "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.1° resolution; see [this notebook for 0.05° resolution variables](https://storage.googleapis.com/weathernext-public/colabs/WeatherNext_3_Starter_Guide_Earth_Engine_0p05deg.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_0p1deg'  #@param{type:\"string\"}"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 17
        },
        "id": "55BGLfGULI0J",
        "outputId": "767f8c16-4e09-41c7-f665-252858737714"
      },
      "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": [
        "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/"
        },
        "id": "pCH4K0jhmDWz",
        "outputId": "7388b3e8-b18b-421c-e149-2b3ede9cb333"
      },
      "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.1° hourly weather forecast dataset (`projects/gcp-public-data-weathernext/assets/weathernext_3_0_0_0p1deg`).\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.1° spatial resolution. The 64 ensemble members are aggregated into 6 statistical summary metrics per variable (`_mean`, `_p10`, `_p25`, `_p50`, `_p75`, `_p90`).\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 B113. |\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",
        "For example, 2m temperature is available as `temperature_2m_mean`, `temperature_2m_p10`, `temperature_2m_p25`, `temperature_2m_p50`, `temperature_2m_p75`, and `temperature_2m_p90`.\n",
        "\n",
        "<div align=\"left\">\n",
        "\n",
        "| Base Variable | Units | Step Type | Description |\n",
        "|---|---|---|---|\n",
        "| `dewpoint_temperature_2m` | K | Instantaneous | 2-metre dewpoint temperature |\n",
        "| `experimental_tp_1hr` | m | Accumulated | experimental total precipitation (1hr) |\n",
        "| `high_cloud_cover` | (0 - 1) | Instantaneous | High-altitude cloud cover fraction |\n",
        "| `imerg_tp_1hr` | m | Accumulated | IMERG total precipitation (1hr) |\n",
        "| `low_cloud_cover` | (0 - 1) | Instantaneous | Low-altitude cloud cover fraction |\n",
        "| `mean_sea_level_pressure` | Pa | Instantaneous | Mean sea level pressure |\n",
        "| `medium_cloud_cover` | (0 - 1) | Instantaneous | Medium-altitude cloud cover fraction |\n",
        "| `sea_surface_temperature` | K | Instantaneous | Sea surface temperature |\n",
        "| `surface_solar_radiation_downwards_1hr` | J/m² | Accumulated | Surface downwards solar radiation (1-hour accumulation) |\n",
        "| `temperature_2m` | K | Instantaneous | 2-metre air temperature |\n",
        "| `total_cloud_cover` | (0 - 1) | Instantaneous | Total cloud cover fraction |\n",
        "| `total_precipitation_1hr` | m | Accumulated | Total precipitation over the previous 1 hour |\n",
        "| `total_sky_direct_solar_radiation_at_surface_1hr` | J/m² | Accumulated | Total sky direct solar radiation at surface (1-hour accumulation) |\n",
        "| `u_component_of_wind_100m` | m/s | Instantaneous | 100-metre U (eastward) wind component |\n",
        "| `u_component_of_wind_10m` | m/s | Instantaneous | 10-metre U (eastward) wind component |\n",
        "| `v_component_of_wind_100m` | m/s | Instantaneous | 100-metre V (northward) wind component |\n",
        "| `v_component_of_wind_10m` | m/s | Instantaneous | 10-metre V (northward) wind component |\n",
        "| `wind_speed_100m` | m/s | Instantaneous | 100-metre wind speed magnitude |\n",
        "| `wind_speed_10m` | m/s | Instantaneous | 10-metre wind speed magnitude |\n",
        "\n",
        "</div>"
      ],
      "metadata": {
        "id": "H9E2Ak-ezVEP"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Example Queries\n",
        "\n",
        "## Exploring Temperature Forecasts for New York City - 24 Hour (Hourly)\n",
        "\n",
        "This query retrieves the 2-meter temperature forecasts for New York, NY for a specific initialization timestamp.\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(['temperature_2m_mean', 'temperature_2m_p10', '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",
        "        'temperature_2m_mean': ee.Reducer.mean(),\n",
        "        'temperature_2m_p10': ee.Reducer.mean(),\n",
        "        'temperature_2m_p90': ee.Reducer.mean(),\n",
        "    },\n",
        ")\n",
        "\n",
        "# Show data\n",
        "ny_temps"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 423
        },
        "id": "F-sPgfy8du7w",
        "outputId": "93023f57-8b42-4d6a-acb9-938f74b88c4d"
      },
      "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.3500...              1   \n",
              "1    {'type': 'Polygon', 'coordinates': [[[-74.25, ...              1   \n",
              "2    {'type': 'Polygon', 'coordinates': [[[-74.15, ...              1   \n",
              "3    {'type': 'Polygon', 'coordinates': [[[-74.0500...              1   \n",
              "4    {'type': 'Polygon', 'coordinates': [[[-73.95, ...              1   \n",
              "..                                                 ...            ...   \n",
              "835  {'type': 'Polygon', 'coordinates': [[[-74.15, ...             24   \n",
              "836  {'type': 'Polygon', 'coordinates': [[[-74.0500...             24   \n",
              "837  {'type': 'Polygon', 'coordinates': [[[-73.95, ...             24   \n",
              "838  {'type': 'Polygon', 'coordinates': [[[-73.8500...             24   \n",
              "839  {'type': 'Polygon', 'coordinates': [[[-73.75, ...             24   \n",
              "\n",
              "                    init_time  temperature_2m_mean  temperature_2m_p10  \\\n",
              "0   2026-08-26 00:00:00+00:00           293.459351          293.077911   \n",
              "1   2026-08-26 00:00:00+00:00           294.053101          293.661682   \n",
              "2   2026-08-26 00:00:00+00:00           294.411560          293.980133   \n",
              "3   2026-08-26 00:00:00+00:00           294.555603          294.192017   \n",
              "4   2026-08-26 00:00:00+00:00           294.737274          294.415375   \n",
              "..                        ...                  ...                 ...   \n",
              "835 2026-08-26 00:00:00+00:00           296.775696          295.888489   \n",
              "836 2026-08-26 00:00:00+00:00           296.851685          296.024506   \n",
              "837 2026-08-26 00:00:00+00:00           296.992188          296.269348   \n",
              "838 2026-08-26 00:00:00+00:00           297.015564          296.324341   \n",
              "839 2026-08-26 00:00:00+00:00           297.081573          296.512238   \n",
              "\n",
              "     temperature_2m_p90                      time  \n",
              "0            293.804932 2026-08-26 01:00:00+00:00  \n",
              "1            294.405060 2026-08-26 01:00:00+00:00  \n",
              "2            294.822327 2026-08-26 01:00:00+00:00  \n",
              "3            294.926605 2026-08-26 01:00:00+00:00  \n",
              "4            295.094421 2026-08-26 01:00:00+00:00  \n",
              "..                  ...                       ...  \n",
              "835          297.621979 2026-08-27 00:00:00+00:00  \n",
              "836          297.675964 2026-08-27 00:00:00+00:00  \n",
              "837          297.707703 2026-08-27 00:00:00+00:00  \n",
              "838          297.692780 2026-08-27 00:00:00+00:00  \n",
              "839          297.606171 2026-08-27 00:00:00+00:00  \n",
              "\n",
              "[840 rows x 7 columns]"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-23e59c30-c6f7-4fe5-8775-2b4ed3ec6b34\" 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>temperature_2m_mean</th>\n",
              "      <th>temperature_2m_p10</th>\n",
              "      <th>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.3500...</td>\n",
              "      <td>1</td>\n",
              "      <td>2026-08-26 00:00:00+00:00</td>\n",
              "      <td>293.459351</td>\n",
              "      <td>293.077911</td>\n",
              "      <td>293.804932</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.25, ...</td>\n",
              "      <td>1</td>\n",
              "      <td>2026-08-26 00:00:00+00:00</td>\n",
              "      <td>294.053101</td>\n",
              "      <td>293.661682</td>\n",
              "      <td>294.405060</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.15, ...</td>\n",
              "      <td>1</td>\n",
              "      <td>2026-08-26 00:00:00+00:00</td>\n",
              "      <td>294.411560</td>\n",
              "      <td>293.980133</td>\n",
              "      <td>294.822327</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.0500...</td>\n",
              "      <td>1</td>\n",
              "      <td>2026-08-26 00:00:00+00:00</td>\n",
              "      <td>294.555603</td>\n",
              "      <td>294.192017</td>\n",
              "      <td>294.926605</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': [[[-73.95, ...</td>\n",
              "      <td>1</td>\n",
              "      <td>2026-08-26 00:00:00+00:00</td>\n",
              "      <td>294.737274</td>\n",
              "      <td>294.415375</td>\n",
              "      <td>295.094421</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>835</th>\n",
              "      <td>{'type': 'Polygon', 'coordinates': [[[-74.15, ...</td>\n",
              "      <td>24</td>\n",
              "      <td>2026-08-26 00:00:00+00:00</td>\n",
              "      <td>296.775696</td>\n",
              "      <td>295.888489</td>\n",
              "      <td>297.621979</td>\n",
              "      <td>2026-08-27 00:00:00+00:00</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>836</th>\n",
              "      <td>{'type': 'Polygon', 'coordinates': [[[-74.0500...</td>\n",
              "      <td>24</td>\n",
              "      <td>2026-08-26 00:00:00+00:00</td>\n",
              "      <td>296.851685</td>\n",
              "      <td>296.024506</td>\n",
              "      <td>297.675964</td>\n",
              "      <td>2026-08-27 00:00:00+00:00</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>837</th>\n",
              "      <td>{'type': 'Polygon', 'coordinates': [[[-73.95, ...</td>\n",
              "      <td>24</td>\n",
              "      <td>2026-08-26 00:00:00+00:00</td>\n",
              "      <td>296.992188</td>\n",
              "      <td>296.269348</td>\n",
              "      <td>297.707703</td>\n",
              "      <td>2026-08-27 00:00:00+00:00</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>838</th>\n",
              "      <td>{'type': 'Polygon', 'coordinates': [[[-73.8500...</td>\n",
              "      <td>24</td>\n",
              "      <td>2026-08-26 00:00:00+00:00</td>\n",
              "      <td>297.015564</td>\n",
              "      <td>296.324341</td>\n",
              "      <td>297.692780</td>\n",
              "      <td>2026-08-27 00:00:00+00:00</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>839</th>\n",
              "      <td>{'type': 'Polygon', 'coordinates': [[[-73.75, ...</td>\n",
              "      <td>24</td>\n",
              "      <td>2026-08-26 00:00:00+00:00</td>\n",
              "      <td>297.081573</td>\n",
              "      <td>296.512238</td>\n",
              "      <td>297.606171</td>\n",
              "      <td>2026-08-27 00:00:00+00:00</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "<p>840 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-23e59c30-c6f7-4fe5-8775-2b4ed3ec6b34')\"\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-23e59c30-c6f7-4fe5-8775-2b4ed3ec6b34 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-23e59c30-c6f7-4fe5-8775-2b4ed3ec6b34');\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_c0bd17c1-290b-40b2-a2b5-0e9de7b1c0b1\">\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_c0bd17c1-290b-40b2-a2b5-0e9de7b1c0b1 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\": 840,\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\": \"temperature_2m_mean\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 2.961437209580102,\n        \"min\": 288.8327941894531,\n        \"max\": 300.7322082519531,\n        \"num_unique_values\": 839,\n        \"samples\": [\n          290.447021484375\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"temperature_2m_p10\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 2.815069887617415,\n        \"min\": 288.43218994140625,\n        \"max\": 299.8472900390625,\n        \"num_unique_values\": 839,\n        \"samples\": [\n          290.06964111328125\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"temperature_2m_p90\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 3.126148254095975,\n        \"min\": 289.231689453125,\n        \"max\": 301.6831359863281,\n        \"num_unique_values\": 840,\n        \"samples\": [\n          298.5233154296875\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": 5
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Extract the date from the first entry's init_time.\n",
        "forecast_date = ny_temps['init_time'].iloc[0].strftime('%Y-%m-%dT%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",
        "    ['temperature_2m_mean', 'temperature_2m_p10', 'temperature_2m_p90']\n",
        "].mean()\n",
        "\n",
        "# Convert temperature from Kelvin to Celsius\n",
        "temp_mean_c = ny_temps_agg['temperature_2m_mean'] - 273.15\n",
        "temp_p10_c = ny_temps_agg['temperature_2m_p10'] - 273.15\n",
        "temp_p90_c = ny_temps_agg['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",
        "# Labels and axes\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",
        "plt.gca().xaxis.set_major_formatter(\n",
        "    mdates.DateFormatter('%Y-%m-%dT%H:%M')\n",
        ")\n",
        "plt.gca().xaxis.set_major_locator(\n",
        "    mdates.HourLocator(interval=1)\n",
        ")\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": "a8873178-a492-4f55-c38e-dc51df2e25ab"
      },
      "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": "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bGwsYHuO5syZA8Bjjz3meH7ze07t7r77bgYPHgzAnDlzHNvlrINz5coV3nvvPe6++27HeTZ27FhOnDiRZ383+3qvWbMmffv25dChQ/z8888F2gYKfq69//77hIeHc/DgQaflI0eOJDw8nJdeeslpub0ukP3YXstLL71ErVq1+PTTTzl69Chg69X66quvkpWVxZQpU/D29gZgzZo1PPzww7Ro0YIWLVrw8MMPu6z3k7Mu0d69e3nqqado3br1dYcmG41Gxo4dS3h4OB9++GG+70d2ycnJbNq0iU6dOjlizMnV+37O53rZsmX06NGDxo0b06VLF+bMmYPVas33scB/9ZxiY2OJjY11el/KvU7u8+fQoUNMnjyZPn360KpVK5o2bcp9993HggULMJlM13ys+cUD/72v5feT+/WkqirffPMNAwcOpGXLljRr1owHH3yQb775xmWbSUlJvPHGG3To0IFmzZrx0EMP8euvvxYoXruQkBAGDRqEp6en03JPT0+efPJJwPY+lNPatWsxm82MGDHCqRdZgwYN6NOnDydPnmTPnj2O5Tfymeazzz4jLS2Nt956iypVquTZVqcr+ICTDRs2kJKSwuDBg6lUqZJjeaVKlRg8eDCJiYn89ttvjuVJSUmkpaVRt25dKleu7LSvzp07oyiKy88z+Rk2bBghISFOyxRFYeTIkUDe45uVlcXcuXOpVq0ar7/+usthY4V5/Lmpqsrq1avx9PR0xGA3cuRIPD09Wb16tdNy++2xY8diMBgcyzt37kzbtm3ZunUr58+fLzNt6/V6unXrxp49ezhz5sx14xKiPJJhd0KIYmf/wOHqg4fFYmHChAnUqFGDESNGsG/fvpIOj927dzN06FBMJhP33nsvoaGh7N+/n2XLlvHHH3+watUqAgMDb7qdd955hwMHDtC5c2e6dOlCUFDQTe/TaDTy9NNPs3PnTho0aMD//vc/TCYTW7ZsYeTIkUyaNMlxYZ3TlClT+Pfff+nSpQsajYb169fz4osv4uvry4oVK4iKiqJz585kZ2ezbt06nnvuOdavX0/16tXz7Gvs2LEcPXqU7t27A/DLL7/w7rvvEhsbm+eCafr06SxYsICQkBDuuecefHx82L17Nx9++CEHDhxg1qxZefa/YcMGtm3bxl133cWjjz5KWloaYLtYfP/992ndujWdO3fG19eXc+fO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mDFjOHLkCMuXL2fLli20bt2aoKAgLl68yIkTJzh27BirVq0q8npTOYWFhdGnTx+6d+8O2ApJx8XF8eSTT9KkSRPHenfeeScjR47k008/pXv37txxxx1UqVKFpKQkzpw5w549e3j++eepXbt2gdodPHgwW7du5dFHH6Vnz54YDAZ27tzJxYsXadu2bZ4eQM2bN8fd3Z2lS5eSnJzsuKgaOXKkY39r165l4sSJbNu2jcDAQHbv3k1qair169fPd7a//Lz55pucOnWKadOm8f3339OiRQt8fHyIi4vj0KFDnD59mq1btxZZbQdvb2/eeecdXnzxRfr370/Pnj0JDAzk77//5vDhwzRt2rRQ05nXq1ePN998k7feeosePXrQuXNnqlWrRnp6OjExMezcuZN+/fo5CvyHh4fz2muv8e6779KnTx+6du1KaGgo8fHx7N69m86dO/P666+j0Wh49NFHWbRoEX379qVLly6kpaXx559/Ehoamqdey7Fjxxg1ahRNmzaldu3aBAcHc/HiRX777TfHFN52ERERKIrCxx9/TGRkJD4+Pvj6+jJ48OAbPq4vv/wyu3btYt68eezbt49mzZoRGxvLhg0b8PDw4P333y/2wuddu3alVatWeZINdjdyrkVERLBgwQKuXLnC/fff77S/iIgIvv76a8ffRalNmzYMGTKE5cuXO943VFV1vG8MGTLkpi+8nn32WTQaDdOnT2fo0KEsXLjwujN9hYeHU61atULNQFlU2rVrx6FDhxg6dCitW7dGr9fTpk2bfI9D06ZNadq0KT///DPx8fE0a9aMCxcusGnTJjp37szGjRtvOJb33nuPpKQkOnTowPr16/Pcn7Mo9sCBAzlw4ADffvste/fupUOHDlSsWJGEhASio6M5cOAA06dPd8x+OXToUH799Ve+/vprIiMjadOmDRcuXGDDhg3cdddd/PHHHwWK8eTJk4waNQqj0Ujbtm1dzpIaGhrqKPoNULNmTUaNGsWMGTPo27cv3bt3Jz093bHtO++84/Q6vpHPNL179+aXX35h48aN3H///XTq1Im0tDQ2btxIdnY2U6dOdRSUvh4/Pz8mTZrEK6+8Qr9+/ejVqxcA69evJykpiU8++cSpF2vz5s3p06cP69ato2fPntxzzz1UqFCBkydP8scff6DRaJg4cWKBhwM//vjjnD9/nubNm3P8+HGXQwRzD9t78803GThwIBMnTuS3336jVq1aHDlyhH/++YfQ0FBeeeWVArWdn6FDh/L777/z+eefc/ToURo2bMiRI0fYunUrTZo0cdSAtLPPALp69WoefPBBOnfuTHx8POvXr8ff35+JEyfmaeOJJ54gNjaW33//3WnW1pJoG2zDJ/38/CT5JG5ZknwSQhQJe0+HjIyMfAsUh4aGlrnkE9hmY1m1ahVz585l27ZtpKWlUbFiRR577DFGjBiR55vfTp06MWPGDObOncv333+Pv78/PXr0YNy4cdx3330lGrvBYODzzz/nm2++4bvvvuOXX37BaDRSoUIFateuzcCBAx3DSYrLzJkzmTVrFj/99BOXL1+matWqTJw40eUF/9ixY2nTpg3Lli1j+/btpKam4u/vT9WqVRk1alShjl+XLl2YNWsW8+fP54cffsDd3Z127doxd+5c5s6dm2d9f39/Zs2axezZs1m9erVjeJc9+VSvXj0WLlzIxx9/zMaNG/H09KRz586MHz+e559/vtDHxd/fn6+++ooVK1awfv16fvzxR6xWKxUqVKB+/fqMGDGiyOs69OzZk+DgYObPn8+vv/5KZmYmoaGhjBw5kmeeecZRVLmg+vfvT/369VmyZAm7du1i8+bNeHt7U6VKFZ544ok8Mz4NHjyYunXrsnjxYv766y/S09MJCgqiWbNm9OzZ07HeCy+8gJ+fH99++y3/93//R4UKFRxFjXOfA40bN+aZZ55h586dbNmyhZSUFIKDg+nQoQNPP/00zZs3d6xbp04dpkyZwqJFi1ixYgVGo5HQ0NCbSj4FBgby9ddf8+mnn7Jp0yZHDayuXbsyatSoYn992b300kuOnhW53ci51qpVK/R6PSaTKU8BYXvyydPT87qzzN2IiRMn0qBBA7788ktHkqtOnTqMGTOGhx56qEjaGDZsGIqi8NFHH/H000+zcOHCaw45VRSFAQMG8NFHH/Hvv/8W+eyk1zJy5EhSUlLYvHkze/bswWKxMGrUqHwvQLVaLfPnz+ejjz7ir7/+4uDBg9SoUYNXXnmFO++886aST/b3xb///ttlIi5nUWxFUfjggw+48847Wb16NX/88QcZGRkEBgZSo0YNxo8fT/v27R3benp6snz5cj7++GN+/fVXjhw5Qp06dfjkk09ITU0tcPLp8uXLjt4krhJPYOvJljP5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AwMLJpd8fYG/Jpi0f98G61AREREReQtOPhEREdF1+ddT8kRgsNkgFgvEZrvq1DgAgNEImEwFRyb9NWll8PeH0c+v4KilwkcwefD6UkRERER0Yzj5RERERDfM6ZS85GRYzpyB+eJFIDsbEhhYMJFUvHjBqXF+fn8fteSYZOJV5oiIiIi8Bp/5ERER0U0z+PjAVL48jEFByMjPR2hEBPxKlCg4fY6nxhEREREROPlEREREOjAYjbAFBMBQrJhbroZHRERERJ6LCyoQEREREREREVGR4eQTEREREREREREVGU4+ERERERERERFRkeHkExERERERERERFRlOPhERERERERERUZHh5BMRERERERERERUZTj4REREREREREVGR4eQTEREREREREREVGU4+ERERERERERFRkeHkExERERERERERFRlOPhERERERERERUZHh5BMRERERERERERUZTj4REREREREREVGR4eQTEREREREREREVGYOIiLsj6Nr27dsHEYGvr+9V7xMRWCwW+Pj4wGAwuKHu+rBTX6p0Auq0slNfqnQC6rSyU1+qdALqtLJTX6p0Auq0slNfqnQC6rSyU1+qdALqtP5TZ35+PgwGA5o0afKfn4OTTx5s//79EBH4+Pi4O4WIiIiIiIiISGOxWGAwGBAZGfmft+XkExERERERERERFRmu+UREREREREREREWGk09ERERERERERFRkOPlERERERERERERFhpNPRERERERERERUZDj5RERERERERERERYaTT0REREREREREVGQ4+UREREREREREREWGk09ERERERERERFRkOPlERERERERERERFhpNPRERERERERERUZDj5RERERERERERERYaTT0REREREREREVGQ4+UREREREREREREWGk090S0TE3QlEtwXuS/pTZUzZqS9VOgF1WtmpL1U6AXVa2akvVTpVwjEl4uSTR7Pb7e5OuKbCD54Gg8GNJTfGU8fzWlRpZeetUXVfAjimt4qd+rLZbNq/PbkTUGdM2akvVToBdfYnVcZUlfFUpfNa+JxEX546nteiSis7CxiE07AeIS4uDhs3boTFYkG5cuUwZMgQdydd08mTJ7FmzRrk5+ejRIkSePTRRxEUFOTurKuoMp6AOq3s1Jcq+xLAMdUbO/V14sQJLF26FDk5OQgMDMTo0aNRqVIl+Pv7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deuiffv2GDt2LPbs2aM9CHnKmEZHR+PBBx/EI488cs0n+P7+/k4/o+7qTE9PxzPPPIP7778fM2fORLVq1ZCZmamtqQB4xr4EFIzpwIEDMWbMGCxZsgRff/019u3b59TpCfd9XFwcHn74YXTr1g2vvvoqXnvtNfz88884efKkU6uDu8b05MmTGDZsGCIiIjBixAi0a9cOa9euxcSJExEXFwcATvu8uzoTEhIwcuRINGnSBI8//jgefPBBbN26FSNHjkR0dLTHdMbFxWHYsGFYunQp5syZA6BgPQWbzaY9gSp8mtOGDRucfiZcKTY2FoMHD0ZoaCj69++PsLAwfPHFF9izZ492G0/4GY2JicGQIUPQpEkTPP300xg6dCi2bNni9PhUeEzd+fhUsmRJtGzZEh07dsS4ceOwdetWpyfHhf/i7K7OY8eOYeDAgXj00Uedfi85/ioOQDtC152dQMERBXPmzEGfPn0wc+ZM1KhRA0lJSTh+/Lh2m8Jj6q79yfF7adSoUViyZAn27t2Lffv2Od33nrAvxcfHY/To0ejduzcWLVqEdevWYe/evThw4IB2G094fIqLi8PIkSPRvHlzTJ06FRMnTsTOnTsxZcoU7NmzBzabzSPud4CvmfTG10z6O336NAYPHozg4GC0bdsWWVlZiIqK0o7ODA0NdTrazfH46uhz5fPRPn36ICoqCps2bQLg/DPqSff9lV+YbtEnn3wiAwcO1C5daLVaZf/+/dKuXTsZOXKkWCwWERGx2Wzy008/SUREhKxdu9aljampqfLoo4/KY489JrNmzZIBAwbI0qVLtffbbDan2//xxx8SEREhb731lksvEZmUlCQPPPCAzJs3T9sWExMjLVq0kM2bN191e3eNp4jIhQsX5N5775VXX31V27Z7924ZOXKkxMfHy5kzZ7Tt7rzvRUTsdrtkZWVJjx49ZN26dTJt2jRp1qyZHDx4UEREjhw5ov2cuqszPj5eIiIi5MUXX9Sa3333XXnyySflxRdflHXr1mm3dfd4xsXFSc+ePeXcuXNitVpl8uTJ0rdvX2ndurWMHz9e4uLitNu6a18SETl27JhERETI66+/LiIiFotFHn30UZk4caJkZmZedXt3jumSJUtkzJgx2mNRUlKSDB8+XHbv3i1bt251ulSxu8bUbrfLq6++KtOnT9e25efny1NPPSUREREycuRIuXz5sogU/Iy6877fvHmz9O7dW+sREUlMTJRu3bpJnz595NSpU27vzMjIkEmTJsmECRPkrbfekh49esjs2bO191956d+TJ09KRESEzJo1S/Lz813WKSKSnJwsQ4cOlblz52rbEhISpFu3bvLBBx9cdXt3jenFixelV69esmDBAm1bbGysPPTQQxIdHS0HDhzwiE6Rgp+9vLw8efDBB2XTpk3y2muvSZ06deTHH38UEZFdu3Zp+/2BAwfc0nn27FmJiIiQadOmaduioqLksccek/Hjx8vixYu17Var1a3jKVKwj/fs2VOOHz8uIgWXAu/Vq5c0bNhQBg0aJDt37tR+17trfzp+/LjT7yURkenTp8v9998vSUlJV93enWO6Zs0aGTZsmPZzmJ+fLyNGjJDvv/9e1q5dK+fPn9fG88SJE257fHr33Xdl0qRJTttee+01iYiIkP79+8vRo0dFpOBn1J2PoyJ8zaQnvmYqGkuXLpWRI0dq93N6erps2rRJmjZtKlOnTtVuZ7fbZdOmTRIREaH93nKVlJQUefjhh+XRRx+V0aNHy7Bhw2TDhg3a+6/8GXXneF7J/N/TU/RfEhMTkZaWpv1VwWAwoHHjxli6dClGjhyJmTNnYv78+TAajYiMjMSUKVPQpEkTlzaazWaULVsWHTt2RKNGjbBkyRJs3boVAPDoo486LfQIAI0aNcL8+fNRv359lx6id/LkSZQrVw733nsvgILDB2vWrImmTZsiMTFR2+bodNd4AgVHv7Rr1w79+vXTtu3cuRN//vknhg8fDh8fH9SvXx+vvfaaW+97oGDMAgMDUb9+fVSpUgWtWrWC3W7Ho48+ipo1a6JEiRJ46aWXULx4cTRp0sQtnbm5uQgICEBmZiZSUlIwceJE2Gw2lClTBsnJydiyZQtiYmIwbdo0t49neno67HY7SpUqhalTpyI7OxujR4+Gn58fFixYgClTpmDlypUICgpy275ksViwYcMGTJo0CePGjQNQ8DjQtGlTfPDBB8jMzESxYsWc9id33fdAwV9D09LStJYvvvgC+/btw9y5c5GQkIDw8HC88cYbqFSpktvG1GAwICYmxukwex8fH9SrVw/BwcHYvHkz5syZg3nz5sFoNLqtEyhYXD49PV07LDw/Px/lypXD2rVrcf/992POnDl477333Nrp5+eH0NBQNGnSBG3atEFQUBDWrVuH5557Ds8995x2BJRjDahq1aph5cqVKFu27FWLPhe1ixcvomTJkujUqROAgvu+YsWKuOuuu3D27FkAzutVuWtM7XY7WrdujZ49e2rbvvnmGxw8eBCTJk1CTk4OatWqhXfeeQd+fn5u/RkFCo7Cadq0KUwmEyZNmoT8/HyMGzcODRo0gJ+fHxYuXAg/Pz80bNjQLZ0hISEoUaIELl26hKNHj+KFF16AyWRC1apVYbfb8e677+LkyZNYsGABTCaT28czPz8fBoMB/v7+mDFjBiwWC6ZNm4aSJUtizpw5mD9/PhYsWICIiAhUq1YNH3zwAcqUKeOy/clms+F///sfJk+ejDFjxmjbW7RogZ07dyI+Pl67NL279yWg4AjSS5cuaY/5q1atwu7du2G1WnHy5EmsWLECs2fPRvPmzVG9enWXj6dDTEwMUlNTnbZVqVIFDz/8MLZs2YLXXnsN7777Lkwmk1vu98L4mkk/fM1UNBISEnD58mVt3IoXL4577rkHfn5+mDFjBhYsWICnn34aBoMBDRo0wJAhQxAeHu7SxtzcXISGhqJ3794IDw/HnDlz8NlnnwEAevbsqV3l0vHz6M7xvIq7Z79U5pjdPnDggNx1113y1VdfXfW+LVu2SPv27WXXrl1Xvc9VHLOfhf8CfuHCBXnxxRevms13/CXCXU6ePClffPGF9rZjrMaMGeP0l9zC3PHXRZGCsUpMTNTeXrVqlTRp0kS++uor2bNnj/zwww/SuHFjWbFihXYbd7QW/prPP/+89leHxMRE6dKli9SuXVubCXfc1tWdjq935MgRadGihURERMjEiRPlwoULIlLwV4cVK1ZIp06dZPfu3Vd9nKulpaVJixYt5LnnnpOJEyfKkSNHtPddvnxZ2rRp4/RXXXdJTk7W/u14HLDb7XL33XfLzJkzr/kx7np8+umnn6RBgwby0EMPydSpU6VBgwby448/SlJSkuTm5kqXLl3k6aefdmnbtTqXLl0qw4YN034O4+LiJDIyUr788kvZuHGjdO3a1enIN3c5c+aMNG7cWN5//31tm+Px/ciRI9KsWTNZv369u/K0n7PCv3PS0tJkxYoVVx0BlZeX5/bfTRcvXpTvv/9ee9vx8zBz5kyno2I8QUZGhvbvdevWSbNmzWTz5s0SExOj/VX8lVdecWOhs4ULF8qUKVO0t++77z6JiIiQ9957T0Tc9zjvOPIuLS1NOnbsqP1eunjxovb+LVu2SJMmTeTrr792S+OVcnNzpVOnTvLkk0/KjBkzrvp92a1bN5kxY4aIXP2XcVfJzs52anIYMGCAjB492h1J/+j48ePStGlT6dOnj0yYMEHq1asnP//8s/Y9DBgwQB555BERcd/PqYjIV199Jffdd598++23IlLwXLphw4ayfv16OXDggLRs2VL++OMPsdvtbrvf+ZpJf6dOneJrJh057vutW7dK586dnX4ORQoeu5YvXy69e/eWmJgYbbvjaD1XsdvtYrfb5dy5c9q2M2fOyJgxY2TYsGFO+1bhoxvd+RhVGNd8ugmOcykds4nly5dH+/btsWHDBvz6669O72vQoAHsdjvOnTunfbyrZsUdnY6ZW8f5qRaLBaGhoRgzZgwaNGiArVu3YtmyZbDb7XjuueewYMECl/Rd2QkU/GW7b9++AApm6x1j5evr63Ru6ooVK/D5558DcN14Xtnq6+uLcuXKaW+HhIRg8eLF6NWrF5o2bar9JSw5OVm7javve8fXdLxdoUIFZGRkAABef/11ZGVloW3btoiKisLvv/+u9bm60/H16tSpg/fffx8dOnTAgAEDtMVHixcvjo4dOyIlJQXnz593+t5c2ekQEhKCMWPGYOfOndi1a5d2dEleXh6CgoLQokULp/vdlQq3lipVSttvHH+pExHce++9iI6O1taAKbxvuevxKTIyEu+88w6aNGkCf39/DBo0CO3bt0dwcDD8/PzQuXNnXLx48ar7wtWdd911FwwGA2bOnImHHnoIPXv2RK9evdCnTx/Ur18fiYmJSEpKcmnjla0igtDQUAwfPhwbN27Exo0bAfz9OFqpUiWEhoZqfxl1R6fBYICIaH/9ttlsCAkJQf/+/dGvXz/s3bsXzz33HEQEc+bMwYsvvuiW9QkcY1q2bFltQU8R0X4e/Pz8YLfbtdu/9dZb2vog7ugE4HQlttKlS2PZsmXo3r07atasiZo1a6Jhw4Ye8fjkUKtWLW08p0+fjrS0NNx333148803sXnzZrccQeQ48sZqtSIkJATr169Hp06d0KNHD+2qkSaTCU2bNkVQUBAuXbrk8sbCrUDBcyY/Pz889dRT2LVrF7744gttn3EcEdWlSxekp6cDgMsXR7ZarQDgtAZJ4ecngwcPxpkzZ7Q1Cd2xvwPOj6O1atXCxx9/jL59+6JKlSq499570bp1a+22d999N1JSUpCTk+Pyn9PC+1KDBg1Qv359vPjii+jbty/69OmD/v37o3fv3qhYsSKsVitSUlJgMBhcfr877kfH+ISGhqJDhw7YuHGjR71mKvxcCfj759RqtXrUa6bC+0XVqlXRq1cvbbunvWYq3ODr64vSpUtrb3vSa6Yr7/vKlSujQoUKWL9+vdN6eQEBAWjbti1Onz6NM2fOaNsLr/nnik6DwQCDwaC9BrVYLKhUqRJmzZqFgIAAfP7559i4cSNsNhteffVV7TmJJyw2DgA87e4GOa4okJOTg4CAAIwbNw6VKlXCsGHD8PLLL+ODDz5AXl4eOnToAKBgYio8PNzlv0Sv7Bw/fjwqVqwIg8EAHx8f2O12lC1bFmPHjsXSpUuxfft2fPPNN4iNjcXq1avd0unv748JEyagQoUKMJlMTocMlihRQvtF8Prrr2PlypXa4YXuaC08po4HK8cvgMJKliypXWa18C8Gd3QCQKtWrbBq1SqMGzcOBw8exPLlyxEYGIi5c+di1qxZ2LhxI/z8/NzSOW7cOFSsWBF169bFnDlztBdQjnHz9/dHjRo1nCb8XOGf9vnOnTvj4MGD2Lx5Mz7//HNMnjxZOzTfZrNd1e+O1sL7PfD3L6yePXti+fLl+P777zFixAiX/0K61piGh4ejTZs2aNOmjXbFO+DvxXGTkpJQvnx5t3X6+/tj/PjxiIyMxHPPPYfdu3fjwoULGDBgAHr06AGg4DDoGjVqOD3BcoWzZ89qk+GOF82+vr7o0aMHzp49iw8//BD5+fno378/DAYDgoKCUKpUKe3jXfUzeq1OB5PJBBFBcHAw7r//fhgMBqxfvx5du3ZFYmIiPvroI5f+nBZutVqtTk8uC3cEBwdrV5d6/fXXsWLFCnzyySdu6bxyTAGgffv2Tm9bLBaYzWbUrFkTgGfc9w0bNsSGDRswfPhwbZ+rWrUqAgIC8MILL6B9+/ZOi7u6stNsNsNqtaJ48eJ44403nBaUNRgMMJlMCAsLc/lj07VaHWPatGlT9O/fHytWrMBXX32Fu+66S3scvXTpEkqWLHnVhIA7Oh0cb7do0QKvvvoqfvzxRzRp0sTlv5eu1emYgKpVqxbmzZuH7OxsGAwG7fnoyZMnUbFixau+J1d1Oh6bqlWrhieeeAL33nsv4uPjUb58eXTu3BlAwe+lypUru/z3ElCwEPr69euRnJyM0qVLY9y4cdoFG6KiojzmNVPhzjJlymDcuHEwm82w2+0wm80QEY94zXTleI4fPx5ms/mq/coTXjP905g6fmY95TXTqVOn8OmnnyInJwelS5fGqFGjUKtWLYwaNQovvPACzGYzBg4ciAYNGgAAwsPDUbNmTZdP4l7ZOXr0aG1hfsfr+vDwcDzzzDOYM2cO1q1bh7Vr1+LAgQMufU5yPXjk0w04efIkBgwYAIvFAn9/f8TGxqJ379749NNP0bBhQzz99NOwWCx444038NZbb+Gnn37CSy+9hNjYWDRv3tztnZ9//jnS0tIA/H0URNmyZTFy5EgkJSUhISEBn3/+ORo1auSWzhMnTqBPnz5Yt26d1umQlZUFoOBSzCtXrsSaNWsQERHhks5rtcbGxqJPnz5OY3rlL8ulS5fi1KlTaNWqFQDXPMn7t/s+NTUV/v7++OqrrxAdHY2lS5eidu3aqFy5MqZPn47Vq1fD39/fbZ2F7/syZcpoEzmOnjVr1iArKwvVqlUr8r5/63Ts8xUqVMDkyZPRu3dvLF26FNOmTcPKlSvx/PPPY+fOnRgwYIBTv7taC/+MGgwG2O12VK9eHSNGjMC6deucroDlrs4+ffrgs88+06540qJFCxw6dAifffYZoqOj8corr+CXX37B6NGjXfYk/1qPT477vmzZsnjggQcwadIkbeIJAL766itYLBanI09c0dmtWzf07t0bCQkJ2tEaALQnULVq1cJbb72FZ599Fp999hleeOEFHDp0SLsUs6v2+Ss7rzwKxnE0VHBwsLZmweXLl7Fu3To0bNiwyBv/qdXx5P5asrOzYTabsWzZMm3iqV69em7pvNaYXmnRokX4888/Pea+d/zePHXqFJKSkrBs2TLUqVMHAQEBmD59OjZt2uSyiad/6nS8+PT19b3q99Ly5ctx6dIllz1v+rdWx35ftmxZDBw4EI888gjWr1+PUaNGYf78+Zg1axa2b9+u/cHB3fd9YXa7HeXLl8djjz2GTz/9VLsip6v8U2fhMWrZsiX27NmDJUuW4LfffsP8+fOxfft2TJw40elKcq7sNJvNsFgsAAombtq1a4chQ4ZoE09AwXOny5cvo0KFCi5pdHBcJfL06dOIj4/Xxspms6F58+aYOHEiLBYLoqKi3Pqa6crObdu2YcKECU5rJTl+N7nzNdO1xtPReeXzIne/Zvq3MXX8IccTXjOdOHEC/fv3x7lz53DmzBls2bIF3bp1wy+//IIOHTrg//7v//DHH38gKioKa9asweHDhxEVFYWEhASXjue1Ort3746dO3dq+7/jdX14eDimTZuGo0eP4tixY1i7di3q1q3rstbrUkSn891WHOdWPvfcczJhwgSn97344ovSsmVL7RzV48ePy+LFi6VNmzbSq1cv6devn9N6MO7sbN26taxYscLpPOa8vDx56aWXpHHjxhIdHe2xnY6rSTVu3Fi7Qpunth48eFCee+45adasmcfd9yIiv/76q3blE1e7mfE8cOCAPPPMM3LXXXd5zHg69nm73S5JSUmyadMm6du3rwwaNEhGjx7t0vG9mTEVEdmwYYN07tzZaV0oT+jMzc2V2NhYmTVrlkRGRso999wjPXr08Jj7vlWrVrJixQpJT0/Xtu/bt0+mTp0qd955p8s6RUQuXbokDz/8sIwcOVJGjBghnTp10q4YU/g8/3PnzmlrgjzwwAMydOhQl/6M/lvnlVe0c7S/9tprUr9+fZc/Vt1o69y5cyUiIkIiIyNd+rvpRjv37t0rM2fOlObNm8uff/7pcZ379u2T2NhYl3Vd6UbHc/fu3TJ9+nSX/p6/ntbCa49kZ2fL/v37ZcyYMfLII4/I5MmT5dixYx7Rea0xFSm4wmG/fv2c1obxlM7ExERZtGiR3HnnnXLPPffIgAEDPOZx9Fprzvz2228yceJEl+/zIgW/c+69915tbbm8vDzZsmWL9OrVy2nMjh496rbXTP/Vea3XRO54zXQzne56zXQzre56zWS1WmXKlCnaeoMWi0XS0tLkiSeekMaNG8t3330nIgX7keM1yH333Sfdu3d32f70X51NmjSRLVu2OK3llJeXJ88884w0adLEpY/3N4Kn3V0ng8GA7Oxs7a8bFosFPj4+mDVrFnx8fLBo0SJUrVoVHTp0QK1atTBixAhYLBbtFAdP6Vy8eDGqVauG9u3ba+tUJCQkYNWqVS6dxb2RThFB+fLlERoainfffRd33HGHyzpvtPXixYvYu3cvLl68iA8//NClrf/V+fbbb2s/o+KmtRSup7PweCYmJuK3335DQkICPvzwQ4/6GS28z993333a1Uby8/O1v457SmvhMXUc8tyzZ0+0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/4mTT0RERHTb6tWrF3744Qds3boVffr0uer9OTk52L59O9q0aXNLE0+PPfYYHn300Vso/dvYsWNx//33a28fOnQIH374IcaOHYvq1atr2yMiIlCrVi3cd9998PX11eVr6yElJQXr16/HvHnzbvpzLFiwwOntr776Cjt37rxqe40aNRAfH48RI0bg/Pnz6NatGx588EH4+Pjg2LFj+Pzzz7F161Z89913AIC6deuifv36WL58+VWfi4iIiIoOJ5+IiIjottWpUycUK1YMGzduvObk07Zt25CdnY1evXrd0tcxm80wm/V5WtW6dWunt/38/PDhhx+iVatWaN68+VW3N5lMunxdvWzYsAEmkwkdO3a86c/Ru3dvp7cPHDiAnTt3XrXdarVi1KhRSE5OxqpVq3DnnXc6vX/y5Ml49913nbZ1794db731FrKyslCsWLGbbiQiIqLrxzWfiIiI6Lbl7++Pu+++G7/99huSk5Ovev+mTZtQrFgxdOrUCWlpaZg/fz569uyJyMhINGnSBKNHj0Z0dPR/fp1rrfmUn5+PuXPnokWLFoiMjMTYsWNx4cIF3b434NprPnXq1AljxozB77//jn79+qFhw4bo2bMnfv/9dwDAli1b0LNnTzRo0AD9+vXDkSNHrvq8J06cwKRJk9CsWTPtdtu2bbuupq1bt6Jhw4YumdjZsmULoqOjMXbs2KsmngAgKCgIkydPdtrWqlUrZGdnY9euXUXeR0RERAU4+URERES3tZ49e8JqteKbb75x2p6WloZffvkFXbt2hb+/P+Lj47F161Z06NAB06dPx6hRo3D8+HEMHToUiYmJN/x1Z86ciQ8++ACtW7fGk08+CR8fH91OzfsvcXFxmDp1Kjp16oQpU6YgPT0dY8eOxYYNG/Dyyy+jZ8+emDhxIs6cOYMnnngCdrtd+9iYmBg8+OCDOHHiBB555BFMnz4dgYGBGD9+PL7//vt//boWiwWHDh1CvXr1ivpbBABtQuzKI6L+Tc2aNeHv7499+/YVVRYRERFdgafdERER0W2tRYsWKFu2LDZt2oShQ4dq27/99ltYLBb07NkTQMEaSt999x2Mxr//Nte7d290794dn3/+OcaPH3/dXzM6OhobNmzA4MGDMXv2bADAkCFDMHXqVBw7dkyn7+yfnTp1Cp988gkiIyMBFEy4jBo1Cs888wy++eYbVKxYEQAQEhKCZ599Frt379ZO6XvppZdQoUIFrFu3TltLavDgwRg0aBBeffVVdO3a9R+/7vnz55Gbm4vw8PAi/g4LnDx5EsHBwahQocJ1f4zZbEb58uURGxtbhGVERERUGI98IiIiotuayWTCfffdh/379zudnrZp0yaUKVMGLVu2BAD4+vpqE082mw2pqakIDAxEtWrVrnlq2r/ZsWMHgIIrvBX20EMP3cq3ct1q1qypTTwBQKNGjQAUTMQ5Jp4Kb4+PjwdQcDTYb7/9hu7duyMzMxMpKSlISUlBamoq2rRpg9OnT//rUWBpaWkAgOLFi+v9LV1TZmbmTZ3eFxISgtTU1CIoIiIiomvhkU9ERER02+vZsydWrlyJTZs2aWsv7dmzB8OGDdMW7Lbb7Vi1ahXWrFmDs2fPwmazaR9fokSJG/p6CQkJMBqNqFy5stP2wlerK0pXHgkUHBwMAChfvrzT9qCgIABARkYGAODMmTMQEURFRSEqKuqanzs5ORmhoaH/+vVF5Ka6DQbDDd0+KChImzi7ESJyw1+LiIiIbh4nn4iIiOi2V79+fVSvXh1ff/01xo4di02bNkFEtFPuAGDJkiWIiopC//798fjjjyMkJARGoxFz58696ckUd/mnK+D903bH9+dY+2nkyJFo27btNW975YRaYY5JOsdkVmG+vr7Izc295sc5tjtO87te1atXx5EjR3D+/PkbOvUuIyMDVapUuaGvRURERDePk09ERETkFXr27ImoqChER0dj06ZNqFq1Kho2bKi9/7vvvkPz5s0xd+5cp4/LyMhAyZIlb+hrhYWFwW6348yZM05HO508efLWvokiVqlSJQCAj48PWrVqdcMfX6FCBfj7+zud3ugQFhaG33//Hbm5ufD393d636lTp7Tb3IiOHTti06ZN2LBhA8aMGXNdH2O1WnH+/Hl06tTphr4WERER3Tyu+URERERewXGU05tvvomjR486HfUEFBwVdOURTt98881NXemuXbt2AIAPP/zQafsHH3xww5/LlUqXLo1mzZrh008/xcWLF696f0pKyr9+vI+PD+rXr4/Dhw9f9b527drBYrHgk08+cdput9vx8ccfw8fHR1t/63rdc889uOOOO7BkyRLs37//qvdnZmZi4cKFTttiY2ORl5fntCYWERERFS0e+UREREReoVKlSoiMjMS2bdsA4KrJpw4dOmDRokWYMWMGIiMjcfz4cWzcuFE7GuhG1KlTBz169MCaNWtw+fJlREZG4rfffkNcXJwu30tRmj17NgYPHoyePXvigQceQKVKlZCUlIQ//vgDFy5cwIYNG/714zt37oyFCxciMzNTW1MKADp16oQ2bdrg5ZdfxqFDhxAZGYmcnBxs374d+/btwxNPPIFSpUrdUKuPjw/efvttPPzwwxg6dCi6deuGJk2awMfHBzExMdi0aROKFy+OyZMnax+za9cuBAQE3NSRXURERHRzOPlEREREXqNnz57Yv38/GjZseNWaP2PHjkVOTg42btyIzZs3o27duli6dClee+21m/pac+fORcmSJbFx40Zs27YNzZs3x7Jly9C+fXs9vpUiU7NmTaxbtw5vv/02vvzyS6SlpaFUqVKoW7cuxo8f/58f37t3b7z22mvYtm0bevfurW03Go1YvHgxli1bhq+//hpbtmyB2WzGHXfcgVdeeQW9evW6qd4qVapg/fr1WLlyJb7//nts27YNdrsdVapUwYABA6664uC3336Lrl27Ok2MERERUdEyiGoraBIRERGRR/u///s/nD59GmvWrHF3ipOjR4+ib9+++PLLL1GnTh135xAREXkNrvlERERERLqaMGECDh06hL1797o7xcmyZctwzz33cOKJiIjIxXjkExERERERERERFRke+UREREREREREREWGk09ERERERERERFRkOPlERERERERERERFhpNPRERERERERERUZDj5RERERERERERERYaTT0REREREREREVGQ4+UREREREREREREWGk09ERERERERERFRkOPlERERERERERERFhpNPRERERERERERUZDj5REREREREREREReb/AZWE0FJAQFc9AAAAAElFTkSuQmCC\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 = \"temperature_2m_mean\" # @param [\"dewpoint_temperature_2m_mean\", \"high_cloud_cover_mean\", \"low_cloud_cover_mean\", \"mean_sea_level_pressure_mean\", \"medium_cloud_cover_mean\", \"sea_surface_temperature_mean\", \"surface_solar_radiation_downwards_1hr_mean\", \"temperature_2m_mean\", \"total_cloud_cover_mean\", \"total_precipitation_1hr_mean\", \"total_sky_direct_solar_radiation_at_surface_1hr_mean\", \"u_component_of_wind_100m_mean\", \"u_component_of_wind_10m_mean\", \"v_component_of_wind_100m_mean\", \"v_component_of_wind_10m_mean\", \"wind_speed_100m_mean\", \"wind_speed_10m_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\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 621,
          "referenced_widgets": [
            "5fb73dc92c664f1095f197823b4c560b",
            "e48794c9019646f49a0adbf12b7562e5",
            "1486920b4c504f67810dbd1f72314cd9",
            "e44b946e48b24c1ba31222c9af8b1aa5",
            "2a40a1f781f6492eabc38dcbb7a077c0",
            "6ff8751732654fab8ee29dbcb6e7e489",
            "efc55857904940ff9a2e7478cd00ba4c",
            "75248aa458574c0eb9902cd32334924e",
            "ac348ded121246719396c9030f785c03",
            "1c8fda13b78c4c78a946c15a6825b2e1",
            "a345a907ff944fcaae3aa2030a71465b",
            "6e58e90e17274ee4915f7799a055cca8",
            "b803bcab4ddc4bf18b306d1e93219bc8",
            "72c6bbde78634f41921421f5153e8c70",
            "bb2700ad526b4a4facf8520714d2ad44",
            "df398dfc2d024c8e93640fd28cf586ef",
            "84bb57265aeb4b8d818dc098e10eb244",
            "f5b8a97a1d2947f2b77436daf214bcf9",
            "ed7155209b474525b79a41cdada05f37",
            "0c36b212b29f4ca28d47b1bf0495d8e0",
            "804326bc0ee1423c8cc4f72ea29e0204",
            "ec015abba09c4b5cb8c06cb5dbd6a8a2",
            "6677b7a4dc4349908d2dd861e0268dcb",
            "94eb2e62cc8043058be7cf50a5338c28",
            "3a2b4c756e13494dbb4284ae7d6515be",
            "265d66284d8f4d76ae6569bc5498ce8c",
            "3b0ed6c1094b4fa3bf2bb37449a43463",
            "982e362402bc447da9725fcd53dac115",
            "f1564342b5984dc49ca2c34cfb2a8b39",
            "b4f97579621147099242626be9e6b4c9",
            "46f0fcf22bb841dcaadfe5752e7a08aa",
            "e48de91b8cf047429171699726005aed"
          ]
        },
        "id": "nGnuTD1rmTwm",
        "outputId": "3e65c02a-e206-4062-d683-985f957f124c"
      },
      "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": "5fb73dc92c664f1095f197823b4c560b"
            }
          },
          "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": "c69yPsQOY6Fr"
      },
      "execution_count": null,
      "outputs": []
    }
  ],
  "metadata": {
    "colab": {
      "cell_execution_strategy": "setup",
      "provenance": [],
      "collapsed_sections": [
        "NeXvgbqbmN9W"
      ]
    },
    "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": {
          "5fb73dc92c664f1095f197823b4c560b": {
            "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": 706,
              "bounce_at_zoom_limits": true,
              "box_zoom": true,
              "center": [
                34.88593094075317,
                0.01218043963763016
              ],
              "close_popup_on_click": true,
              "controls": [
                "IPY_MODEL_e48794c9019646f49a0adbf12b7562e5",
                "IPY_MODEL_1486920b4c504f67810dbd1f72314cd9",
                "IPY_MODEL_e44b946e48b24c1ba31222c9af8b1aa5",
                "IPY_MODEL_2a40a1f781f6492eabc38dcbb7a077c0",
                "IPY_MODEL_6ff8751732654fab8ee29dbcb6e7e489",
                "IPY_MODEL_efc55857904940ff9a2e7478cd00ba4c",
                "IPY_MODEL_75248aa458574c0eb9902cd32334924e"
              ],
              "crs": {
                "name": "EPSG3857",
                "custom": false
              },
              "default_style": "IPY_MODEL_ac348ded121246719396c9030f785c03",
              "double_click_zoom": true,
              "dragging": true,
              "dragging_style": "IPY_MODEL_1c8fda13b78c4c78a946c15a6825b2e1",
              "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_a345a907ff944fcaae3aa2030a71465b",
                "IPY_MODEL_6e58e90e17274ee4915f7799a055cca8"
              ],
              "layout": "IPY_MODEL_b803bcab4ddc4bf18b306d1e93219bc8",
              "left": -82,
              "max_zoom": null,
              "min_zoom": null,
              "modisdate": "2026-09-01",
              "north": 80.53207112232734,
              "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.170022982932046,
              "style": "IPY_MODEL_ac348ded121246719396c9030f785c03",
              "tap": true,
              "tap_tolerance": 15,
              "top": 106,
              "touch_zoom": true,
              "west": -208.82812500000003,
              "window_url": "https://rhlw3om71s-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
            }
          },
          "e48794c9019646f49a0adbf12b7562e5": {
            "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_bb2700ad526b4a4facf8520714d2ad44"
            }
          },
          "1486920b4c504f67810dbd1f72314cd9": {
            "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_df398dfc2d024c8e93640fd28cf586ef"
            }
          },
          "e44b946e48b24c1ba31222c9af8b1aa5": {
            "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"
            }
          },
          "2a40a1f781f6492eabc38dcbb7a077c0": {
            "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"
            }
          },
          "6ff8751732654fab8ee29dbcb6e7e489": {
            "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
            }
          },
          "efc55857904940ff9a2e7478cd00ba4c": {
            "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
            }
          },
          "75248aa458574c0eb9902cd32334924e": {
            "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"
            }
          },
          "ac348ded121246719396c9030f785c03": {
            "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"
            }
          },
          "1c8fda13b78c4c78a946c15a6825b2e1": {
            "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"
            }
          },
          "a345a907ff944fcaae3aa2030a71465b": {
            "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
            }
          },
          "6e58e90e17274ee4915f7799a055cca8": {
            "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": "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/b4b132f870e36f1114ff500341147f72-a3ec25f6d9ca03ec98d74572ed92ea17/tiles/{z}/{x}/{y}",
              "visible": true,
              "zoom_offset": 0
            }
          },
          "b803bcab4ddc4bf18b306d1e93219bc8": {
            "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
            }
          },
          "72c6bbde78634f41921421f5153e8c70": {
            "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"
            }
          },
          "bb2700ad526b4a4facf8520714d2ad44": {
            "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_84bb57265aeb4b8d818dc098e10eb244",
                "IPY_MODEL_f5b8a97a1d2947f2b77436daf214bcf9"
              ],
              "layout": "IPY_MODEL_ed7155209b474525b79a41cdada05f37"
            }
          },
          "df398dfc2d024c8e93640fd28cf586ef": {
            "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_0c36b212b29f4ca28d47b1bf0495d8e0",
              "location_model": "{\"search\": \"\", \"results\": [], \"selected\": \"\", \"additional_html\": \"\"}",
              "tab_index": 0
            }
          },
          "84bb57265aeb4b8d818dc098e10eb244": {
            "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_6677b7a4dc4349908d2dd861e0268dcb",
                "IPY_MODEL_94eb2e62cc8043058be7cf50a5338c28"
              ],
              "layout": "IPY_MODEL_804326bc0ee1423c8cc4f72ea29e0204",
              "visible": true
            }
          },
          "f5b8a97a1d2947f2b77436daf214bcf9": {
            "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_ec015abba09c4b5cb8c06cb5dbd6a8a2",
              "main_tools": [
                "IPY_MODEL_3a2b4c756e13494dbb4284ae7d6515be",
                "IPY_MODEL_265d66284d8f4d76ae6569bc5498ce8c",
                "IPY_MODEL_3b0ed6c1094b4fa3bf2bb37449a43463"
              ]
            }
          },
          "ed7155209b474525b79a41cdada05f37": {
            "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
            }
          },
          "0c36b212b29f4ca28d47b1bf0495d8e0": {
            "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
            }
          },
          "804326bc0ee1423c8cc4f72ea29e0204": {
            "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
            }
          },
          "ec015abba09c4b5cb8c06cb5dbd6a8a2": {
            "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
            }
          },
          "6677b7a4dc4349908d2dd861e0268dcb": {
            "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_982e362402bc447da9725fcd53dac115",
              "name": "OpenStreetMap.Mapnik",
              "opacity": 1,
              "visible": true
            }
          },
          "94eb2e62cc8043058be7cf50a5338c28": {
            "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_f1564342b5984dc49ca2c34cfb2a8b39",
              "name": "temperature_2m_mean average",
              "opacity": 0.5,
              "visible": true
            }
          },
          "3a2b4c756e13494dbb4284ae7d6515be": {
            "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_b4f97579621147099242626be9e6b4c9",
              "primary": true,
              "tooltip_text": "Basemap selector"
            }
          },
          "265d66284d8f4d76ae6569bc5498ce8c": {
            "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_46f0fcf22bb841dcaadfe5752e7a08aa",
              "primary": true,
              "tooltip_text": "Inspector"
            }
          },
          "3b0ed6c1094b4fa3bf2bb37449a43463": {
            "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_e48de91b8cf047429171699726005aed",
              "primary": true,
              "tooltip_text": "Get help"
            }
          },
          "982e362402bc447da9725fcd53dac115": {
            "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
            }
          },
          "f1564342b5984dc49ca2c34cfb2a8b39": {
            "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
            }
          },
          "b4f97579621147099242626be9e6b4c9": {
            "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
            }
          },
          "46f0fcf22bb841dcaadfe5752e7a08aa": {
            "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
            }
          },
          "e48de91b8cf047429171699726005aed": {
            "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
}